blob: 820f768122fce0725cd03827854423f3ecef57b1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# -*- mode: org; org-html-head-include-default-style: nil; org-html-postamble: nil; -*-
#+OPTIONS: toc:nil num:nil
#+TITLE: tubo
Tubo is a streaming front-end focused on bringing the [[https://newpipe.net/][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.
* Features
- No ads
- Background player
- Playback queue
- User playlists
- System/Light/Dark themes
* 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-<VERSION>.jar
#+end_src
*** Docker
For Docker, there's an image available in Docker Hub you can use:
#+begin_src sh
docker pull migalmoreno/tubo
docker run --publish 3000:3000 -d --name tubo migalmoreno/tubo:latest
#+end_src
There's also a Docker Compose file available which you can run like this:
#+begin_src sh
docker compose up -d
#+end_src
** Reverse Proxy
If you want to self-host Tubo and make it publicly accessible you'll need to set up a reverse proxy. The following shows some example configurations for various web servers:
*** Nginx
#+begin_src nginx
server {
listen 443 ssl http2;
server_name <TUBO_HOST>;
ssl_certificate /etc/letsencrypt/live/<TUBO_HOST>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<TUBO_HOST>/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header HOST $http_host;
}
}
#+end_src
* Public Instances
| URL | Country |
|-------------------------------+---------|
| https://tubo.media (Official) | 🇪🇸 |
| https://tubo.reallyaweso.me | 🇩🇪 |
| https://tubo.ducks.party | 🇩🇪 |
* Browser Extension Support
** [[https://einaregilsson.com/redirector/][Redirector]]
You can manually add any redirect rule based on regex patterns with this extension. Below are some sample configurations to redirect links from supported services to Tubo so you get a basic idea of how to write manual Redirector rules. Note the =serviceId= of each service is: YouTube (0), SoundCloud(1), media.ccc.de(2), PeerTube(3), and Bandcamp(4).
#+begin_src conf-colon
Description: YouTube video to Tubo stream
Example URL: https://www.youtube.com/watch?v=YE7VzlLtp-4
Include pattern: ^((?:https?://)(?:www.)?youtube.com/(watch\?v.*|shorts/.*))
Redirect to: https://<TUBO_HOST>/stream?url=$1
Example result: https://<TUBO_HOST>/stream?url=https://www.youtube.com/watch?v=YE7VzlLtp-4
Pattern type: Regular Expression
Apply to: Main window (address bar)
#+end_src
#+begin_src conf-colon
Description: SoundCloud stream to Tubo stream
Example URL: https://soundcloud.com/unfa/stop-the-panic
Include pattern: ^((?:https?://)(?:www.)?soundcloud.com/.*/.*)
Redirect to: https://<TUBO_HOST>/stream?url=$1
Example result: https://<TUBO_HOST>/stream?url=https://soundcloud.com/unfa/stop-the-panic
Pattern type: Regular Expression
Apply to: Main window (address bar)
#+end_src
#+begin_src conf-colon
Description: Bandcamp album to Tubo playlist
Example URL: https://unfa.bandcamp.com/album/suppressed
Include pattern: ^((?:https?://)(.*\.)?bandcamp.com/album/.*)
Redirect to: https://<TUBO_HOST>/playlist?url=$1
Example result: https://<TUBO_HOST>/playlist?url=https://unfa.bandcamp.com/album/suppressed
Pattern type: Regular Expression
Apply to: Main window (address bar)
#+end_src
#+begin_src conf-colon
Description: PeerTube (Framatube) channel to Tubo channel
Example URL: https://framatube.org/accounts/framasoft@framatube.org
Include pattern: ^((?:https?://)(?:www.)?framatube.org/accounts/.*)
Redirect to: https://<TUBO_HOST>/channel?url=$1
Example result: https://<TUBO_HOST>/channel?url=https://framatube.org/accounts/framasoft@framatube.org
Pattern type: Regular Expression
Apply to: Main window (address bar)
#+end_src
#+begin_src conf-colon
Description: media.ccc.de search query to Tubo search query
Example URL: https://media.ccc.de/search/?q=37c3
Include pattern: ^(?:https?://)media.ccc.de/search/\?q=(.*)
Redirect to: https://<TUBO_HOST>/search?query=$1&serviceId=2
Example result: https://<TUBO_HOST>/search?query=37c3&serviceId=2
Pattern type: Regular Expression
Apply to: Main window (address bar)
#+end_src
** [[https://libredirect.github.io/][LibRedirect]]
Redirects many popular services to their alternative front-ends. Has a ton of features and an active community. Tubo is supported by default for YouTube and SoundCloud.
** [[https://github.com/libreom/predirect][Predirect]]
Serves the same purpose as LibRedirect but is Manifest V3 compatible. Tubo is supported by default for SoundCloud.
** [[https://github.com/dybdeskarphet/privacy-redirector][Privacy Redirector]]
A user-script that redirects popular social media platforms to their privacy respecting front-ends. Tubo is supported by default for YouTube and SoundCloud.
|