j1-template 2024.3.17 → 2024.3.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (610) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_collection.html +1 -1
  3. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +1 -1
  4. data/_includes/themes/j1/layouts/content_generator_page.html +1 -1
  5. data/_includes/themes/j1/layouts/content_generator_post.html +1 -1
  6. data/_includes/themes/j1/layouts/content_generator_raw.html +1 -1
  7. data/_includes/themes/j1/layouts/layout_metadata_generator.html +1 -1
  8. data/_includes/themes/j1/layouts/layout_module_generator.html +1 -1
  9. data/_includes/themes/j1/layouts/layout_resource_generator.html +1 -1
  10. data/_includes/themes/j1/modules/attics/generator.html +1 -1
  11. data/_includes/themes/j1/modules/navigator/generator.html +1 -1
  12. data/_includes/themes/j1/modules/searcher/generator.html +1 -1
  13. data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +1 -1
  14. data/_includes/themes/j1/procedures/blocks/footer/boxes/about_box.proc +1 -1
  15. data/_includes/themes/j1/procedures/blocks/footer/boxes/contacts_box.proc +1 -1
  16. data/_includes/themes/j1/procedures/blocks/footer/boxes/issue.proc +1 -1
  17. data/_includes/themes/j1/procedures/blocks/footer/boxes/legal_statements.proc +1 -1
  18. data/_includes/themes/j1/procedures/blocks/footer/boxes/links_box.proc +1 -1
  19. data/_includes/themes/j1/procedures/blocks/footer/boxes/news_box.proc +1 -1
  20. data/_includes/themes/j1/procedures/blocks/footer/boxes/social_media_icons.proc +1 -1
  21. data/_includes/themes/j1/procedures/blocks/get_wave.proc +1 -1
  22. data/_includes/themes/j1/procedures/collections/create_collection_article_preview.proc +1 -1
  23. data/_includes/themes/j1/procedures/collections/pager.proc +1 -1
  24. data/_includes/themes/j1/procedures/global/attributes_loader.proc +1 -1
  25. data/_includes/themes/j1/procedures/global/collect_frontmatter_options.proc +1 -1
  26. data/_includes/themes/j1/procedures/global/collect_page_options.proc +1 -1
  27. data/_includes/themes/j1/procedures/global/create_bs_button.proc +1 -1
  28. data/_includes/themes/j1/procedures/global/create_word_cloud.proc +1 -1
  29. data/_includes/themes/j1/procedures/global/date-german.proc +1 -1
  30. data/_includes/themes/j1/procedures/global/get_category.proc +1 -1
  31. data/_includes/themes/j1/procedures/global/get_category_item.proc +1 -1
  32. data/_includes/themes/j1/procedures/global/get_documents_dir.proc +1 -1
  33. data/_includes/themes/j1/procedures/global/get_page_path.proc +1 -1
  34. data/_includes/themes/j1/procedures/global/get_page_url.proc +1 -1
  35. data/_includes/themes/j1/procedures/global/select_color.proc +1 -1
  36. data/_includes/themes/j1/procedures/global/select_font_size.proc +1 -1
  37. data/_includes/themes/j1/procedures/global/select_icon_size.proc +1 -1
  38. data/_includes/themes/j1/procedures/global/select_location.proc +1 -1
  39. data/_includes/themes/j1/procedures/global/set_base_vars_folders.proc +1 -1
  40. data/_includes/themes/j1/procedures/global/set_env_entry_document.proc +1 -1
  41. data/_includes/themes/j1/procedures/global/set_image_block.proc +1 -1
  42. data/_includes/themes/j1/procedures/global/setup.proc +1 -1
  43. data/_includes/themes/j1/procedures/layouts/content_writer.proc +1 -1
  44. data/_includes/themes/j1/procedures/layouts/default_writer.proc +1 -1
  45. data/_includes/themes/j1/procedures/layouts/module_writer.proc +1 -1
  46. data/_includes/themes/j1/procedures/layouts/resource_writer.proc +1 -1
  47. data/_includes/themes/j1/procedures/posts/collate_calendar.proc +1 -1
  48. data/_includes/themes/j1/procedures/posts/collate_list.proc +1 -1
  49. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +1 -1
  50. data/_includes/themes/j1/procedures/posts/create_ad_block.proc +1 -1
  51. data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
  52. data/_includes/themes/j1/procedures/posts/pager.proc +1 -1
  53. data/_layouts/autopage_category.html +1 -1
  54. data/_layouts/autopage_collection.html +1 -1
  55. data/_layouts/autopage_collections_tags.html +1 -1
  56. data/_layouts/autopage_tags.html +1 -1
  57. data/_layouts/collection.html +1 -1
  58. data/_layouts/compress.html +1 -1
  59. data/_layouts/default.html +1 -1
  60. data/_layouts/home.html +1 -1
  61. data/_layouts/news_panel_posts.html +1 -1
  62. data/_layouts/page.html +1 -1
  63. data/_layouts/post.html +1 -1
  64. data/_layouts/raw.html +1 -1
  65. data/apps/public/cc/cc.yml +1 -1
  66. data/assets/data/amplitude.html +5 -5
  67. data/assets/data/authclient.html +1 -1
  68. data/assets/data/banner.html +1 -1
  69. data/assets/data/carousel.json +1 -1
  70. data/assets/data/cookieconsent.html +1 -1
  71. data/assets/data/docsearch.html +1 -1
  72. data/assets/data/fab.html +1 -1
  73. data/assets/data/footer.html +1 -1
  74. data/assets/data/galeries.html +1 -1
  75. data/assets/data/gallery_customizer.html +1 -1
  76. data/assets/data/gemini-ui.html +1 -1
  77. data/assets/data/iframes.html +1 -1
  78. data/assets/data/iso-3166-country-codes.json +1 -1
  79. data/assets/data/iso-639-language-codes.json +1 -1
  80. data/assets/data/j1_config.json +1 -1
  81. data/assets/data/masonry.html +1 -1
  82. data/assets/data/masterslider.html +1 -1
  83. data/assets/data/mdi_icons.json +1 -1
  84. data/assets/data/mdil_icons.json +1 -1
  85. data/assets/data/menu.html +1 -1
  86. data/assets/data/mmenu.html +1 -1
  87. data/assets/data/mmenu_sidebar.html +1 -1
  88. data/assets/data/mmenu_toc.html +1 -1
  89. data/assets/data/panel.html +1 -1
  90. data/assets/data/particles.yml +1 -1
  91. data/assets/data/private.json +1 -1
  92. data/assets/data/quicklinks.html +1 -1
  93. data/assets/data/rtext_resizer.html +1 -1
  94. data/assets/data/slick.html +1 -1
  95. data/assets/data/speak2me.html +1 -1
  96. data/assets/data/swiper.html +137 -206
  97. data/assets/data/swiper.json +84 -0
  98. data/assets/data/themes.bootswatch.json +1 -1
  99. data/assets/data/themes.json +1 -1
  100. data/assets/data/translator.html +1 -1
  101. data/assets/error_pages/HTTP204.html +1 -1
  102. data/assets/error_pages/HTTP400.html +1 -1
  103. data/assets/error_pages/HTTP401.html +1 -1
  104. data/assets/error_pages/HTTP403.html +1 -1
  105. data/assets/error_pages/HTTP404.html +1 -1
  106. data/assets/error_pages/HTTP444.html +1 -1
  107. data/assets/error_pages/HTTP445.html +1 -1
  108. data/assets/error_pages/HTTP446.html +1 -1
  109. data/assets/error_pages/HTTP447.html +1 -1
  110. data/assets/error_pages/HTTP448.html +1 -1
  111. data/assets/error_pages/HTTP500.html +1 -1
  112. data/assets/error_pages/HTTP501.html +1 -1
  113. data/assets/error_pages/HTTP502.html +1 -1
  114. data/assets/error_pages/HTTP503.html +1 -1
  115. data/assets/theme/j1/adapter/js/advertising.js +2 -2
  116. data/assets/theme/j1/adapter/js/algolia.js +2 -2
  117. data/assets/theme/j1/adapter/js/amplitude.30.js +2 -2
  118. data/assets/theme/j1/adapter/js/amplitude.js +35 -33
  119. data/assets/theme/j1/adapter/js/analytics.js +2 -2
  120. data/assets/theme/j1/adapter/js/asciidoctor.js +2 -2
  121. data/assets/theme/j1/adapter/js/attic.js +2 -2
  122. data/assets/theme/j1/adapter/js/bmd.js +2 -2
  123. data/assets/theme/j1/adapter/js/carousel.js +2 -2
  124. data/assets/theme/j1/adapter/js/chatbot.js +2 -2
  125. data/assets/theme/j1/adapter/js/clipboard.js +2 -2
  126. data/assets/theme/j1/adapter/js/comments.js +2 -2
  127. data/assets/theme/j1/adapter/js/cookieConsent.js +2 -2
  128. data/assets/theme/j1/adapter/js/customFunctions.js +2 -2
  129. data/assets/theme/j1/adapter/js/customModule.js +2 -2
  130. data/assets/theme/j1/adapter/js/docsearch.js +2 -2
  131. data/assets/theme/j1/adapter/js/dropdowns.js +2 -2
  132. data/assets/theme/j1/adapter/js/fab.js +2 -2
  133. data/assets/theme/j1/adapter/js/gallery.js +2 -2
  134. data/assets/theme/j1/adapter/js/gemini.js +2 -2
  135. data/assets/theme/j1/adapter/js/iconPicker.js +2 -2
  136. data/assets/theme/j1/adapter/js/iconPickerPage.js +2 -2
  137. data/assets/theme/j1/adapter/js/iframer.js +2 -2
  138. data/assets/theme/j1/adapter/js/j1.js +2 -2
  139. data/assets/theme/j1/adapter/js/lazyLoader.js +2 -2
  140. data/assets/theme/j1/adapter/js/lightbox.js +2 -2
  141. data/assets/theme/j1/adapter/js/logger.js +2 -2
  142. data/assets/theme/j1/adapter/js/lunr.js +2 -2
  143. data/assets/theme/j1/adapter/js/masonry.js +2 -2
  144. data/assets/theme/j1/adapter/js/masterslider.js +2 -2
  145. data/assets/theme/j1/adapter/js/mmenu.js +2 -2
  146. data/assets/theme/j1/adapter/js/navigator.js +2 -2
  147. data/assets/theme/j1/adapter/js/particles.js +2 -2
  148. data/assets/theme/j1/adapter/js/rangeSlider.js +2 -2
  149. data/assets/theme/j1/adapter/js/rouge.js +2 -2
  150. data/assets/theme/j1/adapter/js/rtable.js +2 -2
  151. data/assets/theme/j1/adapter/js/rtextResizer.js +2 -2
  152. data/assets/theme/j1/adapter/js/scroller.js +2 -2
  153. data/assets/theme/j1/adapter/js/slick.js +2 -2
  154. data/assets/theme/j1/adapter/js/slimSelect.js +2 -2
  155. data/assets/theme/j1/adapter/js/speak2me.js +2 -2
  156. data/assets/theme/j1/adapter/js/swiper.js +280 -8
  157. data/assets/theme/j1/adapter/js/themeToggler.js +2 -2
  158. data/assets/theme/j1/adapter/js/themes.js +2 -2
  159. data/assets/theme/j1/adapter/js/toccer.js +2 -2
  160. data/assets/theme/j1/adapter/js/translator.js +2 -2
  161. data/assets/theme/j1/adapter/js/videojs.js +2 -2
  162. data/assets/theme/j1/adapter/js/waves.js +2 -2
  163. data/assets/theme/j1/core/country-flags/css/theme/uno.css +1 -1
  164. data/assets/theme/j1/core/country-flags/css/theme/uno.min.css +1 -1
  165. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.css +1 -1
  166. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/amplitude.min.css +1 -1
  167. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.css +1 -1
  168. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/compact.min.css +1 -1
  169. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.css +1 -1
  170. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/large.min.css +1 -1
  171. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.css +1 -1
  172. data/assets/theme/j1/modules/amplitudejs/css/theme/uno/dark/player/mini.min.css +1 -1
  173. data/assets/theme/j1/modules/amplitudejs/js/amplitude.js +1 -1
  174. data/assets/theme/j1/modules/amplitudejs/js/amplitude.map +1 -1
  175. data/assets/theme/j1/modules/amplitudejs/js/amplitude.min.js +1 -1
  176. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.js +25 -22
  177. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.min.js +14 -0
  178. data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.js +1 -1
  179. data/assets/theme/j1/modules/amplitudejs/js/visualizations/bar.min.js +1 -1
  180. data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.js +1 -1
  181. data/assets/theme/j1/modules/amplitudejs/js/visualizations/circular-equalizer.min.js +1 -1
  182. data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.js +1 -1
  183. data/assets/theme/j1/modules/amplitudejs/js/visualizations/frequency-analyzer.min.js +1 -1
  184. data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.js +1 -1
  185. data/assets/theme/j1/modules/amplitudejs/js/visualizations/michael-bromley.min.js +1 -1
  186. data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.js +1 -1
  187. data/assets/theme/j1/modules/amplitudejs/js/visualizations/template.min.js +1 -1
  188. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/amplitude.scss +1 -1
  189. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/compact.scss +1 -1
  190. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/large.scss +1 -1
  191. data/assets/theme/j1/modules/amplitudejs/scss/theme/uno/dark/player/mini.scss +1 -1
  192. data/assets/theme/j1/modules/backstretch/js/backstretch.js +1 -1
  193. data/assets/theme/j1/modules/backstretch/js/backstretch.min.js +1 -1
  194. data/assets/theme/j1/modules/bmd/js/bmd.js +1 -1
  195. data/assets/theme/j1/modules/bmd/js/bmd.min.js +1 -1
  196. data/assets/theme/j1/modules/carousel/css/carousel.css +1 -1
  197. data/assets/theme/j1/modules/carousel/css/carousel.min.css +1 -1
  198. data/assets/theme/j1/modules/carousel/css/carousel_transitions.css +1 -1
  199. data/assets/theme/j1/modules/carousel/css/carousel_transitions.min.css +1 -1
  200. data/assets/theme/j1/modules/carousel/css/theme/uno.css +1 -1
  201. data/assets/theme/j1/modules/carousel/css/theme/uno.min.css +1 -1
  202. data/assets/theme/j1/modules/chatbot/css/theme/uno.css +1 -1
  203. data/assets/theme/j1/modules/chatbot/css/theme/uno.min.css +1 -1
  204. data/assets/theme/j1/modules/clipboard/css/theme/uno.css +1 -1
  205. data/assets/theme/j1/modules/clipboard/css/theme/uno.min.css +1 -1
  206. data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.js +1 -1
  207. data/assets/theme/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  208. data/assets/theme/j1/modules/dropdowns/css/theme/uno/dropdowns.css +1 -1
  209. data/assets/theme/j1/modules/dropdowns/css/theme/uno/dropdowns.min.css +1 -1
  210. data/assets/theme/j1/modules/dropdowns/js/cash.js +1 -1
  211. data/assets/theme/j1/modules/dropdowns/js/cash.min.js +1 -1
  212. data/assets/theme/j1/modules/dropdowns/js/dropdowns.js +1 -1
  213. data/assets/theme/j1/modules/dropdowns/js/dropdowns.min.js +1 -1
  214. data/assets/theme/j1/modules/fab/js/cash.js +1 -1
  215. data/assets/theme/j1/modules/fab/js/cash.min.js +1 -1
  216. data/assets/theme/j1/modules/fab/js/fab.js +1 -1
  217. data/assets/theme/j1/modules/fab/js/fab.min.js +1 -1
  218. data/assets/theme/j1/modules/gemini/css/theme/uno.css +1 -1
  219. data/assets/theme/j1/modules/gemini/css/theme/uno.min.css +1 -1
  220. data/assets/theme/j1/modules/gemini/js/gemini.js +1 -1
  221. data/assets/theme/j1/modules/gemini/js/gemini.min.js +1 -1
  222. data/assets/theme/j1/modules/iconPicker/css/theme/uno.css +1 -1
  223. data/assets/theme/j1/modules/iconPicker/css/theme/uno.min.css +1 -1
  224. data/assets/theme/j1/modules/iconPicker/css/universal-icon-picker.css +1 -1
  225. data/assets/theme/j1/modules/iconPicker/css/universal-icon-picker.min.css +1 -1
  226. data/assets/theme/j1/modules/iconPicker/js/universal-icon-picker.js +1 -1
  227. data/assets/theme/j1/modules/iconPicker/js/universal-icon-picker.min.js +1 -1
  228. data/assets/theme/j1/modules/j1LazyLoader/LICENSE +1 -1
  229. data/assets/theme/j1/modules/jquery/js/extensions/hasClass.js +1 -1
  230. data/assets/theme/j1/modules/jquery/js/extensions/hasClass.min.js +1 -1
  231. data/assets/theme/j1/modules/jquery/js/extensions/removeClass.js +1 -1
  232. data/assets/theme/j1/modules/jquery/js/extensions/removeClass.min.js +1 -1
  233. data/assets/theme/j1/modules/justifiedGallery/css/justifiedGallery.css +1 -1
  234. data/assets/theme/j1/modules/justifiedGallery/css/justifiedGallery.min.css +1 -1
  235. data/assets/theme/j1/modules/justifiedGallery/css/theme/uno.css +1 -1
  236. data/assets/theme/j1/modules/justifiedGallery/css/theme/uno.min.css +1 -1
  237. data/assets/theme/j1/modules/lazyCssLoader/js/main.0.js +1 -1
  238. data/assets/theme/j1/modules/lazyCssLoader/js/main.1.js +1 -1
  239. data/assets/theme/j1/modules/lazyCssLoader/js/main.js +1 -1
  240. data/assets/theme/j1/modules/lightGallery/css/lg-transitions.css +1 -1
  241. data/assets/theme/j1/modules/lightGallery/css/lg-transitions.min.css +1 -1
  242. data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.css +1 -1
  243. data/assets/theme/j1/modules/lightGallery/css/lightgallery-bundle.min.css +1 -1
  244. data/assets/theme/j1/modules/lightGallery/css/themes/uno/uno.css +1 -1
  245. data/assets/theme/j1/modules/lightGallery/css/themes/uno/uno.min.css +1 -1
  246. data/assets/theme/j1/modules/lightGallery/js/lightgallery.js +1 -1
  247. data/assets/theme/j1/modules/lightGallery/js/lightgallery.min.js +1 -1
  248. data/assets/theme/j1/modules/lightGallery/js/plugins/j1/j1-video.js +1 -1
  249. data/assets/theme/j1/modules/lightGallery/js/plugins/j1/j1-video.min.js +1 -1
  250. data/assets/theme/j1/modules/lightGallery/js/plugins/j1/lg-video.1.js +1 -1
  251. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.js +1 -1
  252. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-autoplay.min.js +1 -1
  253. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.js +1 -1
  254. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-comment.min.js +1 -1
  255. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.js +1 -1
  256. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-fullscreen.min.js +1 -1
  257. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.js +1 -1
  258. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-hash.min.js +1 -1
  259. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.js +1 -1
  260. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-medium-zoom.min.js +1 -1
  261. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.js +1 -1
  262. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-pager.min.js +1 -1
  263. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.js +1 -1
  264. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-rotate.min.js +1 -1
  265. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.js +1 -1
  266. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-share.min.js +1 -1
  267. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.js +1 -1
  268. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-thumbnail.min.js +1 -1
  269. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.js +1 -1
  270. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-video.min.js +1 -1
  271. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.js +1 -1
  272. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-vimeo-thumbnail.min.js +1 -1
  273. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.js +1 -1
  274. data/assets/theme/j1/modules/lightGallery/js/plugins/lg-zoom.min.js +1 -1
  275. data/assets/theme/j1/modules/lightbox/css/lightbox.css +1 -1
  276. data/assets/theme/j1/modules/lightbox/css/lightbox.min.css +1 -1
  277. data/assets/theme/j1/modules/lightbox/css/theme/uno.css +1 -1
  278. data/assets/theme/j1/modules/lightbox/css/theme/uno.min.css +1 -1
  279. data/assets/theme/j1/modules/lightbox/js/lightbox.js +1 -1
  280. data/assets/theme/j1/modules/lightbox/js/lightbox.min.js +1 -1
  281. data/assets/theme/j1/modules/lunr/css/theme/uno.css +1 -1
  282. data/assets/theme/j1/modules/lunr/css/theme/uno.min.css +1 -1
  283. data/assets/theme/j1/modules/lunr/js/j1.js +1 -1
  284. data/assets/theme/j1/modules/lunr/js/j1.min.js +1 -1
  285. data/assets/theme/j1/modules/masterslider/css/theme/uno.css +1 -1
  286. data/assets/theme/j1/modules/masterslider/css/theme/uno.min.css +1 -1
  287. data/assets/theme/j1/modules/mmenuLight/css/mmenu-light.css +1 -1
  288. data/assets/theme/j1/modules/mmenuLight/css/mmenu-light.min.css +1 -1
  289. data/assets/theme/j1/modules/mmenuLight/css/theme/uno/mmenu.css +1 -1
  290. data/assets/theme/j1/modules/mmenuLight/css/theme/uno/mmenu.min.css +1 -1
  291. data/assets/theme/j1/modules/mmenuLight/js/mmenu.js +1 -1
  292. data/assets/theme/j1/modules/mmenuLight/js/mmenu.min.js +1 -1
  293. data/assets/theme/j1/modules/msDropdown/css/flags.css +1 -1
  294. data/assets/theme/j1/modules/msDropdown/css/flags.min.css +1 -1
  295. data/assets/theme/j1/modules/msDropdown/css/msDropdown.css +1 -1
  296. data/assets/theme/j1/modules/msDropdown/css/msDropdown.min.css +1 -1
  297. data/assets/theme/j1/modules/msDropdown/css/themes/uno/msDropdown.css +1 -1
  298. data/assets/theme/j1/modules/msDropdown/css/themes/uno/msDropdown.min.css +1 -1
  299. data/assets/theme/j1/modules/msDropdown/js/msDropdown.js +1 -1
  300. data/assets/theme/j1/modules/msDropdown/js/msDropdown.min.js +1 -1
  301. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.css +3 -1
  302. data/assets/theme/j1/modules/photoswipe/css/photoswipe-caption-plugin.min.css +1 -1
  303. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.js +428 -0
  304. data/assets/theme/j1/modules/photoswipe/js/photoswipe-caption-plugin.min.js +17 -4
  305. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.js +7102 -0
  306. data/assets/theme/j1/modules/photoswipe/js/photoswipe-core.min.js +3 -3
  307. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.1.js +1990 -0
  308. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.js +1981 -0
  309. data/assets/theme/j1/modules/photoswipe/js/photoswipe-lightbox.min.js +1 -1
  310. data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.css +1 -1
  311. data/assets/theme/j1/modules/rangeSlider/css/theme/uno/nouislider.min.css +1 -1
  312. data/assets/theme/j1/modules/rouge/css/base16/theme.css +1 -1
  313. data/assets/theme/j1/modules/rouge/css/base16/theme.min.css +1 -1
  314. data/assets/theme/j1/modules/rouge/css/base16.dark/theme.css +1 -1
  315. data/assets/theme/j1/modules/rouge/css/base16.dark/theme.min.css +1 -1
  316. data/assets/theme/j1/modules/rouge/css/base16.light/theme.css +1 -1
  317. data/assets/theme/j1/modules/rouge/css/base16.light/theme.min.css +1 -1
  318. data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.css +1 -1
  319. data/assets/theme/j1/modules/rouge/css/base16.monokai/theme.min.css +1 -1
  320. data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.css +1 -1
  321. data/assets/theme/j1/modules/rouge/css/base16.monokai.dark/theme.min.css +1 -1
  322. data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.css +1 -1
  323. data/assets/theme/j1/modules/rouge/css/base16.monokai.light/theme.min.css +1 -1
  324. data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.css +1 -1
  325. data/assets/theme/j1/modules/rouge/css/base16.solarized/theme.min.css +1 -1
  326. data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.css +1 -1
  327. data/assets/theme/j1/modules/rouge/css/base16.solarized.dark/theme.min.css +1 -1
  328. data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.css +1 -1
  329. data/assets/theme/j1/modules/rouge/css/base16.solarized.light/theme.min.css +1 -1
  330. data/assets/theme/j1/modules/rouge/css/colorful/theme.css +1 -1
  331. data/assets/theme/j1/modules/rouge/css/colorful/theme.min.css +1 -1
  332. data/assets/theme/j1/modules/rouge/css/github/theme.css +1 -1
  333. data/assets/theme/j1/modules/rouge/css/github/theme.min.css +1 -1
  334. data/assets/theme/j1/modules/rouge/css/gruvbox/theme.css +1 -1
  335. data/assets/theme/j1/modules/rouge/css/gruvbox/theme.min.css +1 -1
  336. data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.css +1 -1
  337. data/assets/theme/j1/modules/rouge/css/gruvbox.dark/theme.min.css +1 -1
  338. data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.css +1 -1
  339. data/assets/theme/j1/modules/rouge/css/gruvbox.light/theme.min.css +1 -1
  340. data/assets/theme/j1/modules/rouge/css/igorpro/theme.css +1 -1
  341. data/assets/theme/j1/modules/rouge/css/igorpro/theme.min.css +1 -1
  342. data/assets/theme/j1/modules/rouge/css/molokai/theme.css +1 -1
  343. data/assets/theme/j1/modules/rouge/css/molokai/theme.min.css +1 -1
  344. data/assets/theme/j1/modules/rouge/css/monokai/theme.css +1 -1
  345. data/assets/theme/j1/modules/rouge/css/monokai/theme.min.css +1 -1
  346. data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.css +1 -1
  347. data/assets/theme/j1/modules/rouge/css/monokai.sublime/theme.min.css +1 -1
  348. data/assets/theme/j1/modules/rouge/css/pastie/theme.css +1 -1
  349. data/assets/theme/j1/modules/rouge/css/pastie/theme.min.css +1 -1
  350. data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.css +1 -1
  351. data/assets/theme/j1/modules/rouge/css/thankful_eyes/theme.min.css +1 -1
  352. data/assets/theme/j1/modules/rouge/css/themes.txt +1 -1
  353. data/assets/theme/j1/modules/rouge/css/tulip/theme.css +1 -1
  354. data/assets/theme/j1/modules/rouge/css/tulip/theme.min.css +1 -1
  355. data/assets/theme/j1/modules/rouge/css/uno.dark/theme.css +1 -1
  356. data/assets/theme/j1/modules/rouge/css/uno.dark/theme.min.css +1 -1
  357. data/assets/theme/j1/modules/rouge/css/uno.light/theme.css +1 -1
  358. data/assets/theme/j1/modules/rouge/css/uno.light/theme.min.css +1 -1
  359. data/assets/theme/j1/modules/rouge/js/select.js +1 -1
  360. data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.css +1 -1
  361. data/assets/theme/j1/modules/rtable/css/theme/uno/rtable.min.css +1 -1
  362. data/assets/theme/j1/modules/rtable/js/rtable.js +1 -1
  363. data/assets/theme/j1/modules/rtable/js/rtable.min.js +1 -1
  364. data/assets/theme/j1/modules/scroller/css/theme/uno.css +1 -1
  365. data/assets/theme/j1/modules/scroller/css/theme/uno.min.css +1 -1
  366. data/assets/theme/j1/modules/scroller/js/scroller.min.js +1 -1
  367. data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.css +1 -1
  368. data/assets/theme/j1/modules/slick/lightbox/css/theme/uno.min.css +1 -1
  369. data/assets/theme/j1/modules/slick/slider/css/theme/uno.css +1 -1
  370. data/assets/theme/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
  371. data/assets/theme/j1/modules/spinner/css/spin.css +1 -1
  372. data/assets/theme/j1/modules/spinner/css/spin.min.css +1 -1
  373. data/assets/theme/j1/modules/spinner/js/spin.js +1 -1
  374. data/assets/theme/j1/modules/spinner/js/spin.min.js +1 -1
  375. data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.css +53 -0
  376. data/assets/theme/j1/modules/swiper/css/modules/effectNeighbor.min.css +17 -0
  377. data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.css +26 -0
  378. data/assets/theme/j1/modules/swiper/css/modules/effectPanorama.min.css +17 -0
  379. data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.css +44 -0
  380. data/assets/theme/j1/modules/swiper/css/modules/effectThumbs.min.css +44 -0
  381. data/assets/theme/j1/modules/swiper/css/swiper-bundle.css +12 -6
  382. data/assets/theme/j1/modules/swiper/css/swiper-bundle.min..css +12 -6
  383. data/assets/theme/j1/modules/swiper/css/theme/uno.css +15 -35
  384. data/assets/theme/j1/modules/swiper/css/theme/uno.min.css +9 -19
  385. data/assets/theme/j1/modules/swiper/js/modules/!readme +3 -0
  386. data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.js +33 -0
  387. data/assets/theme/j1/modules/swiper/js/modules/effectNeighbor.min.js +33 -0
  388. data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.js +93 -0
  389. data/assets/theme/j1/modules/swiper/js/modules/effectPanorama.min.js +17 -0
  390. data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.js +113 -0
  391. data/assets/theme/j1/modules/swiper/js/modules/effectThumbs.min.js +33 -0
  392. data/assets/theme/j1/modules/swiper/js/swiper-bundle.js +12 -6
  393. data/assets/theme/j1/modules/swiper/js/swiper-bundle.min.js +12 -6
  394. data/assets/theme/j1/modules/themeSwitcher/js/switcher.js +1 -1
  395. data/assets/theme/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
  396. data/assets/theme/j1/modules/translator/css/translator.css +1 -1
  397. data/assets/theme/j1/modules/translator/css/translator.min.css +1 -1
  398. data/assets/theme/j1/modules/translator/js/translator.js +1 -1
  399. data/assets/theme/j1/modules/translator/js/translator.min.js +1 -1
  400. data/assets/theme/j1/modules/videoPlayer/vimeo/js/player.min.js +1 -1
  401. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.0.css +1 -1
  402. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.1.css +1 -1
  403. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.css +1 -1
  404. data/assets/theme/j1/modules/videojs/css/plugins/controls/skipbuttons.min.css +1 -1
  405. data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.css +1 -1
  406. data/assets/theme/j1/modules/videojs/css/plugins/controls/zoom.min.css +1 -1
  407. data/assets/theme/j1/modules/videojs/css/themes/uno.css +1 -1
  408. data/assets/theme/j1/modules/videojs/css/themes/uno.min.css +1 -1
  409. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.js +1 -1
  410. data/assets/theme/j1/modules/videojs/js/plugins/controls/autocaption/autocaption.min.js +1 -1
  411. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.js +1 -1
  412. data/assets/theme/j1/modules/videojs/js/plugins/controls/hotkeys/hotkeys.min.js +1 -1
  413. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.js +1 -1
  414. data/assets/theme/j1/modules/videojs/js/plugins/controls/skipbuttons/skipbuttons.min.js +1 -1
  415. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.js +1 -1
  416. data/assets/theme/j1/modules/videojs/js/plugins/controls/zoom/zoom.min.js +1 -1
  417. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.js +1 -1
  418. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/api/dailymotion.sdk.min.js +1 -1
  419. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.js +1 -1
  420. data/assets/theme/j1/modules/videojs/js/plugins/players/dm/dailymotion.min.js +1 -1
  421. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.js +1 -1
  422. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/api/vimeo.min.js +1 -1
  423. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.js +1 -1
  424. data/assets/theme/j1/modules/videojs/js/plugins/players/vm/vimeo.min.js +1 -1
  425. data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.js +1 -1
  426. data/assets/theme/j1/modules/videojs/js/plugins/players/wt/wistia.min.js +1 -1
  427. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/api/youtube.min.js +1 -1
  428. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.js +1 -1
  429. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/v3.0.0/youtube.min.js +1 -1
  430. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.js +1 -1
  431. data/assets/theme/j1/modules/videojs/js/plugins/players/yt/youtube.min.js +1 -1
  432. data/lib/j1/version.rb +1 -1
  433. data/lib/starter_web/Gemfile +1 -1
  434. data/lib/starter_web/README.md +5 -5
  435. data/lib/starter_web/_config.yml +2 -2
  436. data/lib/starter_web/_data/j1_config.yml +1 -1
  437. data/lib/starter_web/_data/modules/amplitude_players.yml +352 -0
  438. data/lib/starter_web/_data/modules/{amplitude.yml → amplitude_playlists.yml} +39 -356
  439. data/lib/starter_web/_data/modules/authentication.yml +1 -1
  440. data/lib/starter_web/_data/modules/defaults/swiper.yml +73 -413
  441. data/lib/starter_web/_data/modules/log4javascript.yml +1 -1
  442. data/lib/starter_web/_data/modules/navigator.yml +1 -1
  443. data/lib/starter_web/_data/modules/navigator_menu.yml +1 -1
  444. data/lib/starter_web/_data/modules/swiper.yml +567 -139
  445. data/lib/starter_web/_data/modules/swiper_playlists.yml +480 -0
  446. data/lib/starter_web/_data/private.yml +1 -1
  447. data/lib/starter_web/_data/resources.yml +234 -172
  448. data/lib/starter_web/_data/templates/feed.xml +1 -1
  449. data/lib/starter_web/_includes/custom/static/bs5_accordion.html +1 -1
  450. data/lib/starter_web/_includes/custom/templates/bs5_accordion.html +1 -1
  451. data/lib/starter_web/_includes/custom/templates/collection_panel.html +1 -1
  452. data/lib/starter_web/_includes/custom/templates/custom_header.html +1 -1
  453. data/lib/starter_web/_includes/custom/templates/people_panel.html +1 -1
  454. data/lib/starter_web/_includes/google/static/google_ad__your-slot-id.html +1 -1
  455. data/lib/starter_web/_includes/google/templates/google_ads.html +1 -1
  456. data/lib/starter_web/_plugins/asciidoctor/admonition-block-answer.rb +1 -1
  457. data/lib/starter_web/_plugins/asciidoctor/admonition-block-question.rb +1 -1
  458. data/lib/starter_web/_plugins/asciidoctor/amplitude-block.rb +1 -1
  459. data/lib/starter_web/_plugins/asciidoctor/banner.rb +1 -1
  460. data/lib/starter_web/_plugins/asciidoctor/callout.rb +1 -1
  461. data/lib/starter_web/_plugins/asciidoctor/carousel-block.rb +1 -1
  462. data/lib/starter_web/_plugins/asciidoctor/conum.rb +1 -1
  463. data/lib/starter_web/_plugins/asciidoctor/dailymotion-block.rb +1 -1
  464. data/lib/starter_web/_plugins/asciidoctor/fab-icon-inline.rb +1 -1
  465. data/lib/starter_web/_plugins/asciidoctor/fas-icon-inline.rb +1 -1
  466. data/lib/starter_web/_plugins/asciidoctor/flag-icon-inline.rb +1 -1
  467. data/lib/starter_web/_plugins/asciidoctor/gallery-block.rb +1 -1
  468. data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
  469. data/lib/starter_web/_plugins/asciidoctor/gist-block.rb +1 -1
  470. data/lib/starter_web/_plugins/asciidoctor/google-ad-block.rb +1 -1
  471. data/lib/starter_web/_plugins/asciidoctor/iconify-icon-inline.rb +1 -1
  472. data/lib/starter_web/_plugins/asciidoctor/iframe-block.rb +1 -1
  473. data/lib/starter_web/_plugins/asciidoctor/lightbox-block.rb +1 -1
  474. data/lib/starter_web/_plugins/asciidoctor/lorem_inline.rb +1 -1
  475. data/lib/starter_web/_plugins/asciidoctor/masonry-block.rb +1 -1
  476. data/lib/starter_web/_plugins/asciidoctor/masterslider-block.rb +1 -1
  477. data/lib/starter_web/_plugins/asciidoctor/mdi-icon-inline.rb +1 -1
  478. data/lib/starter_web/_plugins/asciidoctor/mdib-icon-inline.rb +1 -1
  479. data/lib/starter_web/_plugins/asciidoctor/mdil-icon-inline.rb +1 -1
  480. data/lib/starter_web/_plugins/asciidoctor/panel.rb +1 -1
  481. data/lib/starter_web/_plugins/asciidoctor/placeholder-inline.rb +1 -1
  482. data/lib/starter_web/_plugins/asciidoctor/range-slider-block.rb +1 -1
  483. data/lib/starter_web/_plugins/asciidoctor/shout-block.rb +1 -1
  484. data/lib/starter_web/_plugins/asciidoctor/slick-block.rb +1 -1
  485. data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +1 -1
  486. data/lib/starter_web/_plugins/asciidoctor/swiper-block.rb +55 -0
  487. data/lib/starter_web/_plugins/asciidoctor/textbook-block.rb +1 -1
  488. data/lib/starter_web/_plugins/asciidoctor/twitter-emoji-inline.rb +1 -1
  489. data/lib/starter_web/_plugins/asciidoctor/videojs-block.rb +1 -1
  490. data/lib/starter_web/_plugins/asciidoctor/vimeo-block.rb +1 -1
  491. data/lib/starter_web/_plugins/asciidoctor/wistia-block.rb +1 -1
  492. data/lib/starter_web/_plugins/asciidoctor/youtube-block.rb +1 -1
  493. data/lib/starter_web/_plugins/filter/debug.rb +1 -1
  494. data/lib/starter_web/_plugins/filter/encodeBase64.rb +1 -1
  495. data/lib/starter_web/_plugins/filter/encryptAES.rb +1 -1
  496. data/lib/starter_web/_plugins/filter/filters.rb +32 -1
  497. data/lib/starter_web/_plugins/filter/liquify.rb +1 -1
  498. data/lib/starter_web/_plugins/filter/minifyJS.rb +1 -1
  499. data/lib/starter_web/_plugins/filter/minifyJSON.rb +1 -1
  500. data/lib/starter_web/_plugins/filter/prettify.rb +1 -1
  501. data/lib/starter_web/_plugins/filter/xml_prettify.rb +1 -1
  502. data/lib/starter_web/_plugins/helper/symlink_watcher.rb +1 -1
  503. data/lib/starter_web/_plugins/i18n/date.rb +1 -1
  504. data/lib/starter_web/_plugins/index/lunr.rb +2 -2
  505. data/lib/starter_web/_plugins/seo/j1-feed.rb +1 -1
  506. data/lib/starter_web/_plugins/seo/j1-seo-tags.rb +1 -1
  507. data/lib/starter_web/_plugins/seo/j1-sitemap.rb +1 -1
  508. data/lib/starter_web/assets/image/icons/tv/Index of -tv-logos-.url +2 -0
  509. data/lib/starter_web/assets/image/icons/tv/TV from Germany - LyngSat Logo.url +2 -0
  510. data/lib/starter_web/assets/image/icons/tv/Zeichnung.svg +47 -0
  511. data/lib/starter_web/assets/image/icons/tv/ard-icon-16x16.ico +0 -0
  512. data/lib/starter_web/assets/image/icons/tv/ard-icon-24x24.png +0 -0
  513. data/lib/starter_web/assets/image/icons/tv/ard-icon-512x512.png +0 -0
  514. data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg +0 -0
  515. data/lib/starter_web/assets/image/icons/tv/ard-icon.jpg (353/303/227353).url" +2 -0
  516. data/lib/starter_web/assets/image/icons/tv/ard-icon.png +0 -0
  517. data/lib/starter_web/assets/image/icons/tv/ard-logo-png_seeklogo-428343.png +0 -0
  518. data/lib/starter_web/assets/image/icons/tv/cytec-tvlogos- collection of mostly german tv channel logos.url +2 -0
  519. data/lib/starter_web/assets/image/icons/tv/output_image.jpg +0 -0
  520. data/lib/starter_web/assets/image/icons/tv/pang.ping +0 -0
  521. data/lib/starter_web/assets/image/icons/tv/tv-logos-countries-germany-0_all_logos_mosaic.md at main /302/267 tv-logo-tv-logos.url" +2 -0
  522. data/lib/starter_web/assets/image/modules/attics/1920x1280/tiny_desk.jpg +0 -0
  523. data/lib/starter_web/assets/image/modules/attics/alice-donovan-rouse-2.jpg +0 -0
  524. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-1.jpg +0 -0
  525. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-2.jpg +0 -0
  526. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-3.jpg +0 -0
  527. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-4.jpg +0 -0
  528. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-5.jpg +0 -0
  529. data/lib/starter_web/assets/image/modules/gallery/free_animals/free-animals-6.jpg +0 -0
  530. data/lib/starter_web/assets/image/modules/gallery/mega_cities/295683517.jpg +0 -0
  531. data/lib/starter_web/assets/image/modules/gallery/mega_cities/chicago-us.jpg +0 -0
  532. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  533. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-1_c.jpg +0 -0
  534. data/lib/starter_web/assets/image/modules/gallery/mega_cities/denys-nevozhai-3_b.jpg +0 -0
  535. data/lib/starter_web/assets/image/modules/gallery/mega_cities/emmad-mazhari_c.jpg +0 -0
  536. data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
  537. data/lib/starter_web/assets/image/modules/gallery/mega_cities/federico-rizzarelli_c.jpg +0 -0
  538. data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia.jpg +0 -0
  539. data/lib/starter_web/assets/image/modules/gallery/mega_cities/jakarta_indonesia_2.jpg +0 -0
  540. data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.jpg +0 -0
  541. data/lib/starter_web/assets/image/modules/gallery/mega_cities/melbourne_australia.webp +0 -0
  542. data/lib/starter_web/assets/image/modules/gallery/mega_cities/queen_bees_at_eureka_tower.jpg +0 -0
  543. data/lib/starter_web/assets/image/modules/gallery/mega_cities/shanghai_china.jpg +0 -0
  544. data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
  545. data/lib/starter_web/assets/image/modules/gallery/mega_cities/tokyo_japan.jpg +0 -0
  546. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/guardians-of-the-galaxy.jpg +0 -0
  547. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/justice-league.jpg +0 -0
  548. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/spider-man.jpg +0 -0
  549. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/suicide-squad.jpg +0 -0
  550. data/lib/starter_web/assets/image/modules/gallery/neighbor_slider/thor-ragnarok.jpg +0 -0
  551. data/lib/starter_web/assets/image/modules/gallery/panorama/1.jpg +0 -0
  552. data/lib/starter_web/assets/image/modules/gallery/panorama/10.jpg +0 -0
  553. data/lib/starter_web/assets/image/modules/gallery/panorama/11.jpg +0 -0
  554. data/lib/starter_web/assets/image/modules/gallery/panorama/12.jpg +0 -0
  555. data/lib/starter_web/assets/image/modules/gallery/panorama/2.jpg +0 -0
  556. data/lib/starter_web/assets/image/modules/gallery/panorama/3.jpg +0 -0
  557. data/lib/starter_web/assets/image/modules/gallery/panorama/4.jpg +0 -0
  558. data/lib/starter_web/assets/image/modules/gallery/panorama/5.jpg +0 -0
  559. data/lib/starter_web/assets/image/modules/gallery/panorama/6.jpg +0 -0
  560. data/lib/starter_web/assets/image/modules/gallery/panorama/7.jpg +0 -0
  561. data/lib/starter_web/assets/image/modules/gallery/panorama/8.jpg +0 -0
  562. data/lib/starter_web/assets/image/modules/gallery/panorama/9.jpg +0 -0
  563. data/lib/starter_web/config.ru +1 -1
  564. data/lib/starter_web/dot.gitattributes +1 -1
  565. data/lib/starter_web/dot.nojekyll +1 -1
  566. data/lib/starter_web/package.json +1 -1
  567. data/lib/starter_web/pages/public/_includes/documents/photoswipe/200_photoswipe_parameters.asciidoc +21 -2
  568. data/lib/starter_web/pages/public/_includes/documents/photoswipe/210_photoswipe_lightbox_parameters.asciidoc +42 -35
  569. data/lib/starter_web/pages/public/_includes/documents/photoswipe/300_caption_plugin_for_photoSwipe.asciidoc +72 -75
  570. data/lib/starter_web/pages/public/_includes/documents/swiper/110_swiper_common_options.asciidoc +96 -21
  571. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_a_k.asciidoc +187 -87
  572. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_l_o.asciidoc +98 -34
  573. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_p_s.asciidoc +99 -42
  574. data/lib/starter_web/pages/public/_includes/documents/swiper/200_swiper_parameters_t_z.asciidoc +64 -26
  575. data/lib/starter_web/pages/public/_includes/documents/swiper/300_swiper_instance_properties.asciidoc +52 -52
  576. data/lib/starter_web/pages/public/_includes/documents/swiper/400_swiper_modules.asciidoc +2666 -1735
  577. data/lib/starter_web/pages/public/_includes/documents/swiper/500_swiper_methods.asciidoc +40 -40
  578. data/lib/starter_web/pages/public/_includes/documents/swiper/600_swiper_events.asciidoc +113 -113
  579. data/lib/starter_web/pages/public/{amplitude_yt_tester.adoc → tools/tester/amplitude_yt_tester.adoc} +15 -15
  580. data/lib/starter_web/pages/public/tools/tester/swiper_tester.adoc +796 -0
  581. data/lib/starter_web/pages/public/tour/present_images.adoc +19 -17
  582. metadata +87 -32
  583. data/assets/theme/j1/modules/amplitudejs/js/tech/ytp.15.js +0 -1594
  584. data/assets/theme/j1/modules/photoswipe/css/org/photoswipe-dynamic-caption-plugin.umd.min.js +0 -5
  585. data/assets/theme/j1/modules/photoswipe/css/org/photoswipe.css +0 -420
  586. data/assets/theme/j1/modules/photoswipe/css/scss/photoswipe.scss +0 -427
  587. data/lib/starter_web/assets/image/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
  588. data/lib/starter_web/pages/public/lazy_loader_tester.adoc +0 -402
  589. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/attributes.asciidoc +0 -69
  590. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/_includes/documents/readme +0 -0
  591. data/lib/starter_web/pages/public/manuals/integrations/amplitudejs/amplitudejs-api.adoc +0 -2260
  592. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/attributes.asciidoc +0 -47
  593. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
  594. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/documents/readme +0 -0
  595. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/_includes/tables/readme +0 -0
  596. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/gemini.adoc +0 -525
  597. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.asccidoc +0 -274
  598. data/lib/starter_web/pages/public/manuals/integrations/google/gemini/security.hrml +0 -560
  599. data/lib/starter_web/pages/public/manuals/integrations/videojs/youtube-api.adoc +0 -1638
  600. data/lib/starter_web/pages/public/manuals/ytdl/man.adoc +0 -3020
  601. data/lib/starter_web/pages/public/manuals/ytdl/man.md +0 -2378
  602. data/lib/starter_web/pages/public/photoswipe_api.adoc +0 -150
  603. data/lib/starter_web/pages/public/swiper_api.adoc +0 -128
  604. data/lib/starter_web/pages/public/swiper_tester.adoc +0 -973
  605. /data/assets/theme/j1/modules/photoswipe/{.version_5.4.4 → _info/.version_5.4.4} +0 -0
  606. /data/assets/theme/j1/modules/photoswipe/{example → _info/example}/photoswipe-caption-plugin.html +0 -0
  607. /data/assets/theme/j1/modules/photoswipe/{example → _info/example}/test-gallery.html +0 -0
  608. /data/assets/theme/j1/modules/photoswipe/js/{README.md → _info/README.md} +0 -0
  609. /data/assets/theme/j1/modules/swiper/{.version_1.2.0 → _info/.version_1.2.0} +0 -0
  610. /data/assets/theme/j1/modules/swiper/{swiperjs.com-demos.url → _info/swiperjs.com-demos.url} +0 -0
