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