]> jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/peertube.py
[cleanup] Add more ruff rules (#10149)
[yt-dlp.git] / yt_dlp / extractor / peertube.py
1 import functools
2 import re
3
4 from .common import InfoExtractor
5 from ..utils import (
6 OnDemandPagedList,
7 format_field,
8 int_or_none,
9 parse_resolution,
10 str_or_none,
11 try_get,
12 unified_timestamp,
13 url_or_none,
14 urljoin,
15 )
16
17
18 class PeerTubeIE(InfoExtractor):
19 _INSTANCES_RE = r'''(?:
20 # Taken from https://instances.joinpeertube.org/instances
21 0ch\.tv|
22 3dctube\.3dcandy\.social|
23 all\.electric\.kitchen|
24 alterscope\.fr|
25 anarchy\.tube|
26 apathy\.tv|
27 apertatube\.net|
28 archive\.nocopyrightintended\.tv|
29 archive\.reclaim\.tv|
30 area51\.media|
31 astrotube-ufe\.obspm\.fr|
32 astrotube\.obspm\.fr|
33 audio\.freediverse\.com|
34 azxtube\.youssefc\.tn|
35 bark\.video|
36 battlepenguin\.video|
37 bava\.tv|
38 bee-tube\.fr|
39 beetoons\.tv|
40 biblion\.refchat\.net|
41 biblioteca\.theowlclub\.net|
42 bideoak\.argia\.eus|
43 bideoteka\.eus|
44 birdtu\.be|
45 bitcointv\.com|
46 bonn\.video|
47 breeze\.tube|
48 brioco\.live|
49 brocosoup\.fr|
50 canal\.facil\.services|
51 canard\.tube|
52 cdn01\.tilvids\.com|
53 celluloid-media\.huma-num\.fr|
54 chicago1\.peertube\.support|
55 cliptube\.org|
56 cloudtube\.ise\.fraunhofer\.de|
57 comf\.tube|
58 comics\.peertube\.biz|
59 commons\.tube|
60 communitymedia\.video|
61 conspiracydistillery\.com|
62 crank\.recoil\.org|
63 dalek\.zone|
64 dalliance\.network|
65 dangly\.parts|
66 darkvapor\.nohost\.me|
67 daschauher\.aksel\.rocks|
68 digitalcourage\.video|
69 displayeurope\.video|
70 ds106\.tv|
71 dud-video\.inf\.tu-dresden\.de|
72 dud175\.inf\.tu-dresden\.de|
73 dytube\.com|
74 ebildungslabor\.video|
75 evangelisch\.video|
76 fair\.tube|
77 fedi\.video|
78 fedimovie\.com|
79 fediverse\.tv|
80 film\.k-prod\.fr|
81 flipboard\.video|
82 foss\.video|
83 fossfarmers\.company|
84 fotogramas\.politicaconciencia\.org|
85 freediverse\.com|
86 freesoto-u2151\.vm\.elestio\.app|
87 freesoto\.tv|
88 garr\.tv|
89 greatview\.video|
90 grypstube\.uni-greifswald\.de|
91 habratube\.site|
92 ilbjach\.ru|
93 infothema\.net|
94 itvplus\.iiens\.net|
95 johnydeep\.net|
96 juggling\.digital|
97 jupiter\.tube|
98 kadras\.live|
99 kino\.kompot\.si|
100 kino\.schuerz\.at|
101 kinowolnosc\.pl|
102 kirche\.peertube-host\.de|
103 kiwi\.froggirl\.club|
104 kodcast\.com|
105 kolektiva\.media|
106 kpop\.22x22\.ru|
107 kumi\.tube|
108 la2\.peertube\.support|
109 la3\.peertube\.support|
110 la4\.peertube\.support|
111 lastbreach\.tv|
112 lawsplaining\.peertube\.biz|
113 leopard\.tube|
114 live\.codinglab\.ch|
115 live\.libratoi\.org|
116 live\.oldskool\.fi|
117 live\.solari\.com|
118 lucarne\.balsamine\.be|
119 luxtube\.lu|
120 makertube\.net|
121 media\.econoalchemist\.com|
122 media\.exo\.cat|
123 media\.fsfe\.org|
124 media\.gzevd\.de|
125 media\.interior\.edu\.uy|
126 media\.krashboyz\.org|
127 media\.mzhd\.de|
128 media\.smz-ma\.de|
129 media\.theplattform\.net|
130 media\.undeadnetwork\.de|
131 medias\.debrouillonet\.org|
132 medias\.pingbase\.net|
133 mediatube\.fermalo\.fr|
134 melsungen\.peertube-host\.de|
135 merci-la-police\.fr|
136 mindlyvideos\.com|
137 mirror\.peertube\.metalbanana\.net|
138 mirrored\.rocks|
139 mix\.video|
140 mountaintown\.video|
141 movies\.metricsmaster\.eu|
142 mtube\.mooo\.com|
143 mytube\.kn-cloud\.de|
144 mytube\.le5emeaxe\.fr|
145 mytube\.madzel\.de|
146 nadajemy\.com|
147 nanawel-peertube\.dyndns\.org|
148 neat\.tube|
149 nethack\.tv|
150 nicecrew\.tv|
151 nightshift\.minnix\.dev|
152 nolog\.media|
153 nyltube\.nylarea\.com|
154 ocfedtest\.hosted\.spacebear\.ee|
155 openmedia\.edunova\.it|
156 p2ptv\.ru|
157 p\.eertu\.be|
158 p\.lu|
159 pastafriday\.club|
160 patriottube\.sonsofliberty\.red|
161 pcbu\.nl|
162 peer\.azurs\.fr|
163 peer\.d0g4\.me|
164 peer\.lukeog\.com|
165 peer\.madiator\.cloud|
166 peer\.raise-uav\.com|
167 peershare\.togart\.de|
168 peertube-blablalinux\.be|
169 peertube-demo\.learning-hub\.fr|
170 peertube-docker\.cpy\.re|
171 peertube-eu\.howlround\.com|
172 peertube-u5014\.vm\.elestio\.app|
173 peertube-us\.howlround\.com|
174 peertube\.020\.pl|
175 peertube\.0x5e\.eu|
176 peertube\.1984\.cz|
177 peertube\.2i2l\.net|
178 peertube\.adjutor\.xyz|
179 peertube\.adresse\.data\.gouv\.fr|
180 peertube\.alpharius\.io|
181 peertube\.am-networks\.fr|
182 peertube\.anduin\.net|
183 peertube\.anti-logic\.com|
184 peertube\.arch-linux\.cz|
185 peertube\.art3mis\.de|
186 peertube\.artsrn\.ualberta\.ca|
187 peertube\.askan\.info|
188 peertube\.astral0pitek\.synology\.me|
189 peertube\.atsuchan\.page|
190 peertube\.automat\.click|
191 peertube\.b38\.rural-it\.org|
192 peertube\.be|
193 peertube\.beeldengeluid\.nl|
194 peertube\.bgzashtita\.es|
195 peertube\.bike|
196 peertube\.bildung-ekhn\.de|
197 peertube\.biz|
198 peertube\.br0\.fr|
199 peertube\.bridaahost\.ynh\.fr|
200 peertube\.bubbletea\.dev|
201 peertube\.bubuit\.net|
202 peertube\.cabaal\.net|
203 peertube\.chatinbit\.com|
204 peertube\.chaunchy\.com|
205 peertube\.chir\.rs|
206 peertube\.christianpacaud\.com|
207 peertube\.chtisurel\.net|
208 peertube\.chuggybumba\.com|
209 peertube\.cipherbliss\.com|
210 peertube\.cirkau\.art|
211 peertube\.cloud\.nerdraum\.de|
212 peertube\.cloud\.sans\.pub|
213 peertube\.coko\.foundation|
214 peertube\.communecter\.org|
215 peertube\.concordia\.social|
216 peertube\.corrigan\.xyz|
217 peertube\.cpge-brizeux\.fr|
218 peertube\.ctseuro\.com|
219 peertube\.cuatrolibertades\.org|
220 peertube\.cube4fun\.net|
221 peertube\.dair-institute\.org|
222 peertube\.davigge\.com|
223 peertube\.dc\.pini\.fr|
224 peertube\.deadtom\.me|
225 peertube\.debian\.social|
226 peertube\.delta0189\.xyz|
227 peertube\.demonix\.fr|
228 peertube\.designersethiques\.org|
229 peertube\.desmu\.fr|
230 peertube\.devol\.it|
231 peertube\.dk|
232 peertube\.doesstuff\.social|
233 peertube\.eb8\.org|
234 peertube\.education-forum\.com|
235 peertube\.elforcer\.ru|
236 peertube\.em\.id\.lv|
237 peertube\.ethibox\.fr|
238 peertube\.eu\.org|
239 peertube\.european-pirates\.eu|
240 peertube\.eus|
241 peertube\.euskarabildua\.eus|
242 peertube\.expi\.studio|
243 peertube\.familie-berner\.de|
244 peertube\.familleboisteau\.fr|
245 peertube\.fedihost\.website|
246 peertube\.fenarinarsa\.com|
247 peertube\.festnoz\.de|
248 peertube\.forteza\.fr|
249 peertube\.freestorm\.online|
250 peertube\.functional\.cafe|
251 peertube\.gaminglinux\.fr|
252 peertube\.gargantia\.fr|
253 peertube\.geekgalaxy\.fr|
254 peertube\.gemlog\.ca|
255 peertube\.genma\.fr|
256 peertube\.get-racing\.de|
257 peertube\.ghis94\.ovh|
258 peertube\.gidikroon\.eu|
259 peertube\.giftedmc\.com|
260 peertube\.grosist\.fr|
261 peertube\.gruntwerk\.org|
262 peertube\.gsugambit\.com|
263 peertube\.hackerfoo\.com|
264 peertube\.hellsite\.net|
265 peertube\.helvetet\.eu|
266 peertube\.histoirescrepues\.fr|
267 peertube\.home\.x0r\.fr|
268 peertube\.hyperfreedom\.org|
269 peertube\.ichigo\.everydayimshuflin\.com|
270 peertube\.ifwo\.eu|
271 peertube\.in\.ua|
272 peertube\.inapurna\.org|
273 peertube\.informaction\.info|
274 peertube\.interhop\.org|
275 peertube\.it|
276 peertube\.it-arts\.net|
277 peertube\.jensdiemer\.de|
278 peertube\.johntheserg\.al|
279 peertube\.kaleidos\.net|
280 peertube\.kalua\.im|
281 peertube\.kcore\.org|
282 peertube\.keazilla\.net|
283 peertube\.klaewyss\.fr|
284 peertube\.kleph\.eu|
285 peertube\.kodein\.be|
286 peertube\.kooperatywa\.tech|
287 peertube\.kriom\.net|
288 peertube\.kx\.studio|
289 peertube\.kyriog\.eu|
290 peertube\.la-famille-muller\.fr|
291 peertube\.labeuropereunion\.eu|
292 peertube\.lagvoid\.com|
293 peertube\.lhc\.net\.br|
294 peertube\.libresolutions\.network|
295 peertube\.libretic\.fr|
296 peertube\.librosphere\.fr|
297 peertube\.logilab\.fr|
298 peertube\.lon\.tv|
299 peertube\.louisematic\.site|
300 peertube\.luckow\.org|
301 peertube\.luga\.at|
302 peertube\.lyceeconnecte\.fr|
303 peertube\.madixam\.xyz|
304 peertube\.magicstone\.dev|
305 peertube\.marienschule\.de|
306 peertube\.marud\.fr|
307 peertube\.maxweiss\.io|
308 peertube\.miguelcr\.me|
309 peertube\.mikemestnik\.net|
310 peertube\.mobilsicher\.de|
311 peertube\.monlycee\.net|
312 peertube\.mxinfo\.fr|
313 peertube\.naln1\.ca|
314 peertube\.netzbegruenung\.de|
315 peertube\.nicolastissot\.fr|
316 peertube\.nogafam\.fr|
317 peertube\.normalgamingcommunity\.cz|
318 peertube\.nz|
319 peertube\.offerman\.com|
320 peertube\.ohioskates\.com|
321 peertube\.onionstorm\.net|
322 peertube\.opencloud\.lu|
323 peertube\.otakufarms\.com|
324 peertube\.paladyn\.org|
325 peertube\.pix-n-chill\.fr|
326 peertube\.r2\.enst\.fr|
327 peertube\.r5c3\.fr|
328 peertube\.redpill-insight\.com|
329 peertube\.researchinstitute\.at|
330 peertube\.revelin\.fr|
331 peertube\.rlp\.schule|
332 peertube\.rokugan\.fr|
333 peertube\.rougevertbleu\.tv|
334 peertube\.roundpond\.net|
335 peertube\.rural-it\.org|
336 peertube\.satoshishop\.de|
337 peertube\.scyldings\.com|
338 peertube\.securitymadein\.lu|
339 peertube\.semperpax\.com|
340 peertube\.semweb\.pro|
341 peertube\.sensin\.eu|
342 peertube\.sidh\.bzh|
343 peertube\.skorpil\.cz|
344 peertube\.smertrios\.com|
345 peertube\.sqweeb\.net|
346 peertube\.stattzeitung\.org|
347 peertube\.stream|
348 peertube\.su|
349 peertube\.swrs\.net|
350 peertube\.takeko\.cyou|
351 peertube\.taxinachtegel\.de|
352 peertube\.teftera\.com|
353 peertube\.teutronic-services\.de|
354 peertube\.ti-fr\.com|
355 peertube\.tiennot\.net|
356 peertube\.tmp\.rcp\.tf|
357 peertube\.tspu\.edu\.ru|
358 peertube\.tv|
359 peertube\.tweb\.tv|
360 peertube\.underworld\.fr|
361 peertube\.vapronva\.pw|
362 peertube\.veen\.world|
363 peertube\.vesdia\.eu|
364 peertube\.virtual-assembly\.org|
365 peertube\.viviers-fibre\.net|
366 peertube\.vlaki\.cz|
367 peertube\.wiesbaden\.social|
368 peertube\.wivodaim\.net|
369 peertube\.wtf|
370 peertube\.wtfayla\.net|
371 peertube\.xrcb\.cat|
372 peertube\.xwiki\.com|
373 peertube\.zd\.do|
374 peertube\.zetamc\.net|
375 peertube\.zmuuf\.org|
376 peertube\.zoz-serv\.org|
377 peertube\.zwindler\.fr|
378 peervideo\.ru|
379 periscope\.numenaute\.org|
380 pete\.warpnine\.de|
381 petitlutinartube\.fr|
382 phijkchu\.com|
383 phoenixproject\.group|
384 piraten\.space|
385 pirtube\.calut\.fr|
386 pityu\.flaki\.hu|
387 play\.mittdata\.se|
388 player\.ojamajo\.moe|
389 podlibre\.video|
390 portal\.digilab\.nfa\.cz|
391 private\.fedimovie\.com|
392 pt01\.lehrerfortbildung-bw\.de|
393 pt\.diaspodon\.fr|
394 pt\.freedomwolf\.cc|
395 pt\.gordons\.gen\.nz|
396 pt\.ilyamikcoder\.com|
397 pt\.irnok\.net|
398 pt\.mezzo\.moe|
399 pt\.na4\.eu|
400 pt\.netcraft\.ch|
401 pt\.rwx\.ch|
402 pt\.sfunk1x\.com|
403 pt\.thishorsie\.rocks|
404 pt\.vern\.cc|
405 ptb\.lunarviews\.net|
406 ptube\.de|
407 ptube\.ranranhome\.info|
408 puffy\.tube|
409 puppet\.zone|
410 qtube\.qlyoung\.net|
411 quantube\.win|
412 rankett\.net|
413 replay\.jres\.org|
414 review\.peertube\.biz|
415 sdmtube\.fr|
416 secure\.direct-live\.net|
417 secure\.scanovid\.com|
418 seka\.pona\.la|
419 serv3\.wiki-tube\.de|
420 skeptube\.fr|
421 social\.fedimovie\.com|
422 socpeertube\.ru|
423 sovran\.video|
424 special\.videovortex\.tv|
425 spectra\.video|
426 stl1988\.peertube-host\.de|
427 stream\.biovisata\.lt|
428 stream\.conesphere\.cloud|
429 stream\.elven\.pw|
430 stream\.jurnalfm\.md|
431 stream\.k-prod\.fr|
432 stream\.litera\.tools|
433 stream\.nuemedia\.se|
434 stream\.rlp-media\.de|
435 stream\.vrse\.be|
436 studios\.racer159\.com|
437 styxhexenhammer666\.com|
438 syrteplay\.obspm\.fr|
439 t\.0x0\.st|
440 tbh\.co-shaoghal\.net|
441 test-fab\.ynh\.fr|
442 testube\.distrilab\.fr|
443 tgi\.hosted\.spacebear\.ee|
444 theater\.ethernia\.net|
445 thecool\.tube|
446 thevideoverse\.com|
447 tilvids\.com|
448 tinkerbetter\.tube|
449 tinsley\.video|
450 trailers\.ddigest\.com|
451 tube-action-educative\.apps\.education\.fr|
452 tube-arts-lettres-sciences-humaines\.apps\.education\.fr|
453 tube-cycle-2\.apps\.education\.fr|
454 tube-cycle-3\.apps\.education\.fr|
455 tube-education-physique-et-sportive\.apps\.education\.fr|
456 tube-enseignement-professionnel\.apps\.education\.fr|
457 tube-institutionnel\.apps\.education\.fr|
458 tube-langues-vivantes\.apps\.education\.fr|
459 tube-maternelle\.apps\.education\.fr|
460 tube-numerique-educatif\.apps\.education\.fr|
461 tube-sciences-technologies\.apps\.education\.fr|
462 tube-test\.apps\.education\.fr|
463 tube1\.perron-service\.de|
464 tube\.9minuti\.it|
465 tube\.abolivier\.bzh|
466 tube\.alado\.space|
467 tube\.amic37\.fr|
468 tube\.area404\.cloud|
469 tube\.arthack\.nz|
470 tube\.asulia\.fr|
471 tube\.awkward\.company|
472 tube\.azbyka\.ru|
473 tube\.azkware\.net|
474 tube\.bartrip\.me\.uk|
475 tube\.belowtoxic\.media|
476 tube\.bingle\.plus|
477 tube\.bit-friends\.de|
478 tube\.bstly\.de|
479 tube\.chosto\.me|
480 tube\.cms\.garden|
481 tube\.communia\.org|
482 tube\.cyberia\.club|
483 tube\.cybershock\.life|
484 tube\.dembased\.xyz|
485 tube\.dev\.displ\.eu|
486 tube\.digitalesozialearbeit\.de|
487 tube\.distrilab\.fr|
488 tube\.doortofreedom\.org|
489 tube\.dsocialize\.net|
490 tube\.e-jeremy\.com|
491 tube\.ebin\.club|
492 tube\.elemac\.fr|
493 tube\.erzbistum-hamburg\.de|
494 tube\.exozy\.me|
495 tube\.fdn\.fr|
496 tube\.fedi\.quebec|
497 tube\.fediverse\.at|
498 tube\.felinn\.org|
499 tube\.flokinet\.is|
500 tube\.foad\.me\.uk|
501 tube\.freepeople\.fr|
502 tube\.friloux\.me|
503 tube\.froth\.zone|
504 tube\.fulda\.social|
505 tube\.futuretic\.fr|
506 tube\.g1zm0\.de|
507 tube\.g4rf\.net|
508 tube\.gaiac\.io|
509 tube\.geekyboo\.net|
510 tube\.genb\.de|
511 tube\.ghk-academy\.info|
512 tube\.gi-it\.de|
513 tube\.grap\.coop|
514 tube\.graz\.social|
515 tube\.grin\.hu|
516 tube\.hokai\.lol|
517 tube\.int5\.net|
518 tube\.interhacker\.space|
519 tube\.invisible\.ch|
520 tube\.io18\.top|
521 tube\.itsg\.host|
522 tube\.jeena\.net|
523 tube\.kh-berlin\.de|
524 tube\.kockatoo\.org|
525 tube\.kotur\.org|
526 tube\.koweb\.fr|
527 tube\.la-dina\.net|
528 tube\.lab\.nrw|
529 tube\.lacaveatonton\.ovh|
530 tube\.laurent-malys\.fr|
531 tube\.leetdreams\.ch|
532 tube\.linkse\.media|
533 tube\.lokad\.com|
534 tube\.lucie-philou\.com|
535 tube\.media-techport\.de|
536 tube\.morozoff\.pro|
537 tube\.neshweb\.net|
538 tube\.nestor\.coop|
539 tube\.network\.europa\.eu|
540 tube\.nicfab\.eu|
541 tube\.nieuwwestbrabant\.nl|
542 tube\.nogafa\.org|
543 tube\.novg\.net|
544 tube\.nox-rhea\.org|
545 tube\.nuagelibre\.fr|
546 tube\.numerique\.gouv\.fr|
547 tube\.nuxnik\.com|
548 tube\.nx12\.net|
549 tube\.octaplex\.net|
550 tube\.oisux\.org|
551 tube\.okcinfo\.news|
552 tube\.onlinekirche\.net|
553 tube\.opportunis\.me|
554 tube\.oraclefilms\.com|
555 tube\.org\.il|
556 tube\.pacapime\.ovh|
557 tube\.parinux\.org|
558 tube\.pastwind\.top|
559 tube\.picasoft\.net|
560 tube\.pilgerweg-21\.de|
561 tube\.pmj\.rocks|
562 tube\.pol\.social|
563 tube\.ponsonaille\.fr|
564 tube\.portes-imaginaire\.org|
565 tube\.public\.apolut\.net|
566 tube\.pustule\.org|
567 tube\.pyngu\.com|
568 tube\.querdenken-711\.de|
569 tube\.rebellion\.global|
570 tube\.reseau-canope\.fr|
571 tube\.rhythms-of-resistance\.org|
572 tube\.risedsky\.ovh|
573 tube\.rooty\.fr|
574 tube\.rsi\.cnr\.it|
575 tube\.ryne\.moe|
576 tube\.schleuss\.online|
577 tube\.schule\.social|
578 tube\.sekretaerbaer\.net|
579 tube\.shanti\.cafe|
580 tube\.shela\.nu|
581 tube\.skrep\.in|
582 tube\.sleeping\.town|
583 tube\.sp-codes\.de|
584 tube\.spdns\.org|
585 tube\.systerserver\.net|
586 tube\.systest\.eu|
587 tube\.tappret\.fr|
588 tube\.techeasy\.org|
589 tube\.thierrytalbert\.fr|
590 tube\.tinfoil-hat\.net|
591 tube\.toldi\.eu|
592 tube\.tpshd\.de|
593 tube\.trax\.im|
594 tube\.troopers\.agency|
595 tube\.ttk\.is|
596 tube\.tuxfriend\.fr|
597 tube\.tylerdavis\.xyz|
598 tube\.ullihome\.de|
599 tube\.ulne\.be|
600 tube\.undernet\.uy|
601 tube\.vrpnet\.org|
602 tube\.wolfe\.casa|
603 tube\.xd0\.de|
604 tube\.xn--baw-joa\.social|
605 tube\.xy-space\.de|
606 tube\.yapbreak\.fr|
607 tubedu\.org|
608 tubulus\.openlatin\.org|
609 turtleisland\.video|
610 tututu\.tube|
611 tv\.adast\.dk|
612 tv\.adn\.life|
613 tv\.arns\.lt|
614 tv\.atmx\.ca|
615 tv\.based\.quest|
616 tv\.farewellutopia\.com|
617 tv\.filmfreedom\.net|
618 tv\.gravitons\.org|
619 tv\.io\.seg\.br|
620 tv\.lumbung\.space|
621 tv\.pirateradio\.social|
622 tv\.pirati\.cz|
623 tv\.santic-zombie\.ru|
624 tv\.undersco\.re|
625 tv\.zonepl\.net|
626 tvox\.ru|
627 twctube\.twc-zone\.eu|
628 twobeek\.com|
629 urbanists\.video|
630 v\.9tail\.net|
631 v\.basspistol\.org|
632 v\.j4\.lc|
633 v\.kisombrella\.top|
634 v\.koa\.im|
635 v\.kyaru\.xyz|
636 v\.lor\.sh|
637 v\.mkp\.ca|
638 v\.posm\.gay|
639 v\.slaycer\.top|
640 veedeo\.org|
641 vhs\.absturztau\.be|
642 vid\.cthos\.dev|
643 vid\.kinuseka\.us|
644 vid\.mkp\.ca|
645 vid\.nocogabriel\.fr|
646 vid\.norbipeti\.eu|
647 vid\.northbound\.online|
648 vid\.ohboii\.de|
649 vid\.plantplotting\.co\.uk|
650 vid\.pretok\.tv|
651 vid\.prometheus\.systems|
652 vid\.soafen\.love|
653 vid\.twhtv\.club|
654 vid\.wildeboer\.net|
655 video-cave-v2\.de|
656 video-liberty\.com|
657 video\.076\.ne\.jp|
658 video\.1146\.nohost\.me|
659 video\.9wd\.eu|
660 video\.abraum\.de|
661 video\.ados\.accoord\.fr|
662 video\.amiga-ng\.org|
663 video\.anartist\.org|
664 video\.asgardius\.company|
665 video\.audiovisuel-participatif\.org|
666 video\.bards\.online|
667 video\.barkoczy\.social|
668 video\.benetou\.fr|
669 video\.beyondwatts\.social|
670 video\.bgeneric\.net|
671 video\.bilecik\.edu\.tr|
672 video\.blast-info\.fr|
673 video\.bmu\.cloud|
674 video\.catgirl\.biz|
675 video\.causa-arcana\.com|
676 video\.chasmcity\.net|
677 video\.chbmeyer\.de|
678 video\.cigliola\.com|
679 video\.citizen4\.eu|
680 video\.clumsy\.computer|
681 video\.cnnumerique\.fr|
682 video\.cnr\.it|
683 video\.cnt\.social|
684 video\.coales\.co|
685 video\.comune\.trento\.it|
686 video\.coyp\.us|
687 video\.csc49\.fr|
688 video\.davduf\.net|
689 video\.davejansen\.com|
690 video\.dlearning\.nl|
691 video\.dnfi\.no|
692 video\.dresden\.network|
693 video\.drgnz\.club|
694 video\.dudenas\.lt|
695 video\.eientei\.org|
696 video\.ellijaymakerspace\.org|
697 video\.emergeheart\.info|
698 video\.eradicatinglove\.xyz|
699 video\.everythingbagel\.me|
700 video\.extremelycorporate\.ca|
701 video\.fabiomanganiello\.com|
702 video\.fedi\.bzh|
703 video\.fhtagn\.org|
704 video\.firehawk-systems\.com|
705 video\.fox-romka\.ru|
706 video\.fuss\.bz\.it|
707 video\.glassbeadcollective\.org|
708 video\.graine-pdl\.org|
709 video\.gyt\.is|
710 video\.hainry\.fr|
711 video\.hardlimit\.com|
712 video\.hostux\.net|
713 video\.igem\.org|
714 video\.infojournal\.fr|
715 video\.internet-czas-dzialac\.pl|
716 video\.interru\.io|
717 video\.ipng\.ch|
718 video\.ironsysadmin\.com|
719 video\.islameye\.com|
720 video\.jacen\.moe|
721 video\.jadin\.me|
722 video\.jeffmcbride\.net|
723 video\.jigmedatse\.com|
724 video\.kuba-orlik\.name|
725 video\.lacalligramme\.fr|
726 video\.lanceurs-alerte\.fr|
727 video\.laotra\.red|
728 video\.lapineige\.fr|
729 video\.laraffinerie\.re|
730 video\.lavolte\.net|
731 video\.liberta\.vip|
732 video\.libreti\.net|
733 video\.licentia\.net|
734 video\.linc\.systems|
735 video\.linux\.it|
736 video\.linuxtrent\.it|
737 video\.liveitlive\.show|
738 video\.lono\.space|
739 video\.lrose\.de|
740 video\.lunago\.net|
741 video\.lundi\.am|
742 video\.lycee-experimental\.org|
743 video\.maechler\.cloud|
744 video\.marcorennmaus\.de|
745 video\.mass-trespass\.uk|
746 video\.matomocamp\.org|
747 video\.medienzentrum-harburg\.de|
748 video\.mentality\.rip|
749 video\.metaversum\.wtf|
750 video\.midreality\.com|
751 video\.mttv\.it|
752 video\.mugoreve\.fr|
753 video\.mxtthxw\.art|
754 video\.mycrowd\.ca|
755 video\.niboe\.info|
756 video\.nogafam\.es|
757 video\.nstr\.no|
758 video\.occm\.cc|
759 video\.off-investigation\.fr|
760 video\.olos311\.org|
761 video\.ordinobsolete\.fr|
762 video\.osvoj\.ru|
763 video\.ourcommon\.cloud|
764 video\.ozgurkon\.org|
765 video\.pcf\.fr|
766 video\.pcgaldo\.com|
767 video\.phyrone\.de|
768 video\.poul\.org|
769 video\.publicspaces\.net|
770 video\.pullopen\.xyz|
771 video\.r3s\.nrw|
772 video\.rainevixen\.com|
773 video\.resolutions\.it|
774 video\.retroedge\.tech|
775 video\.rhizome\.org|
776 video\.rlp-media\.de|
777 video\.rs-einrich\.de|
778 video\.rubdos\.be|
779 video\.sadmin\.io|
780 video\.sftblw\.moe|
781 video\.shitposter\.club|
782 video\.simplex-software\.ru|
783 video\.slipfox\.xyz|
784 video\.snug\.moe|
785 video\.software-fuer-engagierte\.de|
786 video\.soi\.ch|
787 video\.sonet\.ws|
788 video\.surazal\.net|
789 video\.taskcards\.eu|
790 video\.team-lcbs\.eu|
791 video\.techforgood\.social|
792 video\.telemillevaches\.net|
793 video\.thepolarbear\.co\.uk|
794 video\.thinkof\.name|
795 video\.tii\.space|
796 video\.tkz\.es|
797 video\.trankil\.info|
798 video\.triplea\.fr|
799 video\.tum\.social|
800 video\.turbo\.chat|
801 video\.uriopss-pdl\.fr|
802 video\.ustim\.ru|
803 video\.ut0pia\.org|
804 video\.vaku\.org\.ua|
805 video\.vegafjord\.me|
806 video\.veloma\.org|
807 video\.violoncello\.ch|
808 video\.voidconspiracy\.band|
809 video\.wakkeren\.nl|
810 video\.windfluechter\.org|
811 video\.ziez\.eu|
812 videos-passages\.huma-num\.fr|
813 videos\.aadtp\.be|
814 videos\.ahp-numerique\.fr|
815 videos\.alamaisondulibre\.org|
816 videos\.archigny\.net|
817 videos\.aroaduntraveled\.com|
818 videos\.b4tech\.org|
819 videos\.benjaminbrady\.ie|
820 videos\.bik\.opencloud\.lu|
821 videos\.cloudron\.io|
822 videos\.codingotaku\.com|
823 videos\.coletivos\.org|
824 videos\.collate\.social|
825 videos\.danksquad\.org|
826 videos\.digitaldragons\.eu|
827 videos\.dromeadhere\.fr|
828 videos\.explain-it\.org|
829 videos\.factsonthegroundshow\.com|
830 videos\.foilen\.com|
831 videos\.fsci\.in|
832 videos\.gamercast\.net|
833 videos\.gianmarco\.gg|
834 videos\.globenet\.org|
835 videos\.grafo\.zone|
836 videos\.hauspie\.fr|
837 videos\.hush\.is|
838 videos\.hyphalfusion\.network|
839 videos\.icum\.to|
840 videos\.im\.allmendenetz\.de|
841 videos\.jacksonchen666\.com|
842 videos\.john-livingston\.fr|
843 videos\.knazarov\.com|
844 videos\.kuoushi\.com|
845 videos\.laliguepaysdelaloire\.org|
846 videos\.lemouvementassociatif-pdl\.org|
847 videos\.leslionsfloorball\.fr|
848 videos\.librescrum\.org|
849 videos\.mastodont\.cat|
850 videos\.metus\.ca|
851 videos\.miolo\.org|
852 videos\.offroad\.town|
853 videos\.openmandriva\.org|
854 videos\.parleur\.net|
855 videos\.pcorp\.us|
856 videos\.pop\.eu\.com|
857 videos\.rampin\.org|
858 videos\.rauten\.co\.za|
859 videos\.ritimo\.org|
860 videos\.sarcasmstardust\.com|
861 videos\.scanlines\.xyz|
862 videos\.shmalls\.pw|
863 videos\.stadtfabrikanten\.org|
864 videos\.supertuxkart\.net|
865 videos\.testimonia\.org|
866 videos\.thinkerview\.com|
867 videos\.torrenezzi10\.xyz|
868 videos\.trom\.tf|
869 videos\.utsukta\.org|
870 videos\.viorsan\.com|
871 videos\.wherelinux\.xyz|
872 videos\.wikilibriste\.fr|
873 videos\.yesil\.club|
874 videos\.yeswiki\.net|
875 videotube\.duckdns\.org|
876 vids\.capypara\.de|
877 vids\.roshless\.me|
878 vids\.stary\.pc\.pl|
879 vids\.tekdmn\.me|
880 vidz\.julien\.ovh|
881 views\.southfox\.me|
882 virtual-girls-are\.definitely-for\.me|
883 viste\.pt|
884 vnchich\.com|
885 vnop\.org|
886 vod\.newellijay\.tv|
887 voluntarytube\.com|
888 vtr\.chikichiki\.tube|
889 vulgarisation-informatique\.fr|
890 watch\.easya\.solutions|
891 watch\.goodluckgabe\.life|
892 watch\.ignorance\.eu|
893 watch\.jimmydore\.com|
894 watch\.libertaria\.space|
895 watch\.nuked\.social|
896 watch\.ocaml\.org|
897 watch\.thelema\.social|
898 watch\.tubelab\.video|
899 web-fellow\.de|
900 webtv\.vandoeuvre\.net|
901 wetubevid\.online|
902 wikileaks\.video|
903 wiwi\.video|
904 wow\.such\.disappointment\.fail|
905 www\.jvideos\.net|
906 www\.kotikoff\.net|
907 www\.makertube\.net|
908 www\.mypeer\.tube|
909 www\.nadajemy\.com|
910 www\.neptube\.io|
911 www\.rocaguinarda\.tv|
912 www\.vnshow\.net|
913 xxivproduction\.video|
914 yt\.orokoro\.ru|
915 ytube\.retronerd\.at|
916 zumvideo\.de|
917
918 # from youtube-dl
919 peertube\.rainbowswingers\.net|
920 tube\.stanisic\.nl|
921 peer\.suiri\.us|
922 medias\.libox\.fr|
923 videomensoif\.ynh\.fr|
924 peertube\.travelpandas\.eu|
925 peertube\.rachetjay\.fr|
926 peertube\.montecsys\.fr|
927 tube\.eskuero\.me|
928 peer\.tube|
929 peertube\.umeahackerspace\.se|
930 tube\.nx-pod\.de|
931 video\.monsieurbidouille\.fr|
932 tube\.openalgeria\.org|
933 vid\.lelux\.fi|
934 video\.anormallostpod\.ovh|
935 tube\.crapaud-fou\.org|
936 peertube\.stemy\.me|
937 lostpod\.space|
938 exode\.me|
939 peertube\.snargol\.com|
940 vis\.ion\.ovh|
941 videosdulib\.re|
942 v\.mbius\.io|
943 videos\.judrey\.eu|
944 peertube\.osureplayviewer\.xyz|
945 peertube\.mathieufamily\.ovh|
946 www\.videos-libr\.es|
947 fightforinfo\.com|
948 peertube\.fediverse\.ru|
949 peertube\.oiseauroch\.fr|
950 video\.nesven\.eu|
951 v\.bearvideo\.win|
952 video\.qoto\.org|
953 justporn\.cc|
954 video\.vny\.fr|
955 peervideo\.club|
956 tube\.taker\.fr|
957 peertube\.chantierlibre\.org|
958 tube\.ipfixe\.info|
959 tube\.kicou\.info|
960 tube\.dodsorf\.as|
961 videobit\.cc|
962 video\.yukari\.moe|
963 videos\.elbinario\.net|
964 hkvideo\.live|
965 pt\.tux\.tf|
966 www\.hkvideo\.live|
967 FIGHTFORINFO\.com|
968 pt\.765racing\.com|
969 peertube\.gnumeria\.eu\.org|
970 nordenmedia\.com|
971 peertube\.co\.uk|
972 tube\.darfweb\.eu|
973 tube\.kalah-france\.org|
974 0ch\.in|
975 vod\.mochi\.academy|
976 film\.node9\.org|
977 peertube\.hatthieves\.es|
978 video\.fitchfamily\.org|
979 peertube\.ddns\.net|
980 video\.ifuncle\.kr|
981 video\.fdlibre\.eu|
982 tube\.22decembre\.eu|
983 peertube\.harmoniescreatives\.com|
984 tube\.fabrigli\.fr|
985 video\.thedwyers\.co|
986 video\.bruitbruit\.com|
987 peertube\.foxfam\.club|
988 peer\.philoxweb\.be|
989 videos\.bugs\.social|
990 peertube\.malbert\.xyz|
991 peertube\.bilange\.ca|
992 libretube\.net|
993 diytelevision\.com|
994 peertube\.fedilab\.app|
995 libre\.video|
996 video\.mstddntfdn\.online|
997 us\.tv|
998 peertube\.sl-network\.fr|
999 peertube\.dynlinux\.io|
1000 peertube\.david\.durieux\.family|
1001 peertube\.linuxrocks\.online|
1002 peerwatch\.xyz|
1003 v\.kretschmann\.social|
1004 tube\.otter\.sh|
1005 yt\.is\.nota\.live|
1006 tube\.dragonpsi\.xyz|
1007 peertube\.boneheadmedia\.com|
1008 videos\.funkwhale\.audio|
1009 watch\.44con\.com|
1010 peertube\.gcaillaut\.fr|
1011 peertube\.icu|
1012 pony\.tube|
1013 spacepub\.space|
1014 tube\.stbr\.io|
1015 v\.mom-gay\.faith|
1016 tube\.port0\.xyz|
1017 peertube\.simounet\.net|
1018 play\.jergefelt\.se|
1019 peertube\.zeteo\.me|
1020 tube\.danq\.me|
1021 peertube\.kerenon\.com|
1022 tube\.fab-l3\.org|
1023 tube\.calculate\.social|
1024 peertube\.mckillop\.org|
1025 tube\.netzspielplatz\.de|
1026 vod\.ksite\.de|
1027 peertube\.laas\.fr|
1028 tube\.govital\.net|
1029 peertube\.stephenson\.cc|
1030 bistule\.nohost\.me|
1031 peertube\.kajalinifi\.de|
1032 video\.ploud\.jp|
1033 video\.omniatv\.com|
1034 peertube\.ffs2play\.fr|
1035 peertube\.leboulaire\.ovh|
1036 peertube\.tronic-studio\.com|
1037 peertube\.public\.cat|
1038 peertube\.metalbanana\.net|
1039 video\.1000i100\.fr|
1040 peertube\.alter-nativ-voll\.de|
1041 tube\.pasa\.tf|
1042 tube\.worldofhauru\.xyz|
1043 pt\.kamp\.site|
1044 peertube\.teleassist\.fr|
1045 videos\.mleduc\.xyz|
1046 conf\.tube|
1047 media\.privacyinternational\.org|
1048 pt\.forty-two\.nl|
1049 video\.halle-leaks\.de|
1050 video\.grosskopfgames\.de|
1051 peertube\.schaeferit\.de|
1052 peertube\.jackbot\.fr|
1053 tube\.extinctionrebellion\.fr|
1054 peertube\.f-si\.org|
1055 video\.subak\.ovh|
1056 videos\.koweb\.fr|
1057 peertube\.zergy\.net|
1058 peertube\.roflcopter\.fr|
1059 peertube\.floss-marketing-school\.com|
1060 vloggers\.social|
1061 peertube\.iriseden\.eu|
1062 videos\.ubuntu-paris\.org|
1063 peertube\.mastodon\.host|
1064 armstube\.com|
1065 peertube\.s2s\.video|
1066 peertube\.lol|
1067 tube\.open-plug\.eu|
1068 open\.tube|
1069 peertube\.ch|
1070 peertube\.normandie-libre\.fr|
1071 peertube\.slat\.org|
1072 video\.lacaveatonton\.ovh|
1073 peertube\.uno|
1074 peertube\.servebeer\.com|
1075 peertube\.fedi\.quebec|
1076 tube\.h3z\.jp|
1077 tube\.plus200\.com|
1078 peertube\.eric\.ovh|
1079 tube\.metadocs\.cc|
1080 tube\.unmondemeilleur\.eu|
1081 gouttedeau\.space|
1082 video\.antirep\.net|
1083 nrop\.cant\.at|
1084 tube\.ksl-bmx\.de|
1085 tube\.plaf\.fr|
1086 tube\.tchncs\.de|
1087 video\.devinberg\.com|
1088 hitchtube\.fr|
1089 peertube\.kosebamse\.com|
1090 yunopeertube\.myddns\.me|
1091 peertube\.varney\.fr|
1092 peertube\.anon-kenkai\.com|
1093 tube\.maiti\.info|
1094 tubee\.fr|
1095 videos\.dinofly\.com|
1096 toobnix\.org|
1097 videotape\.me|
1098 voca\.tube|
1099 video\.heromuster\.com|
1100 video\.lemediatv\.fr|
1101 video\.up\.edu\.ph|
1102 balafon\.video|
1103 video\.ivel\.fr|
1104 thickrips\.cloud|
1105 pt\.laurentkruger\.fr|
1106 video\.monarch-pass\.net|
1107 peertube\.artica\.center|
1108 video\.alternanet\.fr|
1109 indymotion\.fr|
1110 fanvid\.stopthatimp\.net|
1111 video\.farci\.org|
1112 v\.lesterpig\.com|
1113 video\.okaris\.de|
1114 tube\.pawelko\.net|
1115 peertube\.mablr\.org|
1116 tube\.fede\.re|
1117 pytu\.be|
1118 evertron\.tv|
1119 devtube\.dev-wiki\.de|
1120 raptube\.antipub\.org|
1121 video\.selea\.se|
1122 peertube\.mygaia\.org|
1123 video\.oh14\.de|
1124 peertube\.livingutopia\.org|
1125 peertube\.the-penguin\.de|
1126 tube\.thechangebook\.org|
1127 tube\.anjara\.eu|
1128 pt\.pube\.tk|
1129 video\.samedi\.pm|
1130 mplayer\.demouliere\.eu|
1131 widemus\.de|
1132 peertube\.me|
1133 peertube\.zapashcanon\.fr|
1134 video\.latavernedejohnjohn\.fr|
1135 peertube\.pcservice46\.fr|
1136 peertube\.mazzonetto\.eu|
1137 video\.irem\.univ-paris-diderot\.fr|
1138 video\.livecchi\.cloud|
1139 alttube\.fr|
1140 video\.coop\.tools|
1141 video\.cabane-libre\.org|
1142 peertube\.openstreetmap\.fr|
1143 videos\.alolise\.org|
1144 irrsinn\.video|
1145 video\.antopie\.org|
1146 scitech\.video|
1147 tube2\.nemsia\.org|
1148 video\.amic37\.fr|
1149 peertube\.freeforge\.eu|
1150 video\.arbitrarion\.com|
1151 video\.datsemultimedia\.com|
1152 stoptrackingus\.tv|
1153 peertube\.ricostrongxxx\.com|
1154 docker\.videos\.lecygnenoir\.info|
1155 peertube\.togart\.de|
1156 tube\.postblue\.info|
1157 videos\.domainepublic\.net|
1158 peertube\.cyber-tribal\.com|
1159 video\.gresille\.org|
1160 peertube\.dsmouse\.net|
1161 cinema\.yunohost\.support|
1162 tube\.theocevaer\.fr|
1163 repro\.video|
1164 tube\.4aem\.com|
1165 quaziinc\.com|
1166 peertube\.metawurst\.space|
1167 videos\.wakapo\.com|
1168 video\.ploud\.fr|
1169 video\.freeradical\.zone|
1170 tube\.valinor\.fr|
1171 refuznik\.video|
1172 pt\.kircheneuenburg\.de|
1173 peertube\.asrun\.eu|
1174 peertube\.lagob\.fr|
1175 videos\.side-ways\.net|
1176 91video\.online|
1177 video\.valme\.io|
1178 video\.taboulisme\.com|
1179 videos-libr\.es|
1180 tv\.mooh\.fr|
1181 nuage\.acostey\.fr|
1182 video\.monsieur-a\.fr|
1183 peertube\.librelois\.fr|
1184 videos\.pair2jeux\.tube|
1185 videos\.pueseso\.club|
1186 peer\.mathdacloud\.ovh|
1187 media\.assassinate-you\.net|
1188 vidcommons\.org|
1189 ptube\.rousset\.nom\.fr|
1190 tube\.cyano\.at|
1191 videos\.squat\.net|
1192 video\.iphodase\.fr|
1193 peertube\.makotoworkshop\.org|
1194 peertube\.serveur\.slv-valbonne\.fr|
1195 vault\.mle\.party|
1196 hostyour\.tv|
1197 videos\.hack2g2\.fr|
1198 libre\.tube|
1199 pire\.artisanlogiciel\.net|
1200 videos\.numerique-en-commun\.fr|
1201 video\.netsyms\.com|
1202 video\.die-partei\.social|
1203 video\.writeas\.org|
1204 peertube\.swarm\.solvingmaz\.es|
1205 tube\.pericoloso\.ovh|
1206 watching\.cypherpunk\.observer|
1207 videos\.adhocmusic\.com|
1208 tube\.rfc1149\.net|
1209 peertube\.librelabucm\.org|
1210 videos\.numericoop\.fr|
1211 peertube\.koehn\.com|
1212 peertube\.anarchmusicall\.net|
1213 tube\.kampftoast\.de|
1214 vid\.y-y\.li|
1215 peertube\.xtenz\.xyz|
1216 diode\.zone|
1217 tube\.egf\.mn|
1218 peertube\.nomagic\.uk|
1219 visionon\.tv|
1220 videos\.koumoul\.com|
1221 video\.rastapuls\.com|
1222 video\.mantlepro\.com|
1223 video\.deadsuperhero\.com|
1224 peertube\.musicstudio\.pro|
1225 peertube\.we-keys\.fr|
1226 artitube\.artifaille\.fr|
1227 peertube\.ethernia\.net|
1228 tube\.midov\.pl|
1229 peertube\.fr|
1230 watch\.snoot\.tube|
1231 peertube\.donnadieu\.fr|
1232 argos\.aquilenet\.fr|
1233 tube\.nemsia\.org|
1234 tube\.bruniau\.net|
1235 videos\.darckoune\.moe|
1236 tube\.traydent\.info|
1237 dev\.videos\.lecygnenoir\.info|
1238 peertube\.nayya\.org|
1239 peertube\.live|
1240 peertube\.mofgao\.space|
1241 video\.lequerrec\.eu|
1242 peertube\.amicale\.net|
1243 aperi\.tube|
1244 tube\.ac-lyon\.fr|
1245 video\.lw1\.at|
1246 www\.yiny\.org|
1247 videos\.pofilo\.fr|
1248 tube\.lou\.lt|
1249 choob\.h\.etbus\.ch|
1250 tube\.hoga\.fr|
1251 peertube\.heberge\.fr|
1252 video\.obermui\.de|
1253 videos\.cloudfrancois\.fr|
1254 betamax\.video|
1255 video\.typica\.us|
1256 tube\.piweb\.be|
1257 video\.blender\.org|
1258 peertube\.cat|
1259 tube\.kdy\.ch|
1260 pe\.ertu\.be|
1261 peertube\.social|
1262 videos\.lescommuns\.org|
1263 tv\.datamol\.org|
1264 videonaute\.fr|
1265 dialup\.express|
1266 peertube\.nogafa\.org|
1267 megatube\.lilomoino\.fr|
1268 peertube\.tamanoir\.foucry\.net|
1269 peertube\.devosi\.org|
1270 peertube\.1312\.media|
1271 tube\.bootlicker\.party|
1272 skeptikon\.fr|
1273 video\.blueline\.mg|
1274 tube\.homecomputing\.fr|
1275 tube\.ouahpiti\.info|
1276 video\.tedomum\.net|
1277 video\.g3l\.org|
1278 fontube\.fr|
1279 peertube\.gaialabs\.ch|
1280 tube\.kher\.nl|
1281 peertube\.qtg\.fr|
1282 video\.migennes\.net|
1283 tube\.p2p\.legal|
1284 troll\.tv|
1285 videos\.iut-orsay\.fr|
1286 peertube\.solidev\.net|
1287 videos\.cemea\.org|
1288 video\.passageenseine\.fr|
1289 videos\.festivalparminous\.org|
1290 peertube\.touhoppai\.moe|
1291 sikke\.fi|
1292 peer\.hostux\.social|
1293 share\.tube|
1294 peertube\.walkingmountains\.fr|
1295 videos\.benpro\.fr|
1296 peertube\.parleur\.net|
1297 peertube\.heraut\.eu|
1298 tube\.aquilenet\.fr|
1299 peertube\.gegeweb\.eu|
1300 framatube\.org|
1301 thinkerview\.video|
1302 tube\.conferences-gesticulees\.net|
1303 peertube\.datagueule\.tv|
1304 video\.lqdn\.fr|
1305 tube\.mochi\.academy|
1306 media\.zat\.im|
1307 video\.colibris-outilslibres\.org|
1308 tube\.svnet\.fr|
1309 peertube\.video|
1310 peertube2\.cpy\.re|
1311 peertube3\.cpy\.re|
1312 videos\.tcit\.fr|
1313 peertube\.cpy\.re|
1314 canard\.tube
1315 )'''
1316 _UUID_RE = r'[\da-zA-Z]{22}|[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}'
1317 _API_BASE = 'https://%s/api/v1/videos/%s/%s'
1318 _VALID_URL = rf'''(?x)
1319 (?:
1320 peertube:(?P<host>[^:]+):|
1321 https?://(?P<host_2>{_INSTANCES_RE})/(?:videos/(?:watch|embed)|api/v\d/videos|w)/
1322 )
1323 (?P<id>{_UUID_RE})
1324 '''
1325 _EMBED_REGEX = [r'''(?x)<iframe[^>]+\bsrc=["\'](?P<url>(?:https?:)?//{_INSTANCES_RE}/videos/embed/{cls._UUID_RE})''']
1326 _TESTS = [{
1327 'url': 'https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d',
1328 'md5': '8563064d245a4be5705bddb22bb00a28',
1329 'info_dict': {
1330 'id': '9c9de5e8-0a1e-484a-b099-e80766180a6d',
1331 'ext': 'mp4',
1332 'title': 'What is PeerTube?',
1333 'description': 'md5:3fefb8dde2b189186ce0719fda6f7b10',
1334 'thumbnail': r're:https?://.*\.(?:jpg|png)',
1335 'timestamp': 1538391166,
1336 'upload_date': '20181001',
1337 'uploader': 'Framasoft',
1338 'uploader_id': '3',
1339 'uploader_url': 'https://framatube.org/accounts/framasoft',
1340 'channel': 'A propos de PeerTube',
1341 'channel_id': '2215',
1342 'channel_url': 'https://framatube.org/video-channels/joinpeertube',
1343 'language': 'en',
1344 'license': 'Attribution - Share Alike',
1345 'duration': 113,
1346 'view_count': int,
1347 'like_count': int,
1348 'dislike_count': int,
1349 'tags': ['framasoft', 'peertube'],
1350 'categories': ['Science & Technology'],
1351 },
1352 }, {
1353 'url': 'https://peertube2.cpy.re/w/122d093a-1ede-43bd-bd34-59d2931ffc5e',
1354 'info_dict': {
1355 'id': '122d093a-1ede-43bd-bd34-59d2931ffc5e',
1356 'ext': 'mp4',
1357 'title': 'E2E tests',
1358 'uploader_id': '37855',
1359 'timestamp': 1589276219,
1360 'upload_date': '20200512',
1361 'uploader': 'chocobozzz',
1362 },
1363 }, {
1364 'url': 'https://peertube2.cpy.re/w/3fbif9S3WmtTP8gGsC5HBd',
1365 'info_dict': {
1366 'id': '3fbif9S3WmtTP8gGsC5HBd',
1367 'ext': 'mp4',
1368 'title': 'E2E tests',
1369 'uploader_id': '37855',
1370 'timestamp': 1589276219,
1371 'upload_date': '20200512',
1372 'uploader': 'chocobozzz',
1373 },
1374 }, {
1375 'url': 'https://peertube2.cpy.re/api/v1/videos/3fbif9S3WmtTP8gGsC5HBd',
1376 'info_dict': {
1377 'id': '3fbif9S3WmtTP8gGsC5HBd',
1378 'ext': 'mp4',
1379 'title': 'E2E tests',
1380 'uploader_id': '37855',
1381 'timestamp': 1589276219,
1382 'upload_date': '20200512',
1383 'uploader': 'chocobozzz',
1384 },
1385 }, {
1386 # Issue #26002
1387 'url': 'peertube:spacepub.space:d8943b2d-8280-497b-85ec-bc282ec2afdc',
1388 'info_dict': {
1389 'id': 'd8943b2d-8280-497b-85ec-bc282ec2afdc',
1390 'ext': 'mp4',
1391 'title': 'Dot matrix printer shell demo',
1392 'uploader_id': '3',
1393 'timestamp': 1587401293,
1394 'upload_date': '20200420',
1395 'uploader': 'Drew DeVault',
1396 },
1397 }, {
1398 'url': 'https://peertube.debian.social/videos/watch/0b04f13d-1e18-4f1d-814e-4979aa7c9c44',
1399 'only_matching': True,
1400 }, {
1401 # nsfw
1402 'url': 'https://vod.ksite.de/videos/watch/9bb88cd3-9959-46d9-9ab9-33d2bb704c39',
1403 'only_matching': True,
1404 }, {
1405 'url': 'https://vod.ksite.de/videos/embed/fed67262-6edb-4d1c-833b-daa9085c71d7',
1406 'only_matching': True,
1407 }, {
1408 'url': 'https://peertube.tv/api/v1/videos/c1875674-97d0-4c94-a058-3f7e64c962e8',
1409 'only_matching': True,
1410 }, {
1411 'url': 'peertube:framatube.org:b37a5b9f-e6b5-415c-b700-04a5cd6ec205',
1412 'only_matching': True,
1413 }]
1414
1415 @staticmethod
1416 def _extract_peertube_url(webpage, source_url):
1417 mobj = re.match(
1418 rf'https?://(?P<host>[^/]+)/(?:videos/(?:watch|embed)|w)/(?P<id>{PeerTubeIE._UUID_RE})', source_url)
1419 if mobj and any(p in webpage for p in (
1420 'meta property="og:platform" content="PeerTube"',
1421 '<title>PeerTube<',
1422 'There will be other non JS-based clients to access PeerTube',
1423 '>We are sorry but it seems that PeerTube is not compatible with your web browser.<')):
1424 return 'peertube:{}:{}'.format(*mobj.group('host', 'id'))
1425
1426 @classmethod
1427 def _extract_embed_urls(cls, url, webpage):
1428 embeds = tuple(super()._extract_embed_urls(url, webpage))
1429 if embeds:
1430 return embeds
1431
1432 peertube_url = cls._extract_peertube_url(webpage, url)
1433 if peertube_url:
1434 return [peertube_url]
1435
1436 def _call_api(self, host, video_id, path, note=None, errnote=None, fatal=True):
1437 return self._download_json(
1438 self._API_BASE % (host, video_id, path), video_id,
1439 note=note, errnote=errnote, fatal=fatal)
1440
1441 def _get_subtitles(self, host, video_id):
1442 captions = self._call_api(
1443 host, video_id, 'captions', note='Downloading captions JSON',
1444 fatal=False)
1445 if not isinstance(captions, dict):
1446 return
1447 data = captions.get('data')
1448 if not isinstance(data, list):
1449 return
1450 subtitles = {}
1451 for e in data:
1452 language_id = try_get(e, lambda x: x['language']['id'], str)
1453 caption_url = urljoin(f'https://{host}', e.get('captionPath'))
1454 if not caption_url:
1455 continue
1456 subtitles.setdefault(language_id or 'en', []).append({
1457 'url': caption_url,
1458 })
1459 return subtitles
1460
1461 def _real_extract(self, url):
1462 mobj = self._match_valid_url(url)
1463 host = mobj.group('host') or mobj.group('host_2')
1464 video_id = mobj.group('id')
1465
1466 video = self._call_api(
1467 host, video_id, '', note='Downloading video JSON')
1468
1469 title = video['name']
1470
1471 formats, is_live = [], False
1472 files = video.get('files') or []
1473 for playlist in (video.get('streamingPlaylists') or []):
1474 if not isinstance(playlist, dict):
1475 continue
1476 if playlist_url := url_or_none(playlist.get('playlistUrl')):
1477 is_live = True
1478 formats.extend(self._extract_m3u8_formats(
1479 playlist_url, video_id, fatal=False, live=True))
1480 playlist_files = playlist.get('files')
1481 if not (playlist_files and isinstance(playlist_files, list)):
1482 continue
1483 files.extend(playlist_files)
1484 for file_ in files:
1485 if not isinstance(file_, dict):
1486 continue
1487 file_url = url_or_none(file_.get('fileUrl'))
1488 if not file_url:
1489 continue
1490 file_size = int_or_none(file_.get('size'))
1491 format_id = try_get(
1492 file_, lambda x: x['resolution']['label'], str)
1493 f = parse_resolution(format_id)
1494 f.update({
1495 'url': file_url,
1496 'format_id': format_id,
1497 'filesize': file_size,
1498 })
1499 if format_id == '0p':
1500 f['vcodec'] = 'none'
1501 else:
1502 f['fps'] = int_or_none(file_.get('fps'))
1503 is_live = False
1504 formats.append(f)
1505
1506 description = video.get('description')
1507 if description and len(description) >= 250:
1508 # description is shortened
1509 full_description = self._call_api(
1510 host, video_id, 'description', note='Downloading description JSON',
1511 fatal=False)
1512
1513 if isinstance(full_description, dict):
1514 description = str_or_none(full_description.get('description')) or description
1515
1516 subtitles = self.extract_subtitles(host, video_id)
1517
1518 def data(section, field, type_):
1519 return try_get(video, lambda x: x[section][field], type_)
1520
1521 def account_data(field, type_):
1522 return data('account', field, type_)
1523
1524 def channel_data(field, type_):
1525 return data('channel', field, type_)
1526
1527 category = data('category', 'label', str)
1528 categories = [category] if category else None
1529
1530 nsfw = video.get('nsfw')
1531 if nsfw is bool:
1532 age_limit = 18 if nsfw else 0
1533 else:
1534 age_limit = None
1535
1536 webpage_url = f'https://{host}/videos/watch/{video_id}'
1537
1538 return {
1539 'id': video_id,
1540 'title': title,
1541 'description': description,
1542 'thumbnail': urljoin(webpage_url, video.get('thumbnailPath')),
1543 'timestamp': unified_timestamp(video.get('publishedAt')),
1544 'uploader': account_data('displayName', str),
1545 'uploader_id': str_or_none(account_data('id', int)),
1546 'uploader_url': url_or_none(account_data('url', str)),
1547 'channel': channel_data('displayName', str),
1548 'channel_id': str_or_none(channel_data('id', int)),
1549 'channel_url': url_or_none(channel_data('url', str)),
1550 'language': data('language', 'id', str),
1551 'license': data('licence', 'label', str),
1552 'duration': int_or_none(video.get('duration')),
1553 'view_count': int_or_none(video.get('views')),
1554 'like_count': int_or_none(video.get('likes')),
1555 'dislike_count': int_or_none(video.get('dislikes')),
1556 'age_limit': age_limit,
1557 'tags': try_get(video, lambda x: x['tags'], list),
1558 'categories': categories,
1559 'formats': formats,
1560 'subtitles': subtitles,
1561 'is_live': is_live,
1562 'webpage_url': webpage_url,
1563 }
1564
1565
1566 class PeerTubePlaylistIE(InfoExtractor):
1567 IE_NAME = 'PeerTube:Playlist'
1568 _TYPES = {
1569 'a': 'accounts',
1570 'c': 'video-channels',
1571 'w/p': 'video-playlists',
1572 }
1573 _VALID_URL = r'''(?x)
1574 https?://(?P<host>{})/(?P<type>(?:{}))/
1575 (?P<id>[^/]+)
1576 '''.format(PeerTubeIE._INSTANCES_RE, '|'.join(_TYPES.keys()))
1577 _TESTS = [{
1578 'url': 'https://peertube.debian.social/w/p/hFdJoTuyhNJVa1cDWd1d12',
1579 'info_dict': {
1580 'id': 'hFdJoTuyhNJVa1cDWd1d12',
1581 'description': 'Diversas palestras do Richard Stallman no Brasil.',
1582 'title': 'Richard Stallman no Brasil',
1583 'timestamp': 1599676222,
1584 },
1585 'playlist_mincount': 9,
1586 }, {
1587 'url': 'https://peertube2.cpy.re/a/chocobozzz/videos',
1588 'info_dict': {
1589 'id': 'chocobozzz',
1590 'timestamp': 1553874564,
1591 'title': 'chocobozzz',
1592 },
1593 'playlist_mincount': 2,
1594 }, {
1595 'url': 'https://framatube.org/c/bf54d359-cfad-4935-9d45-9d6be93f63e8/videos',
1596 'info_dict': {
1597 'id': 'bf54d359-cfad-4935-9d45-9d6be93f63e8',
1598 'timestamp': 1519917377,
1599 'title': 'Les vidéos de Framasoft',
1600 },
1601 'playlist_mincount': 345,
1602 }, {
1603 'url': 'https://peertube2.cpy.re/c/blender_open_movies@video.blender.org/videos',
1604 'info_dict': {
1605 'id': 'blender_open_movies@video.blender.org',
1606 'timestamp': 1542287810,
1607 'title': 'Official Blender Open Movies',
1608 },
1609 'playlist_mincount': 11,
1610 }]
1611 _API_BASE = 'https://%s/api/v1/%s/%s%s'
1612 _PAGE_SIZE = 30
1613
1614 def call_api(self, host, name, path, base, **kwargs):
1615 return self._download_json(
1616 self._API_BASE % (host, base, name, path), name, **kwargs)
1617
1618 def fetch_page(self, host, playlist_id, playlist_type, page):
1619 page += 1
1620 video_data = self.call_api(
1621 host, playlist_id,
1622 f'/videos?sort=-createdAt&start={self._PAGE_SIZE * (page - 1)}&count={self._PAGE_SIZE}&nsfw=both',
1623 playlist_type, note=f'Downloading page {page}').get('data', [])
1624 for video in video_data:
1625 short_uuid = video.get('shortUUID') or try_get(video, lambda x: x['video']['shortUUID'])
1626 video_title = video.get('name') or try_get(video, lambda x: x['video']['name'])
1627 yield self.url_result(
1628 f'https://{host}/w/{short_uuid}', PeerTubeIE.ie_key(),
1629 video_id=short_uuid, video_title=video_title)
1630
1631 def _extract_playlist(self, host, playlist_type, playlist_id):
1632 info = self.call_api(host, playlist_id, '', playlist_type, note='Downloading playlist information', fatal=False)
1633
1634 playlist_title = info.get('displayName')
1635 playlist_description = info.get('description')
1636 playlist_timestamp = unified_timestamp(info.get('createdAt'))
1637 channel = try_get(info, lambda x: x['ownerAccount']['name']) or info.get('displayName')
1638 channel_id = try_get(info, lambda x: x['ownerAccount']['id']) or info.get('id')
1639 thumbnail = format_field(info, 'thumbnailPath', f'https://{host}%s')
1640
1641 entries = OnDemandPagedList(functools.partial(
1642 self.fetch_page, host, playlist_id, playlist_type), self._PAGE_SIZE)
1643
1644 return self.playlist_result(
1645 entries, playlist_id, playlist_title, playlist_description,
1646 timestamp=playlist_timestamp, channel=channel, channel_id=channel_id, thumbnail=thumbnail)
1647
1648 def _real_extract(self, url):
1649 playlist_type, host, playlist_id = self._match_valid_url(url).group('type', 'host', 'id')
1650 return self._extract_playlist(host, self._TYPES[playlist_type], playlist_id)