@@ -1,3020 +0,0 @@
1
- ---
2
- title: YouTube Downloader
3
- title_extention: YouTube Downloader CLI
4
- tagline: CLI User Guide
5
-
6
- date: 2024-04-17
7
- #last_modified: 2024-01-01
8
-
9
- description: >
10
- AmplitudeJS is a JavaScript library to control the design of audio media
11
- elements on web pages. The concept allows designers to fully control the
12
- look and feel of audio players without deep scripting knowledge.
13
- keywords: >
14
- open source, free, template, jekyll, jekyllone, web,
15
- sites, static, jamstack, bootstrap, html, html5, audio,
16
- Amplitude
17
-
18
- categories: [ Manuals ]
19
- tags: [ YouTube Downloader, CLI ]
20
-
21
- image:
22
- path: /assets/image/icons/videojs/videojs-poster.png
23
- width: 1920
24
- height: 1280
25
-
26
- regenerate: false
27
- personalization: true
28
- permalink: /pages/public/manuals/ytdl/ytdl_cli/
29
-
30
- resources: []
31
- resource_options:
32
- - toccer:
33
- collapseDepth: 3
34
- - attic:
35
- slides:
36
- - url: /assets/image/modules/attics/1920x1280/alexey-ruban.jpg
37
- alt: Photo by Alexey Ruban on Unsplash
38
- badge:
39
- type: unsplash
40
- author: Alexey Ruban
41
- href: //unsplash.com/de/@intelligenciya
42
- ---
43
-
44
- // Page Initializer
45
- // =============================================================================
46
- // Enable the Liquid Preprocessor
47
- :page-liquid:
48
-
49
- // Set (local) page attributes here
50
- // -----------------------------------------------------------------------------
51
- // :page--attr: <attr-value>
52
-
53
- // Load Liquid procedures
54
- // -----------------------------------------------------------------------------
55
- {% capture load_attributes %}themes/{{site.template.name}}/procedures/global/attributes_loader.proc{%endcapture%}
56
-
57
- // Load page attributes
58
- // -----------------------------------------------------------------------------
59
- {% include {{load_attributes}} scope="global" %}
60
-
61
- // Page content
62
- // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
63
- // See: https://521dimensions.com/open-source/amplitudejs/docs
64
- // See: https://github.com/mediaelement/mediaelement-plugins
65
- // See: https://github.com/serversideup/amplitudejs/
66
-
67
- [role="dropcap"]
68
- The audio tag in HTML5 is a great way to add audio media to web pages.
69
- However, the browser fully controls the audio playback interface, which
70
- can limit or even break a page's design if audio media is used.
71
-
72
- AmplitudeJS for the J1 Template offers a straightforward solution for web
73
- developers. It allows them to easily customize the appearance of their audio
74
- players without the need for complex scripting. By leveraging J1 Template
75
- and Amplitude's API, web designers can craft unique interfaces that define
76
- the visual and functional aspects of a player's audio control elements.
77
-
78
- mdi:clock-time-five-outline[24px, md-gray mr-2]
79
- *5-10 Minutes* to read
80
-
81
-
82
- // Include sub-documents (if any)
83
- // -----------------------------------------------------------------------------
84
- [role="mt-5"]
85
- == USAGE AND OPTIONS
86
-
87
- ....
88
- yt-dlp [OPTIONS] [--] URL [URL...]
89
- ....
90
-
91
- `Ctrl+F` is your friend :D
92
-
93
- [role="mt-4"]
94
- === General Options
95
-
96
- ....
97
- -h, --help Print this help text and exit
98
- --version Print program version and exit
99
- -U, --update Update this program to the latest version
100
- --no-update Do not check for updates (default)
101
- --update-to [CHANNEL]@[TAG] Upgrade/downgrade to a specific version.
102
- CHANNEL can be a repository as well. CHANNEL
103
- and TAG default to "stable" and "latest"
104
- respectively if omitted; See "UPDATE" for
105
- details. Supported channels: stable,
106
- nightly, master
107
- -i, --ignore-errors Ignore download and postprocessing errors.
108
- The download will be considered successful
109
- even if the postprocessing fails
110
- --no-abort-on-error Continue with next video on download errors;
111
- e.g. to skip unavailable videos in a
112
- playlist (default)
113
- --abort-on-error Abort downloading of further videos if an
114
- error occurs (Alias: --no-ignore-errors)
115
- --dump-user-agent Display the current user-agent and exit
116
- --list-extractors List all supported extractors and exit
117
- --extractor-descriptions Output descriptions of all supported
118
- extractors and exit
119
- --use-extractors NAMES Extractor names to use separated by commas.
120
- You can also use regexes, "all", "default"
121
- and "end" (end URL matching); e.g. --ies
122
- "holodex.*,end,youtube". Prefix the name
123
- with a "-" to exclude it, e.g. --ies
124
- default,-generic. Use --list-extractors for
125
- a list of extractor names. (Alias: --ies)
126
- --default-search PREFIX Use this prefix for unqualified URLs. E.g.
127
- "gvsearch2:python" downloads two videos from
128
- google videos for the search term "python".
129
- Use the value "auto" to let yt-dlp guess
130
- ("auto_warning" to emit a warning when
131
- guessing). "error" just throws an error. The
132
- default value "fixup_error" repairs broken
133
- URLs, but emits an error if this is not
134
- possible instead of searching
135
- --ignore-config Don't load any more configuration files
136
- except those given to --config-locations.
137
- For backward compatibility, if this option
138
- is found inside the system configuration
139
- file, the user configuration is not loaded.
140
- (Alias: --no-config)
141
- --no-config-locations Do not load any custom configuration files
142
- (default). When given inside a configuration
143
- file, ignore all previous --config-locations
144
- defined in the current file
145
- --config-locations PATH Location of the main configuration file;
146
- either the path to the config or its
147
- containing directory ("-" for stdin). Can be
148
- used multiple times and inside other
149
- configuration files
150
- --flat-playlist Do not extract the videos of a playlist,
151
- only list them
152
- --no-flat-playlist Fully extract the videos of a playlist
153
- (default)
154
- --live-from-start Download livestreams from the start.
155
- Currently only supported for YouTube
156
- (Experimental)
157
- --no-live-from-start Download livestreams from the current time
158
- (default)
159
- --wait-for-video MIN[-MAX] Wait for scheduled streams to become
160
- available. Pass the minimum number of
161
- seconds (or range) to wait between retries
162
- --no-wait-for-video Do not wait for scheduled streams (default)
163
- --mark-watched Mark videos watched (even with --simulate)
164
- --no-mark-watched Do not mark videos watched (default)
165
- --color [STREAM:]POLICY Whether to emit color codes in output,
166
- optionally prefixed by the STREAM (stdout or
167
- stderr) to apply the setting to. Can be one
168
- of "always", "auto" (default), "never", or
169
- "no_color" (use non color terminal
170
- sequences). Use "auto-tty" or "no_color-tty"
171
- to decide based on terminal support only.
172
- Can be used multiple times
173
- --compat-options OPTS Options that can help keep compatibility
174
- with youtube-dl or youtube-dlc
175
- configurations by reverting some of the
176
- changes made in yt-dlp. See "Differences in
177
- default behavior" for details
178
- --alias ALIASES OPTIONS Create aliases for an option string. Unless
179
- an alias starts with a dash "-", it is
180
- prefixed with "--". Arguments are parsed
181
- according to the Python string formatting
182
- mini-language. E.g. --alias get-audio,-X
183
- "-S=aext:{0},abr -x --audio-format {0}"
184
- creates options "--get-audio" and "-X" that
185
- takes an argument (ARG0) and expands to
186
- "-S=aext:ARG0,abr -x --audio-format ARG0".
187
- All defined aliases are listed in the --help
188
- output. Alias options can trigger more
189
- aliases; so be careful to avoid defining
190
- recursive options. As a safety measure, each
191
- alias may be triggered a maximum of 100
192
- times. This option can be used multiple times
193
- ....
194
-
195
- [role="mt-4"]
196
- === Network Options
197
-
198
- ....
199
- --proxy URL Use the specified HTTP/HTTPS/SOCKS proxy. To
200
- enable SOCKS proxy, specify a proper scheme,
201
- e.g. socks5://user:pass@127.0.0.1:1080/.
202
- Pass in an empty string (--proxy "") for
203
- direct connection
204
- --socket-timeout SECONDS Time to wait before giving up, in seconds
205
- --source-address IP Client-side IP address to bind to
206
- --impersonate CLIENT[:OS] Client to impersonate for requests. E.g.
207
- chrome, chrome-110, chrome:windows-10. Pass
208
- --impersonate="" to impersonate any client.
209
- Note that forcing impersonation for all
210
- requests may have a detrimental impact on
211
- download speed and stability
212
- --list-impersonate-targets List available clients to impersonate.
213
- -4, --force-ipv4 Make all connections via IPv4
214
- -6, --force-ipv6 Make all connections via IPv6
215
- --enable-file-urls Enable file:// URLs. This is disabled by
216
- default for security reasons.
217
- ....
218
-
219
- [role="mt-4"]
220
- === Geo-restriction
221
-
222
- ....
223
- --geo-verification-proxy URL Use this proxy to verify the IP address for
224
- some geo-restricted sites. The default proxy
225
- specified by --proxy (or none, if the option
226
- is not present) is used for the actual
227
- downloading
228
- --xff VALUE How to fake X-Forwarded-For HTTP header to
229
- try bypassing geographic restriction. One of
230
- "default" (only when known to be useful),
231
- "never", an IP block in CIDR notation, or a
232
- two-letter ISO 3166-2 country code
233
- ....
234
-
235
- [role="mt-4"]
236
- === Video Selection
237
-
238
- ....
239
- -I, --playlist-items ITEM_SPEC Comma separated playlist_index of the items
240
- to download. You can specify a range using
241
- "[START]:[STOP][:STEP]". For backward
242
- compatibility, START-STOP is also supported.
243
- Use negative indices to count from the right
244
- and negative STEP to download in reverse
245
- order. E.g. "-I 1:3,7,-5::2" used on a
246
- playlist of size 15 will download the items
247
- at index 1,2,3,7,11,13,15
248
- --min-filesize SIZE Abort download if filesize is smaller than
249
- SIZE, e.g. 50k or 44.6M
250
- --max-filesize SIZE Abort download if filesize is larger than
251
- SIZE, e.g. 50k or 44.6M
252
- --date DATE Download only videos uploaded on this date.
253
- The date can be "YYYYMMDD" or in the format
254
- [now|today|yesterday][-N[day|week|month|year]].
255
- E.g. "--date today-2weeks" downloads only
256
- videos uploaded on the same day two weeks ago
257
- --datebefore DATE Download only videos uploaded on or before
258
- this date. The date formats accepted is the
259
- same as --date
260
- --dateafter DATE Download only videos uploaded on or after
261
- this date. The date formats accepted is the
262
- same as --date
263
- --match-filters FILTER Generic video filter. Any "OUTPUT TEMPLATE"
264
- field can be compared with a number or a
265
- string using the operators defined in
266
- "Filtering Formats". You can also simply
267
- specify a field to match if the field is
268
- present, use "!field" to check if the field
269
- is not present, and "&" to check multiple
270
- conditions. Use a "\" to escape "&" or
271
- quotes if needed. If used multiple times,
272
- the filter matches if at least one of the
273
- conditions is met. E.g. --match-filter
274
- !is_live --match-filter "like_count>?100 &
275
- description~='(?i)\bcats \& dogs\b'" matches
276
- only videos that are not live OR those that
277
- have a like count more than 100 (or the like
278
- field is not available) and also has a
279
- description that contains the phrase "cats &
280
- dogs" (caseless). Use "--match-filter -" to
281
- interactively ask whether to download each
282
- video
283
- --no-match-filters Do not use any --match-filter (default)
284
- --break-match-filters FILTER Same as "--match-filters" but stops the
285
- download process when a video is rejected
286
- --no-break-match-filters Do not use any --break-match-filters (default)
287
- --no-playlist Download only the video, if the URL refers
288
- to a video and a playlist
289
- --yes-playlist Download the playlist, if the URL refers to
290
- a video and a playlist
291
- --age-limit YEARS Download only videos suitable for the given
292
- age
293
- --download-archive FILE Download only videos not listed in the
294
- archive file. Record the IDs of all
295
- downloaded videos in it
296
- --no-download-archive Do not use archive file (default)
297
- --max-downloads NUMBER Abort after downloading NUMBER files
298
- --break-on-existing Stop the download process when encountering
299
- a file that is in the archive
300
- --no-break-on-existing Do not stop the download process when
301
- encountering a file that is in the archive
302
- (default)
303
- --break-per-input Alters --max-downloads, --break-on-existing,
304
- --break-match-filter, and autonumber to
305
- reset per input URL
306
- --no-break-per-input --break-on-existing and similar options
307
- terminates the entire download queue
308
- --skip-playlist-after-errors N Number of allowed failures until the rest of
309
- the playlist is skipped
310
- ....
311
-
312
- [role="mt-4"]
313
- === Download Options
314
-
315
- ....
316
- -N, --concurrent-fragments N Number of fragments of a dash/hlsnative
317
- video that should be downloaded concurrently
318
- (default is 1)
319
- -r, --limit-rate RATE Maximum download rate in bytes per second,
320
- e.g. 50K or 4.2M
321
- --throttled-rate RATE Minimum download rate in bytes per second
322
- below which throttling is assumed and the
323
- video data is re-extracted, e.g. 100K
324
- -R, --retries RETRIES Number of retries (default is 10), or
325
- "infinite"
326
- --file-access-retries RETRIES Number of times to retry on file access
327
- error (default is 3), or "infinite"
328
- --fragment-retries RETRIES Number of retries for a fragment (default is
329
- 10), or "infinite" (DASH, hlsnative and ISM)
330
- --retry-sleep [TYPE:]EXPR Time to sleep between retries in seconds
331
- (optionally) prefixed by the type of retry
332
- (http (default), fragment, file_access,
333
- extractor) to apply the sleep to. EXPR can
334
- be a number, linear=START[:END[:STEP=1]] or
335
- exp=START[:END[:BASE=2]]. This option can be
336
- used multiple times to set the sleep for the
337
- different retry types, e.g. --retry-sleep
338
- linear=1::2 --retry-sleep fragment:exp=1:20
339
- --skip-unavailable-fragments Skip unavailable fragments for DASH,
340
- hlsnative and ISM downloads (default)
341
- (Alias: --no-abort-on-unavailable-fragments)
342
- --abort-on-unavailable-fragments
343
- Abort download if a fragment is unavailable
344
- (Alias: --no-skip-unavailable-fragments)
345
- --keep-fragments Keep downloaded fragments on disk after
346
- downloading is finished
347
- --no-keep-fragments Delete downloaded fragments after
348
- downloading is finished (default)
349
- --buffer-size SIZE Size of download buffer, e.g. 1024 or 16K
350
- (default is 1024)
351
- --resize-buffer The buffer size is automatically resized
352
- from an initial value of --buffer-size
353
- (default)
354
- --no-resize-buffer Do not automatically adjust the buffer size
355
- --http-chunk-size SIZE Size of a chunk for chunk-based HTTP
356
- downloading, e.g. 10485760 or 10M (default
357
- is disabled). May be useful for bypassing
358
- bandwidth throttling imposed by a webserver
359
- (experimental)
360
- --playlist-random Download playlist videos in random order
361
- --lazy-playlist Process entries in the playlist as they are
362
- received. This disables n_entries,
363
- --playlist-random and --playlist-reverse
364
- --no-lazy-playlist Process videos in the playlist only after
365
- the entire playlist is parsed (default)
366
- --xattr-set-filesize Set file xattribute ytdl.filesize with
367
- expected file size
368
- --hls-use-mpegts Use the mpegts container for HLS videos;
369
- allowing some players to play the video
370
- while downloading, and reducing the chance
371
- of file corruption if download is
372
- interrupted. This is enabled by default for
373
- live streams
374
- --no-hls-use-mpegts Do not use the mpegts container for HLS
375
- videos. This is default when not downloading
376
- live streams
377
- --download-sections REGEX Download only chapters that match the
378
- regular expression. A "*" prefix denotes
379
- time-range instead of chapter. Negative
380
- timestamps are calculated from the end.
381
- "*from-url" can be used to download between
382
- the "start_time" and "end_time" extracted
383
- from the URL. Needs ffmpeg. This option can
384
- be used multiple times to download multiple
385
- sections, e.g. --download-sections
386
- "*10:15-inf" --download-sections "intro"
387
- --downloader [PROTO:]NAME Name or path of the external downloader to
388
- use (optionally) prefixed by the protocols
389
- (http, ftp, m3u8, dash, rstp, rtmp, mms) to
390
- use it for. Currently supports native,
391
- aria2c, avconv, axel, curl, ffmpeg, httpie,
392
- wget. You can use this option multiple times
393
- to set different downloaders for different
394
- protocols. E.g. --downloader aria2c
395
- --downloader "dash,m3u8:native" will use
396
- aria2c for http/ftp downloads, and the
397
- native downloader for dash/m3u8 downloads
398
- (Alias: --external-downloader)
399
- --downloader-args NAME:ARGS Give these arguments to the external
400
- downloader. Specify the downloader name and
401
- the arguments separated by a colon ":". For
402
- ffmpeg, arguments can be passed to different
403
- positions using the same syntax as
404
- --postprocessor-args. You can use this
405
- option multiple times to give different
406
- arguments to different downloaders (Alias:
407
- --external-downloader-args)
408
- ....
409
-
410
- [role="mt-4"]
411
- === Filesystem Options
412
-
413
- ....
414
- -a, --batch-file FILE File containing URLs to download ("-" for
415
- stdin), one URL per line. Lines starting
416
- with "#", ";" or "]" are considered as
417
- comments and ignored
418
- --no-batch-file Do not read URLs from batch file (default)
419
- -P, --paths [TYPES:]PATH The paths where the files should be
420
- downloaded. Specify the type of file and the
421
- path separated by a colon ":". All the same
422
- TYPES as --output are supported.
423
- Additionally, you can also provide "home"
424
- (default) and "temp" paths. All intermediary
425
- files are first downloaded to the temp path
426
- and then the final files are moved over to
427
- the home path after download is finished.
428
- This option is ignored if --output is an
429
- absolute path
430
- -o, --output [TYPES:]TEMPLATE Output filename template; see "OUTPUT
431
- TEMPLATE" for details
432
- --output-na-placeholder TEXT Placeholder for unavailable fields in
433
- --output (default: "NA")
434
- --restrict-filenames Restrict filenames to only ASCII characters,
435
- and avoid "&" and spaces in filenames
436
- --no-restrict-filenames Allow Unicode characters, "&" and spaces in
437
- filenames (default)
438
- --windows-filenames Force filenames to be Windows-compatible
439
- --no-windows-filenames Make filenames Windows-compatible only if
440
- using Windows (default)
441
- --trim-filenames LENGTH Limit the filename length (excluding
442
- extension) to the specified number of
443
- characters
444
- -w, --no-overwrites Do not overwrite any files
445
- --force-overwrites Overwrite all video and metadata files. This
446
- option includes --no-continue
447
- --no-force-overwrites Do not overwrite the video, but overwrite
448
- related files (default)
449
- -c, --continue Resume partially downloaded files/fragments
450
- (default)
451
- --no-continue Do not resume partially downloaded
452
- fragments. If the file is not fragmented,
453
- restart download of the entire file
454
- --part Use .part files instead of writing directly
455
- into output file (default)
456
- --no-part Do not use .part files - write directly into
457
- output file
458
- --mtime Use the Last-modified header to set the file
459
- modification time (default)
460
- --no-mtime Do not use the Last-modified header to set
461
- the file modification time
462
- --write-description Write video description to a .description file
463
- --no-write-description Do not write video description (default)
464
- --write-info-json Write video metadata to a .info.json file
465
- (this may contain personal information)
466
- --no-write-info-json Do not write video metadata (default)
467
- --write-playlist-metafiles Write playlist metadata in addition to the
468
- video metadata when using --write-info-json,
469
- --write-description etc. (default)
470
- --no-write-playlist-metafiles Do not write playlist metadata when using
471
- --write-info-json, --write-description etc.
472
- --clean-info-json Remove some internal metadata such as
473
- filenames from the infojson (default)
474
- --no-clean-info-json Write all fields to the infojson
475
- --write-comments Retrieve video comments to be placed in the
476
- infojson. The comments are fetched even
477
- without this option if the extraction is
478
- known to be quick (Alias: --get-comments)
479
- --no-write-comments Do not retrieve video comments unless the
480
- extraction is known to be quick (Alias:
481
- --no-get-comments)
482
- --load-info-json FILE JSON file containing the video information
483
- (created with the "--write-info-json" option)
484
- --cookies FILE Netscape formatted file to read cookies from
485
- and dump cookie jar in
486
- --no-cookies Do not read/dump cookies from/to file
487
- (default)
488
- --cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]
489
- The name of the browser to load cookies
490
- from. Currently supported browsers are:
491
- brave, chrome, chromium, edge, firefox,
492
- opera, safari, vivaldi, whale. Optionally,
493
- the KEYRING used for decrypting Chromium
494
- cookies on Linux, the name/path of the
495
- PROFILE to load cookies from, and the
496
- CONTAINER name (if Firefox) ("none" for no
497
- container) can be given with their
498
- respective separators. By default, all
499
- containers of the most recently accessed
500
- profile are used. Currently supported
501
- keyrings are: basictext, gnomekeyring,
502
- kwallet, kwallet5, kwallet6
503
- --no-cookies-from-browser Do not load cookies from browser (default)
504
- --cache-dir DIR Location in the filesystem where yt-dlp can
505
- store some downloaded information (such as
506
- client ids and signatures) permanently. By
507
- default ${XDG_CACHE_HOME}/yt-dlp
508
- --no-cache-dir Disable filesystem caching
509
- --rm-cache-dir Delete all filesystem cache files
510
- ....
511
-
512
- [role="mt-4"]
513
- === Thumbnail Options
514
-
515
- ....
516
- --write-thumbnail Write thumbnail image to disk
517
- --no-write-thumbnail Do not write thumbnail image to disk (default)
518
- --write-all-thumbnails Write all thumbnail image formats to disk
519
- --list-thumbnails List available thumbnails of each video.
520
- Simulate unless --no-simulate is used
521
- ....
522
-
523
- [role="mt-4"]
524
- === Internet Shortcut Options
525
-
526
- ....
527
- --write-link Write an internet shortcut file, depending
528
- on the current platform (.url, .webloc or
529
- .desktop). The URL may be cached by the OS
530
- --write-url-link Write a .url Windows internet shortcut. The
531
- OS caches the URL based on the file path
532
- --write-webloc-link Write a .webloc macOS internet shortcut
533
- --write-desktop-link Write a .desktop Linux internet shortcut
534
- ....
535
-
536
- [role="mt-4"]
537
- === Verbosity and Simulation Options
538
-
539
- ....
540
- -q, --quiet Activate quiet mode. If used with --verbose,
541
- print the log to stderr
542
- --no-quiet Deactivate quiet mode. (Default)
543
- --no-warnings Ignore warnings
544
- -s, --simulate Do not download the video and do not write
545
- anything to disk
546
- --no-simulate Download the video even if printing/listing
547
- options are used
548
- --ignore-no-formats-error Ignore "No video formats" error. Useful for
549
- extracting metadata even if the videos are
550
- not actually available for download
551
- (experimental)
552
- --no-ignore-no-formats-error Throw error when no downloadable video
553
- formats are found (default)
554
- --skip-download Do not download the video but write all
555
- related files (Alias: --no-download)
556
- -O, --print [WHEN:]TEMPLATE Field name or output template to print to
557
- screen, optionally prefixed with when to
558
- print it, separated by a ":". Supported
559
- values of "WHEN" are the same as that of
560
- --use-postprocessor (default: video).
561
- Implies --quiet. Implies --simulate unless
562
- --no-simulate or later stages of WHEN are
563
- used. This option can be used multiple times
564
- --print-to-file [WHEN:]TEMPLATE FILE
565
- Append given template to the file. The
566
- values of WHEN and TEMPLATE are same as that
567
- of --print. FILE uses the same syntax as the
568
- output template. This option can be used
569
- multiple times
570
- -j, --dump-json Quiet, but print JSON information for each
571
- video. Simulate unless --no-simulate is
572
- used. See "OUTPUT TEMPLATE" for a
573
- description of available keys
574
- -J, --dump-single-json Quiet, but print JSON information for each
575
- url or infojson passed. Simulate unless
576
- --no-simulate is used. If the URL refers to
577
- a playlist, the whole playlist information
578
- is dumped in a single line
579
- --force-write-archive Force download archive entries to be written
580
- as far as no errors occur, even if -s or
581
- another simulation option is used (Alias:
582
- --force-download-archive)
583
- --newline Output progress bar as new lines
584
- --no-progress Do not print progress bar
585
- --progress Show progress bar, even if in quiet mode
586
- --console-title Display progress in console titlebar
587
- --progress-template [TYPES:]TEMPLATE
588
- Template for progress outputs, optionally
589
- prefixed with one of "download:" (default),
590
- "download-title:" (the console title),
591
- "postprocess:", or "postprocess-title:".
592
- The video's fields are accessible under the
593
- "info" key and the progress attributes are
594
- accessible under "progress" key. E.g.
595
- --console-title --progress-template
596
- "download-title:%(info.id)s-%(progress.eta)s"
597
- --progress-delta SECONDS Time between progress output (default: 0)
598
- -v, --verbose Print various debugging information
599
- --dump-pages Print downloaded pages encoded using base64
600
- to debug problems (very verbose)
601
- --write-pages Write downloaded intermediary pages to files
602
- in the current directory to debug problems
603
- --print-traffic Display sent and read HTTP traffic
604
- ....
605
-
606
- [role="mt-4"]
607
- === Workarounds
608
-
609
- ....
610
- --encoding ENCODING Force the specified encoding (experimental)
611
- --legacy-server-connect Explicitly allow HTTPS connection to servers
612
- that do not support RFC 5746 secure
613
- renegotiation
614
- --no-check-certificates Suppress HTTPS certificate validation
615
- --prefer-insecure Use an unencrypted connection to retrieve
616
- information about the video (Currently
617
- supported only for YouTube)
618
- --add-headers FIELD:VALUE Specify a custom HTTP header and its value,
619
- separated by a colon ":". You can use this
620
- option multiple times
621
- --bidi-workaround Work around terminals that lack
622
- bidirectional text support. Requires bidiv
623
- or fribidi executable in PATH
624
- --sleep-requests SECONDS Number of seconds to sleep between requests
625
- during data extraction
626
- --sleep-interval SECONDS Number of seconds to sleep before each
627
- download. This is the minimum time to sleep
628
- when used along with --max-sleep-interval
629
- (Alias: --min-sleep-interval)
630
- --max-sleep-interval SECONDS Maximum number of seconds to sleep. Can only
631
- be used along with --min-sleep-interval
632
- --sleep-subtitles SECONDS Number of seconds to sleep before each
633
- subtitle download
634
- ....
635
-
636
- [role="mt-4"]
637
- === Video Format Options
638
-
639
- ....
640
- -f, --format FORMAT Video format code, see "FORMAT SELECTION"
641
- for more details
642
- -S, --format-sort SORTORDER Sort the formats by the fields given, see
643
- "Sorting Formats" for more details
644
- --format-sort-force Force user specified sort order to have
645
- precedence over all fields, see "Sorting
646
- Formats" for more details (Alias: --S-force)
647
- --no-format-sort-force Some fields have precedence over the user
648
- specified sort order (default)
649
- --video-multistreams Allow multiple video streams to be merged
650
- into a single file
651
- --no-video-multistreams Only one video stream is downloaded for each
652
- output file (default)
653
- --audio-multistreams Allow multiple audio streams to be merged
654
- into a single file
655
- --no-audio-multistreams Only one audio stream is downloaded for each
656
- output file (default)
657
- --prefer-free-formats Prefer video formats with free containers
658
- over non-free ones of same quality. Use with
659
- "-S ext" to strictly prefer free containers
660
- irrespective of quality
661
- --no-prefer-free-formats Don't give any special preference to free
662
- containers (default)
663
- --check-formats Make sure formats are selected only from
664
- those that are actually downloadable
665
- --check-all-formats Check all formats for whether they are
666
- actually downloadable
667
- --no-check-formats Do not check that the formats are actually
668
- downloadable
669
- -F, --list-formats List available formats of each video.
670
- Simulate unless --no-simulate is used
671
- --merge-output-format FORMAT Containers that may be used when merging
672
- formats, separated by "/", e.g. "mp4/mkv".
673
- Ignored if no merge is required. (currently
674
- supported: avi, flv, mkv, mov, mp4, webm)
675
- ....
676
-
677
- [role="mt-4"]
678
- === Subtitle Options
679
-
680
- ....
681
- --write-subs Write subtitle file
682
- --no-write-subs Do not write subtitle file (default)
683
- --write-auto-subs Write automatically generated subtitle file
684
- (Alias: --write-automatic-subs)
685
- --no-write-auto-subs Do not write auto-generated subtitles
686
- (default) (Alias: --no-write-automatic-subs)
687
- --list-subs List available subtitles of each video.
688
- Simulate unless --no-simulate is used
689
- --sub-format FORMAT Subtitle format; accepts formats preference,
690
- e.g. "srt" or "ass/srt/best"
691
- --sub-langs LANGS Languages of the subtitles to download (can
692
- be regex) or "all" separated by commas, e.g.
693
- --sub-langs "en.*,ja". You can prefix the
694
- language code with a "-" to exclude it from
695
- the requested languages, e.g. --sub-langs
696
- all,-live_chat. Use --list-subs for a list
697
- of available language tags
698
- ....
699
-
700
- [role="mt-4"]
701
- === Authentication Options
702
-
703
- ....
704
- -u, --username USERNAME Login with this account ID
705
- -p, --password PASSWORD Account password. If this option is left
706
- out, yt-dlp will ask interactively
707
- -2, --twofactor TWOFACTOR Two-factor authentication code
708
- -n, --netrc Use .netrc authentication data
709
- --netrc-location PATH Location of .netrc authentication data;
710
- either the path or its containing directory.
711
- Defaults to ~/.netrc
712
- --netrc-cmd NETRC_CMD Command to execute to get the credentials
713
- for an extractor.
714
- --video-password PASSWORD Video-specific password
715
- --ap-mso MSO Adobe Pass multiple-system operator (TV
716
- provider) identifier, use --ap-list-mso for
717
- a list of available MSOs
718
- --ap-username USERNAME Multiple-system operator account login
719
- --ap-password PASSWORD Multiple-system operator account password.
720
- If this option is left out, yt-dlp will ask
721
- interactively
722
- --ap-list-mso List all supported multiple-system operators
723
- --client-certificate CERTFILE Path to client certificate file in PEM
724
- format. May include the private key
725
- --client-certificate-key KEYFILE
726
- Path to private key file for client
727
- certificate
728
- --client-certificate-password PASSWORD
729
- Password for client certificate private key,
730
- if encrypted. If not provided, and the key
731
- is encrypted, yt-dlp will ask interactively
732
- ....
733
-
734
- [role="mt-4"]
735
- === Post-Processing Options
736
-
737
- ....
738
- -x, --extract-audio Convert video files to audio-only files
739
- (requires ffmpeg and ffprobe)
740
- --audio-format FORMAT Format to convert the audio to when -x is
741
- used. (currently supported: best (default),
742
- aac, alac, flac, m4a, mp3, opus, vorbis,
743
- wav). You can specify multiple rules using
744
- similar syntax as --remux-video
745
- --audio-quality QUALITY Specify ffmpeg audio quality to use when
746
- converting the audio with -x. Insert a value
747
- between 0 (best) and 10 (worst) for VBR or a
748
- specific bitrate like 128K (default 5)
749
- --remux-video FORMAT Remux the video into another container if
750
- necessary (currently supported: avi, flv,
751
- gif, mkv, mov, mp4, webm, aac, aiff, alac,
752
- flac, m4a, mka, mp3, ogg, opus, vorbis,
753
- wav). If target container does not support
754
- the video/audio codec, remuxing will fail.
755
- You can specify multiple rules; e.g.
756
- "aac>m4a/mov>mp4/mkv" will remux aac to m4a,
757
- mov to mp4 and anything else to mkv
758
- --recode-video FORMAT Re-encode the video into another format if
759
- necessary. The syntax and supported formats
760
- are the same as --remux-video
761
- --postprocessor-args NAME:ARGS Give these arguments to the postprocessors.
762
- Specify the postprocessor/executable name
763
- and the arguments separated by a colon ":"
764
- to give the argument to the specified
765
- postprocessor/executable. Supported PP are:
766
- Merger, ModifyChapters, SplitChapters,
767
- ExtractAudio, VideoRemuxer, VideoConvertor,
768
- Metadata, EmbedSubtitle, EmbedThumbnail,
769
- SubtitlesConvertor, ThumbnailsConvertor,
770
- FixupStretched, FixupM4a, FixupM3u8,
771
- FixupTimestamp and FixupDuration. The
772
- supported executables are: AtomicParsley,
773
- FFmpeg and FFprobe. You can also specify
774
- "PP+EXE:ARGS" to give the arguments to the
775
- specified executable only when being used by
776
- the specified postprocessor. Additionally,
777
- for ffmpeg/ffprobe, "_i"/"_o" can be
778
- appended to the prefix optionally followed
779
- by a number to pass the argument before the
780
- specified input/output file, e.g. --ppa
781
- "Merger+ffmpeg_i1:-v quiet". You can use
782
- this option multiple times to give different
783
- arguments to different postprocessors.
784
- (Alias: --ppa)
785
- -k, --keep-video Keep the intermediate video file on disk
786
- after post-processing
787
- --no-keep-video Delete the intermediate video file after
788
- post-processing (default)
789
- --post-overwrites Overwrite post-processed files (default)
790
- --no-post-overwrites Do not overwrite post-processed files
791
- --embed-subs Embed subtitles in the video (only for mp4,
792
- webm and mkv videos)
793
- --no-embed-subs Do not embed subtitles (default)
794
- --embed-thumbnail Embed thumbnail in the video as cover art
795
- --no-embed-thumbnail Do not embed thumbnail (default)
796
- --embed-metadata Embed metadata to the video file. Also
797
- embeds chapters/infojson if present unless
798
- --no-embed-chapters/--no-embed-info-json are
799
- used (Alias: --add-metadata)
800
- --no-embed-metadata Do not add metadata to file (default)
801
- (Alias: --no-add-metadata)
802
- --embed-chapters Add chapter markers to the video file
803
- (Alias: --add-chapters)
804
- --no-embed-chapters Do not add chapter markers (default) (Alias:
805
- --no-add-chapters)
806
- --embed-info-json Embed the infojson as an attachment to
807
- mkv/mka video files
808
- --no-embed-info-json Do not embed the infojson as an attachment
809
- to the video file
810
- --parse-metadata [WHEN:]FROM:TO
811
- Parse additional metadata like title/artist
812
- from other fields; see "MODIFYING METADATA"
813
- for details. Supported values of "WHEN" are
814
- the same as that of --use-postprocessor
815
- (default: pre_process)
816
- --replace-in-metadata [WHEN:]FIELDS REGEX REPLACE
817
- Replace text in a metadata field using the
818
- given regex. This option can be used
819
- multiple times. Supported values of "WHEN"
820
- are the same as that of --use-postprocessor
821
- (default: pre_process)
822
- --xattrs Write metadata to the video file's xattrs
823
- (using dublin core and xdg standards)
824
- --concat-playlist POLICY Concatenate videos in a playlist. One of
825
- "never", "always", or "multi_video"
826
- (default; only when the videos form a single
827
- show). All the video files must have same
828
- codecs and number of streams to be
829
- concatable. The "pl_video:" prefix can be
830
- used with "--paths" and "--output" to set
831
- the output filename for the concatenated
832
- files. See "OUTPUT TEMPLATE" for details
833
- --fixup POLICY Automatically correct known faults of the
834
- file. One of never (do nothing), warn (only
835
- emit a warning), detect_or_warn (the
836
- default; fix file if we can, warn
837
- otherwise), force (try fixing even if file
838
- already exists)
839
- --ffmpeg-location PATH Location of the ffmpeg binary; either the
840
- path to the binary or its containing directory
841
- --exec [WHEN:]CMD Execute a command, optionally prefixed with
842
- when to execute it, separated by a ":".
843
- Supported values of "WHEN" are the same as
844
- that of --use-postprocessor (default:
845
- after_move). Same syntax as the output
846
- template can be used to pass any field as
847
- arguments to the command. If no fields are
848
- passed, %(filepath,_filename|)q is appended
849
- to the end of the command. This option can
850
- be used multiple times
851
- --no-exec Remove any previously defined --exec
852
- --convert-subs FORMAT Convert the subtitles to another format
853
- (currently supported: ass, lrc, srt, vtt)
854
- (Alias: --convert-subtitles)
855
- --convert-thumbnails FORMAT Convert the thumbnails to another format
856
- (currently supported: jpg, png, webp). You
857
- can specify multiple rules using similar
858
- syntax as --remux-video
859
- --split-chapters Split video into multiple files based on
860
- internal chapters. The "chapter:" prefix can
861
- be used with "--paths" and "--output" to set
862
- the output filename for the split files. See
863
- "OUTPUT TEMPLATE" for details
864
- --no-split-chapters Do not split video based on chapters (default)
865
- --remove-chapters REGEX Remove chapters whose title matches the
866
- given regular expression. The syntax is the
867
- same as --download-sections. This option can
868
- be used multiple times
869
- --no-remove-chapters Do not remove any chapters from the file
870
- (default)
871
- --force-keyframes-at-cuts Force keyframes at cuts when
872
- downloading/splitting/removing sections.
873
- This is slow due to needing a re-encode, but
874
- the resulting video may have fewer artifacts
875
- around the cuts
876
- --no-force-keyframes-at-cuts Do not force keyframes around the chapters
877
- when cutting/splitting (default)
878
- --use-postprocessor NAME[:ARGS]
879
- The (case sensitive) name of plugin
880
- postprocessors to be enabled, and
881
- (optionally) arguments to be passed to it,
882
- separated by a colon ":". ARGS are a
883
- semicolon ";" delimited list of NAME=VALUE.
884
- The "when" argument determines when the
885
- postprocessor is invoked. It can be one of
886
- "pre_process" (after video extraction),
887
- "after_filter" (after video passes filter),
888
- "video" (after --format; before
889
- --print/--output), "before_dl" (before each
890
- video download), "post_process" (after each
891
- video download; default), "after_move"
892
- (after moving video file to its final
893
- locations), "after_video" (after downloading
894
- and processing all formats of a video), or
895
- "playlist" (at end of playlist). This option
896
- can be used multiple times to add different
897
- postprocessors
898
- ....
899
-
900
- [role="mt-4"]
901
- === SponsorBlock Options
902
-
903
- Make chapter entries for, or remove various segments (sponsor,
904
- introductions, etc.) from downloaded YouTube videos using the
905
- https://sponsor.ajay.app[SponsorBlock API]
906
-
907
- ....
908
- --sponsorblock-mark CATS SponsorBlock categories to create chapters
909
- for, separated by commas. Available
910
- categories are sponsor, intro, outro,
911
- selfpromo, preview, filler, interaction,
912
- music_offtopic, poi_highlight, chapter, all
913
- and default (=all). You can prefix the
914
- category with a "-" to exclude it. See [1]
915
- for description of the categories. E.g.
916
- --sponsorblock-mark all,-preview
917
- [1] https://wiki.sponsor.ajay.app/w/Segment_Categories
918
- --sponsorblock-remove CATS SponsorBlock categories to be removed from
919
- the video file, separated by commas. If a
920
- category is present in both mark and remove,
921
- remove takes precedence. The syntax and
922
- available categories are the same as for
923
- --sponsorblock-mark except that "default"
924
- refers to "all,-filler" and poi_highlight,
925
- chapter are not available
926
- --sponsorblock-chapter-title TEMPLATE
927
- An output template for the title of the
928
- SponsorBlock chapters created by
929
- --sponsorblock-mark. The only available
930
- fields are start_time, end_time, category,
931
- categories, name, category_names. Defaults
932
- to "[SponsorBlock]: %(category_names)l"
933
- --no-sponsorblock Disable both --sponsorblock-mark and
934
- --sponsorblock-remove
935
- --sponsorblock-api URL SponsorBlock API location, defaults to
936
- https://sponsor.ajay.app
937
- ....
938
-
939
- [role="mt-4"]
940
- === Extractor Options
941
-
942
- ....
943
- --extractor-retries RETRIES Number of retries for known extractor errors
944
- (default is 3), or "infinite"
945
- --allow-dynamic-mpd Process dynamic DASH manifests (default)
946
- (Alias: --no-ignore-dynamic-mpd)
947
- --ignore-dynamic-mpd Do not process dynamic DASH manifests
948
- (Alias: --no-allow-dynamic-mpd)
949
- --hls-split-discontinuity Split HLS playlists to different formats at
950
- discontinuities such as ad breaks
951
- --no-hls-split-discontinuity Do not split HLS playlists to different
952
- formats at discontinuities such as ad breaks
953
- (default)
954
- --extractor-args IE_KEY:ARGS Pass ARGS arguments to the IE_KEY extractor.
955
- See "EXTRACTOR ARGUMENTS" for details. You
956
- can use this option multiple times to give
957
- arguments for different extractors
958
- ....
959
-
960
-
961
- [role="mt-5"]
962
- == CONFIGURATION
963
-
964
- You can configure yt-dlp by placing any supported command line option to
965
- a configuration file. The configuration is loaded from the following
966
- locations:
967
-
968
- [arabic]
969
- . *Main Configuration*:
970
- * The file given to `--config-location`
971
- . *Portable Configuration*: (Recommended for portable installations)
972
- * If using a binary, `yt-dlp.conf` in the same directory as the binary
973
- * If running from source-code, `yt-dlp.conf` in the parent directory of
974
- `yt_dlp`
975
- . *Home Configuration*:
976
- * `yt-dlp.conf` in the home path given to `-P`
977
- * If `-P` is not given, the current directory is searched
978
- . *User Configuration*:
979
- * `${XDG_CONFIG_HOME}/yt-dlp.conf`
980
- * `${XDG_CONFIG_HOME}/yt-dlp/config` (recommended on Linux/macOS)
981
- * `${XDG_CONFIG_HOME}/yt-dlp/config.txt`
982
- * `${APPDATA}/yt-dlp.conf`
983
- * `${APPDATA}/yt-dlp/config` (recommended on Windows)
984
- * `${APPDATA}/yt-dlp/config.txt`
985
- * `~/yt-dlp.conf`
986
- * `~/yt-dlp.conf.txt`
987
- * `~/.yt-dlp/config`
988
- * `~/.yt-dlp/config.txt`
989
- +
990
- See also: link:#notes-about-environment-variables[Notes about
991
- environment variables]
992
- . *System Configuration*:
993
- * `/etc/yt-dlp.conf`
994
- * `/etc/yt-dlp/config`
995
- * `/etc/yt-dlp/config.txt`
996
-
997
- E.g. with the following configuration file, yt-dlp will always extract
998
- the audio, not copy the mtime, use a proxy and save all videos under
999
- `YouTube` directory in your home directory:
1000
-
1001
- ....
1002
- # Lines starting with # are comments
1003
-
1004
- # Always extract audio
1005
- -x
1006
-
1007
- # Do not copy the mtime
1008
- --no-mtime
1009
-
1010
- # Use this proxy
1011
- --proxy 127.0.0.1:3128
1012
-
1013
- # Save all videos under YouTube directory in your home directory
1014
- -o ~/YouTube/%(title)s.%(ext)s
1015
- ....
1016
-
1017
- *Note*: Options in configuration file are just the same options aka
1018
- switches used in regular command line calls; thus there *must be no
1019
- whitespace* after `-` or `--`, e.g. `-o` or `--proxy` but not `- o` or
1020
- `-- proxy`. They must also be quoted when necessary, as if it were a
1021
- UNIX shell.
1022
-
1023
- You can use `--ignore-config` if you want to disable all configuration
1024
- files for a particular yt-dlp run. If `--ignore-config` is found inside
1025
- any configuration file, no further configuration will be loaded. For
1026
- example, having the option in the portable configuration file prevents
1027
- loading of home, user, and system configurations. Additionally, (for
1028
- backward compatibility) if `--ignore-config` is found inside the system
1029
- configuration file, the user configuration is not loaded.
1030
-
1031
- [role="mt-4"]
1032
- === Configuration file encoding
1033
-
1034
- The configuration files are decoded according to the UTF BOM if present,
1035
- and in the encoding from system locale otherwise.
1036
-
1037
- If you want your file to be decoded differently, add
1038
- `# coding: ENCODING` to the beginning of the file
1039
- (e.g. `# coding: shift-jis`). There must be no characters before that,
1040
- even spaces or BOM.
1041
-
1042
- [role="mt-4"]
1043
- === Authentication with netrc
1044
-
1045
- You may also want to configure automatic credentials storage for
1046
- extractors that support authentication (by providing login and password
1047
- with `--username` and `--password`) in order not to pass credentials as
1048
- command line arguments on every yt-dlp execution and prevent tracking
1049
- plain text passwords in the shell command history. You can achieve this
1050
- using a https://stackoverflow.com/tags/.netrc/info[`.netrc` file] on a
1051
- per-extractor basis. For that, you will need to create a `.netrc` file
1052
- in `--netrc-location` and restrict permissions to read/write by only
1053
- you:
1054
-
1055
- ....
1056
- touch ${HOME}/.netrc
1057
- chmod a-rwx,u+rw ${HOME}/.netrc
1058
- ....
1059
-
1060
- After that, you can add credentials for an extractor in the following
1061
- format, where _extractor_ is the name of the extractor in lowercase:
1062
-
1063
- ....
1064
- machine <extractor> login <username> password <password>
1065
- ....
1066
-
1067
- E.g.
1068
-
1069
- ....
1070
- machine youtube login myaccount@gmail.com password my_youtube_password
1071
- machine twitch login my_twitch_account_name password my_twitch_password
1072
- ....
1073
-
1074
- To activate authentication with the `.netrc` file you should pass
1075
- `--netrc` to yt-dlp or place it in the link:#configuration[configuration
1076
- file].
1077
-
1078
- The default location of the .netrc file is `~` (see below).
1079
-
1080
- As an alternative to using the `.netrc` file, which has the disadvantage
1081
- of keeping your passwords in a plain text file, you can configure a
1082
- custom shell command to provide the credentials for an extractor. This
1083
- is done by providing the `--netrc-cmd` parameter, it shall output the
1084
- credentials in the netrc format and return `0` on success, other values
1085
- will be treated as an error. `{}` in the command will be replaced by the
1086
- name of the extractor to make it possible to select the credentials for
1087
- the right extractor.
1088
-
1089
- E.g. To use an encrypted `.netrc` file stored as `.authinfo.gpg`
1090
-
1091
- ....
1092
- yt-dlp --netrc-cmd 'gpg --decrypt ~/.authinfo.gpg' https://www.youtube.com/watch?v=BaW_jenozKc
1093
- ....
1094
-
1095
- [role="mt-4"]
1096
- === Notes about environment variables
1097
-
1098
- * Environment variables are normally specified as
1099
- `${VARIABLE}`/`$VARIABLE` on UNIX and `%VARIABLE%` on Windows; but is
1100
- always shown as `${VARIABLE}` in this documentation
1101
- * yt-dlp also allow using UNIX-style variables on Windows for path-like
1102
- options; e.g. `--output`, `--config-location`
1103
- * If unset, `${XDG_CONFIG_HOME}` defaults to `~/.config` and
1104
- `${XDG_CACHE_HOME}` to `~/.cache`
1105
- * On Windows, `~` points to `${HOME}` if present; or, `${USERPROFILE}`
1106
- or `${HOMEDRIVE}${HOMEPATH}` otherwise
1107
- * On Windows, `${USERPROFILE}` generally points to
1108
- `C:\Users\<user name>` and `${APPDATA}` to
1109
- `${USERPROFILE}\AppData\Roaming`
1110
-
1111
-
1112
- [role="mt-5"]
1113
- == OUTPUT TEMPLATE
1114
-
1115
- The `-o` option is used to indicate a template for the output file names
1116
- while `-P` option is used to specify the path each type of file should
1117
- be saved to.
1118
-
1119
- *tl;dr:* link:#output-template-examples[navigate me to examples].
1120
-
1121
- The simplest usage of `-o` is not to set any template arguments when
1122
- downloading a single file, like in
1123
- `yt-dlp -o funny_video.flv "https://some/video"` (hard-coding file
1124
- extension like this is _not_ recommended and could break some
1125
- post-processing).
1126
-
1127
- It may however also contain special sequences that will be replaced when
1128
- downloading each video. The special sequences may be formatted according
1129
- to
1130
- https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting[Python
1131
- string formatting operations], e.g. `%(NAME)s` or `%(NAME)05d`. To
1132
- clarify, that is a percent symbol followed by a name in parentheses,
1133
- followed by formatting operations.
1134
-
1135
- The field names themselves (the part inside the parenthesis) can also
1136
- have some special formatting:
1137
-
1138
- [arabic]
1139
- . *Object traversal*: The dictionaries and lists available in metadata
1140
- can be traversed by using a dot `.` separator; e.g. `%(tags.0)s`,
1141
- `%(subtitles.en.-1.ext)s`. You can do Python slicing with colon `:`;
1142
- E.g. `%(id.3:7)s`, `%(id.6:2:-1)s`, `%(formats.:.format_id)s`. Curly
1143
- braces `{}` can be used to build dictionaries with only specific keys;
1144
- e.g. `%(formats.:.{format_id,height})#j`. An empty field name `%()s`
1145
- refers to the entire infodict; e.g. `%(.{id,title})s`. Note that all the
1146
- fields that become available using this method are not listed below. Use
1147
- `-j` to see such fields
1148
- . *Arithmetic*: Simple arithmetic can be done on numeric fields using
1149
- `+`, `-` and `*`. E.g. `%(playlist_index+10)03d`,
1150
- `%(n_entries+1-playlist_index)d`
1151
- . *Date/time Formatting*: Date/time fields can be formatted according to
1152
- https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes[strftime
1153
- formatting] by specifying it separated from the field name using a `>`.
1154
- E.g. `%(duration>%H-%M-%S)s`, `%(upload_date>%Y-%m-%d)s`,
1155
- `%(epoch-3600>%H-%M-%S)s`
1156
- . *Alternatives*: Alternate fields can be specified separated with a
1157
- `,`. E.g. `%(release_date>%Y,upload_date>%Y|Unknown)s`
1158
- . *Replacement*: A replacement value can be specified using a `&`
1159
- separator according to the
1160
- https://docs.python.org/3/library/string.html#format-specification-mini-language[`str.format`
1161
- mini-language]. If the field is _not_ empty, this replacement value will
1162
- be used instead of the actual field content. This is done after
1163
- alternate fields are considered; thus the replacement is used if _any_
1164
- of the alternative fields is _not_ empty. E.g.
1165
- `%(chapters&has chapters|no chapters)s`,
1166
- `%(title&TITLE={:>20}|NO TITLE)s`
1167
- . *Default*: A literal default value can be specified for when the field
1168
- is empty using a `|` separator. This overrides
1169
- `--output-na-placeholder`. E.g. `%(uploader|Unknown)s`
1170
- . *More Conversions*: In addition to the normal format types
1171
- `diouxXeEfFgGcrs`, yt-dlp additionally supports converting to `B` =
1172
- **B**ytes, `j` = **j**son (flag `#` for pretty-printing, `+` for
1173
- Unicode), `h` = HTML escaping, `l` = a comma separated **l**ist (flag
1174
- `#` for `\n` newline-separated), `q` = a string **q**uoted for the
1175
- terminal (flag `#` to split a list into different arguments), `D` = add
1176
- **D**ecimal suffixes (e.g. 10M) (flag `#` to use 1024 as factor), and
1177
- `S` = **S**anitize as filename (flag `#` for restricted)
1178
- . *Unicode normalization*: The format type `U` can be used for NFC
1179
- https://docs.python.org/3/library/unicodedata.html#unicodedata.normalize[Unicode
1180
- normalization]. The alternate form flag (`#`) changes the normalization
1181
- to NFD and the conversion flag `+` can be used for NFKC/NFKD
1182
- compatibility equivalence normalization. E.g. `%(title)+.100U` is NFKC
1183
-
1184
- To summarize, the general syntax for a field is:
1185
-
1186
- ....
1187
- %(name[.keys][addition][>strf][,alternate][&replacement][|default])[flags][width][.precision][length]type
1188
- ....
1189
-
1190
- Additionally, you can set different output templates for the various
1191
- metadata files separately from the general output template by specifying
1192
- the type of file followed by the template separated by a colon `:`. The
1193
- different file types supported are `subtitle`, `thumbnail`,
1194
- `description`, `annotation` (deprecated), `infojson`, `link`,
1195
- `pl_thumbnail`, `pl_description`, `pl_infojson`, `chapter`, `pl_video`.
1196
- E.g. `-o "%(title)s.%(ext)s" -o "thumbnail:%(title)s\%(title)s.%(ext)s"`
1197
- will put the thumbnails in a folder with the same name as the video. If
1198
- any of the templates is empty, that type of file will not be written.
1199
- E.g. `--write-thumbnail -o "thumbnail:"` will write thumbnails only for
1200
- playlists and not for video.
1201
-
1202
- *Note*: Due to post-processing (i.e. merging etc.), the actual output
1203
- filename might differ. Use `--print after_move:filepath` to get the name
1204
- after all post-processing is complete.
1205
-
1206
- The available fields are:
1207
-
1208
- * `id` (string): Video identifier
1209
- * `title` (string): Video title
1210
- * `fulltitle` (string): Video title ignoring live timestamp and generic title
1211
- * `ext` (string): Video filename extension
1212
- * `alt_title` (string): A secondary title of the video
1213
- * `description` (string): The description of the video
1214
- * `display_id` (string): An alternative identifier for the video
1215
- * `uploader` (string): Full name of the video uploader
1216
- * `uploader_id` (string): Nickname or id of the video uploader
1217
- * `uploader_url` (string): URL to the video uploader’s profile
1218
- * `license` (string): License name the video is licensed under
1219
- * `creators` (list): The creators of the video
1220
- * `creator` (string): The creators of the video; comma-separated
1221
- * `timestamp` (numeric): UNIX timestamp of the moment the video became available
1222
- * `upload_date` (string): Video upload date in UTC (YYYYMMDD)
1223
- * `release_timestamp` (numeric): UNIX timestamp of the moment the video was released
1224
- * `release_date` (string): The date (YYYYMMDD) when the video was released in UTC
1225
- * `release_year` (numeric): Year (YYYY) when the video or album was released
1226
- * `modified_timestamp` (numeric): UNIX timestamp of the moment the video was last modified
1227
- * `modified_date` (string): The date (YYYYMMDD) when the video was last modified in UTC
1228
- * `channel` (string): Full name of the channel the video is uploaded on
1229
- * `channel_id` (string): Id of the channel
1230
- * `channel_url` (string): URL of the channel
1231
- * `channel_follower_count` (numeric): Number of followers of the channel
1232
- * `channel_is_verified` (boolean): Whether the channel is verified on the platform
1233
- * `location` (string): Physical location where the video was filmed
1234
- * `duration` (numeric): Length of the video in seconds
1235
- * `duration_string` (string): Length of the video (HH:mm:ss)
1236
- * `view_count` (numeric): How many users have watched the video on the platform
1237
- * `concurrent_view_count` (numeric): How many users are currently watching the video on the platform.
1238
- * `like_count` (numeric): Number of positive ratings of the video
1239
- * `dislike_count` (numeric): Number of negative ratings of the video
1240
- * `repost_count` (numeric): Number of reposts of the video
1241
- * `average_rating` (numeric): Average rating give by users, the scale used depends on the webpage
1242
- * `comment_count` (numeric): Number of comments on the video (For some extractors,
1243
- comments are only downloaded at the end, and so this field cannot be used)
1244
- * `age_limit` (numeric): Age restriction for the video (years)
1245
- * `live_status` (string): One of ``not_live'', ``is_live'',
1246
- ``is_upcoming'', ``was_live'', ``post_live'' (was live, but VOD is not yet processed)
1247
- * `is_live` (boolean): Whether this video is a live stream or a fixed-length video
1248
- * `was_live` (boolean): Whether this video was originally a live stream
1249
- * `playable_in_embed` (string): Whether this video is allowed to play in embedded players on other sites
1250
- * `availability` (string): Whether the video is ``private'',
1251
- ``premium_only'', ``subscriber_only'', ``needs_auth'', ``unlisted'' or ``public''
1252
- * `media_type` (string): The type of media as classified by the site,
1253
- e.g. ``episode'', ``clip'', ``trailer''
1254
- * `start_time` (numeric): Time in seconds where the reproduction should
1255
- start, as specified in the URL
1256
- * `end_time` (numeric): Time in seconds where the reproduction should
1257
- end, as specified in the URL
1258
- * `extractor` (string): Name of the extractor
1259
- * `extractor_key` (string): Key name of the extractor
1260
- * `epoch` (numeric): Unix epoch of when the information extraction was completed
1261
- * `autonumber` (numeric): Number that will be increased with each
1262
- download, starting at `--autonumber-start`, padded with leading zeros to 5 digits
1263
- * `video_autonumber` (numeric): Number that will be increased with each video
1264
- * `n_entries` (numeric): Total number of extracted items in the playlist
1265
- * `playlist_id` (string): Identifier of the playlist that contains the video
1266
- * `playlist_title` (string): Name of the playlist that contains the video
1267
- * `playlist` (string): `playlist_title` if available or else `playlist_id`
1268
- * `playlist_count` (numeric): Total number of items in the playlist. May
1269
- not be known if entire playlist is not extracted
1270
- * `playlist_index` (numeric): Index of the video in the playlist padded
1271
- with leading zeros according the final index
1272
- * `playlist_autonumber` (numeric): Position of the video in the playlist
1273
- download queue padded with leading zeros according to the total length
1274
- of the playlist
1275
- * `playlist_uploader` (string): Full name of the playlist uploader
1276
- * `playlist_uploader_id` (string): Nickname or id of the playlist uploader
1277
- * `playlist_channel` (string): Display name of the channel that uploaded
1278
- the playlist
1279
- * `playlist_channel_id` (string): Identifier of the channel that
1280
- uploaded the playlist
1281
- * `webpage_url` (string): A URL to the video webpage which, if given to
1282
- yt-dlp, should yield the same result again
1283
- * `webpage_url_basename` (string): The basename of the webpage URL
1284
- * `webpage_url_domain` (string): The domain of the webpage URL
1285
- * `original_url` (string): The URL given by the user (or same as `webpage_url`
1286
- for playlist entries)
1287
- * `categories` (list): List of categories the video belongs to
1288
- * `tags` (list): List of tags assigned to the video
1289
- * `cast` (list): List of cast members
1290
-
1291
- All the fields in link:#filtering-formats[Filtering Formats] can also be
1292
- used
1293
-
1294
- Available for the video that belongs to some logical chapter or section:
1295
-
1296
- * `chapter` (string): Name or title of the chapter the video belongs to
1297
- * `chapter_number` (numeric): Number of the chapter the video belongs to
1298
- * `chapter_id` (string): Id of the chapter the video belongs to
1299
-
1300
- Available for the video that is an episode of some series or program:
1301
-
1302
- * `series` (string): Title of the series or program the video episode belongs to
1303
- * `series_id` (string): Id of the series or program the video episode belongs to
1304
- * `season` (string): Title of the season the video episode belongs to
1305
- * `season_number` (numeric): Number of the season the video episode belongs to
1306
- * `season_id` (string): Id of the season the video episode belongs to
1307
- * `episode` (string): Title of the video episode
1308
- * `episode_number` (numeric): Number of the video episode within a season
1309
- * `episode_id` (string): Id of the video episode
1310
-
1311
- Available for the media that is a track or a part of a music album:
1312
-
1313
- * `track` (string): Title of the track
1314
- * `track_number` (numeric): Number of the track within an album or a disc
1315
- * `track_id` (string): Id of the track
1316
- * `artists` (list): Artist(s) of the track
1317
- * `artist` (string): Artist(s) of the track; comma-separated
1318
- * `genres` (list): Genre(s) of the track
1319
- * `genre` (string): Genre(s) of the track; comma-separated
1320
- * `composers` (list): Composer(s) of the piece
1321
- * `composer` (string): Composer(s) of the piece; comma-separated
1322
- * `album` (string): Title of the album the track belongs to
1323
- * `album_type` (string): Type of the album
1324
- * `album_artists` (list): All artists appeared on the album
1325
- * `album_artist` (string): All artists appeared on the album; comma-separated
1326
- * `disc_number` (numeric): Number of the disc or other physical medium
1327
- the track belongs to
1328
-
1329
- Available only when using `--download-sections` and for `chapter:`
1330
- prefix when using `--split-chapters` for videos with internal chapters:
1331
-
1332
- * `section_title` (string): Title of the chapter
1333
- * `section_number` (numeric): Number of the chapter within the file
1334
- * `section_start` (numeric): Start time of the chapter in seconds
1335
- * `section_end` (numeric): End time of the chapter in seconds
1336
-
1337
- Available only when used in `--print`:
1338
-
1339
- * `urls` (string): The URLs of all requested formats, one in each line
1340
- * `filename` (string): Name of the video file. Note that the
1341
- link:#outtmpl-postprocess-note[actual filename may differ]
1342
- * `formats_table` (table): The video format table as printed by
1343
- `--list-formats`
1344
- * `thumbnails_table` (table): The thumbnail format table as printed by `--list-thumbnails`
1345
- * `subtitles_table` (table): The subtitle format table as printed by `--list-subs`
1346
- * `automatic_captions_table` (table): The automatic subtitle format table
1347
- as printed by `--list-subs`
1348
-
1349
- Available only after the video is downloaded
1350
- (`post_process`/`after_move`):
1351
-
1352
- * `filepath`: Actual path of downloaded video file
1353
-
1354
- Available only in `--sponsorblock-chapter-title`:
1355
-
1356
- * `start_time` (numeric): Start time of the chapter in seconds
1357
- * `end_time` (numeric): End time of the chapter in seconds
1358
- * `categories` (list): The
1359
- https://wiki.sponsor.ajay.app/w/Types#Category[SponsorBlock categories]
1360
- the chapter belongs to
1361
- * `category` (string): The smallest SponsorBlock category the chapter
1362
- belongs to
1363
- * `category_names` (list): Friendly names of the categories
1364
- * `name` (string): Friendly name of the smallest category
1365
- * `type` (string): The
1366
- https://wiki.sponsor.ajay.app/w/Types#Action_Type[SponsorBlock action
1367
- type] of the chapter
1368
-
1369
- Each aforementioned sequence when referenced in an output template will
1370
- be replaced by the actual value corresponding to the sequence name. E.g.
1371
- for `-o %(title)s-%(id)s.%(ext)s` and an mp4 video with title
1372
- `yt-dlp test video` and id `BaW_jenozKc`, this will result in a
1373
- `yt-dlp test video-BaW_jenozKc.mp4` file created in the current
1374
- directory.
1375
-
1376
- *Note*: Some of the sequences are not guaranteed to be present, since
1377
- they depend on the metadata obtained by a particular extractor. Such
1378
- sequences will be replaced with placeholder value provided with
1379
- `--output-na-placeholder` (`NA` by default).
1380
-
1381
- *Tip*: Look at the `-j` output to identify which fields are available
1382
- for the particular URL
1383
-
1384
- For numeric sequences you can use
1385
- https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting[numeric
1386
- related formatting]; e.g. `%(view_count)05d` will result in a string
1387
- with view count padded with zeros up to 5 characters, like in `00042`.
1388
-
1389
- Output templates can also contain arbitrary hierarchical path,
1390
- e.g. `-o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s"` which
1391
- will result in downloading each video in a directory corresponding to
1392
- this path template. Any missing directory will be automatically created
1393
- for you.
1394
-
1395
- To use percent literals in an output template use `%%`. To output to
1396
- stdout use `-o -`.
1397
-
1398
- The current default template is `%(title)s [%(id)s].%(ext)s`.
1399
-
1400
- In some cases, you don’t want special characters such as 中, spaces, or
1401
- &, such as when transferring the downloaded filename to a Windows system
1402
- or the filename through an 8bit-unsafe channel. In these cases, add the
1403
- `--restrict-filenames` flag to get a shorter title.
1404
-
1405
- [role="mt-4"]
1406
- === Output template examples
1407
-
1408
- [source,bash]
1409
- ----
1410
- $ yt-dlp --print filename -o "test video.%(ext)s" BaW_jenozKc
1411
- test video.webm # Literal name with correct extension
1412
-
1413
- $ yt-dlp --print filename -o "%(title)s.%(ext)s" BaW_jenozKc
1414
- youtube-dl test video ''_ä↭𝕐.webm # All kinds of weird characters
1415
-
1416
- $ yt-dlp --print filename -o "%(title)s.%(ext)s" BaW_jenozKc --restrict-filenames
1417
- youtube-dl_test_video_.webm # Restricted file name
1418
-
1419
- # Download YouTube playlist videos in separate directory indexed by video order in a playlist
1420
- $ yt-dlp -o "%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
1421
-
1422
- # Download YouTube playlist videos in separate directories according to their uploaded year
1423
- $ yt-dlp -o "%(upload_date>%Y)s/%(title)s.%(ext)s" "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
1424
-
1425
- # Prefix playlist index with " - " separator, but only if it is available
1426
- $ yt-dlp -o "%(playlist_index&{} - |)s%(title)s.%(ext)s" BaW_jenozKc "https://www.youtube.com/user/TheLinuxFoundation/playlists"
1427
-
1428
- # Download all playlists of YouTube channel/user keeping each playlist in separate directory:
1429
- $ yt-dlp -o "%(uploader)s/%(playlist)s/%(playlist_index)s - %(title)s.%(ext)s" "https://www.youtube.com/user/TheLinuxFoundation/playlists"
1430
-
1431
- # Download Udemy course keeping each chapter in separate directory under MyVideos directory in your home
1432
- $ yt-dlp -u user -p password -P "~/MyVideos" -o "%(playlist)s/%(chapter_number)s - %(chapter)s/%(title)s.%(ext)s" "https://www.udemy.com/java-tutorial"
1433
-
1434
- # Download entire series season keeping each series and each season in separate directory under C:/MyVideos
1435
- $ yt-dlp -P "C:/MyVideos" -o "%(series)s/%(season_number)s - %(season)s/%(episode_number)s - %(episode)s.%(ext)s" "https://videomore.ru/kino_v_detalayah/5_sezon/367617"
1436
-
1437
- # Download video as "C:\MyVideos\uploader\title.ext", subtitles as "C:\MyVideos\subs\uploader\title.ext"
1438
- # and put all temporary files in "C:\MyVideos\tmp"
1439
- $ yt-dlp -P "C:/MyVideos" -P "temp:tmp" -P "subtitle:subs" -o "%(uploader)s/%(title)s.%(ext)s" BaW_jenoz --write-subs
1440
-
1441
- # Download video as "C:\MyVideos\uploader\title.ext" and subtitles as "C:\MyVideos\uploader\subs\title.ext"
1442
- $ yt-dlp -P "C:/MyVideos" -o "%(uploader)s/%(title)s.%(ext)s" -o "subtitle:%(uploader)s/subs/%(title)s.%(ext)s" BaW_jenozKc --write-subs
1443
-
1444
- # Stream the video being downloaded to stdout
1445
- $ yt-dlp -o - BaW_jenozKc
1446
- ----
1447
-
1448
-
1449
- [role="mt-5"]
1450
- == FORMAT SELECTION
1451
-
1452
- By default, yt-dlp tries to download the best available quality if you
1453
- *don’t* pass any options. This is generally equivalent to using
1454
- `-f bestvideo*+bestaudio/best`. However, if multiple audiostreams is
1455
- enabled (`--audio-multistreams`), the default format changes to
1456
- `-f bestvideo+bestaudio/best`. Similarly, if ffmpeg is unavailable, or
1457
- if you use yt-dlp to stream to `stdout` (`-o -`), the default becomes
1458
- `-f best/bestvideo+bestaudio`.
1459
-
1460
- *Deprecation warning*: Latest versions of yt-dlp can stream multiple
1461
- formats to the stdout simultaneously using ffmpeg. So, in future
1462
- versions, the default for this will be set to `-f bv*+ba/b` similar to
1463
- normal downloads. If you want to preserve the `-f b/bv+ba` setting, it
1464
- is recommended to explicitly specify it in the configuration options.
1465
-
1466
- The general syntax for format selection is `-f FORMAT` (or
1467
- `--format FORMAT`) where `FORMAT` is a _selector expression_, i.e. an
1468
- expression that describes format or formats you would like to download.
1469
-
1470
- *tl;dr:* link:#format-selection-examples[navigate me to examples].
1471
-
1472
- The simplest case is requesting a specific format; e.g. with `-f 22` you
1473
- can download the format with format code equal to 22. You can get the
1474
- list of available format codes for particular video using
1475
- `--list-formats` or `-F`. Note that these format codes are extractor
1476
- specific.
1477
-
1478
- You can also use a file extension (currently `3gp`, `aac`, `flv`, `m4a`,
1479
- `mp3`, `mp4`, `ogg`, `wav`, `webm` are supported) to download the best
1480
- quality format of a particular file extension served as a single file,
1481
- e.g. `-f webm` will download the best quality format with the `webm`
1482
- extension served as a single file.
1483
-
1484
- You can use `-f -` to interactively provide the format selector _for
1485
- each video_
1486
-
1487
- You can also use special names to select particular edge case formats:
1488
-
1489
- * `all`: Select *all formats* separately
1490
- * `mergeall`: Select and *merge all formats* (Must be used with
1491
- `--audio-multistreams`, `--video-multistreams` or both)
1492
- * `b*`, `best*`: Select the best quality format that *contains either* a
1493
- video or an audio or both (i.e.; `vcodec!=none or acodec!=none`)
1494
- * `b`, `best`: Select the best quality format that *contains both* video
1495
- and audio. Equivalent to `best*[vcodec!=none][acodec!=none]`
1496
- * `bv`, `bestvideo`: Select the best quality *video-only* format.
1497
- Equivalent to `best*[acodec=none]`
1498
- * `bv*`, `bestvideo*`: Select the best quality format that *contains
1499
- video*. It may also contain audio. Equivalent to `best*[vcodec!=none]`
1500
- * `ba`, `bestaudio`: Select the best quality *audio-only* format.
1501
- Equivalent to `best*[vcodec=none]`
1502
- * `ba*`, `bestaudio*`: Select the best quality format that *contains
1503
- audio*. It may also contain video. Equivalent to `best*[acodec!=none]`
1504
- (https://github.com/yt-dlp/yt-dlp/issues/979#issuecomment-919629354[Do
1505
- not use!])
1506
- * `w*`, `worst*`: Select the worst quality format that contains either a
1507
- video or an audio
1508
- * `w`, `worst`: Select the worst quality format that contains both video
1509
- and audio. Equivalent to `worst*[vcodec!=none][acodec!=none]`
1510
- * `wv`, `worstvideo`: Select the worst quality video-only format.
1511
- Equivalent to `worst*[acodec=none]`
1512
- * `wv*`, `worstvideo*`: Select the worst quality format that contains
1513
- video. It may also contain audio. Equivalent to `worst*[vcodec!=none]`
1514
- * `wa`, `worstaudio`: Select the worst quality audio-only format.
1515
- Equivalent to `worst*[vcodec=none]`
1516
- * `wa*`, `worstaudio*`: Select the worst quality format that contains
1517
- audio. It may also contain video. Equivalent to `worst*[acodec!=none]`
1518
-
1519
- For example, to download the worst quality video-only format you can use
1520
- `-f worstvideo`. It is, however, recommended not to use `worst` and
1521
- related options. When your format selector is `worst`, the format which
1522
- is worst in all respects is selected. Most of the time, what you
1523
- actually want is the video with the smallest filesize instead. So it is
1524
- generally better to use `-S +size` or more rigorously,
1525
- `-S +size,+br,+res,+fps` instead of `-f worst`. See
1526
- link:#sorting-formats[Sorting Formats] for more details.
1527
-
1528
- You can select the n’th best format of a type by using `best<type>.<n>`.
1529
- For example, `best.2` will select the 2nd best combined format.
1530
- Similarly, `bv*.3` will select the 3rd best format that contains a video
1531
- stream.
1532
-
1533
- If you want to download multiple videos, and they don’t have the same
1534
- formats available, you can specify the order of preference using
1535
- slashes. Note that formats on the left hand side are preferred;
1536
- e.g. `-f 22/17/18` will download format 22 if it’s available, otherwise
1537
- it will download format 17 if it’s available, otherwise it will download
1538
- format 18 if it’s available, otherwise it will complain that no suitable
1539
- formats are available for download.
1540
-
1541
- If you want to download several formats of the same video use a comma as
1542
- a separator, e.g. `-f 22,17,18` will download all these three formats,
1543
- of course if they are available. Or a more sophisticated example
1544
- combined with the precedence feature:
1545
- `-f 136/137/mp4/bestvideo,140/m4a/bestaudio`.
1546
-
1547
- You can merge the video and audio of multiple formats into a single file
1548
- using `-f <format1>+<format2>+...` (requires ffmpeg installed);
1549
- e.g. `-f bestvideo+bestaudio` will download the best video-only format,
1550
- the best audio-only format and mux them together with ffmpeg.
1551
-
1552
- *Deprecation warning*: Since the _below_ described behavior is complex
1553
- and counter-intuitive, this will be removed and multistreams will be
1554
- enabled by default in the future. A new operator will be instead added
1555
- to limit formats to single audio/video
1556
-
1557
- Unless `--video-multistreams` is used, all formats with a video stream
1558
- except the first one are ignored. Similarly, unless
1559
- `--audio-multistreams` is used, all formats with an audio stream except
1560
- the first one are ignored. E.g.
1561
- `-f bestvideo+best+bestaudio --video-multistreams --audio-multistreams`
1562
- will download and merge all 3 given formats. The resulting file will
1563
- have 2 video streams and 2 audio streams. But
1564
- `-f bestvideo+best+bestaudio --no-video-multistreams` will download and
1565
- merge only `bestvideo` and `bestaudio`. `best` is ignored since another
1566
- format containing a video stream (`bestvideo`) has already been
1567
- selected. The order of the formats is therefore important.
1568
- `-f best+bestaudio --no-audio-multistreams` will download only `best`
1569
- while `-f bestaudio+best --no-audio-multistreams` will ignore `best` and
1570
- download only `bestaudio`.
1571
-
1572
- [role="mt-4"]
1573
- === Filtering Formats
1574
-
1575
- You can also filter the video formats by putting a condition in
1576
- brackets, as in `-f "best[height=720]"` (or `-f "[filesize>10M]"` since
1577
- filters without a selector are interpreted as `best`).
1578
-
1579
- The following numeric meta fields can be used with comparisons `<`,
1580
- `<=`, `>`, `>=`, `=` (equals), `!=` (not equals):
1581
-
1582
- * `filesize`: The number of bytes, if known in advance
1583
- * `filesize_approx`: An estimate for the number of bytes
1584
- * `width`: Width of the video, if known
1585
- * `height`: Height of the video, if known
1586
- * `aspect_ratio`: Aspect ratio of the video, if known
1587
- * `tbr`: Average bitrate of audio and video in link:##[kbps]
1588
- * `abr`: Average audio bitrate in link:##[kbps]
1589
- * `vbr`: Average video bitrate in link:##[kbps]
1590
- * `asr`: Audio sampling rate in Hertz
1591
- * `fps`: Frame rate
1592
- * `audio_channels`: The number of audio channels
1593
- * `stretched_ratio`: `width:height` of the video’s pixels, if not square
1594
-
1595
- Also filtering work for comparisons `=` (equals), `^=` (starts with),
1596
- `$=` (ends with), `*=` (contains), `~=` (matches regex) and following
1597
- string meta fields:
1598
-
1599
- * `url`: Video URL
1600
- * `ext`: File extension
1601
- * `acodec`: Name of the audio codec in use
1602
- * `vcodec`: Name of the video codec in use
1603
- * `container`: Name of the container format
1604
- * `protocol`: The protocol that will be used for the actual download,
1605
- lower-case (`http`, `https`, `rtsp`, `rtmp`, `rtmpe`, `mms`, `f4m`,
1606
- `ism`, `http_dash_segments`, `m3u8`, or `m3u8_native`)
1607
- * `language`: Language code
1608
- * `dynamic_range`: The dynamic range of the video
1609
- * `format_id`: A short description of the format
1610
- * `format`: A human-readable description of the format
1611
- * `format_note`: Additional info about the format
1612
- * `resolution`: Textual description of width and height
1613
-
1614
- Any string comparison may be prefixed with negation `!` in order to
1615
- produce an opposite comparison, e.g. `!*=` (does not contain). The
1616
- comparand of a string comparison needs to be quoted with either double
1617
- or single quotes if it contains spaces or special characters other than
1618
- `._-`.
1619
-
1620
- *Note*: None of the aforementioned meta fields are guaranteed to be
1621
- present since this solely depends on the metadata obtained by the
1622
- particular extractor, i.e. the metadata offered by the website. Any
1623
- other field made available by the extractor can also be used for
1624
- filtering.
1625
-
1626
- Formats for which the value is not known are excluded unless you put a
1627
- question mark (`?`) after the operator. You can combine format filters,
1628
- so `-f "bv[height<=?720][tbr>500]"` selects up to 720p videos (or videos
1629
- where the height is not known) with a bitrate of at least 500 kbps. You
1630
- can also use the filters with `all` to download all formats that satisfy
1631
- the filter, e.g. `-f "all[vcodec=none]"` selects all audio-only formats.
1632
-
1633
- Format selectors can also be grouped using parentheses;
1634
- e.g. `-f "(mp4,webm)[height<480]"` will download the best pre-merged mp4
1635
- and webm formats with a height lower than 480.
1636
-
1637
- [role="mt-4"]
1638
- === Sorting Formats
1639
-
1640
- You can change the criteria for being considered the `best` by using
1641
- `-S` (`--format-sort`). The general format for this is
1642
- `--format-sort field1,field2...`.
1643
-
1644
- The available fields are:
1645
-
1646
- * `hasvid`: Gives priority to formats that have a video stream
1647
- * `hasaud`: Gives priority to formats that have an audio stream
1648
- * `ie_pref`: The format preference
1649
- * `lang`: The language preference
1650
- * `quality`: The quality of the format
1651
- * `source`: The preference of the source
1652
- * `proto`: Protocol used for download (`https`/`ftps` > `http`/`ftp` >
1653
- `m3u8_native`/`m3u8` > `http_dash_segments`> `websocket_frag` >
1654
- `mms`/`rtsp` > `f4f`/`f4m`)
1655
- * `vcodec`: Video Codec (`av01` > `vp9.2` > `vp9` > `h265` > `h264` >
1656
- `vp8` > `h263` > `theora` > other)
1657
- * `acodec`: Audio Codec (`flac`/`alac` > `wav`/`aiff` > `opus` >
1658
- `vorbis` > `aac` > `mp4a` > `mp3` > `ac4` > `eac3` > `ac3` > `dts` >
1659
- other)
1660
- * `codec`: Equivalent to `vcodec,acodec`
1661
- * `vext`: Video Extension (`mp4` > `mov` > `webm` > `flv` > other). If
1662
- `--prefer-free-formats` is used, `webm` is preferred.
1663
- * `aext`: Audio Extension (`m4a` > `aac` > `mp3` > `ogg` > `opus` >
1664
- `webm` > other). If `--prefer-free-formats` is used, the order changes
1665
- to `ogg` > `opus` > `webm` > `mp3` > `m4a` > `aac`
1666
- * `ext`: Equivalent to `vext,aext`
1667
- * `filesize`: Exact filesize, if known in advance
1668
- * `fs_approx`: Approximate filesize
1669
- * `size`: Exact filesize if available, otherwise approximate filesize
1670
- * `height`: Height of video
1671
- * `width`: Width of video
1672
- * `res`: Video resolution, calculated as the smallest dimension.
1673
- * `fps`: Framerate of video
1674
- * `hdr`: The dynamic range of the video (`DV` > `HDR12` > `HDR10+` >
1675
- `HDR10` > `HLG` > `SDR`)
1676
- * `channels`: The number of audio channels
1677
- * `tbr`: Total average bitrate in link:##[kbps]
1678
- * `vbr`: Average video bitrate in link:##[kbps]
1679
- * `abr`: Average audio bitrate in link:##[kbps]
1680
- * `br`: Average bitrate in link:##[kbps], `tbr`/`vbr`/`abr`
1681
- * `asr`: Audio sample rate in Hz
1682
-
1683
- *Deprecation warning*: Many of these fields have (currently
1684
- undocumented) aliases, that may be removed in a future version. It is
1685
- recommended to use only the documented field names.
1686
-
1687
- All fields, unless specified otherwise, are sorted in descending order.
1688
- To reverse this, prefix the field with a `+`. E.g. `+res` prefers format
1689
- with the smallest resolution. Additionally, you can suffix a preferred
1690
- value for the fields, separated by a `:`. E.g. `res:720` prefers larger
1691
- videos, but no larger than 720p and the smallest video if there are no
1692
- videos less than 720p. For `codec` and `ext`, you can provide two
1693
- preferred values, the first for video and the second for audio. E.g.
1694
- `+codec:avc:m4a` (equivalent to `+vcodec:avc,+acodec:m4a`) sets the
1695
- video codec preference to `h264` > `h265` > `vp9` > `vp9.2` > `av01` >
1696
- `vp8` > `h263` > `theora` and audio codec preference to `mp4a` > `aac` >
1697
- `vorbis` > `opus` > `mp3` > `ac3` > `dts`. You can also make the sorting
1698
- prefer the nearest values to the provided by using `~` as the delimiter.
1699
- E.g. `filesize~1G` prefers the format with filesize closest to 1 GiB.
1700
-
1701
- The fields `hasvid` and `ie_pref` are always given highest priority in
1702
- sorting, irrespective of the user-defined order. This behavior can be
1703
- changed by using `--format-sort-force`. Apart from these, the default
1704
- order used is:
1705
- `lang,quality,res,fps,hdr:12,vcodec:vp9.2,channels,acodec,size,br,asr,proto,ext,hasaud,source,id`.
1706
- The extractors may override this default order, but they cannot override
1707
- the user-provided order.
1708
-
1709
- Note that the default has `vcodec:vp9.2`; i.e. `av1` is not preferred.
1710
- Similarly, the default for hdr is `hdr:12`; i.e. Dolby Vision is not
1711
- preferred. These choices are made since DV and AV1 formats are not yet
1712
- fully compatible with most devices. This may be changed in the future as
1713
- more devices become capable of smoothly playing back these formats.
1714
-
1715
- If your format selector is `worst`, the last item is selected after
1716
- sorting. This means it will select the format that is worst in all
1717
- respects. Most of the time, what you actually want is the video with the
1718
- smallest filesize instead. So it is generally better to use
1719
- `-f best -S +size,+br,+res,+fps`.
1720
-
1721
- *Tip*: You can use the `-v -F` to see how the formats have been sorted
1722
- (worst to best).
1723
-
1724
- [role="mt-4"]
1725
- === Format Selection examples
1726
-
1727
- [source,bash]
1728
- ----
1729
- # Download and merge the best video-only format and the best audio-only format,
1730
- # or download the best combined format if video-only format is not available
1731
- $ yt-dlp -f "bv+ba/b"
1732
-
1733
- # Download best format that contains video,
1734
- # and if it doesn't already have an audio stream, merge it with best audio-only format
1735
- $ yt-dlp -f "bv*+ba/b"
1736
-
1737
- # Same as above
1738
- $ yt-dlp
1739
-
1740
- # Download the best video-only format and the best audio-only format without merging them
1741
- # For this case, an output template should be used since
1742
- # by default, bestvideo and bestaudio will have the same file name.
1743
- $ yt-dlp -f "bv,ba" -o "%(title)s.f%(format_id)s.%(ext)s"
1744
-
1745
- # Download and merge the best format that has a video stream,
1746
- # and all audio-only formats into one file
1747
- $ yt-dlp -f "bv*+mergeall[vcodec=none]" --audio-multistreams
1748
-
1749
- # Download and merge the best format that has a video stream,
1750
- # and the best 2 audio-only formats into one file
1751
- $ yt-dlp -f "bv*+ba+ba.2" --audio-multistreams
1752
-
1753
-
1754
- # The following examples show the old method (without -S) of format selection
1755
- # and how to use -S to achieve a similar but (generally) better result
1756
-
1757
- # Download the worst video available (old method)
1758
- $ yt-dlp -f "wv*+wa/w"
1759
-
1760
- # Download the best video available but with the smallest resolution
1761
- $ yt-dlp -S "+res"
1762
-
1763
- # Download the smallest video available
1764
- $ yt-dlp -S "+size,+br"
1765
-
1766
-
1767
-
1768
- # Download the best mp4 video available, or the best video if no mp4 available
1769
- $ yt-dlp -f "bv*[ext=mp4]+ba[ext=m4a]/b[ext=mp4] / bv*+ba/b"
1770
-
1771
- # Download the best video with the best extension
1772
- # (For video, mp4 > mov > webm > flv. For audio, m4a > aac > mp3 ...)
1773
- $ yt-dlp -S "ext"
1774
-
1775
-
1776
-
1777
- # Download the best video available but no better than 480p,
1778
- # or the worst video if there is no video under 480p
1779
- $ yt-dlp -f "bv*[height<=480]+ba/b[height<=480] / wv*+ba/w"
1780
-
1781
- # Download the best video available with the largest height but no better than 480p,
1782
- # or the best video with the smallest resolution if there is no video under 480p
1783
- $ yt-dlp -S "height:480"
1784
-
1785
- # Download the best video available with the largest resolution but no better than 480p,
1786
- # or the best video with the smallest resolution if there is no video under 480p
1787
- # Resolution is determined by using the smallest dimension.
1788
- # So this works correctly for vertical videos as well
1789
- $ yt-dlp -S "res:480"
1790
-
1791
-
1792
-
1793
- # Download the best video (that also has audio) but no bigger than 50 MB,
1794
- # or the worst video (that also has audio) if there is no video under 50 MB
1795
- $ yt-dlp -f "b[filesize<50M] / w"
1796
-
1797
- # Download largest video (that also has audio) but no bigger than 50 MB,
1798
- # or the smallest video (that also has audio) if there is no video under 50 MB
1799
- $ yt-dlp -f "b" -S "filesize:50M"
1800
-
1801
- # Download best video (that also has audio) that is closest in size to 50 MB
1802
- $ yt-dlp -f "b" -S "filesize~50M"
1803
-
1804
- # Download best video available via direct link over HTTP/HTTPS protocol,
1805
- # or the best video available via any protocol if there is no such video
1806
- $ yt-dlp -f "(bv*+ba/b)[protocol^=http][protocol!*=dash] / (bv*+ba/b)"
1807
-
1808
- # Download best video available via the best protocol
1809
- # (https/ftps > http/ftp > m3u8_native > m3u8 > http_dash_segments ...)
1810
- $ yt-dlp -S "proto"
1811
-
1812
- # Download the best video with either h264 or h265 codec,
1813
- # or the best video if there is no such video
1814
- $ yt-dlp -f "(bv*[vcodec~='^((he|a)vc|h26[45])']+ba) / (bv*+ba/b)"
1815
-
1816
- # Download the best video with best codec no better than h264,
1817
- # or the best video with worst codec if there is no such video
1818
- $ yt-dlp -S "codec:h264"
1819
-
1820
- # Download the best video with worst codec no worse than h264,
1821
- # or the best video with best codec if there is no such video
1822
- $ yt-dlp -S "+codec:h264"
1823
-
1824
- # More complex examples
1825
-
1826
- # Download the best video no better than 720p preferring framerate greater than 30,
1827
- # or the worst video (still preferring framerate greater than 30) if there is no such video
1828
- $ yt-dlp -f "((bv*[fps>30]/bv*)[height<=720]/(wv*[fps>30]/wv*)) + ba / (b[fps>30]/b)[height<=720]/(w[fps>30]/w)"
1829
-
1830
- # Download the video with the largest resolution no better than 720p,
1831
- # or the video with the smallest resolution available if there is no such video,
1832
- # preferring larger framerate for formats with the same resolution
1833
- $ yt-dlp -S "res:720,fps"
1834
-
1835
- # Download the video with smallest resolution no worse than 480p,
1836
- # or the video with the largest resolution available if there is no such video,
1837
- # preferring better codec and then larger total bitrate for the same resolution
1838
- $ yt-dlp -S "+res:480,codec,br"
1839
- ----
1840
-
1841
-
1842
- [role="mt-5"]
1843
- == MODIFYING METADATA
1844
-
1845
- The metadata obtained by the extractors can be modified by using
1846
- `--parse-metadata` and `--replace-in-metadata`
1847
-
1848
- `--replace-in-metadata FIELDS REGEX REPLACE` is used to replace text in
1849
- any metadata field using
1850
- https://docs.python.org/3/library/re.html#regular-expression-syntax[Python
1851
- regular expression].
1852
- https://docs.python.org/3/library/re.html?highlight=backreferences#re.sub[Backreferences]
1853
- can be used in the replace string for advanced use.
1854
-
1855
- The general syntax of `--parse-metadata FROM:TO` is to give the name of
1856
- a field or an link:#output-template[output template] to extract data
1857
- from, and the format to interpret it as, separated by a colon `:`.
1858
- Either a
1859
- https://docs.python.org/3/library/re.html#regular-expression-syntax[Python
1860
- regular expression] with named capture groups, a single field name, or a
1861
- similar syntax to the link:#output-template[output template] (only
1862
- `%(field)s` formatting is supported) can be used for `TO`. The option
1863
- can be used multiple times to parse and modify various fields.
1864
-
1865
- Note that these options preserve their relative order, allowing
1866
- replacements to be made in parsed fields and viceversa. Also, any field
1867
- thus created can be used in the link:#output-template[output template]
1868
- and will also affect the media file’s metadata added when using
1869
- `--embed-metadata`.
1870
-
1871
- This option also has a few special uses:
1872
-
1873
- * You can download an additional URL based on the metadata of the
1874
- currently downloaded video. To do this, set the field `additional_urls`
1875
- to the URL that you want to download. E.g.
1876
- `--parse-metadata "description:(?P<additional_urls>https?://www\.vimeo\.com/\d+)"`
1877
- will download the first vimeo video found in the description
1878
- * You can use this to change the metadata that is embedded in the media
1879
- file. To do this, set the value of the corresponding field with a
1880
- `meta_` prefix. For example, any value you set to `meta_description`
1881
- field will be added to the `description` field in the file - you can use
1882
- this to set a different ``description'' and ``synopsis''. To modify the
1883
- metadata of individual streams, use the `meta<n>_` prefix
1884
- (e.g. `meta1_language`). Any value set to the `meta_` field will
1885
- overwrite all default values.
1886
-
1887
- *Note*: Metadata modification happens before format selection,
1888
- post-extraction and other post-processing operations. Some fields may be
1889
- added or changed during these steps, overriding your changes.
1890
-
1891
- For reference, these are the fields yt-dlp adds by default to the file
1892
- metadata:
1893
-
1894
- [cols="<,<",options="header",]
1895
- |===
1896
- |Metadata fields |From
1897
- |`title` |`track` or `title`
1898
-
1899
- |`date` |`upload_date`
1900
-
1901
- |`description`, `synopsis` |`description`
1902
-
1903
- |`purl`, `comment` |`webpage_url`
1904
-
1905
- |`track` |`track_number`
1906
-
1907
- |`artist` |`artist`, `artists`, `creator`, `creators`, `uploader` or
1908
- `uploader_id`
1909
-
1910
- |`composer` |`composer` or `composers`
1911
-
1912
- |`genre` |`genre` or `genres`
1913
-
1914
- |`album` |`album`
1915
-
1916
- |`album_artist` |`album_artist` or `album_artists`
1917
-
1918
- |`disc` |`disc_number`
1919
-
1920
- |`show` |`series`
1921
-
1922
- |`season_number` |`season_number`
1923
-
1924
- |`episode_id` |`episode` or `episode_id`
1925
-
1926
- |`episode_sort` |`episode_number`
1927
-
1928
- |`language` of each stream |the format’s `language`
1929
- |===
1930
-
1931
- *Note*: The file format may not support some of these fields
1932
-
1933
- [role="mt-4"]
1934
- === Modifying metadata examples
1935
-
1936
- [source,bash]
1937
- ----
1938
- # Interpret the title as "Artist - Title"
1939
- $ yt-dlp --parse-metadata "title:%(artist)s - %(title)s"
1940
-
1941
- # Regex example
1942
- $ yt-dlp --parse-metadata "description:Artist - (?P<artist>.+)"
1943
-
1944
- # Set title as "Series name S01E05"
1945
- $ yt-dlp --parse-metadata "%(series)s S%(season_number)02dE%(episode_number)02d:%(title)s"
1946
-
1947
- # Prioritize uploader as the "artist" field in video metadata
1948
- $ yt-dlp --parse-metadata "%(uploader|)s:%(meta_artist)s" --embed-metadata
1949
-
1950
- # Set "comment" field in video metadata using description instead of webpage_url,
1951
- # handling multiple lines correctly
1952
- $ yt-dlp --parse-metadata "description:(?s)(?P<meta_comment>.+)" --embed-metadata
1953
-
1954
- # Do not set any "synopsis" in the video metadata
1955
- $ yt-dlp --parse-metadata ":(?P<meta_synopsis>)"
1956
-
1957
- # Remove "formats" field from the infojson by setting it to an empty string
1958
- $ yt-dlp --parse-metadata "video::(?P<formats>)" --write-info-json
1959
-
1960
- # Replace all spaces and "_" in title and uploader with a `-`
1961
- $ yt-dlp --replace-in-metadata "title,uploader" "[ _]" "-"
1962
- ----
1963
-
1964
-
1965
- [role="mt-5"]
1966
- == EXTRACTOR ARGUMENTS
1967
-
1968
- Some extractors accept additional arguments which can be passed using
1969
- `--extractor-args KEY:ARGS`. `ARGS` is a `;` (semicolon) separated
1970
- string of `ARG=VAL1,VAL2`. E.g.
1971
- `--extractor-args "youtube:player-client=mediaconnect,web;formats=incomplete" --extractor-args "funimation:version=uncut"`
1972
-
1973
- Note: In CLI, `ARG` can use `-` instead of `_`;
1974
- e.g. `youtube:player-client"` becomes `youtube:player_client"`
1975
-
1976
- The following extractors use this feature:
1977
-
1978
- [role="mt-4"]
1979
- === youtube
1980
-
1981
- * `lang`: Prefer translated metadata (`title`, `description` etc) of
1982
- this language code (case-sensitive). By default, the video primary
1983
- language metadata is preferred, with a fallback to `en` translated. See
1984
- https://github.com/yt-dlp/yt-dlp/blob/c26f9b991a0681fd3ea548d535919cec1fbbd430/yt_dlp/extractor/youtube.py#L381-L390[youtube.py]
1985
- for list of supported content language codes
1986
- * `skip`: One or more of `hls`, `dash` or `translated_subs` to skip
1987
- extraction of the m3u8 manifests, dash manifests and
1988
- https://github.com/yt-dlp/yt-dlp/issues/4090#issuecomment-1158102032[auto-translated
1989
- subtitles] respectively
1990
- * `player_client`: Clients to extract video data from. The main clients
1991
- are `web`, `ios` and `android`, with variants `_music` and `_creator`
1992
- (e.g. `ios_creator`); and `mediaconnect`, `mweb`, `android_producer`,
1993
- `android_testsuite`, `android_vr`, `web_safari`, `web_embedded`, `tv`
1994
- and `tv_embedded` with no variants. By default, `ios,web_creator` is
1995
- used, and `tv_embedded`, `web_creator` and `mediaconnect` are added as
1996
- required for age-gated videos. Similarly, the music variants are added
1997
- for `music.youtube.com` urls. Most `android` clients will be given
1998
- lowest priority since their formats are broken. You can use `all` to use
1999
- all the clients, and `default` for the default clients.
2000
- * `player_skip`: Skip some network requests that are generally needed
2001
- for robust extraction. One or more of `configs` (skip client configs),
2002
- `webpage` (skip initial webpage), `js` (skip js player). While these
2003
- options can help reduce the number of requests needed or avoid some
2004
- rate-limiting, they could cause some issues. See
2005
- https://github.com/yt-dlp/yt-dlp/pull/860[#860] for more details
2006
- * `player_params`: YouTube player parameters to use for player requests.
2007
- Will overwrite any default ones set by yt-dlp.
2008
- * `comment_sort`: `top` or `new` (default) - choose comment sorting mode
2009
- (on YouTube’s side)
2010
- * `max_comments`: Limit the amount of comments to gather.
2011
- Comma-separated list of integers representing
2012
- `max-comments,max-parents,max-replies,max-replies-per-thread`. Default
2013
- is `all,all,all,all`
2014
- ** E.g. `all,all,1000,10` will get a maximum of 1000 replies total, with
2015
- up to 10 replies per thread. `1000,all,100` will get a maximum of 1000
2016
- comments, with a maximum of 100 replies total
2017
- * `formats`: Change the types of formats to return. `dashy` (convert
2018
- HTTP to DASH), `duplicate` (identical content but different URLs or
2019
- protocol; includes `dashy`), `incomplete` (cannot be downloaded
2020
- completely - live dash and post-live m3u8)
2021
- * `innertube_host`: Innertube API host to use for all API requests;
2022
- e.g. `studio.youtube.com`, `youtubei.googleapis.com`. Note that cookies
2023
- exported from one subdomain will not work on others
2024
- * `innertube_key`: Innertube API key to use for all API requests. By
2025
- default, no API key is used
2026
- * `raise_incomplete_data`: `Incomplete Data Received` raises an error
2027
- instead of reporting a warning
2028
- * `data_sync_id`: Overrides the account Data Sync ID used in Innertube
2029
- API requests. This may be needed if you are using an account with
2030
- `youtube:player_skip=webpage,configs` or `youtubetab:skip=webpage`
2031
- * `visitor_data`: Overrides the Visitor Data used in Innertube API
2032
- requests. This should be used with `player_skip=webpage,configs` and
2033
- without cookies. Note: this may have adverse effects if used improperly.
2034
- If a session from a browser is wanted, you should pass cookies instead
2035
- (which contain the Visitor ID)
2036
- * `po_token`: Proof of Origin (PO) Token(s) to use for requesting video
2037
- playback. Comma seperated list of PO Tokens in the format
2038
- `CLIENT+PO_TOKEN`, e.g. `youtube:po_token=web+XXX,android+YYY`
2039
-
2040
- [role="mt-4"]
2041
- === youtubetab (YouTube playlists, channels, feeds, etc.)
2042
-
2043
- * `skip`: One or more of `webpage` (skip initial webpage download),
2044
- `authcheck` (allow the download of playlists requiring authentication
2045
- when no initial webpage is downloaded. This may cause unwanted behavior,
2046
- see https://github.com/yt-dlp/yt-dlp/pull/1122[#1122] for more details)
2047
- * `approximate_date`: Extract approximate `upload_date` and `timestamp`
2048
- in flat-playlist. This may cause date-based filters to be slightly off
2049
-
2050
- [role="mt-4"]
2051
- === generic
2052
-
2053
- * `fragment_query`: Passthrough any query in mpd/m3u8 manifest URLs to
2054
- their fragments if no value is provided, or else apply the query string
2055
- given as `fragment_query=VALUE`. Note that if the stream has an HLS
2056
- AES-128 key, then the query parameters will be passed to the key URI as
2057
- well, unless the `key_query` extractor-arg is passed, or unless an
2058
- external key URI is provided via the `hls_key` extractor-arg. Does not
2059
- apply to ffmpeg
2060
- * `variant_query`: Passthrough the master m3u8 URL query to its variant
2061
- playlist URLs if no value is provided, or else apply the query string
2062
- given as `variant_query=VALUE`
2063
- * `key_query`: Passthrough the master m3u8 URL query to its HLS AES-128
2064
- decryption key URI if no value is provided, or else apply the query
2065
- string given as `key_query=VALUE`. Note that this will have no effect if
2066
- the key URI is provided via the `hls_key` extractor-arg. Does not apply
2067
- to ffmpeg
2068
- * `hls_key`: An HLS AES-128 key URI _or_ key (as hex), and optionally
2069
- the IV (as hex), in the form of `(URI|KEY)[,IV]`;
2070
- e.g. `generic:hls_key=ABCDEF1234567980,0xFEDCBA0987654321`. Passing any
2071
- of these values will force usage of the native HLS downloader and
2072
- override the corresponding values found in the m3u8 playlist
2073
- * `is_live`: Bypass live HLS detection and manually set `live_status` -
2074
- a value of `false` will set `not_live`, any other value (or no value)
2075
- will set `is_live`
2076
-
2077
- [role="mt-4"]
2078
- === funimation
2079
-
2080
- * `language`: Audio languages to extract,
2081
- e.g. `funimation:language=english,japanese`
2082
- * `version`: The video version to extract - `uncut` or `simulcast`
2083
-
2084
- [role="mt-4"]
2085
- === crunchyrollbeta (Crunchyroll)
2086
-
2087
- * `hardsub`: One or more hardsub versions to extract (in order of
2088
- preference), or `all` (default: `None` = no hardsubs will be extracted),
2089
- e.g. `crunchyrollbeta:hardsub=en-US,de-DE`
2090
-
2091
- [role="mt-4"]
2092
- === vikichannel
2093
-
2094
- * `video_types`: Types of videos to download - one or more of
2095
- `episodes`, `movies`, `clips`, `trailers`
2096
-
2097
- [role="mt-4"]
2098
- === niconico
2099
-
2100
- * `segment_duration`: Segment duration in milliseconds for HLS-DMC
2101
- formats. Use it at your own risk since this feature *may result in your
2102
- account termination.*
2103
-
2104
- [role="mt-4"]
2105
- === youtubewebarchive
2106
-
2107
- * `check_all`: Try to check more at the cost of more requests. One or
2108
- more of `thumbnails`, `captures`
2109
-
2110
- [role="mt-4"]
2111
- === gamejolt
2112
-
2113
- * `comment_sort`: `hot` (default), `you` (cookies needed), `top`, `new`
2114
- - choose comment sorting mode (on GameJolt’s side)
2115
-
2116
- [role="mt-4"]
2117
- === hotstar
2118
-
2119
- * `res`: resolution to ignore - one or more of `sd`, `hd`, `fhd`
2120
- * `vcodec`: vcodec to ignore - one or more of `h264`, `h265`, `dvh265`
2121
- * `dr`: dynamic range to ignore - one or more of `sdr`, `hdr10`, `dv`
2122
-
2123
- [role="mt-4"]
2124
- === niconicochannelplus
2125
-
2126
- * `max_comments`: Maximum number of comments to extract - default is
2127
- `120`
2128
-
2129
- [role="mt-4"]
2130
- === tiktok
2131
-
2132
- * `api_hostname`: Hostname to use for mobile API calls,
2133
- e.g. `api22-normal-c-alisg.tiktokv.com`
2134
- * `app_name`: Default app name to use with mobile API calls,
2135
- e.g. `trill`
2136
- * `app_version`: Default app version to use with mobile API calls -
2137
- should be set along with `manifest_app_version`, e.g. `34.1.2`
2138
- * `manifest_app_version`: Default numeric app version to use with mobile
2139
- API calls, e.g. `2023401020`
2140
- * `aid`: Default app ID to use with mobile API calls, e.g. `1180`
2141
- * `app_info`: Enable mobile API extraction with one or more app info
2142
- strings in the format of
2143
- `<iid>/[app_name]/[app_version]/[manifest_app_version]/[aid]`, where
2144
- `iid` is the unique app install ID. `iid` is the only required value;
2145
- all other values and their `/` separators can be omitted,
2146
- e.g. `tiktok:app_info=1234567890123456789` or
2147
- `tiktok:app_info=123,456/trill///1180,789//34.0.1/340001`
2148
- * `device_id`: Enable mobile API extraction with a genuine device ID to
2149
- be used with mobile API calls. Default is a random 19-digit string
2150
-
2151
- [role="mt-4"]
2152
- === rokfinchannel
2153
-
2154
- * `tab`: Which tab to download - one of `new`, `top`, `videos`,
2155
- `podcasts`, `streams`, `stacks`
2156
-
2157
- [role="mt-4"]
2158
- === twitter
2159
-
2160
- * `api`: Select one of `graphql` (default), `legacy` or `syndication` as
2161
- the API for tweet extraction. Has no effect if logged in
2162
-
2163
- [role="mt-4"]
2164
- === stacommu, wrestleuniverse
2165
-
2166
- * `device_id`: UUID value assigned by the website and used to enforce
2167
- device limits for paid livestream content. Can be found in browser local
2168
- storage
2169
-
2170
- [role="mt-4"]
2171
- === twitch
2172
-
2173
- * `client_id`: Client ID value to be sent with GraphQL requests,
2174
- e.g. `twitch:client_id=kimne78kx3ncx6brgo4mv6wki5h1ko`
2175
-
2176
- [role="mt-4"]
2177
- === nhkradirulive (NHK らじる★らじる LIVE)
2178
-
2179
- * `area`: Which regional variation to extract. Valid areas are:
2180
- `sapporo`, `sendai`, `tokyo`, `nagoya`, `osaka`, `hiroshima`,
2181
- `matsuyama`, `fukuoka`. Defaults to `tokyo`
2182
-
2183
- [role="mt-4"]
2184
- === nflplusreplay
2185
-
2186
- * `type`: Type(s) of game replays to extract. Valid types are:
2187
- `full_game`, `full_game_spanish`, `condensed_game` and `all_22`. You can
2188
- use `all` to extract all available replay types, which is the default
2189
-
2190
- [role="mt-4"]
2191
- === jiocinema
2192
-
2193
- * `refresh_token`: The `refreshToken` UUID from browser local storage
2194
- can be passed to extend the life of your login session when logging in
2195
- with `token` as username and the `accessToken` from browser local
2196
- storage as password
2197
-
2198
- [role="mt-4"]
2199
- === jiosaavn
2200
-
2201
- * `bitrate`: Audio bitrates to request. One or more of `16`, `32`, `64`,
2202
- `128`, `320`. Default is `128,320`
2203
-
2204
- [role="mt-4"]
2205
- === afreecatvlive
2206
-
2207
- * `cdn`: One or more CDN IDs to use with the API call for stream URLs,
2208
- e.g. `gcp_cdn`, `gs_cdn_pc_app`, `gs_cdn_mobile_web`, `gs_cdn_pc_web`
2209
-
2210
- [role="mt-4"]
2211
- === soundcloud
2212
-
2213
- * `formats`: Formats to request from the API. Requested values should be
2214
- in the format of `{protocol}_{extension}` (omitting the bitrate),
2215
- e.g. `hls_opus,http_aac`. The `*` character functions as a wildcard,
2216
- e.g. `*_mp3`, and can be passed by itself to request all formats. Known
2217
- protocols include `http`, `hls` and `hls-aes`; known extensions include
2218
- `aac`, `opus` and `mp3`. Original `download` formats are always
2219
- extracted. Default is
2220
- `http_aac,hls_aac,http_opus,hls_opus,http_mp3,hls_mp3`
2221
-
2222
- [role="mt-4"]
2223
- === orfon (orf:on)
2224
-
2225
- * `prefer_segments_playlist`: Prefer a playlist of program segments
2226
- instead of a single complete video when available. If individual
2227
- segments are desired, use
2228
- `--concat-playlist never --extractor-args "orfon:prefer_segments_playlist"`
2229
-
2230
- [role="mt-4"]
2231
- === bilibili
2232
-
2233
- * `prefer_multi_flv`: Prefer extracting flv formats over mp4 for older
2234
- videos that still provide legacy formats
2235
-
2236
- [role="mt-4"]
2237
- === digitalconcerthall
2238
-
2239
- * `prefer_combined_hls`: Prefer extracting combined/pre-merged video and
2240
- audio HLS formats. This will exclude 4K/HEVC video and lossless/FLAC
2241
- audio formats, which are only available as split video/audio HLS formats
2242
-
2243
- *Note*: These options may be changed/removed in the future without
2244
- concern for backward compatibility
2245
-
2246
-
2247
- [role="mt-5"]
2248
- == PLUGINS
2249
-
2250
- Note that *all* plugins are imported even if not invoked, and that
2251
- *there are no checks* performed on plugin code. *Use plugins at your own
2252
- risk and only if you trust the code!*
2253
-
2254
- Plugins can be of `<type>`s `extractor` or `postprocessor`. - Extractor
2255
- plugins do not need to be enabled from the CLI and are automatically
2256
- invoked when the input URL is suitable for it. - Extractor plugins take
2257
- priority over built-in extractors. - Postprocessor plugins can be
2258
- invoked using `--use-postprocessor NAME`.
2259
-
2260
- Plugins are loaded from the namespace packages
2261
- `yt_dlp_plugins.extractor` and `yt_dlp_plugins.postprocessor`.
2262
-
2263
- In other words, the file structure on the disk looks something like:
2264
-
2265
- ....
2266
- yt_dlp_plugins/
2267
- extractor/
2268
- myplugin.py
2269
- postprocessor/
2270
- myplugin.py
2271
- ....
2272
-
2273
- yt-dlp looks for these `yt_dlp_plugins` namespace folders in many
2274
- locations (see below) and loads in plugins from *all* of them.
2275
-
2276
- See the https://github.com/yt-dlp/yt-dlp/wiki/Plugins[wiki for some
2277
- known plugins]
2278
-
2279
- [role="mt-4"]
2280
- === Installing Plugins
2281
-
2282
- Plugins can be installed using various methods and locations.
2283
-
2284
- [arabic]
2285
- . *Configuration directories*: Plugin packages (containing a
2286
- `yt_dlp_plugins` namespace folder) can be dropped into the following
2287
- standard link:#configuration[configuration locations]:
2288
- * *User Plugins*
2289
- ** `${XDG_CONFIG_HOME}/yt-dlp/plugins/<package name>/yt_dlp_plugins/`
2290
- (recommended on Linux/macOS)
2291
- ** `${XDG_CONFIG_HOME}/yt-dlp-plugins/<package name>/yt_dlp_plugins/`
2292
- ** `${APPDATA}/yt-dlp/plugins/<package name>/yt_dlp_plugins/`
2293
- (recommended on Windows)
2294
- ** `${APPDATA}/yt-dlp-plugins/<package name>/yt_dlp_plugins/`
2295
- ** `~/.yt-dlp/plugins/<package name>/yt_dlp_plugins/`
2296
- ** `~/yt-dlp-plugins/<package name>/yt_dlp_plugins/`
2297
- * *System Plugins*
2298
- ** `/etc/yt-dlp/plugins/<package name>/yt_dlp_plugins/`
2299
- ** `/etc/yt-dlp-plugins/<package name>/yt_dlp_plugins/`
2300
- . *Executable location*: Plugin packages can similarly be installed in a
2301
- `yt-dlp-plugins` directory under the executable location (recommended
2302
- for portable installations):
2303
- * Binary: where `<root-dir>/yt-dlp.exe`,
2304
- `<root-dir>/yt-dlp-plugins/<package name>/yt_dlp_plugins/`
2305
- * Source: where `<root-dir>/yt_dlp/__main__.py`,
2306
- `<root-dir>/yt-dlp-plugins/<package name>/yt_dlp_plugins/`
2307
- . *pip and other locations in `PYTHONPATH`*
2308
- * Plugin packages can be installed and managed using `pip`. See
2309
- https://github.com/yt-dlp/yt-dlp-sample-plugins[yt-dlp-sample-plugins]
2310
- for an example.
2311
- ** Note: plugin files between plugin packages installed with pip must
2312
- have unique filenames.
2313
- * Any path in `PYTHONPATH` is searched in for the `yt_dlp_plugins`
2314
- namespace folder.
2315
- ** Note: This does not apply for Pyinstaller/py2exe builds.
2316
-
2317
- `.zip`, `.egg` and `.whl` archives containing a `yt_dlp_plugins`
2318
- namespace folder in their root are also supported as plugin packages.
2319
-
2320
- * e.g. `${XDG_CONFIG_HOME}/yt-dlp/plugins/mypluginpkg.zip` where
2321
- `mypluginpkg.zip` contains `yt_dlp_plugins/<type>/myplugin.py`
2322
-
2323
- Run yt-dlp with `--verbose` to check if the plugin has been loaded.
2324
-
2325
- [role="mt-4"]
2326
- === Developing Plugins
2327
-
2328
- See the
2329
- https://github.com/yt-dlp/yt-dlp-sample-plugins[yt-dlp-sample-plugins]
2330
- repo for a template plugin package and the
2331
- https://github.com/yt-dlp/yt-dlp/wiki/Plugin-Development[Plugin
2332
- Development] section of the wiki for a plugin development guide.
2333
-
2334
- All public classes with a name ending in `IE`/`PP` are imported from
2335
- each file for extractors and postprocessors respectively. This respects
2336
- underscore prefix (e.g. `_MyBasePluginIE` is private) and `__all__`.
2337
- Modules can similarly be excluded by prefixing the module name with an
2338
- underscore (e.g. `_myplugin.py`).
2339
-
2340
- To replace an existing extractor with a subclass of one, set the
2341
- `plugin_name` class keyword argument
2342
- (e.g. `class MyPluginIE(ABuiltInIE, plugin_name='myplugin')` will
2343
- replace `ABuiltInIE` with `MyPluginIE`). Since the extractor replaces
2344
- the parent, you should exclude the subclass extractor from being
2345
- imported separately by making it private using one of the methods
2346
- described above.
2347
-
2348
- If you are a plugin author, add
2349
- https://github.com/topics/yt-dlp-plugins[yt-dlp-plugins] as a topic to
2350
- your repository for discoverability.
2351
-
2352
- See the
2353
- https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#developer-instructions[Developer
2354
- Instructions] on how to write and test an extractor.
2355
-
2356
-
2357
- [role="mt-5"]
2358
- == EMBEDDING YT-DLP
2359
-
2360
- yt-dlp makes the best effort to be a good command-line program, and thus
2361
- should be callable from any programming language.
2362
-
2363
- Your program should avoid parsing the normal stdout since they may
2364
- change in future versions. Instead, they should use options such as
2365
- `-J`, `--print`, `--progress-template`, `--exec` etc to create console
2366
- output that you can reliably reproduce and parse.
2367
-
2368
- From a Python program, you can embed yt-dlp in a more powerful fashion,
2369
- like this:
2370
-
2371
- [source,python]
2372
- ----
2373
- from yt_dlp import YoutubeDL
2374
-
2375
- URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
2376
- with YoutubeDL() as ydl:
2377
- ydl.download(URLS)
2378
- ----
2379
-
2380
- Most likely, you’ll want to use various options. For a list of options
2381
- available, have a look at
2382
- link:yt_dlp/YoutubeDL.py#L183[`yt_dlp/YoutubeDL.py`] or
2383
- `help(yt_dlp.YoutubeDL)` in a Python shell. If you are already familiar
2384
- with the CLI, you can use
2385
- https://github.com/yt-dlp/yt-dlp/blob/master/devscripts/cli_to_api.py[`devscripts/cli_to_api.py`]
2386
- to translate any CLI switches to `YoutubeDL` params.
2387
-
2388
- *Tip*: If you are porting your code from youtube-dl to yt-dlp, one
2389
- important point to look out for is that we do not guarantee the return
2390
- value of `YoutubeDL.extract_info` to be json serializable, or even be a
2391
- dictionary. It will be dictionary-like, but if you want to ensure it is
2392
- a serializable dictionary, pass it through `YoutubeDL.sanitize_info` as
2393
- shown in the link:#extracting-information[example below]
2394
-
2395
- [role="mt-4"]
2396
- === Embedding examples
2397
-
2398
- [role="mt-4"]
2399
- ==== Extracting information
2400
-
2401
- [source,python]
2402
- ----
2403
- import json
2404
- import yt_dlp
2405
-
2406
- URL = 'https://www.youtube.com/watch?v=BaW_jenozKc'
2407
-
2408
- # ℹ️ See help(yt_dlp.YoutubeDL) for a list of available options and public functions
2409
- ydl_opts = {}
2410
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
2411
- info = ydl.extract_info(URL, download=False)
2412
-
2413
- # ℹ️ ydl.sanitize_info makes the info json-serializable
2414
- print(json.dumps(ydl.sanitize_info(info)))
2415
- ----
2416
-
2417
- [role="mt-4"]
2418
- ==== Download using an info-json
2419
-
2420
- [source,python]
2421
- ----
2422
- import yt_dlp
2423
-
2424
- INFO_FILE = 'path/to/video.info.json'
2425
-
2426
- with yt_dlp.YoutubeDL() as ydl:
2427
- error_code = ydl.download_with_info_file(INFO_FILE)
2428
-
2429
- print('Some videos failed to download' if error_code
2430
- else 'All videos successfully downloaded')
2431
- ----
2432
-
2433
- [role="mt-4"]
2434
- ==== Extract audio
2435
-
2436
- [source,python]
2437
- ----
2438
- import yt_dlp
2439
-
2440
- URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
2441
-
2442
- ydl_opts = {
2443
- 'format': 'm4a/bestaudio/best',
2444
- # ℹ️ See help(yt_dlp.postprocessor) for a list of available Postprocessors and their arguments
2445
- 'postprocessors': [{ # Extract audio using ffmpeg
2446
- 'key': 'FFmpegExtractAudio',
2447
- 'preferredcodec': 'm4a',
2448
- }]
2449
- }
2450
-
2451
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
2452
- error_code = ydl.download(URLS)
2453
- ----
2454
-
2455
- [role="mt-4"]
2456
- ==== Filter videos
2457
-
2458
- [source,python]
2459
- ----
2460
- import yt_dlp
2461
-
2462
- URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
2463
-
2464
- def longer_than_a_minute(info, *, incomplete):
2465
- """Download only videos longer than a minute (or with unknown duration)"""
2466
- duration = info.get('duration')
2467
- if duration and duration < 60:
2468
- return 'The video is too short'
2469
-
2470
- ydl_opts = {
2471
- 'match_filter': longer_than_a_minute,
2472
- }
2473
-
2474
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
2475
- error_code = ydl.download(URLS)
2476
- ----
2477
-
2478
- [role="mt-4"]
2479
- ==== Adding logger and progress hook
2480
-
2481
- [source,python]
2482
- ----
2483
- import yt_dlp
2484
-
2485
- URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
2486
-
2487
- class MyLogger:
2488
- def debug(self, msg):
2489
- # For compatibility with youtube-dl, both debug and info are passed into debug
2490
- # You can distinguish them by the prefix '[debug] '
2491
- if msg.startswith('[debug] '):
2492
- pass
2493
- else:
2494
- self.info(msg)
2495
-
2496
- def info(self, msg):
2497
- pass
2498
-
2499
- def warning(self, msg):
2500
- pass
2501
-
2502
- def error(self, msg):
2503
- print(msg)
2504
-
2505
-
2506
- # ℹ️ See "progress_hooks" in help(yt_dlp.YoutubeDL)
2507
- def my_hook(d):
2508
- if d['status'] == 'finished':
2509
- print('Done downloading, now post-processing ...')
2510
-
2511
-
2512
- ydl_opts = {
2513
- 'logger': MyLogger(),
2514
- 'progress_hooks': [my_hook],
2515
- }
2516
-
2517
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
2518
- ydl.download(URLS)
2519
- ----
2520
-
2521
- [role="mt-4"]
2522
- ==== Add a custom PostProcessor
2523
-
2524
- [source,python]
2525
- ----
2526
- import yt_dlp
2527
-
2528
- URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
2529
-
2530
- # ℹ️ See help(yt_dlp.postprocessor.PostProcessor)
2531
- class MyCustomPP(yt_dlp.postprocessor.PostProcessor):
2532
- def run(self, info):
2533
- self.to_screen('Doing stuff')
2534
- return [], info
2535
-
2536
-
2537
- with yt_dlp.YoutubeDL() as ydl:
2538
- # ℹ️ "when" can take any value in yt_dlp.utils.POSTPROCESS_WHEN
2539
- ydl.add_post_processor(MyCustomPP(), when='pre_process')
2540
- ydl.download(URLS)
2541
- ----
2542
-
2543
- [role="mt-4"]
2544
- ==== Use a custom format selector
2545
-
2546
- [source,python]
2547
- ----
2548
- import yt_dlp
2549
-
2550
- URLS = ['https://www.youtube.com/watch?v=BaW_jenozKc']
2551
-
2552
- def format_selector(ctx):
2553
- """ Select the best video and the best audio that won't result in an mkv.
2554
- NOTE: This is just an example and does not handle all cases """
2555
-
2556
- # formats are already sorted worst to best
2557
- formats = ctx.get('formats')[::-1]
2558
-
2559
- # acodec='none' means there is no audio
2560
- best_video = next(f for f in formats
2561
- if f['vcodec'] != 'none' and f['acodec'] == 'none')
2562
-
2563
- # find compatible audio extension
2564
- audio_ext = {'mp4': 'm4a', 'webm': 'webm'}[best_video['ext']]
2565
- # vcodec='none' means there is no video
2566
- best_audio = next(f for f in formats if (
2567
- f['acodec'] != 'none' and f['vcodec'] == 'none' and f['ext'] == audio_ext))
2568
-
2569
- # These are the minimum required fields for a merged format
2570
- yield {
2571
- 'format_id': f'{best_video["format_id"]}+{best_audio["format_id"]}',
2572
- 'ext': best_video['ext'],
2573
- 'requested_formats': [best_video, best_audio],
2574
- # Must be + separated list of protocols
2575
- 'protocol': f'{best_video["protocol"]}+{best_audio["protocol"]}'
2576
- }
2577
-
2578
-
2579
- ydl_opts = {
2580
- 'format': format_selector,
2581
- }
2582
-
2583
- with yt_dlp.YoutubeDL(ydl_opts) as ydl:
2584
- ydl.download(URLS)
2585
- ----
2586
-
2587
-
2588
- [role="mt-5"]
2589
- == CHANGES FROM YOUTUBE-DL
2590
-
2591
- [role="mt-4"]
2592
- === New features
2593
-
2594
- * Forked from
2595
- https://github.com/blackjack4494/yt-dlc/commit/f9401f2a91987068139c5f757b12fc711d4c0cee[*yt-dlc@f9401f2*]
2596
- and merged with
2597
- https://github.com/ytdl-org/youtube-dl/commit/a08f2b7e4567cdc50c0614ee0a4ffdff49b8b6e6[*youtube-dl@a08f2b7*]
2598
- (https://github.com/yt-dlp/yt-dlp/issues/21[exceptions])
2599
- * *link:#sponsorblock-options[SponsorBlock Integration]*: You can
2600
- mark/remove sponsor sections in YouTube videos by utilizing the
2601
- https://sponsor.ajay.app[SponsorBlock] API
2602
- * *link:#sorting-formats[Format Sorting]*: The default format sorting
2603
- options have been changed so that higher resolution and better codecs
2604
- will be now preferred instead of simply using larger bitrate.
2605
- Furthermore, you can now specify the sort order using `-S`. This allows
2606
- for much easier format selection than what is possible by simply using
2607
- `--format` (link:#format-selection-examples[examples])
2608
- * *Merged with animelover1984/youtube-dl*: You get most of the features
2609
- and improvements from
2610
- https://github.com/animelover1984/youtube-dl[animelover1984/youtube-dl]
2611
- including `--write-comments`, `BiliBiliSearch`, `BilibiliChannel`,
2612
- Embedding thumbnail in mp4/ogg/opus, playlist infojson etc. Note that
2613
- NicoNico livestreams are not available. See
2614
- https://github.com/yt-dlp/yt-dlp/pull/31[#31] for details.
2615
- * *YouTube improvements*:
2616
- ** Supports Clips, Stories (`ytstories:<channel UCID>`), Search
2617
- (including filters)***, YouTube Music Search, Channel-specific search,
2618
- Search prefixes (`ytsearch:`, `ytsearchdate:`)***, Mixes, and Feeds
2619
- (`:ytfav`, `:ytwatchlater`, `:ytsubs`, `:ythistory`, `:ytrec`,
2620
- `:ytnotif`)
2621
- ** Fix for https://github.com/ytdl-org/youtube-dl/issues/29326[n-sig
2622
- based throttling] ***
2623
- ** Supports some (but not all) age-gated content without cookies
2624
- ** Download livestreams from the start using `--live-from-start`
2625
- (_experimental_)
2626
- ** Channel URLs download all uploads of the channel, including shorts
2627
- and live
2628
- * *Cookies from browser*: Cookies can be automatically extracted from
2629
- all major web browsers using
2630
- `--cookies-from-browser BROWSER[+KEYRING][:PROFILE][::CONTAINER]`
2631
- * *Download time range*: Videos can be downloaded partially based on
2632
- either timestamps or chapters using `--download-sections`
2633
- * *Split video by chapters*: Videos can be split into multiple files
2634
- based on chapters using `--split-chapters`
2635
- * *Multi-threaded fragment downloads*: Download multiple fragments of
2636
- m3u8/mpd videos in parallel. Use `--concurrent-fragments` (`-N`) option
2637
- to set the number of threads used
2638
- * *Aria2c with HLS/DASH*: You can use `aria2c` as the external
2639
- downloader for DASH(mpd) and HLS(m3u8) formats
2640
- * *New and fixed extractors*: Many new extractors have been added and a
2641
- lot of existing ones have been fixed. See the
2642
- link:Changelog.md[changelog] or the link:supportedsites.md[list of
2643
- supported sites]
2644
- * *New MSOs*: Philo, Spectrum, SlingTV, Cablevision, RCN etc.
2645
- * *Subtitle extraction from manifests*: Subtitles can be extracted from
2646
- streaming media manifests. See
2647
- https://github.com/yt-dlp/yt-dlp/commit/be6202f12b97858b9d716e608394b51065d0419f[commit/be6202f]
2648
- for details
2649
- * *Multiple paths and output templates*: You can give different
2650
- link:#output-template[output templates] and download paths for different
2651
- types of files. You can also set a temporary path where intermediary
2652
- files are downloaded to using `--paths` (`-P`)
2653
- * *Portable Configuration*: Configuration files are automatically loaded
2654
- from the home and root directories. See
2655
- link:#configuration[CONFIGURATION] for details
2656
- * *Output template improvements*: Output templates can now have
2657
- date-time formatting, numeric offsets, object traversal etc. See
2658
- link:#output-template[output template] for details. Even more advanced
2659
- operations can also be done with the help of `--parse-metadata` and
2660
- `--replace-in-metadata`
2661
- * *Other new options*: Many new options have been added such as
2662
- `--alias`, `--print`, `--concat-playlist`, `--wait-for-video`,
2663
- `--retry-sleep`, `--sleep-requests`, `--convert-thumbnails`,
2664
- `--force-download-archive`, `--force-overwrites`, `--break-match-filter`
2665
- etc
2666
- * *Improvements*: Regex and other operators in
2667
- `--format`/`--match-filter`, multiple `--postprocessor-args` and
2668
- `--downloader-args`, faster archive checking, more
2669
- link:#format-selection[format selection options], merge
2670
- multi-video/audio, multiple `--config-locations`, `--exec` at different
2671
- stages, etc
2672
- * *Plugins*: Extractors and PostProcessors can be loaded from an
2673
- external file. See link:#plugins[plugins] for details
2674
- * *Self updater*: The releases can be updated using `yt-dlp -U`, and
2675
- downgraded using `--update-to` if required
2676
- * *Automated builds*: link:#update-channels[Nightly/master builds] can
2677
- be used with `--update-to nightly` and `--update-to master`
2678
-
2679
- See link:Changelog.md[changelog] or
2680
- https://github.com/yt-dlp/yt-dlp/commits[commits] for the full list of
2681
- changes
2682
-
2683
- Features marked with a *** have been back-ported to youtube-dl
2684
-
2685
- [role="mt-4"]
2686
- === Differences in default behavior
2687
-
2688
- Some of yt-dlp’s default options are different from that of youtube-dl
2689
- and youtube-dlc:
2690
-
2691
- * yt-dlp supports only link:##[Python 3.8+], and _may_ remove support
2692
- for more versions as they
2693
- https://devguide.python.org/versions/#python-release-cycle[become EOL];
2694
- while
2695
- https://github.com/ytdl-org/youtube-dl/issues/30568#issue-1118238743[youtube-dl
2696
- still supports Python 2.6+ and 3.2+]
2697
- * The options `--auto-number` (`-A`), `--title` (`-t`) and `--literal`
2698
- (`-l`), no longer work. See link:#Removed[removed options] for details
2699
- * `avconv` is not supported as an alternative to `ffmpeg`
2700
- * yt-dlp stores config files in slightly different locations to
2701
- youtube-dl. See link:#configuration[CONFIGURATION] for a list of correct
2702
- locations
2703
- * The default link:#output-template[output template] is
2704
- `%(title)s [%(id)s].%(ext)s`. There is no real reason for this change.
2705
- This was changed before yt-dlp was ever made public and now there are no
2706
- plans to change it back to `%(title)s-%(id)s.%(ext)s`. Instead, you may
2707
- use `--compat-options filename`
2708
- * The default link:#sorting-formats[format sorting] is different from
2709
- youtube-dl and prefers higher resolution and better codecs rather than
2710
- higher bitrates. You can use the `--format-sort` option to change this
2711
- to any order you prefer, or use `--compat-options format-sort` to use
2712
- youtube-dl’s sorting order
2713
- * The default format selector is `bv*+ba/b`. This means that if a
2714
- combined video + audio format that is better than the best video-only
2715
- format is found, the former will be preferred. Use `-f bv+ba/b` or
2716
- `--compat-options format-spec` to revert this
2717
- * Unlike youtube-dlc, yt-dlp does not allow merging multiple audio/video
2718
- streams into one file by default (since this conflicts with the use of
2719
- `-f bv*+ba`). If needed, this feature must be enabled using
2720
- `--audio-multistreams` and `--video-multistreams`. You can also use
2721
- `--compat-options multistreams` to enable both
2722
- * `--no-abort-on-error` is enabled by default. Use `--abort-on-error` or
2723
- `--compat-options abort-on-error` to abort on errors instead
2724
- * When writing metadata files such as thumbnails, description or
2725
- infojson, the same information (if available) is also written for
2726
- playlists. Use `--no-write-playlist-metafiles` or
2727
- `--compat-options no-playlist-metafiles` to not write these files
2728
- * `--add-metadata` attaches the `infojson` to `mkv` files in addition to
2729
- writing the metadata when used with `--write-info-json`. Use
2730
- `--no-embed-info-json` or `--compat-options no-attach-info-json` to
2731
- revert this
2732
- * Some metadata are embedded into different fields when using
2733
- `--add-metadata` as compared to youtube-dl. Most notably, `comment`
2734
- field contains the `webpage_url` and `synopsis` contains the
2735
- `description`. You can link:#modifying-metadata[use `--parse-metadata`]
2736
- to modify this to your liking or use `--compat-options embed-metadata`
2737
- to revert this
2738
- * `playlist_index` behaves differently when used with options like
2739
- `--playlist-reverse` and `--playlist-items`. See
2740
- https://github.com/yt-dlp/yt-dlp/issues/302[#302] for details. You can
2741
- use `--compat-options playlist-index` if you want to keep the earlier
2742
- behavior
2743
- * The output of `-F` is listed in a new format. Use
2744
- `--compat-options list-formats` to revert this
2745
- * Live chats (if available) are considered as subtitles. Use
2746
- `--sub-langs all,-live_chat` to download all subtitles except live chat.
2747
- You can also use `--compat-options no-live-chat` to prevent any live
2748
- chat/danmaku from downloading
2749
- * YouTube channel URLs download all uploads of the channel. To download
2750
- only the videos in a specific tab, pass the tab’s URL. If the channel
2751
- does not show the requested tab, an error will be raised. Also, `/live`
2752
- URLs raise an error if there are no live videos instead of silently
2753
- downloading the entire channel. You may use
2754
- `--compat-options no-youtube-channel-redirect` to revert all these
2755
- redirections
2756
- * Unavailable videos are also listed for YouTube playlists. Use
2757
- `--compat-options no-youtube-unavailable-videos` to remove this
2758
- * The upload dates extracted from YouTube are in UTC
2759
- https://github.com/yt-dlp/yt-dlp/blob/89e4d86171c7b7c997c77d4714542e0383bf0db0/yt_dlp/extractor/youtube.py#L3898-L3900[when
2760
- available]. Use `--compat-options no-youtube-prefer-utc-upload-date` to
2761
- prefer the non-UTC upload date.
2762
- * If `ffmpeg` is used as the downloader, the downloading and merging of
2763
- formats happen in a single step when possible. Use
2764
- `--compat-options no-direct-merge` to revert this
2765
- * Thumbnail embedding in `mp4` is done with mutagen if possible. Use
2766
- `--compat-options embed-thumbnail-atomicparsley` to force the use of
2767
- AtomicParsley instead
2768
- * Some internal metadata such as filenames are removed by default from
2769
- the infojson. Use `--no-clean-infojson` or
2770
- `--compat-options no-clean-infojson` to revert this
2771
- * When `--embed-subs` and `--write-subs` are used together, the
2772
- subtitles are written to disk and also embedded in the media file. You
2773
- can use just `--embed-subs` to embed the subs and automatically delete
2774
- the separate file. See
2775
- https://github.com/yt-dlp/yt-dlp/issues/630#issuecomment-893659460[#630
2776
- (comment)] for more info. `--compat-options no-keep-subs` can be used to
2777
- revert this
2778
- * `certifi` will be used for SSL root certificates, if installed. If you
2779
- want to use system certificates (e.g. self-signed), use
2780
- `--compat-options no-certifi`
2781
- * yt-dlp’s sanitization of invalid characters in filenames is
2782
- different/smarter than in youtube-dl. You can use
2783
- `--compat-options filename-sanitization` to revert to youtube-dl’s
2784
- behavior
2785
- * [line-through]*yt-dlp tries to parse the external downloader outputs
2786
- into the standard progress output if possible (Currently implemented:
2787
- https://github.com/yt-dlp/yt-dlp/issues/5931[aria2c]). You can use
2788
- `--compat-options no-external-downloader-progress` to get the downloader
2789
- output as-is*
2790
- * yt-dlp versions between 2021.09.01 and 2023.01.02 applies
2791
- `--match-filter` to nested playlists. This was an unintentional
2792
- side-effect of
2793
- https://github.com/yt-dlp/yt-dlp/commit/8f18aca8717bb0dd49054555af8d386e5eda3a88[8f18ac]
2794
- and is fixed in
2795
- https://github.com/yt-dlp/yt-dlp/commit/d7b460d0e5fc710950582baed2e3fc616ed98a80[d7b460].
2796
- Use `--compat-options playlist-match-filter` to revert this
2797
- * yt-dlp versions between 2021.11.10 and 2023.06.21 estimated
2798
- `filesize_approx` values for fragmented/manifest formats. This was added
2799
- for convenience in
2800
- https://github.com/yt-dlp/yt-dlp/commit/f2fe69c7b0d208bdb1f6292b4ae92bc1e1a7444a[f2fe69],
2801
- but was reverted in
2802
- https://github.com/yt-dlp/yt-dlp/commit/0dff8e4d1e6e9fb938f4256ea9af7d81f42fd54f[0dff8e]
2803
- due to the potentially extreme inaccuracy of the estimated values. Use
2804
- `--compat-options manifest-filesize-approx` to keep extracting the
2805
- estimated values
2806
- * yt-dlp uses modern http client backends such as `requests`. Use
2807
- `--compat-options prefer-legacy-http-handler` to prefer the legacy http
2808
- handler (`urllib`) to be used for standard http requests.
2809
- * The sub-modules `swfinterp`, `casefold` are removed.
2810
- * Passing `--simulate` (or calling `extract_info` with `download=False`)
2811
- no longer alters the default format selection. See
2812
- https://github.com/yt-dlp/yt-dlp/issues/9843[#9843] for details.
2813
-
2814
- For ease of use, a few more compat options are available:
2815
-
2816
- * `--compat-options all`: Use all compat options (*Do NOT use this!*)
2817
- * `--compat-options youtube-dl`: Same as
2818
- `--compat-options all,-multistreams,-playlist-match-filter,-manifest-filesize-approx,-allow-unsafe-ext`
2819
- * `--compat-options youtube-dlc`: Same as
2820
- `--compat-options all,-no-live-chat,-no-youtube-channel-redirect,-playlist-match-filter,-manifest-filesize-approx,-allow-unsafe-ext`
2821
- * `--compat-options 2021`: Same as
2822
- `--compat-options 2022,no-certifi,filename-sanitization,no-youtube-prefer-utc-upload-date`
2823
- * `--compat-options 2022`: Same as
2824
- `--compat-options 2023,playlist-match-filter,no-external-downloader-progress,prefer-legacy-http-handler,manifest-filesize-approx`
2825
- * `--compat-options 2023`: Currently does nothing. Use this to enable
2826
- all future compat options
2827
-
2828
- The following compat options restore vulnerable behavior from before
2829
- security patches:
2830
-
2831
- * `--compat-options allow-unsafe-ext`: Allow files with any extension
2832
- (including unsafe ones) to be downloaded
2833
- (https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-79w7-vh3h-8g4j[GHSA-79w7-vh3h-8g4j])
2834
- +
2835
- ____
2836
- :warning: Only use if a valid file download is rejected because its
2837
- extension is detected as uncommon
2838
-
2839
- *This option can enable remote code execution! Consider
2840
- https://github.com/yt-dlp/yt-dlp/issues/new/choose[opening an issue]
2841
- instead!*
2842
- ____
2843
-
2844
- [role="mt-4"]
2845
- === Deprecated options
2846
-
2847
- These are all the deprecated options and the current alternative to
2848
- achieve the same effect
2849
-
2850
- [role="mt-4"]
2851
- ==== Almost redundant options
2852
-
2853
- While these options are almost the same as their new counterparts, there
2854
- are some differences that prevents them being redundant
2855
-
2856
- ....
2857
- -j, --dump-json --print "%()j"
2858
- -F, --list-formats --print formats_table
2859
- --list-thumbnails --print thumbnails_table --print playlist:thumbnails_table
2860
- --list-subs --print automatic_captions_table --print subtitles_table
2861
- ....
2862
-
2863
- [role="mt-4"]
2864
- ==== Redundant options
2865
-
2866
- While these options are redundant, they are still expected to be used
2867
- due to their ease of use
2868
-
2869
- ....
2870
- --get-description --print description
2871
- --get-duration --print duration_string
2872
- --get-filename --print filename
2873
- --get-format --print format
2874
- --get-id --print id
2875
- --get-thumbnail --print thumbnail
2876
- -e, --get-title --print title
2877
- -g, --get-url --print urls
2878
- --match-title REGEX --match-filter "title ~= (?i)REGEX"
2879
- --reject-title REGEX --match-filter "title !~= (?i)REGEX"
2880
- --min-views COUNT --match-filter "view_count >=? COUNT"
2881
- --max-views COUNT --match-filter "view_count <=? COUNT"
2882
- --break-on-reject Use --break-match-filter
2883
- --user-agent UA --add-header "User-Agent:UA"
2884
- --referer URL --add-header "Referer:URL"
2885
- --playlist-start NUMBER -I NUMBER:
2886
- --playlist-end NUMBER -I :NUMBER
2887
- --playlist-reverse -I ::-1
2888
- --no-playlist-reverse Default
2889
- --no-colors --color no_color
2890
- ....
2891
-
2892
- [role="mt-4"]
2893
- ==== Not recommended
2894
-
2895
- While these options still work, their use is not recommended since there
2896
- are other alternatives to achieve the same
2897
-
2898
- ....
2899
- --force-generic-extractor --ies generic,default
2900
- --exec-before-download CMD --exec "before_dl:CMD"
2901
- --no-exec-before-download --no-exec
2902
- --all-formats -f all
2903
- --all-subs --sub-langs all --write-subs
2904
- --print-json -j --no-simulate
2905
- --autonumber-size NUMBER Use string formatting, e.g. %(autonumber)03d
2906
- --autonumber-start NUMBER Use internal field formatting like %(autonumber+NUMBER)s
2907
- --id -o "%(id)s.%(ext)s"
2908
- --metadata-from-title FORMAT --parse-metadata "%(title)s:FORMAT"
2909
- --hls-prefer-native --downloader "m3u8:native"
2910
- --hls-prefer-ffmpeg --downloader "m3u8:ffmpeg"
2911
- --list-formats-old --compat-options list-formats (Alias: --no-list-formats-as-table)
2912
- --list-formats-as-table --compat-options -list-formats [Default] (Alias: --no-list-formats-old)
2913
- --youtube-skip-dash-manifest --extractor-args "youtube:skip=dash" (Alias: --no-youtube-include-dash-manifest)
2914
- --youtube-skip-hls-manifest --extractor-args "youtube:skip=hls" (Alias: --no-youtube-include-hls-manifest)
2915
- --youtube-include-dash-manifest Default (Alias: --no-youtube-skip-dash-manifest)
2916
- --youtube-include-hls-manifest Default (Alias: --no-youtube-skip-hls-manifest)
2917
- --geo-bypass --xff "default"
2918
- --no-geo-bypass --xff "never"
2919
- --geo-bypass-country CODE --xff CODE
2920
- --geo-bypass-ip-block IP_BLOCK --xff IP_BLOCK
2921
- ....
2922
-
2923
- [role="mt-4"]
2924
- ==== Developer options
2925
-
2926
- These options are not intended to be used by the end-user
2927
-
2928
- ....
2929
- --test Download only part of video for testing extractors
2930
- --load-pages Load pages dumped by --write-pages
2931
- --youtube-print-sig-code For testing youtube signatures
2932
- --allow-unplayable-formats List unplayable formats also
2933
- --no-allow-unplayable-formats Default
2934
- ....
2935
-
2936
- [role="mt-4"]
2937
- ==== Old aliases
2938
-
2939
- These are aliases that are no longer documented for various reasons
2940
-
2941
- ....
2942
- --avconv-location --ffmpeg-location
2943
- --clean-infojson --clean-info-json
2944
- --cn-verification-proxy URL --geo-verification-proxy URL
2945
- --dump-headers --print-traffic
2946
- --dump-intermediate-pages --dump-pages
2947
- --force-write-download-archive --force-write-archive
2948
- --load-info --load-info-json
2949
- --no-clean-infojson --no-clean-info-json
2950
- --no-split-tracks --no-split-chapters
2951
- --no-write-srt --no-write-subs
2952
- --prefer-unsecure --prefer-insecure
2953
- --rate-limit RATE --limit-rate RATE
2954
- --split-tracks --split-chapters
2955
- --srt-lang LANGS --sub-langs LANGS
2956
- --trim-file-names LENGTH --trim-filenames LENGTH
2957
- --write-srt --write-subs
2958
- --yes-overwrites --force-overwrites
2959
- ....
2960
-
2961
- [role="mt-4"]
2962
- ==== Sponskrub Options
2963
-
2964
- Support for https://github.com/faissaloo/SponSkrub[SponSkrub] has been
2965
- deprecated in favor of the `--sponsorblock` options
2966
-
2967
- ....
2968
- --sponskrub --sponsorblock-mark all
2969
- --no-sponskrub --no-sponsorblock
2970
- --sponskrub-cut --sponsorblock-remove all
2971
- --no-sponskrub-cut --sponsorblock-remove -all
2972
- --sponskrub-force Not applicable
2973
- --no-sponskrub-force Not applicable
2974
- --sponskrub-location Not applicable
2975
- --sponskrub-args Not applicable
2976
- ....
2977
-
2978
- [role="mt-4"]
2979
- ==== No longer supported
2980
-
2981
- These options may no longer work as intended
2982
-
2983
- ....
2984
- --prefer-avconv avconv is not officially supported by yt-dlp (Alias: --no-prefer-ffmpeg)
2985
- --prefer-ffmpeg Default (Alias: --no-prefer-avconv)
2986
- -C, --call-home Not implemented
2987
- --no-call-home Default
2988
- --include-ads No longer supported
2989
- --no-include-ads Default
2990
- --write-annotations No supported site has annotations now
2991
- --no-write-annotations Default
2992
- --compat-options seperate-video-versions No longer needed
2993
- --compat-options no-youtube-prefer-utc-upload-date No longer supported
2994
- ....
2995
-
2996
- [role="mt-4"]
2997
- ==== Removed
2998
-
2999
- These options were deprecated since 2014 and have now been entirely
3000
- removed
3001
-
3002
- ....
3003
- -A, --auto-number -o "%(autonumber)s-%(id)s.%(ext)s"
3004
- -t, -l, --title, --literal -o "%(title)s-%(id)s.%(ext)s"
3005
- ....
3006
-
3007
-
3008
- [role="mt-5"]
3009
- == CONTRIBUTING
3010
-
3011
- See link:CONTRIBUTING.md#contributing-to-yt-dlp[CONTRIBUTING.md] for
3012
- instructions on link:CONTRIBUTING.md#opening-an-issue[Opening an Issue]
3013
- and link:CONTRIBUTING.md#developer-instructions[Contributing code to the
3014
- project]
3015
-
3016
-
3017
- [role="mt-5"]
3018
- == WIKI
3019
-
3020
- See the https://github.com/yt-dlp/yt-dlp/wiki[Wiki] for more information