4 from .common
import InfoExtractor
18 class PeerTubeIE(InfoExtractor
):
19 _INSTANCES_RE
= r
'''(?:
20 # Taken from https://instances.joinpeertube.org/instances
22 3dctube\.3dcandy\.social|
23 all\.electric\.kitchen|
28 archive\.nocopyrightintended\.tv|
31 astrotube-ufe\.obspm\.fr|
33 audio\.freediverse\.com|
34 azxtube\.youssefc\.tn|
40 biblion\.refchat\.net|
41 biblioteca\.theowlclub\.net|
50 canal\.facil\.services|
53 celluloid-media\.huma-num\.fr|
54 chicago1\.peertube\.support|
56 cloudtube\.ise\.fraunhofer\.de|
58 comics\.peertube\.biz|
60 communitymedia\.video|
61 conspiracydistillery\.com|
66 darkvapor\.nohost\.me|
67 daschauher\.aksel\.rocks|
68 digitalcourage\.video|
71 dud-video\.inf\.tu-dresden\.de|
72 dud175\.inf\.tu-dresden\.de|
74 ebildungslabor\.video|
84 fotogramas\.politicaconciencia\.org|
86 freesoto-u2151\.vm\.elestio\.app|
90 grypstube\.uni-greifswald\.de|
102 kirche\.peertube-host\.de|
103 kiwi\.froggirl\.club|
108 la2\.peertube\.support|
109 la3\.peertube\.support|
110 la4\.peertube\.support|
112 lawsplaining\.peertube\.biz|
118 lucarne\.balsamine\.be|
121 media\.econoalchemist\.com|
125 media\.interior\.edu\.uy|
126 media\.krashboyz\.org|
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|
137 mirror\.peertube\.metalbanana\.net|
141 movies\.metricsmaster\.eu|
143 mytube\.kn-cloud\.de|
144 mytube\.le5emeaxe\.fr|
147 nanawel-peertube\.dyndns\.org|
151 nightshift\.minnix\.dev|
153 nyltube\.nylarea\.com|
154 ocfedtest\.hosted\.spacebear\.ee|
155 openmedia\.edunova\.it|
160 patriottube\.sonsofliberty\.red|
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|
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|
193 peertube\.beeldengeluid\.nl|
194 peertube\.bgzashtita\.es|
196 peertube\.bildung-ekhn\.de|
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|
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|
232 peertube\.doesstuff\.social|
234 peertube\.education-forum\.com|
235 peertube\.elforcer\.ru|
236 peertube\.em\.id\.lv|
237 peertube\.ethibox\.fr|
239 peertube\.european-pirates\.eu|
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|
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|
272 peertube\.inapurna\.org|
273 peertube\.informaction\.info|
274 peertube\.interhop\.org|
276 peertube\.it-arts\.net|
277 peertube\.jensdiemer\.de|
278 peertube\.johntheserg\.al|
279 peertube\.kaleidos\.net|
281 peertube\.kcore\.org|
282 peertube\.keazilla\.net|
283 peertube\.klaewyss\.fr|
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|
299 peertube\.louisematic\.site|
300 peertube\.luckow\.org|
302 peertube\.lyceeconnecte\.fr|
303 peertube\.madixam\.xyz|
304 peertube\.magicstone\.dev|
305 peertube\.marienschule\.de|
307 peertube\.maxweiss\.io|
308 peertube\.miguelcr\.me|
309 peertube\.mikemestnik\.net|
310 peertube\.mobilsicher\.de|
311 peertube\.monlycee\.net|
312 peertube\.mxinfo\.fr|
314 peertube\.netzbegruenung\.de|
315 peertube\.nicolastissot\.fr|
316 peertube\.nogafam\.fr|
317 peertube\.normalgamingcommunity\.cz|
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|
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|
343 peertube\.skorpil\.cz|
344 peertube\.smertrios\.com|
345 peertube\.sqweeb\.net|
346 peertube\.stattzeitung\.org|
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|
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|
367 peertube\.wiesbaden\.social|
368 peertube\.wivodaim\.net|
370 peertube\.wtfayla\.net|
372 peertube\.xwiki\.com|
374 peertube\.zetamc\.net|
375 peertube\.zmuuf\.org|
376 peertube\.zoz-serv\.org|
377 peertube\.zwindler\.fr|
379 periscope\.numenaute\.org|
381 petitlutinartube\.fr|
383 phoenixproject\.group|
388 player\.ojamajo\.moe|
390 portal\.digilab\.nfa\.cz|
391 private\.fedimovie\.com|
392 pt01\.lehrerfortbildung-bw\.de|
395 pt\.gordons\.gen\.nz|
396 pt\.ilyamikcoder\.com|
403 pt\.thishorsie\.rocks|
405 ptb\.lunarviews\.net|
407 ptube\.ranranhome\.info|
414 review\.peertube\.biz|
416 secure\.direct-live\.net|
417 secure\.scanovid\.com|
419 serv3\.wiki-tube\.de|
421 social\.fedimovie\.com|
424 special\.videovortex\.tv|
426 stl1988\.peertube-host\.de|
427 stream\.biovisata\.lt|
428 stream\.conesphere\.cloud|
430 stream\.jurnalfm\.md|
432 stream\.litera\.tools|
433 stream\.nuemedia\.se|
434 stream\.rlp-media\.de|
436 studios\.racer159\.com|
437 styxhexenhammer666\.com|
438 syrteplay\.obspm\.fr|
440 tbh\.co-shaoghal\.net|
442 testube\.distrilab\.fr|
443 tgi\.hosted\.spacebear\.ee|
444 theater\.ethernia\.net|
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|
465 tube\.abolivier\.bzh|
468 tube\.area404\.cloud|
471 tube\.awkward\.company|
474 tube\.bartrip\.me\.uk|
475 tube\.belowtoxic\.media|
477 tube\.bit-friends\.de|
483 tube\.cybershock\.life|
485 tube\.dev\.displ\.eu|
486 tube\.digitalesozialearbeit\.de|
488 tube\.doortofreedom\.org|
489 tube\.dsocialize\.net|
493 tube\.erzbistum-hamburg\.de|
501 tube\.freepeople\.fr|
511 tube\.ghk-academy\.info|
518 tube\.interhacker\.space|
529 tube\.lacaveatonton\.ovh|
530 tube\.laurent-malys\.fr|
531 tube\.leetdreams\.ch|
534 tube\.lucie-philou\.com|
535 tube\.media-techport\.de|
539 tube\.network\.europa\.eu|
541 tube\.nieuwwestbrabant\.nl|
545 tube\.nuagelibre\.fr|
546 tube\.numerique\.gouv\.fr|
552 tube\.onlinekirche\.net|
553 tube\.opportunis\.me|
554 tube\.oraclefilms\.com|
560 tube\.pilgerweg-21\.de|
563 tube\.ponsonaille\.fr|
564 tube\.portes-imaginaire\.org|
565 tube\.public\.apolut\.net|
568 tube\.querdenken-711\.de|
569 tube\.rebellion\.global|
570 tube\.reseau-canope\.fr|
571 tube\.rhythms-of-resistance\.org|
576 tube\.schleuss\.online|
577 tube\.schule\.social|
578 tube\.sekretaerbaer\.net|
582 tube\.sleeping\.town|
585 tube\.systerserver\.net|
589 tube\.thierrytalbert\.fr|
590 tube\.tinfoil-hat\.net|
594 tube\.troopers\.agency|
597 tube\.tylerdavis\.xyz|
604 tube\.xn--baw-joa\.social|
608 tubulus\.openlatin\.org|
616 tv\.farewellutopia\.com|
617 tv\.filmfreedom\.net|
621 tv\.pirateradio\.social|
623 tv\.santic-zombie\.ru|
627 twctube\.twc-zone\.eu|
645 vid\.nocogabriel\.fr|
647 vid\.northbound\.online|
649 vid\.plantplotting\.co\.uk|
651 vid\.prometheus\.systems|
658 video\.1146\.nohost\.me|
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|
669 video\.beyondwatts\.social|
670 video\.bgeneric\.net|
671 video\.bilecik\.edu\.tr|
672 video\.blast-info\.fr|
675 video\.causa-arcana\.com|
676 video\.chasmcity\.net|
678 video\.cigliola\.com|
680 video\.clumsy\.computer|
681 video\.cnnumerique\.fr|
685 video\.comune\.trento\.it|
689 video\.davejansen\.com|
690 video\.dlearning\.nl|
692 video\.dresden\.network|
696 video\.ellijaymakerspace\.org|
697 video\.emergeheart\.info|
698 video\.eradicatinglove\.xyz|
699 video\.everythingbagel\.me|
700 video\.extremelycorporate\.ca|
701 video\.fabiomanganiello\.com|
704 video\.firehawk-systems\.com|
705 video\.fox-romka\.ru|
707 video\.glassbeadcollective\.org|
708 video\.graine-pdl\.org|
711 video\.hardlimit\.com|
714 video\.infojournal\.fr|
715 video\.internet-czas-dzialac\.pl|
718 video\.ironsysadmin\.com|
719 video\.islameye\.com|
722 video\.jeffmcbride\.net|
723 video\.jigmedatse\.com|
724 video\.kuba-orlik\.name|
725 video\.lacalligramme\.fr|
726 video\.lanceurs-alerte\.fr|
728 video\.lapineige\.fr|
729 video\.laraffinerie\.re|
733 video\.licentia\.net|
734 video\.linc\.systems|
736 video\.linuxtrent\.it|
737 video\.liveitlive\.show|
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|
759 video\.off-investigation\.fr|
761 video\.ordinobsolete\.fr|
763 video\.ourcommon\.cloud|
764 video\.ozgurkon\.org|
769 video\.publicspaces\.net|
770 video\.pullopen\.xyz|
772 video\.rainevixen\.com|
773 video\.resolutions\.it|
774 video\.retroedge\.tech|
776 video\.rlp-media\.de|
777 video\.rs-einrich\.de|
781 video\.shitposter\.club|
782 video\.simplex-software\.ru|
785 video\.software-fuer-engagierte\.de|
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|
797 video\.trankil\.info|
801 video\.uriopss-pdl\.fr|
804 video\.vaku\.org\.ua|
805 video\.vegafjord\.me|
807 video\.violoncello\.ch|
808 video\.voidconspiracy\.band|
810 video\.windfluechter\.org|
812 videos-passages\.huma-num\.fr|
814 videos\.ahp-numerique\.fr|
815 videos\.alamaisondulibre\.org|
816 videos\.archigny\.net|
817 videos\.aroaduntraveled\.com|
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|
832 videos\.gamercast\.net|
833 videos\.gianmarco\.gg|
834 videos\.globenet\.org|
838 videos\.hyphalfusion\.network|
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|
852 videos\.offroad\.town|
853 videos\.openmandriva\.org|
854 videos\.parleur\.net|
856 videos\.pop\.eu\.com|
858 videos\.rauten\.co\.za|
860 videos\.sarcasmstardust\.com|
861 videos\.scanlines\.xyz|
863 videos\.stadtfabrikanten\.org|
864 videos\.supertuxkart\.net|
865 videos\.testimonia\.org|
866 videos\.thinkerview\.com|
867 videos\.torrenezzi10\.xyz|
869 videos\.utsukta\.org|
870 videos\.viorsan\.com|
871 videos\.wherelinux\.xyz|
872 videos\.wikilibriste\.fr|
874 videos\.yeswiki\.net|
875 videotube\.duckdns\.org|
882 virtual-girls-are\.definitely-for\.me|
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|
897 watch\.thelema\.social|
898 watch\.tubelab\.video|
900 webtv\.vandoeuvre\.net|
904 wow\.such\.disappointment\.fail|
911 www\.rocaguinarda\.tv|
913 xxivproduction\.video|
915 ytube\.retronerd\.at|
919 peertube\.rainbowswingers\.net|
923 videomensoif\.ynh\.fr|
924 peertube\.travelpandas\.eu|
925 peertube\.rachetjay\.fr|
926 peertube\.montecsys\.fr|
929 peertube\.umeahackerspace\.se|
931 video\.monsieurbidouille\.fr|
932 tube\.openalgeria\.org|
934 video\.anormallostpod\.ovh|
935 tube\.crapaud-fou\.org|
939 peertube\.snargol\.com|
944 peertube\.osureplayviewer\.xyz|
945 peertube\.mathieufamily\.ovh|
946 www\.videos-libr\.es|
948 peertube\.fediverse\.ru|
949 peertube\.oiseauroch\.fr|
957 peertube\.chantierlibre\.org|
963 videos\.elbinario\.net|
969 peertube\.gnumeria\.eu\.org|
973 tube\.kalah-france\.org|
977 peertube\.hatthieves\.es|
978 video\.fitchfamily\.org|
982 tube\.22decembre\.eu|
983 peertube\.harmoniescreatives\.com|
985 video\.thedwyers\.co|
986 video\.bruitbruit\.com|
987 peertube\.foxfam\.club|
989 videos\.bugs\.social|
990 peertube\.malbert\.xyz|
991 peertube\.bilange\.ca|
994 peertube\.fedilab\.app|
996 video\.mstddntfdn\.online|
998 peertube\.sl-network\.fr|
999 peertube\.dynlinux\.io|
1000 peertube\.david\.durieux\.family|
1001 peertube\.linuxrocks\.online|
1003 v\.kretschmann\.social|
1006 tube\.dragonpsi\.xyz|
1007 peertube\.boneheadmedia\.com|
1008 videos\.funkwhale\.audio|
1010 peertube\.gcaillaut\.fr|
1017 peertube\.simounet\.net|
1018 play\.jergefelt\.se|
1019 peertube\.zeteo\.me|
1021 peertube\.kerenon\.com|
1023 tube\.calculate\.social|
1024 peertube\.mckillop\.org|
1025 tube\.netzspielplatz\.de|
1029 peertube\.stephenson\.cc|
1030 bistule\.nohost\.me|
1031 peertube\.kajalinifi\.de|
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|
1042 tube\.worldofhauru\.xyz|
1044 peertube\.teleassist\.fr|
1045 videos\.mleduc\.xyz|
1047 media\.privacyinternational\.org|
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|
1057 peertube\.zergy\.net|
1058 peertube\.roflcopter\.fr|
1059 peertube\.floss-marketing-school\.com|
1061 peertube\.iriseden\.eu|
1062 videos\.ubuntu-paris\.org|
1063 peertube\.mastodon\.host|
1065 peertube\.s2s\.video|
1067 tube\.open-plug\.eu|
1070 peertube\.normandie-libre\.fr|
1071 peertube\.slat\.org|
1072 video\.lacaveatonton\.ovh|
1074 peertube\.servebeer\.com|
1075 peertube\.fedi\.quebec|
1078 peertube\.eric\.ovh|
1080 tube\.unmondemeilleur\.eu|
1082 video\.antirep\.net|
1087 video\.devinberg\.com|
1089 peertube\.kosebamse\.com|
1090 yunopeertube\.myddns\.me|
1091 peertube\.varney\.fr|
1092 peertube\.anon-kenkai\.com|
1095 videos\.dinofly\.com|
1099 video\.heromuster\.com|
1100 video\.lemediatv\.fr|
1105 pt\.laurentkruger\.fr|
1106 video\.monarch-pass\.net|
1107 peertube\.artica\.center|
1108 video\.alternanet\.fr|
1110 fanvid\.stopthatimp\.net|
1115 peertube\.mablr\.org|
1119 devtube\.dev-wiki\.de|
1120 raptube\.antipub\.org|
1122 peertube\.mygaia\.org|
1124 peertube\.livingutopia\.org|
1125 peertube\.the-penguin\.de|
1126 tube\.thechangebook\.org|
1130 mplayer\.demouliere\.eu|
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|
1141 video\.cabane-libre\.org|
1142 peertube\.openstreetmap\.fr|
1143 videos\.alolise\.org|
1145 video\.antopie\.org|
1149 peertube\.freeforge\.eu|
1150 video\.arbitrarion\.com|
1151 video\.datsemultimedia\.com|
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|
1166 peertube\.metawurst\.space|
1167 videos\.wakapo\.com|
1169 video\.freeradical\.zone|
1172 pt\.kircheneuenburg\.de|
1173 peertube\.asrun\.eu|
1174 peertube\.lagob\.fr|
1175 videos\.side-ways\.net|
1178 video\.taboulisme\.com|
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|
1189 ptube\.rousset\.nom\.fr|
1192 video\.iphodase\.fr|
1193 peertube\.makotoworkshop\.org|
1194 peertube\.serveur\.slv-valbonne\.fr|
1197 videos\.hack2g2\.fr|
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|
1209 peertube\.librelabucm\.org|
1210 videos\.numericoop\.fr|
1211 peertube\.koehn\.com|
1212 peertube\.anarchmusicall\.net|
1213 tube\.kampftoast\.de|
1215 peertube\.xtenz\.xyz|
1218 peertube\.nomagic\.uk|
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|
1231 peertube\.donnadieu\.fr|
1232 argos\.aquilenet\.fr|
1235 videos\.darckoune\.moe|
1236 tube\.traydent\.info|
1237 dev\.videos\.lecygnenoir\.info|
1238 peertube\.nayya\.org|
1240 peertube\.mofgao\.space|
1241 video\.lequerrec\.eu|
1242 peertube\.amicale\.net|
1249 choob\.h\.etbus\.ch|
1251 peertube\.heberge\.fr|
1253 videos\.cloudfrancois\.fr|
1257 video\.blender\.org|
1262 videos\.lescommuns\.org|
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|
1273 video\.blueline\.mg|
1274 tube\.homecomputing\.fr|
1275 tube\.ouahpiti\.info|
1276 video\.tedomum\.net|
1279 peertube\.gaialabs\.ch|
1282 video\.migennes\.net|
1285 videos\.iut-orsay\.fr|
1286 peertube\.solidev\.net|
1288 video\.passageenseine\.fr|
1289 videos\.festivalparminous\.org|
1290 peertube\.touhoppai\.moe|
1292 peer\.hostux\.social|
1294 peertube\.walkingmountains\.fr|
1296 peertube\.parleur\.net|
1297 peertube\.heraut\.eu|
1298 tube\.aquilenet\.fr|
1299 peertube\.gegeweb\.eu|
1302 tube\.conferences-gesticulees\.net|
1303 peertube\.datagueule\.tv|
1305 tube\.mochi\.academy|
1307 video\.colibris-outilslibres\.org|
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)
1320 peertube:(?P<host>[^:]+):|
1321 https?://(?P<host_2>{_INSTANCES_RE})/(?:videos/(?:watch|embed)|api/v\d/videos|w)/
1325 _EMBED_REGEX
= [r
'''(?x)<iframe[^>]+\bsrc=["\'](?P
<url
>(?
:https?
:)?
//{_INSTANCES_RE}
/videos
/embed
/{cls
._UUID
_RE
})''']
1327 'url': 'https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d',
1328 'md5': '8563064d245a4be5705bddb22bb00a28',
1330 'id': '9c9de5e8-0a1e-484a-b099-e80766180a6d',
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',
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',
1344 'license': 'Attribution - Share Alike',
1348 'dislike_count': int,
1349 'tags': ['framasoft', 'peertube'],
1350 'categories': ['Science & Technology'],
1353 'url': 'https://peertube2.cpy.re/w/122d093a-1ede-43bd-bd34-59d2931ffc5e',
1355 'id': '122d093a-1ede-43bd-bd34-59d2931ffc5e',
1357 'title': 'E2E tests',
1358 'uploader_id': '37855',
1359 'timestamp': 1589276219,
1360 'upload_date': '20200512',
1361 'uploader': 'chocobozzz',
1364 'url': 'https://peertube2.cpy.re/w/3fbif9S3WmtTP8gGsC5HBd',
1366 'id': '3fbif9S3WmtTP8gGsC5HBd',
1368 'title': 'E2E tests',
1369 'uploader_id': '37855',
1370 'timestamp': 1589276219,
1371 'upload_date': '20200512',
1372 'uploader': 'chocobozzz',
1375 'url': 'https://peertube2.cpy.re/api/v1/videos/3fbif9S3WmtTP8gGsC5HBd',
1377 'id': '3fbif9S3WmtTP8gGsC5HBd',
1379 'title': 'E2E tests',
1380 'uploader_id': '37855',
1381 'timestamp': 1589276219,
1382 'upload_date': '20200512',
1383 'uploader': 'chocobozzz',
1387 'url': 'peertube:spacepub.space:d8943b2d-8280-497b-85ec-bc282ec2afdc',
1389 'id': 'd8943b2d-8280-497b-85ec-bc282ec2afdc',
1391 'title': 'Dot matrix printer shell demo',
1393 'timestamp': 1587401293,
1394 'upload_date': '20200420',
1395 'uploader': 'Drew DeVault',
1398 'url': 'https://peertube.debian.social/videos/watch/0b04f13d-1e18-4f1d-814e-4979aa7c9c44',
1399 'only_matching': True,
1402 'url': 'https://vod.ksite.de/videos/watch/9bb88cd3-9959-46d9-9ab9-33d2bb704c39',
1403 'only_matching': True,
1405 'url': 'https://vod.ksite.de/videos/embed/fed67262-6edb-4d1c-833b-daa9085c71d7',
1406 'only_matching': True,
1408 'url': 'https://peertube.tv/api/v1/videos/c1875674-97d0-4c94-a058-3f7e64c962e8',
1409 'only_matching': True,
1411 'url': 'peertube:framatube.org:b37a5b9f-e6b5-415c-b700-04a5cd6ec205',
1412 'only_matching': True,
1416 def _extract_peertube_url(webpage, source_url):
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"',
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'))
1427 def _extract_embed_urls(cls, url, webpage):
1428 embeds = tuple(super()._extract_embed_urls(url, webpage))
1432 peertube_url = cls._extract_peertube_url(webpage, url)
1434 return [peertube_url]
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)
1441 def _get_subtitles(self, host, video_id):
1442 captions = self._call_api(
1443 host, video_id, 'captions', note='Downloading captions JSON',
1445 if not isinstance(captions, dict):
1447 data = captions.get('data')
1448 if not isinstance(data, list):
1452 language_id = try_get(e, lambda x: x['language']['id'], str)
1453 caption_url = urljoin(f'https://{host}', e.get('captionPath'))
1456 subtitles.setdefault(language_id or 'en', []).append({
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')
1466 video = self._call_api(
1467 host, video_id, '', note='Downloading video JSON')
1469 title = video['name']
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):
1476 if playlist_url := url_or_none(playlist.get('playlistUrl')):
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)):
1483 files.extend(playlist_files)
1485 if not isinstance(file_, dict):
1487 file_url = url_or_none(file_.get('fileUrl'))
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)
1496 'format_id': format_id,
1497 'filesize': file_size,
1499 if format_id == '0p':
1500 f['vcodec'] = 'none'
1502 f['fps'] = int_or_none(file_.get('fps'))
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',
1513 if isinstance(full_description, dict):
1514 description = str_or_none(full_description.get('description')) or description
1516 subtitles = self.extract_subtitles(host, video_id)
1518 def data(section, field, type_):
1519 return try_get(video, lambda x: x[section][field], type_)
1521 def account_data(field, type_):
1522 return data('account', field, type_)
1524 def channel_data(field, type_):
1525 return data('channel', field, type_)
1527 category = data('category', 'label', str)
1528 categories = [category] if category else None
1530 nsfw = video.get('nsfw')
1532 age_limit = 18 if nsfw else 0
1536 webpage_url = f'https://{host}/videos/watch/{video_id}'
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,
1560 'subtitles': subtitles,
1562 'webpage_url': webpage_url,
1566 class PeerTubePlaylistIE(InfoExtractor):
1567 IE_NAME = 'PeerTube:Playlist'
1570 'c': 'video-channels',
1571 'w/p': 'video-playlists',
1573 _VALID_URL = r'''(?x
)
1574 https?
://(?P
<host
>{})/(?P
<type>(?
:{}))/
1576 '''.format(PeerTubeIE._INSTANCES_RE, '|'.join(_TYPES.keys()))
1578 'url': 'https://peertube.debian.social/w/p/hFdJoTuyhNJVa1cDWd1d12',
1580 'id': 'hFdJoTuyhNJVa1cDWd1d12',
1581 'description': 'Diversas palestras do Richard Stallman no Brasil.',
1582 'title': 'Richard Stallman no Brasil',
1583 'timestamp': 1599676222,
1585 'playlist_mincount': 9,
1587 'url': 'https://peertube2.cpy.re/a/chocobozzz/videos',
1590 'timestamp': 1553874564,
1591 'title': 'chocobozzz',
1593 'playlist_mincount': 2,
1595 'url': 'https://framatube.org/c/bf54d359-cfad-4935-9d45-9d6be93f63e8/videos',
1597 'id': 'bf54d359-cfad-4935-9d45-9d6be93f63e8',
1598 'timestamp': 1519917377,
1599 'title': 'Les vidéos de Framasoft',
1601 'playlist_mincount': 345,
1603 'url': 'https://peertube2.cpy.re/c/blender_open_movies@video.blender.org/videos',
1605 'id': 'blender_open_movies@video.blender.org',
1606 'timestamp': 1542287810,
1607 'title': 'Official Blender Open Movies',
1609 'playlist_mincount': 11,
1611 _API_BASE = 'https://%s/api/v1/%s/%s%s'
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)
1618 def fetch_page(self, host, playlist_id, playlist_type, page):
1620 video_data = self.call_api(
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)
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)
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')
1641 entries = OnDemandPagedList(functools.partial(
1642 self.fetch_page, host, playlist_id, playlist_type), self._PAGE_SIZE)
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)
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)