1
0

README 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # -*- mode: org; org-html-head-include-default-style: nil; org-html-postamble: nil; after-save-hook: org-md-export-to-markdown; -*-
  2. #+OPTIONS: toc:nil num:nil
  3. * Tubo
  4. Tubo is a streaming front-end focused on bringing the [[https://github.com/TeamNewPipe/NewPipe][NewPipe]] experience to the web. It aims at providing a clean and simple user interface to consume media from your favorite streaming platforms. It currently supports the same services as NewPipe, including YouTube, SoundCloud, Bandcamp, and more.
  5. To retrieve the data, it wraps the excellent [[https://github.com/TeamNewPipe/NewPipeExtractor][NewPipe Extractor]] library and it exposes the extracted data over a REST API that is consumed by a local re-frame SPA.
  6. ** Features
  7. - [X] No ads
  8. - [X] Audio player
  9. - [X] Media queue
  10. - [ ] Playlists
  11. - [X] Local settings
  12. - [ ] Local subscriptions
  13. - [ ] User management
  14. ** Instances
  15. | URL | Country |
  16. |-----------------------------------------+---------|
  17. | https://tubo.migalmoreno.com (Official) | 🇪🇸 |
  18. If you consider self-hosting Tubo let me know about your instance via the [[*Contributing][contribution methods]]. See [[*Installation][installation]] for ways to set up Tubo in your server.
  19. ** Installation
  20. *** Packaging
  21. **** Uberjar
  22. To bundle the whole project into a self-contained uber-jar you need to follow these build steps:
  23. #+begin_src sh
  24. npm i
  25. npm run build
  26. clojure -T:frontend:build uberjar
  27. #+end_src
  28. After the last command is completed, you'll get a path to the uber-jar, which you can run like this:
  29. #+begin_src sh
  30. java -jar target/tubo-<VERSION>.jar
  31. #+end_src
  32. **** Docker
  33. Alternatively, you can use Docker to set up Tubo. Simply invoke this:
  34. #+begin_src sh
  35. docker-compose up -d
  36. #+end_src
  37. **** Manual
  38. You can also set up Tubo manually via the [[https://guix.gnu.org/][GNU Guix]] package manager. First, download the necessary tooling:
  39. #+begin_src sh
  40. cd /path/to/tubo
  41. guix shell
  42. #+end_src
  43. Then, compile the downloader ahead-of-time:
  44. #+begin_src sh
  45. clojure -M -e "(compile 'tubo.downloader-impl)"
  46. #+end_src
  47. Fetch the front-end dependencies and build the front-end assets.
  48. #+begin_src sh
  49. npm i
  50. npm run build
  51. #+end_src
  52. Finally, compile the front-end.
  53. #+begin_src sh
  54. clojure -M:frontend release tubo
  55. #+end_src
  56. You can now start a local server that listens on port 3000 by running this:
  57. #+begin_src sh
  58. clojure -M:run
  59. #+end_src
  60. Access the front-end in your browser at =http://localhost:3000=.
  61. *** Reverse Proxy
  62. If you want to self-host Tubo and make it publicly accessible you'll need to set up a reverse proxy.
  63. **** Nginx
  64. #+begin_src nginx
  65. server {
  66. listen 443 ssl http2;
  67. server_name tubo.<YOUR_DOMAIN>;
  68. ssl_certificate /etc/letsencrypt/live/tubo.<YOUR_DOMAIN>/fullchain.pem;
  69. ssl_certificate_key /etc/letsencrypt/live/tubo.<YOUR_DOMAIN>/privkey.pem;
  70. location / {
  71. proxy_pass http://localhost:3000;
  72. proxy_set_header X-Forwarded-For $remote_addr;
  73. proxy_set_header HOST $http_host;
  74. }
  75. }
  76. #+end_src
  77. ** Screenshots
  78. | Kiosk | Channel | Stream |
  79. |----------------------------------------------+------------------------------------------------+-----------------------------------------------|
  80. | [[https://files.migalmoreno.com/tubo_kiosk.jpg]] | [[https://files.migalmoreno.com/tubo_channel.jpg]] | [[https://files.migalmoreno.com/tubo_stream.jpg]] |
  81. ** Contributing
  82. Feel free to open an issue with bug reports or feature requests. PRs are more than welcome too.