暂无描述

dependabot[bot] 3d8e8c0347 chore(deps-dev): bump @tailwindcss/forms from 0.5.4 to 0.5.7 1 年之前
.github ebc17da8cf chore: Add dependabot script 1 年之前
classes b545944e71 chore(git): Unignore classes directory 1 年之前
resources 679d70f1b2 feat(frontend): refine stream page styles 1 年之前
src 4d5978efac fix(frontend): fix stream enqueueing position 1 年之前
.dir-locals.el fc1e06a1a9 chore: fix evaluation of cider middlewares in dir-locals 1 年之前
.dockerignore c7dafc936b feat: Add Docker scripts 1 年之前
.gitignore 915bf97f46 chore: Ignore target directory 1 年之前
Dockerfile 1d0bd6b8e9 feat: Add missing aot compilation in Dockerfile 1 年之前
LICENSE 916ba00f83 chore: Add license 1 年之前
README c5ecb74930 chore: update docs 1 年之前
README.md c5ecb74930 chore: update docs 1 年之前
build.clj cc7d14514c feat: Add tools.build script 1 年之前
deps.edn 821f50f900 feat(frontend): add initial local settings persistence support 1 年之前
docker-compose.yml f384d197fd chore: Refine docker-compose 1 年之前
manifest.scm 80bb68bcad chore(guix): Add manifest 1 年之前
package-lock.json 3d8e8c0347 chore(deps-dev): bump @tailwindcss/forms from 0.5.4 to 0.5.7 1 年之前
package.json 3d8e8c0347 chore(deps-dev): bump @tailwindcss/forms from 0.5.4 to 0.5.7 1 年之前
postcss.config.js b2c3fecbd1 chore: Add PostCSS configuration 1 年之前
shadow-cljs.edn 81f03c0b44 chore: Rename project 1 年之前
tailwind.config.js d35b2ae773 fix(frontend): refine navbar and subs 1 年之前
webpack.config.js 0138806bd8 chore: add favicon 1 年之前

README

# -*- mode: org; org-html-head-include-default-style: nil; org-html-postamble: nil; after-save-hook: org-md-export-to-markdown; -*-
#+OPTIONS: toc:nil num:nil
* Tubo
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.

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.

** Features
- [X] No ads
- [X] Audio player
- [X] Media queue
- [ ] Playlists
- [X] Local settings
- [ ] Local subscriptions
- [ ] User management

** Instances
| URL | Country |
|-----------------------------------------+---------|
| https://tubo.migalmoreno.com (Official) | 🇪🇸 |

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.

** Installation
*** Packaging
**** Uberjar
To bundle the whole project into a self-contained uber-jar you need to follow these build steps:

#+begin_src sh
npm i
npm run build
clojure -T:frontend:build uberjar
#+end_src

After the last command is completed, you'll get a path to the uber-jar, which you can run like this:

#+begin_src sh
java -jar target/tubo-.jar
#+end_src

**** Docker
Alternatively, you can use Docker to set up Tubo. Simply invoke this:

#+begin_src sh
docker-compose up -d
#+end_src

**** Manual
You can also set up Tubo manually via the [[https://guix.gnu.org/][GNU Guix]] package manager. First, download the necessary tooling:

#+begin_src sh
cd /path/to/tubo
guix shell
#+end_src

Then, compile the downloader ahead-of-time:

#+begin_src sh
clojure -M -e "(compile 'tubo.downloader-impl)"
#+end_src

Fetch the front-end dependencies and build the front-end assets.

#+begin_src sh
npm i
npm run build
#+end_src

Finally, compile the front-end.

#+begin_src sh
clojure -M:frontend release tubo
#+end_src

You can now start a local server that listens on port 3000 by running this:

#+begin_src sh
clojure -M:run
#+end_src

Access the front-end in your browser at =http://localhost:3000=.

*** Reverse Proxy
If you want to self-host Tubo and make it publicly accessible you'll need to set up a reverse proxy.

**** Nginx

#+begin_src nginx
server {
listen 443 ssl http2;
server_name tubo.;
ssl_certificate /etc/letsencrypt/live/tubo./fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tubo./privkey.pem;

location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header HOST $http_host;
}
}
#+end_src

** Screenshots
| Kiosk | Channel | Stream |
|----------------------------------------------+------------------------------------------------+-----------------------------------------------|
| [[https://files.migalmoreno.com/tubo_kiosk.jpg]] | [[https://files.migalmoreno.com/tubo_channel.jpg]] | [[https://files.migalmoreno.com/tubo_stream.jpg]] |

** Contributing
Feel free to open an issue with bug reports or feature requests. PRs are more than welcome too.