rinalLi

Revert "u"

This reverts commit 416af690.
1 -# This file must be used with "source bin/activate" *from bash*
2 -# you cannot run it directly
3 -
4 -
5 -if [ "${BASH_SOURCE-}" = "$0" ]; then
6 - echo "You must source this script: \$ source $0" >&2
7 - exit 33
8 -fi
9 -
10 -deactivate () {
11 - unset -f pydoc >/dev/null 2>&1 || true
12 -
13 - # reset old environment variables
14 - # ! [ -z ${VAR+_} ] returns true if VAR is declared at all
15 - if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
16 - PATH="$_OLD_VIRTUAL_PATH"
17 - export PATH
18 - unset _OLD_VIRTUAL_PATH
19 - fi
20 - if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
21 - PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
22 - export PYTHONHOME
23 - unset _OLD_VIRTUAL_PYTHONHOME
24 - fi
25 -
26 - # The hash command must be called to get it to forget past
27 - # commands. Without forgetting past commands the $PATH changes
28 - # we made may not be respected
29 - hash -r 2>/dev/null
30 -
31 - if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
32 - PS1="$_OLD_VIRTUAL_PS1"
33 - export PS1
34 - unset _OLD_VIRTUAL_PS1
35 - fi
36 -
37 - unset VIRTUAL_ENV
38 - if [ ! "${1-}" = "nondestructive" ] ; then
39 - # Self destruct!
40 - unset -f deactivate
41 - fi
42 -}
43 -
44 -# unset irrelevant variables
45 -deactivate nondestructive
46 -
47 -VIRTUAL_ENV='/Users/rinal/PycharmProjects/xj-marketing'
48 -if ([ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]) && $(command -v cygpath &> /dev/null) ; then
49 - VIRTUAL_ENV=$(cygpath -u "$VIRTUAL_ENV")
50 -fi
51 -export VIRTUAL_ENV
52 -
53 -_OLD_VIRTUAL_PATH="$PATH"
54 -PATH="$VIRTUAL_ENV/bin:$PATH"
55 -export PATH
56 -
57 -# unset PYTHONHOME if set
58 -if ! [ -z "${PYTHONHOME+_}" ] ; then
59 - _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
60 - unset PYTHONHOME
61 -fi
62 -
63 -if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
64 - _OLD_VIRTUAL_PS1="${PS1-}"
65 - if [ "x" != x ] ; then
66 - PS1="() ${PS1-}"
67 - else
68 - PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
69 - fi
70 - export PS1
71 -fi
72 -
73 -# Make sure to unalias pydoc if it's already there
74 -alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
75 -
76 -pydoc () {
77 - python -m pydoc "$@"
78 -}
79 -
80 -# The hash command must be called to get it to forget past
81 -# commands. Without forgetting past commands the $PATH changes
82 -# we made may not be respected
83 -hash -r 2>/dev/null
1 -# This file must be used with "source bin/activate.csh" *from csh*.
2 -# You cannot run it directly.
3 -# Created by Davide Di Blasi <davidedb@gmail.com>.
4 -
5 -set newline='\
6 -'
7 -
8 -alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
9 -
10 -# Unset irrelevant variables.
11 -deactivate nondestructive
12 -
13 -setenv VIRTUAL_ENV '/Users/rinal/PycharmProjects/xj-marketing'
14 -
15 -set _OLD_VIRTUAL_PATH="$PATH:q"
16 -setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
17 -
18 -
19 -
20 -if ('' != "") then
21 - set env_name = '() '
22 -else
23 - set env_name = '('"$VIRTUAL_ENV:t:q"') '
24 -endif
25 -
26 -if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
27 - if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
28 - set do_prompt = "1"
29 - else
30 - set do_prompt = "0"
31 - endif
32 -else
33 - set do_prompt = "1"
34 -endif
35 -
36 -if ( $do_prompt == "1" ) then
37 - # Could be in a non-interactive environment,
38 - # in which case, $prompt is undefined and we wouldn't
39 - # care about the prompt anyway.
40 - if ( $?prompt ) then
41 - set _OLD_VIRTUAL_PROMPT="$prompt:q"
42 - if ( "$prompt:q" =~ *"$newline:q"* ) then
43 - :
44 - else
45 - set prompt = "$env_name:q$prompt:q"
46 - endif
47 - endif
48 -endif
49 -
50 -unset env_name
51 -unset do_prompt
52 -
53 -alias pydoc python -m pydoc
54 -
55 -rehash
1 -# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
2 -# Do not run it directly.
3 -
4 -function _bashify_path -d "Converts a fish path to something bash can recognize"
5 - set fishy_path $argv
6 - set bashy_path $fishy_path[1]
7 - for path_part in $fishy_path[2..-1]
8 - set bashy_path "$bashy_path:$path_part"
9 - end
10 - echo $bashy_path
11 -end
12 -
13 -function _fishify_path -d "Converts a bash path to something fish can recognize"
14 - echo $argv | tr ':' '\n'
15 -end
16 -
17 -function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
18 - # reset old environment variables
19 - if test -n "$_OLD_VIRTUAL_PATH"
20 - # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
21 - if test (echo $FISH_VERSION | head -c 1) -lt 3
22 - set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
23 - else
24 - set -gx PATH $_OLD_VIRTUAL_PATH
25 - end
26 - set -e _OLD_VIRTUAL_PATH
27 - end
28 -
29 - if test -n "$_OLD_VIRTUAL_PYTHONHOME"
30 - set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
31 - set -e _OLD_VIRTUAL_PYTHONHOME
32 - end
33 -
34 - if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
35 - and functions -q _old_fish_prompt
36 - # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
37 - set -l fish_function_path
38 -
39 - # Erase virtualenv's `fish_prompt` and restore the original.
40 - functions -e fish_prompt
41 - functions -c _old_fish_prompt fish_prompt
42 - functions -e _old_fish_prompt
43 - set -e _OLD_FISH_PROMPT_OVERRIDE
44 - end
45 -
46 - set -e VIRTUAL_ENV
47 -
48 - if test "$argv[1]" != 'nondestructive'
49 - # Self-destruct!
50 - functions -e pydoc
51 - functions -e deactivate
52 - functions -e _bashify_path
53 - functions -e _fishify_path
54 - end
55 -end
56 -
57 -# Unset irrelevant variables.
58 -deactivate nondestructive
59 -
60 -set -gx VIRTUAL_ENV '/Users/rinal/PycharmProjects/xj-marketing'
61 -
62 -# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
63 -if test (echo $FISH_VERSION | head -c 1) -lt 3
64 - set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
65 -else
66 - set -gx _OLD_VIRTUAL_PATH $PATH
67 -end
68 -set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
69 -
70 -# Unset `$PYTHONHOME` if set.
71 -if set -q PYTHONHOME
72 - set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
73 - set -e PYTHONHOME
74 -end
75 -
76 -function pydoc
77 - python -m pydoc $argv
78 -end
79 -
80 -if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
81 - # Copy the current `fish_prompt` function as `_old_fish_prompt`.
82 - functions -c fish_prompt _old_fish_prompt
83 -
84 - function fish_prompt
85 - # Run the user's prompt first; it might depend on (pipe)status.
86 - set -l prompt (_old_fish_prompt)
87 -
88 - # Prompt override provided?
89 - # If not, just prepend the environment name.
90 - if test -n ''
91 - printf '(%s) ' ''
92 - else
93 - printf '(%s) ' (basename "$VIRTUAL_ENV")
94 - end
95 -
96 - string join -- \n $prompt # handle multi-line prompts
97 - end
98 -
99 - set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
100 -end
1 -# Setting all environment variables for the venv
2 -let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" })
3 -let virtual-env = "/Users/rinal/PycharmProjects/xj-marketing"
4 -let bin = "bin"
5 -let path-sep = ":"
6 -
7 -let old-path = ($nu.path | str collect ($path-sep))
8 -
9 -let venv-path = ([$virtual-env $bin] | path join)
10 -let new-path = ($nu.path | prepend $venv-path | str collect ($path-sep))
11 -
12 -# environment variables that will be batched loaded to the virtual env
13 -let new-env = ([
14 - [name, value];
15 - [$path-name $new-path]
16 - [_OLD_VIRTUAL_PATH $old-path]
17 - [VIRTUAL_ENV $virtual-env]
18 -])
19 -
20 -load-env $new-env
21 -
22 -# Creating the new prompt for the session
23 -let virtual_prompt = (if ("" != "") {
24 - "() "
25 -} {
26 - (build-string '(' ($virtual-env | path basename) ') ')
27 -}
28 -)
29 -
30 -# If there is no default prompt, then only the env is printed in the prompt
31 -let new_prompt = (if ( config | select prompt | empty? ) {
32 - ($"build-string '($virtual_prompt)'")
33 -} {
34 - ($"build-string '($virtual_prompt)' (config get prompt | str find-replace "build-string" "")")
35 -})
36 -let-env PROMPT_COMMAND = $new_prompt
37 -
38 -# We are using alias as the function definitions because only aliases can be
39 -# removed from the scope
40 -alias pydoc = python -m pydoc
41 -alias deactivate = source "/Users/rinal/PycharmProjects/xj-marketing/bin/deactivate.nu"
1 -$script:THIS_PATH = $myinvocation.mycommand.path
2 -$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
3 -
4 -function global:deactivate([switch] $NonDestructive) {
5 - if (Test-Path variable:_OLD_VIRTUAL_PATH) {
6 - $env:PATH = $variable:_OLD_VIRTUAL_PATH
7 - Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
8 - }
9 -
10 - if (Test-Path function:_old_virtual_prompt) {
11 - $function:prompt = $function:_old_virtual_prompt
12 - Remove-Item function:\_old_virtual_prompt
13 - }
14 -
15 - if ($env:VIRTUAL_ENV) {
16 - Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
17 - }
18 -
19 - if (!$NonDestructive) {
20 - # Self destruct!
21 - Remove-Item function:deactivate
22 - Remove-Item function:pydoc
23 - }
24 -}
25 -
26 -function global:pydoc {
27 - python -m pydoc $args
28 -}
29 -
30 -# unset irrelevant variables
31 -deactivate -nondestructive
32 -
33 -$VIRTUAL_ENV = $BASE_DIR
34 -$env:VIRTUAL_ENV = $VIRTUAL_ENV
35 -
36 -New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
37 -
38 -$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
39 -if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
40 - function global:_old_virtual_prompt {
41 - ""
42 - }
43 - $function:_old_virtual_prompt = $function:prompt
44 -
45 - if ("" -ne "") {
46 - function global:prompt {
47 - # Add the custom prefix to the existing prompt
48 - $previous_prompt_value = & $function:_old_virtual_prompt
49 - ("() " + $previous_prompt_value)
50 - }
51 - }
52 - else {
53 - function global:prompt {
54 - # Add a prefix to the current prompt, but don't discard it.
55 - $previous_prompt_value = & $function:_old_virtual_prompt
56 - $new_prompt_value = "($( Split-Path $env:VIRTUAL_ENV -Leaf )) "
57 - ($new_prompt_value + $previous_prompt_value)
58 - }
59 - }
60 -}
1 -# -*- coding: utf-8 -*-
2 -"""Activate virtualenv for current interpreter:
3 -
4 -Use exec(open(this_file).read(), {'__file__': this_file}).
5 -
6 -This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
7 -"""
8 -import os
9 -import site
10 -import sys
11 -
12 -try:
13 - abs_file = os.path.abspath(__file__)
14 -except NameError:
15 - raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
16 -
17 -bin_dir = os.path.dirname(abs_file)
18 -base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
19 -
20 -# prepend bin to PATH (this file is inside the bin directory)
21 -os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
22 -os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
23 -
24 -# add the virtual environments libraries to the host python import mechanism
25 -prev_length = len(sys.path)
26 -for lib in "../lib/python3.12/site-packages".split(os.pathsep):
27 - path = os.path.realpath(os.path.join(bin_dir, lib))
28 - site.addsitedir(path.decode("utf-8") if "" else path)
29 -sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
30 -
31 -sys.real_prefix = sys.prefix
32 -sys.prefix = base
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from alembic.config import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from biliup.__main__ import arg_parser
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(arg_parser())
1 -# Setting the old path
2 -let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" })
3 -let-env $path-name = $nu.env._OLD_VIRTUAL_PATH
4 -
5 -# Unleting the environment variables that were created when activating the env
6 -unlet-env VIRTUAL_ENV
7 -unlet-env _OLD_VIRTUAL_PATH
8 -unlet-env PROMPT_COMMAND
9 -
10 -unalias pydoc
11 -unalias deactivate
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from httpx import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from mako.cmd import cmdline
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(cmdline())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from charset_normalizer.cli import cli_detect
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(cli_detect())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from pip._internal.cli.main import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from pip._internal.cli.main import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from pip._internal.cli.main import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from playwright.__main__ import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from rsa.cli import decrypt
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(decrypt())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from rsa.cli import encrypt
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(encrypt())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from rsa.cli import keygen
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(keygen())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from rsa.util import private_to_public
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(private_to_public())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from rsa.cli import sign
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(sign())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from rsa.cli import verify
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(verify())
1 -/usr/local/bin/python3.12
...\ No newline at end of file ...\ No newline at end of file
1 -python
...\ No newline at end of file ...\ No newline at end of file
1 -python
...\ No newline at end of file ...\ No newline at end of file
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from qrcode.console_scripts import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from streamlink_cli.main import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from wheel.cli import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from wheel.cli import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from wheel.cli import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from wheel.cli import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from websocket._wsdump import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from cykdl.__main__ import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
2 -# -*- coding: utf-8 -*-
3 -import re
4 -import sys
5 -from yt_dlp import main
6 -if __name__ == '__main__':
7 - sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
8 - sys.exit(main())
1 -/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */
2 -
3 -/* Greenlet object interface */
4 -
5 -#ifndef Py_GREENLETOBJECT_H
6 -#define Py_GREENLETOBJECT_H
7 -
8 -
9 -#include <Python.h>
10 -
11 -#ifdef __cplusplus
12 -extern "C" {
13 -#endif
14 -
15 -/* This is deprecated and undocumented. It does not change. */
16 -#define GREENLET_VERSION "1.0.0"
17 -
18 -#ifndef GREENLET_MODULE
19 -#define implementation_ptr_t void*
20 -#endif
21 -
22 -typedef struct _greenlet {
23 - PyObject_HEAD
24 - PyObject* weakreflist;
25 - PyObject* dict;
26 - implementation_ptr_t pimpl;
27 -} PyGreenlet;
28 -
29 -#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type))
30 -
31 -
32 -/* C API functions */
33 -
34 -/* Total number of symbols that are exported */
35 -#define PyGreenlet_API_pointers 12
36 -
37 -#define PyGreenlet_Type_NUM 0
38 -#define PyExc_GreenletError_NUM 1
39 -#define PyExc_GreenletExit_NUM 2
40 -
41 -#define PyGreenlet_New_NUM 3
42 -#define PyGreenlet_GetCurrent_NUM 4
43 -#define PyGreenlet_Throw_NUM 5
44 -#define PyGreenlet_Switch_NUM 6
45 -#define PyGreenlet_SetParent_NUM 7
46 -
47 -#define PyGreenlet_MAIN_NUM 8
48 -#define PyGreenlet_STARTED_NUM 9
49 -#define PyGreenlet_ACTIVE_NUM 10
50 -#define PyGreenlet_GET_PARENT_NUM 11
51 -
52 -#ifndef GREENLET_MODULE
53 -/* This section is used by modules that uses the greenlet C API */
54 -static void** _PyGreenlet_API = NULL;
55 -
56 -# define PyGreenlet_Type \
57 - (*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM])
58 -
59 -# define PyExc_GreenletError \
60 - ((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM])
61 -
62 -# define PyExc_GreenletExit \
63 - ((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM])
64 -
65 -/*
66 - * PyGreenlet_New(PyObject *args)
67 - *
68 - * greenlet.greenlet(run, parent=None)
69 - */
70 -# define PyGreenlet_New \
71 - (*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \
72 - _PyGreenlet_API[PyGreenlet_New_NUM])
73 -
74 -/*
75 - * PyGreenlet_GetCurrent(void)
76 - *
77 - * greenlet.getcurrent()
78 - */
79 -# define PyGreenlet_GetCurrent \
80 - (*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM])
81 -
82 -/*
83 - * PyGreenlet_Throw(
84 - * PyGreenlet *greenlet,
85 - * PyObject *typ,
86 - * PyObject *val,
87 - * PyObject *tb)
88 - *
89 - * g.throw(...)
90 - */
91 -# define PyGreenlet_Throw \
92 - (*(PyObject * (*)(PyGreenlet * self, \
93 - PyObject * typ, \
94 - PyObject * val, \
95 - PyObject * tb)) \
96 - _PyGreenlet_API[PyGreenlet_Throw_NUM])
97 -
98 -/*
99 - * PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args)
100 - *
101 - * g.switch(*args, **kwargs)
102 - */
103 -# define PyGreenlet_Switch \
104 - (*(PyObject * \
105 - (*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \
106 - _PyGreenlet_API[PyGreenlet_Switch_NUM])
107 -
108 -/*
109 - * PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent)
110 - *
111 - * g.parent = new_parent
112 - */
113 -# define PyGreenlet_SetParent \
114 - (*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \
115 - _PyGreenlet_API[PyGreenlet_SetParent_NUM])
116 -
117 -/*
118 - * PyGreenlet_GetParent(PyObject* greenlet)
119 - *
120 - * return greenlet.parent;
121 - *
122 - * This could return NULL even if there is no exception active.
123 - * If it does not return NULL, you are responsible for decrementing the
124 - * reference count.
125 - */
126 -# define PyGreenlet_GetParent \
127 - (*(PyGreenlet* (*)(PyGreenlet*)) \
128 - _PyGreenlet_API[PyGreenlet_GET_PARENT_NUM])
129 -
130 -/*
131 - * deprecated, undocumented alias.
132 - */
133 -# define PyGreenlet_GET_PARENT PyGreenlet_GetParent
134 -
135 -# define PyGreenlet_MAIN \
136 - (*(int (*)(PyGreenlet*)) \
137 - _PyGreenlet_API[PyGreenlet_MAIN_NUM])
138 -
139 -# define PyGreenlet_STARTED \
140 - (*(int (*)(PyGreenlet*)) \
141 - _PyGreenlet_API[PyGreenlet_STARTED_NUM])
142 -
143 -# define PyGreenlet_ACTIVE \
144 - (*(int (*)(PyGreenlet*)) \
145 - _PyGreenlet_API[PyGreenlet_ACTIVE_NUM])
146 -
147 -
148 -
149 -
150 -/* Macro that imports greenlet and initializes C API */
151 -/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we
152 - keep the older definition to be sure older code that might have a copy of
153 - the header still works. */
154 -# define PyGreenlet_Import() \
155 - { \
156 - _PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \
157 - }
158 -
159 -#endif /* GREENLET_MODULE */
160 -
161 -#ifdef __cplusplus
162 -}
163 -#endif
164 -#endif /* !Py_GREENLETOBJECT_H */
1 -from playwright.sync_api import sync_playwright
2 -import asyncio
3 -
4 -import asyncio
5 -import json
6 -from playwright.async_api import async_playwright, expect
7 -
8 -
9 -async def write_cookies_to_file(cookies, file_path):
10 -
11 - with open(file_path, 'w') as f:
12 - json.dump(cookies, f)
13 -
14 -
15 -async def read_cookies_from_file(file_path):
16 - try:
17 - with open(file_path, 'r') as f:
18 - return json.load(f)
19 - except FileNotFoundError:
20 - return []
21 -
22 -
23 -async def main():
24 - filePath = "/Users/rinal/Downloads/xhs.json"
25 - async with async_playwright() as p:
26 - browser = await p.chromium.launch(headless=False)
27 - context = await browser.new_context()
28 - page = await context.new_page()
29 - await page.goto("https://www.xiaohongshu.com")
30 - print(await page.title()) # login-container
31 - await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel")
32 -
33 - await asyncio.sleep(3)
34 - cookies = await context.cookies()
35 - print(cookies)
36 - await write_cookies_to_file(cookies, filePath)
37 -
38 - await browser.close()
39 -
40 -
41 -async def upload():
42 - filePath = "/Users/rinal/Downloads/xhs.json"
43 - print(filePath)
44 - async with async_playwright() as p:
45 - browser = await p.chromium.launch()
46 - context = await browser.new_context()
47 - page = await context.new_page()
48 - saved_cookies = await read_cookies_from_file(filePath)
49 - await context.add_cookies(saved_cookies)
50 - await page.goto("https://www.xiaohongshu.com") # 再次访问对应网址,此时带着之前保存的cookie
51 - await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel")
52 - await page.goto("https://creator.xiaohongshu.com/publish/publish?source=official")
53 - await page.locator("input.upload-input").set_input_files(
54 - "/Users/rinal/PycharmProjects/xj-marketing/videos/huahua.mp4")
55 - button_elem = page.locator('button div span:has-text("发布")')
56 - await button_elem.wait_for(state='visible') # 确保按钮可见
57 -
58 - await page.locator("div.titleInput div div input").fill("花花")
59 - tags = ['花花', '熊猫']
60 - inputTag = page.locator('id=quillEditor').locator('div p')
61 - await inputTag.click()
62 - for index, tag in enumerate(tags, start=1):
63 - await page.keyboard.type(f"#{tag} ")
64 - await asyncio.sleep(2)
65 -
66 - print("已写完tag")
67 - await asyncio.sleep(10)
68 - await button_elem.click()
69 -
70 - await page.wait_for_selector('p:has-text("发布成功")')
71 -
72 - await browser.close()
73 -
74 -
75 -# asyncio.run(main())
76 -asyncio.run(upload())
77 -
78 -#
...\ No newline at end of file ...\ No newline at end of file
1 -home = /Library/Frameworks/Python.framework/Versions/3.12
2 -implementation = CPython
3 -version_info = 3.12.8.final.0
4 -virtualenv = 20.13.0
5 -include-system-site-packages = false
6 -base-prefix = /Library/Frameworks/Python.framework/Versions/3.12
7 -base-exec-prefix = /Library/Frameworks/Python.framework/Versions/3.12
8 -base-executable = /usr/local/bin/python3.12
1 -# AUTOMATICALLY GENERATED by `shtab`
2 -
3 -
4 -
5 -_shtab_streamlink_cli_option_strings=('-h' '--help' '-V' '--version' '--version-check' '--auto-version-check' '--plugins' '--plugin-dir' '--plugin-dirs' '--can-handle-url' '--can-handle-url-no-redirect' '--config' '--no-config' '--locale' '-l' '--loglevel' '--logformat' '--logdateformat' '--logfile' '-Q' '--quiet' '-j' '--json' '--interface' '-4' '--ipv4' '-6' '--ipv6' '-p' '--player' '-a' '--player-args' '--player-env' '-v' '--player-verbose' '--verbose-player' '-n' '--player-fifo' '--fifo' '--player-http' '--player-continuous-http' '--player-external-http' '--player-external-http-continuous' '--player-external-http-interface' '--player-external-http-port' '--player-passthrough' '--player-no-close' '-t' '--title' '-O' '--stdout' '-o' '--output' '-r' '--record' '-R' '--record-and-pipe' '--fs-safe-rules' '-f' '--force' '--progress' '--url' '--default-stream' '--stream-url' '--retry-streams' '--retry-max' '--retry-open' '--stream-types' '--stream-priority' '--stream-sorting-excludes' '--ringbuffer-size' '--stream-segment-attempts' '--stream-segment-threads' '--stream-segment-timeout' '--stream-timeout' '--mux-subtitles' '--hls-live-edge' '--hls-segment-stream-data' '--hls-playlist-reload-attempts' '--hls-playlist-reload-time' '--hls-segment-queue-threshold' '--hls-segment-ignore-names' '--hls-segment-key-uri' '--hls-audio-select' '--hls-start-offset' '--hls-duration' '--hls-live-restart' '--dash-manifest-reload-attempts' '--ffmpeg-ffmpeg' '--ffmpeg-no-validation' '--ffmpeg-verbose' '--ffmpeg-verbose-path' '--ffmpeg-loglevel' '--ffmpeg-fout' '--ffmpeg-video-transcode' '--ffmpeg-audio-transcode' '--ffmpeg-copyts' '--ffmpeg-start-at-zero' '--http-proxy' '--http-cookie' '--http-header' '--http-query-param' '--http-ignore-env' '--http-no-ssl-verify' '--http-disable-dh' '--http-ssl-cert' '--http-ssl-cert-crt-key' '--http-timeout' '--webbrowser' '--webbrowser-executable' '--webbrowser-timeout' '--webbrowser-cdp-host' '--webbrowser-cdp-port' '--webbrowser-cdp-timeout' '--webbrowser-headless' '--bbciplayer-username' '--bbciplayer-password' '--bbciplayer-hd' '--clubbingtv-username' '--clubbingtv-password' '--niconico-email' '--niconico-password' '--niconico-user-session' '--niconico-purge-credentials' '--niconico-timeshift-offset' '--openrectv-email' '--openrectv-password' '--pixiv-sessionid' '--pixiv-devicetoken' '--pixiv-purge-credentials' '--pixiv-performer' '--raiplay-email' '--raiplay-password' '--raiplay-purge-credentials' '--soop-username' '--soop-password' '--soop-purge-credentials' '--soop-stream-password' '--steam-email' '--steam-password' '--streann-url' '--tf1-email' '--tf1-password' '--tf1-purge-credentials' '--twitcasting-password' '--twitch-disable-ads' '--twitch-low-latency' '--twitch-api-header' '--twitch-access-token-param' '--twitch-force-client-integrity' '--twitch-purge-client-integrity' '--ustream-password' '--ustvnow-username' '--ustvnow-password' '--wwenetwork-email' '--wwenetwork-password' '--yupptv-boxid' '--yupptv-yuppflixtoken' '--yupptv-purge-credentials' '--zattoo-email' '--zattoo-password' '--zattoo-purge-credentials' '--zattoo-stream-types')
6 -
7 -
8 -
9 -_shtab_streamlink_cli__l_choices=('none' 'critical' 'error' 'warning' 'info' 'debug' 'trace' 'all')
10 -_shtab_streamlink_cli___loglevel_choices=('none' 'critical' 'error' 'warning' 'info' 'debug' 'trace' 'all')
11 -_shtab_streamlink_cli___fs_safe_rules_choices=('POSIX' 'Windows')
12 -_shtab_streamlink_cli___progress_choices=('yes' 'force' 'no')
13 -
14 -_shtab_streamlink_cli__h_nargs=0
15 -_shtab_streamlink_cli___help_nargs=0
16 -_shtab_streamlink_cli__V_nargs=0
17 -_shtab_streamlink_cli___version_nargs=0
18 -_shtab_streamlink_cli___version_check_nargs=0
19 -_shtab_streamlink_cli___plugins_nargs=0
20 -_shtab_streamlink_cli___no_config_nargs=0
21 -_shtab_streamlink_cli__Q_nargs=0
22 -_shtab_streamlink_cli___quiet_nargs=0
23 -_shtab_streamlink_cli__j_nargs=0
24 -_shtab_streamlink_cli___json_nargs=0
25 -_shtab_streamlink_cli__4_nargs=0
26 -_shtab_streamlink_cli___ipv4_nargs=0
27 -_shtab_streamlink_cli__6_nargs=0
28 -_shtab_streamlink_cli___ipv6_nargs=0
29 -_shtab_streamlink_cli__v_nargs=0
30 -_shtab_streamlink_cli___player_verbose_nargs=0
31 -_shtab_streamlink_cli___verbose_player_nargs=0
32 -_shtab_streamlink_cli__n_nargs=0
33 -_shtab_streamlink_cli___player_fifo_nargs=0
34 -_shtab_streamlink_cli___fifo_nargs=0
35 -_shtab_streamlink_cli___player_http_nargs=0
36 -_shtab_streamlink_cli___player_continuous_http_nargs=0
37 -_shtab_streamlink_cli___player_external_http_nargs=0
38 -_shtab_streamlink_cli___player_no_close_nargs=0
39 -_shtab_streamlink_cli__O_nargs=0
40 -_shtab_streamlink_cli___stdout_nargs=0
41 -_shtab_streamlink_cli__f_nargs=0
42 -_shtab_streamlink_cli___force_nargs=0
43 -_shtab_streamlink_cli___stream_url_nargs=0
44 -_shtab_streamlink_cli___mux_subtitles_nargs=0
45 -_shtab_streamlink_cli___hls_segment_stream_data_nargs=0
46 -_shtab_streamlink_cli___hls_live_restart_nargs=0
47 -_shtab_streamlink_cli___ffmpeg_no_validation_nargs=0
48 -_shtab_streamlink_cli___ffmpeg_verbose_nargs=0
49 -_shtab_streamlink_cli___ffmpeg_copyts_nargs=0
50 -_shtab_streamlink_cli___ffmpeg_start_at_zero_nargs=0
51 -_shtab_streamlink_cli___http_ignore_env_nargs=0
52 -_shtab_streamlink_cli___http_no_ssl_verify_nargs=0
53 -_shtab_streamlink_cli___http_disable_dh_nargs=0
54 -_shtab_streamlink_cli___http_ssl_cert_crt_key_nargs=2
55 -_shtab_streamlink_cli___bbciplayer_hd_nargs=0
56 -_shtab_streamlink_cli___niconico_purge_credentials_nargs=0
57 -_shtab_streamlink_cli___pixiv_purge_credentials_nargs=0
58 -_shtab_streamlink_cli___raiplay_purge_credentials_nargs=0
59 -_shtab_streamlink_cli___soop_purge_credentials_nargs=0
60 -_shtab_streamlink_cli___afreeca_purge_credentials_nargs=0
61 -_shtab_streamlink_cli___tf1_purge_credentials_nargs=0
62 -_shtab_streamlink_cli___twitch_disable_ads_nargs=0
63 -_shtab_streamlink_cli___twitch_disable_hosting_nargs=0
64 -_shtab_streamlink_cli___twitch_disable_reruns_nargs=0
65 -_shtab_streamlink_cli___twitch_low_latency_nargs=0
66 -_shtab_streamlink_cli___twitch_force_client_integrity_nargs=0
67 -_shtab_streamlink_cli___twitch_purge_client_integrity_nargs=0
68 -_shtab_streamlink_cli___yupptv_purge_credentials_nargs=0
69 -_shtab_streamlink_cli___zattoo_purge_credentials_nargs=0
70 -
71 -
72 -# $1=COMP_WORDS[1]
73 -_shtab_compgen_files() {
74 - compgen -f -- $1 # files
75 -}
76 -
77 -# $1=COMP_WORDS[1]
78 -_shtab_compgen_dirs() {
79 - compgen -d -- $1 # recurse into subdirs
80 -}
81 -
82 -# $1=COMP_WORDS[1]
83 -_shtab_replace_nonword() {
84 - echo "${1//[^[:word:]]/_}"
85 -}
86 -
87 -# set default values (called for the initial parser & any subparsers)
88 -_set_parser_defaults() {
89 - local subparsers_var="${prefix}_subparsers[@]"
90 - sub_parsers=${!subparsers_var-}
91 -
92 - local current_option_strings_var="${prefix}_option_strings[@]"
93 - current_option_strings=${!current_option_strings_var}
94 -
95 - completed_positional_actions=0
96 -
97 - _set_new_action "pos_${completed_positional_actions}" true
98 -}
99 -
100 -# $1=action identifier
101 -# $2=positional action (bool)
102 -# set all identifiers for an action's parameters
103 -_set_new_action() {
104 - current_action="${prefix}_$(_shtab_replace_nonword $1)"
105 -
106 - local current_action_compgen_var=${current_action}_COMPGEN
107 - current_action_compgen="${!current_action_compgen_var-}"
108 -
109 - local current_action_choices_var="${current_action}_choices[@]"
110 - current_action_choices="${!current_action_choices_var-}"
111 -
112 - local current_action_nargs_var="${current_action}_nargs"
113 - if [ -n "${!current_action_nargs_var-}" ]; then
114 - current_action_nargs="${!current_action_nargs_var}"
115 - else
116 - current_action_nargs=1
117 - fi
118 -
119 - current_action_args_start_index=$(( $word_index + 1 - $pos_only ))
120 -
121 - current_action_is_positional=$2
122 -}
123 -
124 -# Notes:
125 -# `COMPREPLY`: what will be rendered after completion is triggered
126 -# `completing_word`: currently typed word to generate completions for
127 -# `${!var}`: evaluates the content of `var` and expand its content as a variable
128 -# hello="world"
129 -# x="hello"
130 -# ${!x} -> ${hello} -> "world"
131 -_shtab_streamlink_cli() {
132 - local completing_word="${COMP_WORDS[COMP_CWORD]}"
133 - local completed_positional_actions
134 - local current_action
135 - local current_action_args_start_index
136 - local current_action_choices
137 - local current_action_compgen
138 - local current_action_is_positional
139 - local current_action_nargs
140 - local current_option_strings
141 - local sub_parsers
142 - COMPREPLY=()
143 -
144 - local prefix=_shtab_streamlink_cli
145 - local word_index=0
146 - local pos_only=0 # "--" delimeter not encountered yet
147 - _set_parser_defaults
148 - word_index=1
149 -
150 - # determine what arguments are appropriate for the current state
151 - # of the arg parser
152 - while [ $word_index -ne $COMP_CWORD ]; do
153 - local this_word="${COMP_WORDS[$word_index]}"
154 -
155 - if [[ $pos_only = 1 || " $this_word " != " -- " ]]; then
156 - if [[ -n $sub_parsers && " ${sub_parsers[@]} " == *" ${this_word} "* ]]; then
157 - # valid subcommand: add it to the prefix & reset the current action
158 - prefix="${prefix}_$(_shtab_replace_nonword $this_word)"
159 - _set_parser_defaults
160 - fi
161 -
162 - if [[ " ${current_option_strings[@]} " == *" ${this_word} "* ]]; then
163 - # a new action should be acquired (due to recognised option string or
164 - # no more input expected from current action);
165 - # the next positional action can fill in here
166 - _set_new_action $this_word false
167 - fi
168 -
169 - if [[ "$current_action_nargs" != "*" ]] && \
170 - [[ "$current_action_nargs" != "+" ]] && \
171 - [[ "$current_action_nargs" != *"..." ]] && \
172 - (( $word_index + 1 - $current_action_args_start_index - $pos_only >= \
173 - $current_action_nargs )); then
174 - $current_action_is_positional && let "completed_positional_actions += 1"
175 - _set_new_action "pos_${completed_positional_actions}" true
176 - fi
177 - else
178 - pos_only=1 # "--" delimeter encountered
179 - fi
180 -
181 - let "word_index+=1"
182 - done
183 -
184 - # Generate the completions
185 -
186 - if [[ $pos_only = 0 && "${completing_word}" == -* ]]; then
187 - # optional argument started: use option strings
188 - COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") )
189 - else
190 - # use choices & compgen
191 - local IFS=$'\n' # items may contain spaces, so delimit using newline
192 - COMPREPLY=( $([ -n "${current_action_compgen}" ] \
193 - && "${current_action_compgen}" "${completing_word}") )
194 - unset IFS
195 - COMPREPLY+=( $(compgen -W "${current_action_choices[*]}" -- "${completing_word}") )
196 - fi
197 -
198 - return 0
199 -}
200 -
201 -complete -o filenames -F _shtab_streamlink_cli streamlink
1 -__yt_dlp()
2 -{
3 - local cur prev opts fileopts diropts keywords
4 - COMPREPLY=()
5 - cur="${COMP_WORDS[COMP_CWORD]}"
6 - prev="${COMP_WORDS[COMP_CWORD-1]}"
7 - opts="--help --version --update --no-update --update-to --ignore-errors --no-abort-on-error --abort-on-error --dump-user-agent --list-extractors --extractor-descriptions --use-extractors --force-generic-extractor --default-search --ignore-config --no-config-locations --config-locations --plugin-dirs --flat-playlist --no-flat-playlist --live-from-start --no-live-from-start --wait-for-video --no-wait-for-video --mark-watched --no-mark-watched --no-colors --color --compat-options --alias --proxy --socket-timeout --source-address --impersonate --list-impersonate-targets --force-ipv4 --force-ipv6 --enable-file-urls --geo-verification-proxy --cn-verification-proxy --xff --geo-bypass --no-geo-bypass --geo-bypass-country --geo-bypass-ip-block --playlist-start --playlist-end --playlist-items --match-title --reject-title --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filters --no-match-filters --break-match-filters --no-break-match-filters --no-playlist --yes-playlist --age-limit --download-archive --no-download-archive --max-downloads --break-on-existing --no-break-on-existing --break-on-reject --break-per-input --no-break-per-input --skip-playlist-after-errors --include-ads --no-include-ads --concurrent-fragments --limit-rate --throttled-rate --retries --file-access-retries --fragment-retries --retry-sleep --skip-unavailable-fragments --abort-on-unavailable-fragments --keep-fragments --no-keep-fragments --buffer-size --resize-buffer --no-resize-buffer --http-chunk-size --test --playlist-reverse --no-playlist-reverse --playlist-random --lazy-playlist --no-lazy-playlist --xattr-set-filesize --hls-prefer-native --hls-prefer-ffmpeg --hls-use-mpegts --no-hls-use-mpegts --download-sections --downloader --downloader-args --batch-file --no-batch-file --id --paths --output --output-na-placeholder --autonumber-size --autonumber-start --restrict-filenames --no-restrict-filenames --windows-filenames --no-windows-filenames --trim-filenames --no-overwrites --force-overwrites --no-force-overwrites --continue --no-continue --part --no-part --mtime --no-mtime --write-description --no-write-description --write-info-json --no-write-info-json --write-annotations --no-write-annotations --write-playlist-metafiles --no-write-playlist-metafiles --clean-info-json --no-clean-info-json --write-comments --no-write-comments --load-info-json --cookies --no-cookies --cookies-from-browser --no-cookies-from-browser --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --no-write-thumbnail --write-all-thumbnails --list-thumbnails --write-link --write-url-link --write-webloc-link --write-desktop-link --quiet --no-quiet --no-warnings --simulate --no-simulate --ignore-no-formats-error --no-ignore-no-formats-error --skip-download --print --print-to-file --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --force-write-archive --newline --no-progress --progress --console-title --progress-template --progress-delta --verbose --dump-pages --write-pages --load-pages --youtube-print-sig-code --print-traffic --call-home --no-call-home --encoding --legacy-server-connect --no-check-certificates --prefer-insecure --user-agent --referer --add-headers --bidi-workaround --sleep-requests --sleep-interval --max-sleep-interval --sleep-subtitles --format --format-sort --format-sort-force --no-format-sort-force --video-multistreams --no-video-multistreams --audio-multistreams --no-audio-multistreams --all-formats --prefer-free-formats --no-prefer-free-formats --check-formats --check-all-formats --no-check-formats --list-formats --list-formats-as-table --list-formats-old --merge-output-format --allow-unplayable-formats --no-allow-unplayable-formats --write-subs --no-write-subs --write-auto-subs --no-write-auto-subs --all-subs --list-subs --sub-format --sub-langs --username --password --twofactor --netrc --netrc-location --netrc-cmd --video-password --ap-mso --ap-username --ap-password --ap-list-mso --client-certificate --client-certificate-key --client-certificate-password --extract-audio --audio-format --audio-quality --remux-video --recode-video --postprocessor-args --keep-video --no-keep-video --post-overwrites --no-post-overwrites --embed-subs --no-embed-subs --embed-thumbnail --no-embed-thumbnail --embed-metadata --no-embed-metadata --embed-chapters --no-embed-chapters --embed-info-json --no-embed-info-json --metadata-from-title --parse-metadata --replace-in-metadata --xattrs --concat-playlist --fixup --prefer-avconv --prefer-ffmpeg --ffmpeg-location --exec --no-exec --exec-before-download --no-exec-before-download --convert-subs --convert-thumbnails --split-chapters --no-split-chapters --remove-chapters --no-remove-chapters --force-keyframes-at-cuts --no-force-keyframes-at-cuts --use-postprocessor --sponsorblock-mark --sponsorblock-remove --sponsorblock-chapter-title --no-sponsorblock --sponsorblock-api --sponskrub --no-sponskrub --sponskrub-cut --no-sponskrub-cut --sponskrub-force --no-sponskrub-force --sponskrub-location --sponskrub-args --extractor-retries --allow-dynamic-mpd --ignore-dynamic-mpd --hls-split-discontinuity --no-hls-split-discontinuity --extractor-args --youtube-include-dash-manifest --youtube-skip-dash-manifest --youtube-include-hls-manifest --youtube-skip-hls-manifest"
8 - keywords=":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
9 - fileopts="-a|--batch-file|--download-archive|--cookies|--load-info"
10 - diropts="--cache-dir"
11 -
12 - if [[ ${prev} =~ ${fileopts} ]]; then
13 - COMPREPLY=( $(compgen -f -- ${cur}) )
14 - return 0
15 - elif [[ ${prev} =~ ${diropts} ]]; then
16 - COMPREPLY=( $(compgen -d -- ${cur}) )
17 - return 0
18 - fi
19 -
20 - if [[ ${cur} =~ : ]]; then
21 - COMPREPLY=( $(compgen -W "${keywords}" -- ${cur}) )
22 - return 0
23 - elif [[ ${cur} == * ]] ; then
24 - COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
25 - return 0
26 - fi
27 -}
28 -
29 -complete -F __yt_dlp yt-dlp
This diff could not be displayed because it is too large.
1 -
2 -complete --command yt-dlp --long-option help --short-option h --description 'Print this help text and exit'
3 -complete --command yt-dlp --long-option version --description 'Print program version and exit'
4 -complete --command yt-dlp --long-option update --short-option U --description 'Check if updates are available. You installed yt-dlp from a manual build or with a package manager; Use that to update'
5 -complete --command yt-dlp --long-option no-update --description 'Do not check for updates (default)'
6 -complete --command yt-dlp --long-option update-to --description 'Upgrade/downgrade to a specific version. CHANNEL can be a repository as well. CHANNEL and TAG default to "stable" and "latest" respectively if omitted; See "UPDATE" for details. Supported channels: stable, nightly, master'
7 -complete --command yt-dlp --long-option ignore-errors --short-option i --description 'Ignore download and postprocessing errors. The download will be considered successful even if the postprocessing fails'
8 -complete --command yt-dlp --long-option no-abort-on-error --description 'Continue with next video on download errors; e.g. to skip unavailable videos in a playlist (default)'
9 -complete --command yt-dlp --long-option abort-on-error --description 'Abort downloading of further videos if an error occurs (Alias: --no-ignore-errors)'
10 -complete --command yt-dlp --long-option dump-user-agent --description 'Display the current user-agent and exit'
11 -complete --command yt-dlp --long-option list-extractors --description 'List all supported extractors and exit'
12 -complete --command yt-dlp --long-option extractor-descriptions --description 'Output descriptions of all supported extractors and exit'
13 -complete --command yt-dlp --long-option use-extractors --description 'Extractor names to use separated by commas. You can also use regexes, "all", "default" and "end" (end URL matching); e.g. --ies "holodex.*,end,youtube". Prefix the name with a "-" to exclude it, e.g. --ies default,-generic. Use --list-extractors for a list of extractor names. (Alias: --ies)'
14 -complete --command yt-dlp --long-option force-generic-extractor
15 -complete --command yt-dlp --long-option default-search --description 'Use this prefix for unqualified URLs. E.g. "gvsearch2:python" downloads two videos from google videos for the search term "python". Use the value "auto" to let yt-dlp guess ("auto_warning" to emit a warning when guessing). "error" just throws an error. The default value "fixup_error" repairs broken URLs, but emits an error if this is not possible instead of searching'
16 -complete --command yt-dlp --long-option ignore-config --description 'Don'"'"'t load any more configuration files except those given to --config-locations. For backward compatibility, if this option is found inside the system configuration file, the user configuration is not loaded. (Alias: --no-config)'
17 -complete --command yt-dlp --long-option no-config-locations --description 'Do not load any custom configuration files (default). When given inside a configuration file, ignore all previous --config-locations defined in the current file'
18 -complete --command yt-dlp --long-option config-locations --description 'Location of the main configuration file; either the path to the config or its containing directory ("-" for stdin). Can be used multiple times and inside other configuration files'
19 -complete --command yt-dlp --long-option plugin-dirs --description 'Path to an additional directory to search for plugins. This option can be used multiple times to add multiple directories. Note that this currently only works for extractor plugins; postprocessor plugins can only be loaded from the default plugin directories'
20 -complete --command yt-dlp --long-option flat-playlist --description 'Do not extract a playlist'"'"'s URL result entries; some entry metadata may be missing and downloading may be bypassed'
21 -complete --command yt-dlp --long-option no-flat-playlist --description 'Fully extract the videos of a playlist (default)'
22 -complete --command yt-dlp --long-option live-from-start --description 'Download livestreams from the start. Currently only supported for YouTube (Experimental)'
23 -complete --command yt-dlp --long-option no-live-from-start --description 'Download livestreams from the current time (default)'
24 -complete --command yt-dlp --long-option wait-for-video --description 'Wait for scheduled streams to become available. Pass the minimum number of seconds (or range) to wait between retries'
25 -complete --command yt-dlp --long-option no-wait-for-video --description 'Do not wait for scheduled streams (default)'
26 -complete --command yt-dlp --long-option mark-watched --description 'Mark videos watched (even with --simulate)'
27 -complete --command yt-dlp --long-option no-mark-watched --description 'Do not mark videos watched (default)'
28 -complete --command yt-dlp --long-option no-colors
29 -complete --command yt-dlp --long-option color --description 'Whether to emit color codes in output, optionally prefixed by the STREAM (stdout or stderr) to apply the setting to. Can be one of "always", "auto" (default), "never", or "no_color" (use non color terminal sequences). Use "auto-tty" or "no_color-tty" to decide based on terminal support only. Can be used multiple times'
30 -complete --command yt-dlp --long-option compat-options --description 'Options that can help keep compatibility with youtube-dl or youtube-dlc configurations by reverting some of the changes made in yt-dlp. See "Differences in default behavior" for details'
31 -complete --command yt-dlp --long-option alias --description 'Create aliases for an option string. Unless an alias starts with a dash "-", it is prefixed with "--". Arguments are parsed according to the Python string formatting mini-language. E.g. --alias get-audio,-X "-S=aext:{0},abr -x --audio-format {0}" creates options "--get-audio" and "-X" that takes an argument (ARG0) and expands to "-S=aext:ARG0,abr -x --audio-format ARG0". All defined aliases are listed in the --help output. Alias options can trigger more aliases; so be careful to avoid defining recursive options. As a safety measure, each alias may be triggered a maximum of 100 times. This option can be used multiple times'
32 -complete --command yt-dlp --long-option proxy --description 'Use the specified HTTP/HTTPS/SOCKS proxy. To enable SOCKS proxy, specify a proper scheme, e.g. socks5://user:pass@127.0.0.1:1080/. Pass in an empty string (--proxy "") for direct connection'
33 -complete --command yt-dlp --long-option socket-timeout --description 'Time to wait before giving up, in seconds'
34 -complete --command yt-dlp --long-option source-address --description 'Client-side IP address to bind to'
35 -complete --command yt-dlp --long-option impersonate --description 'Client to impersonate for requests. E.g. chrome, chrome-110, chrome:windows-10. Pass --impersonate="" to impersonate any client. Note that forcing impersonation for all requests may have a detrimental impact on download speed and stability'
36 -complete --command yt-dlp --long-option list-impersonate-targets --description 'List available clients to impersonate.'
37 -complete --command yt-dlp --long-option force-ipv4 --short-option 4 --description 'Make all connections via IPv4'
38 -complete --command yt-dlp --long-option force-ipv6 --short-option 6 --description 'Make all connections via IPv6'
39 -complete --command yt-dlp --long-option enable-file-urls --description 'Enable file:// URLs. This is disabled by default for security reasons.'
40 -complete --command yt-dlp --long-option geo-verification-proxy --description 'Use this proxy to verify the IP address for some geo-restricted sites. The default proxy specified by --proxy (or none, if the option is not present) is used for the actual downloading'
41 -complete --command yt-dlp --long-option cn-verification-proxy
42 -complete --command yt-dlp --long-option xff --description 'How to fake X-Forwarded-For HTTP header to try bypassing geographic restriction. One of "default" (only when known to be useful), "never", an IP block in CIDR notation, or a two-letter ISO 3166-2 country code'
43 -complete --command yt-dlp --long-option geo-bypass
44 -complete --command yt-dlp --long-option no-geo-bypass
45 -complete --command yt-dlp --long-option geo-bypass-country
46 -complete --command yt-dlp --long-option geo-bypass-ip-block
47 -complete --command yt-dlp --long-option playlist-start
48 -complete --command yt-dlp --long-option playlist-end
49 -complete --command yt-dlp --long-option playlist-items --short-option I --description 'Comma separated playlist_index of the items to download. You can specify a range using "[START]:[STOP][:STEP]". For backward compatibility, START-STOP is also supported. Use negative indices to count from the right and negative STEP to download in reverse order. E.g. "-I 1:3,7,-5::2" used on a playlist of size 15 will download the items at index 1,2,3,7,11,13,15'
50 -complete --command yt-dlp --long-option match-title
51 -complete --command yt-dlp --long-option reject-title
52 -complete --command yt-dlp --long-option min-filesize --description 'Abort download if filesize is smaller than SIZE, e.g. 50k or 44.6M'
53 -complete --command yt-dlp --long-option max-filesize --description 'Abort download if filesize is larger than SIZE, e.g. 50k or 44.6M'
54 -complete --command yt-dlp --long-option date --description 'Download only videos uploaded on this date. The date can be "YYYYMMDD" or in the format [now|today|yesterday][-N[day|week|month|year]]. E.g. "--date today-2weeks" downloads only videos uploaded on the same day two weeks ago'
55 -complete --command yt-dlp --long-option datebefore --description 'Download only videos uploaded on or before this date. The date formats accepted are the same as --date'
56 -complete --command yt-dlp --long-option dateafter --description 'Download only videos uploaded on or after this date. The date formats accepted are the same as --date'
57 -complete --command yt-dlp --long-option min-views
58 -complete --command yt-dlp --long-option max-views
59 -complete --command yt-dlp --long-option match-filters --description 'Generic video filter. Any "OUTPUT TEMPLATE" field can be compared with a number or a string using the operators defined in "Filtering Formats". You can also simply specify a field to match if the field is present, use "!field" to check if the field is not present, and "&" to check multiple conditions. Use a "\" to escape "&" or quotes if needed. If used multiple times, the filter matches if at least one of the conditions is met. E.g. --match-filters !is_live --match-filters "like_count>?100 & description~='"'"'(?i)\bcats \& dogs\b'"'"'" matches only videos that are not live OR those that have a like count more than 100 (or the like field is not available) and also has a description that contains the phrase "cats & dogs" (caseless). Use "--match-filters -" to interactively ask whether to download each video'
60 -complete --command yt-dlp --long-option no-match-filters --description 'Do not use any --match-filters (default)'
61 -complete --command yt-dlp --long-option break-match-filters --description 'Same as "--match-filters" but stops the download process when a video is rejected'
62 -complete --command yt-dlp --long-option no-break-match-filters --description 'Do not use any --break-match-filters (default)'
63 -complete --command yt-dlp --long-option no-playlist --description 'Download only the video, if the URL refers to a video and a playlist'
64 -complete --command yt-dlp --long-option yes-playlist --description 'Download the playlist, if the URL refers to a video and a playlist'
65 -complete --command yt-dlp --long-option age-limit --description 'Download only videos suitable for the given age'
66 -complete --command yt-dlp --long-option download-archive --description 'Download only videos not listed in the archive file. Record the IDs of all downloaded videos in it' --require-parameter
67 -complete --command yt-dlp --long-option no-download-archive --description 'Do not use archive file (default)'
68 -complete --command yt-dlp --long-option max-downloads --description 'Abort after downloading NUMBER files'
69 -complete --command yt-dlp --long-option break-on-existing --description 'Stop the download process when encountering a file that is in the archive supplied with the --download-archive option'
70 -complete --command yt-dlp --long-option no-break-on-existing --description 'Do not stop the download process when encountering a file that is in the archive (default)'
71 -complete --command yt-dlp --long-option break-on-reject
72 -complete --command yt-dlp --long-option break-per-input --description 'Alters --max-downloads, --break-on-existing, --break-match-filters, and autonumber to reset per input URL'
73 -complete --command yt-dlp --long-option no-break-per-input --description '--break-on-existing and similar options terminates the entire download queue'
74 -complete --command yt-dlp --long-option skip-playlist-after-errors --description 'Number of allowed failures until the rest of the playlist is skipped'
75 -complete --command yt-dlp --long-option include-ads
76 -complete --command yt-dlp --long-option no-include-ads
77 -complete --command yt-dlp --long-option concurrent-fragments --short-option N --description 'Number of fragments of a dash/hlsnative video that should be downloaded concurrently (default is %default)'
78 -complete --command yt-dlp --long-option limit-rate --short-option r --description 'Maximum download rate in bytes per second, e.g. 50K or 4.2M'
79 -complete --command yt-dlp --long-option throttled-rate --description 'Minimum download rate in bytes per second below which throttling is assumed and the video data is re-extracted, e.g. 100K'
80 -complete --command yt-dlp --long-option retries --short-option R --description 'Number of retries (default is %default), or "infinite"'
81 -complete --command yt-dlp --long-option file-access-retries --description 'Number of times to retry on file access error (default is %default), or "infinite"'
82 -complete --command yt-dlp --long-option fragment-retries --description 'Number of retries for a fragment (default is %default), or "infinite" (DASH, hlsnative and ISM)'
83 -complete --command yt-dlp --long-option retry-sleep --description 'Time to sleep between retries in seconds (optionally) prefixed by the type of retry (http (default), fragment, file_access, extractor) to apply the sleep to. EXPR can be a number, linear=START[:END[:STEP=1]] or exp=START[:END[:BASE=2]]. This option can be used multiple times to set the sleep for the different retry types, e.g. --retry-sleep linear=1::2 --retry-sleep fragment:exp=1:20'
84 -complete --command yt-dlp --long-option skip-unavailable-fragments --description 'Skip unavailable fragments for DASH, hlsnative and ISM downloads (default) (Alias: --no-abort-on-unavailable-fragments)'
85 -complete --command yt-dlp --long-option abort-on-unavailable-fragments --description 'Abort download if a fragment is unavailable (Alias: --no-skip-unavailable-fragments)'
86 -complete --command yt-dlp --long-option keep-fragments --description 'Keep downloaded fragments on disk after downloading is finished'
87 -complete --command yt-dlp --long-option no-keep-fragments --description 'Delete downloaded fragments after downloading is finished (default)'
88 -complete --command yt-dlp --long-option buffer-size --description 'Size of download buffer, e.g. 1024 or 16K (default is %default)'
89 -complete --command yt-dlp --long-option resize-buffer --description 'The buffer size is automatically resized from an initial value of --buffer-size (default)'
90 -complete --command yt-dlp --long-option no-resize-buffer --description 'Do not automatically adjust the buffer size'
91 -complete --command yt-dlp --long-option http-chunk-size --description 'Size of a chunk for chunk-based HTTP downloading, e.g. 10485760 or 10M (default is disabled). May be useful for bypassing bandwidth throttling imposed by a webserver (experimental)'
92 -complete --command yt-dlp --long-option test
93 -complete --command yt-dlp --long-option playlist-reverse
94 -complete --command yt-dlp --long-option no-playlist-reverse
95 -complete --command yt-dlp --long-option playlist-random --description 'Download playlist videos in random order'
96 -complete --command yt-dlp --long-option lazy-playlist --description 'Process entries in the playlist as they are received. This disables n_entries, --playlist-random and --playlist-reverse'
97 -complete --command yt-dlp --long-option no-lazy-playlist --description 'Process videos in the playlist only after the entire playlist is parsed (default)'
98 -complete --command yt-dlp --long-option xattr-set-filesize --description 'Set file xattribute ytdl.filesize with expected file size'
99 -complete --command yt-dlp --long-option hls-prefer-native
100 -complete --command yt-dlp --long-option hls-prefer-ffmpeg
101 -complete --command yt-dlp --long-option hls-use-mpegts --description 'Use the mpegts container for HLS videos; allowing some players to play the video while downloading, and reducing the chance of file corruption if download is interrupted. This is enabled by default for live streams'
102 -complete --command yt-dlp --long-option no-hls-use-mpegts --description 'Do not use the mpegts container for HLS videos. This is default when not downloading live streams'
103 -complete --command yt-dlp --long-option download-sections --description 'Download only chapters that match the regular expression. A "*" prefix denotes time-range instead of chapter. Negative timestamps are calculated from the end. "*from-url" can be used to download between the "start_time" and "end_time" extracted from the URL. Needs ffmpeg. This option can be used multiple times to download multiple sections, e.g. --download-sections "*10:15-inf" --download-sections "intro"'
104 -complete --command yt-dlp --long-option downloader --description 'Name or path of the external downloader to use (optionally) prefixed by the protocols (http, ftp, m3u8, dash, rstp, rtmp, mms) to use it for. Currently supports native, aria2c, avconv, axel, curl, ffmpeg, httpie, wget. You can use this option multiple times to set different downloaders for different protocols. E.g. --downloader aria2c --downloader "dash,m3u8:native" will use aria2c for http/ftp downloads, and the native downloader for dash/m3u8 downloads (Alias: --external-downloader)'
105 -complete --command yt-dlp --long-option downloader-args --description 'Give these arguments to the external downloader. Specify the downloader name and the arguments separated by a colon ":". For ffmpeg, arguments can be passed to different positions using the same syntax as --postprocessor-args. You can use this option multiple times to give different arguments to different downloaders (Alias: --external-downloader-args)'
106 -complete --command yt-dlp --long-option batch-file --short-option a --description 'File containing URLs to download ("-" for stdin), one URL per line. Lines starting with "#", ";" or "]" are considered as comments and ignored' --require-parameter
107 -complete --command yt-dlp --long-option no-batch-file --description 'Do not read URLs from batch file (default)'
108 -complete --command yt-dlp --long-option id
109 -complete --command yt-dlp --long-option paths --short-option P --description 'The paths where the files should be downloaded. Specify the type of file and the path separated by a colon ":". All the same TYPES as --output are supported. Additionally, you can also provide "home" (default) and "temp" paths. All intermediary files are first downloaded to the temp path and then the final files are moved over to the home path after download is finished. This option is ignored if --output is an absolute path'
110 -complete --command yt-dlp --long-option output --short-option o --description 'Output filename template; see "OUTPUT TEMPLATE" for details'
111 -complete --command yt-dlp --long-option output-na-placeholder --description 'Placeholder for unavailable fields in --output (default: "%default")'
112 -complete --command yt-dlp --long-option autonumber-size
113 -complete --command yt-dlp --long-option autonumber-start
114 -complete --command yt-dlp --long-option restrict-filenames --description 'Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames'
115 -complete --command yt-dlp --long-option no-restrict-filenames --description 'Allow Unicode characters, "&" and spaces in filenames (default)'
116 -complete --command yt-dlp --long-option windows-filenames --description 'Force filenames to be Windows-compatible'
117 -complete --command yt-dlp --long-option no-windows-filenames --description 'Make filenames Windows-compatible only if using Windows (default)'
118 -complete --command yt-dlp --long-option trim-filenames --description 'Limit the filename length (excluding extension) to the specified number of characters'
119 -complete --command yt-dlp --long-option no-overwrites --short-option w --description 'Do not overwrite any files'
120 -complete --command yt-dlp --long-option force-overwrites --description 'Overwrite all video and metadata files. This option includes --no-continue'
121 -complete --command yt-dlp --long-option no-force-overwrites --description 'Do not overwrite the video, but overwrite related files (default)'
122 -complete --command yt-dlp --long-option continue --short-option c --description 'Resume partially downloaded files/fragments (default)'
123 -complete --command yt-dlp --long-option no-continue --description 'Do not resume partially downloaded fragments. If the file is not fragmented, restart download of the entire file'
124 -complete --command yt-dlp --long-option part --description 'Use .part files instead of writing directly into output file (default)'
125 -complete --command yt-dlp --long-option no-part --description 'Do not use .part files - write directly into output file'
126 -complete --command yt-dlp --long-option mtime --description 'Use the Last-modified header to set the file modification time (default)'
127 -complete --command yt-dlp --long-option no-mtime --description 'Do not use the Last-modified header to set the file modification time'
128 -complete --command yt-dlp --long-option write-description --description 'Write video description to a .description file'
129 -complete --command yt-dlp --long-option no-write-description --description 'Do not write video description (default)'
130 -complete --command yt-dlp --long-option write-info-json --description 'Write video metadata to a .info.json file (this may contain personal information)'
131 -complete --command yt-dlp --long-option no-write-info-json --description 'Do not write video metadata (default)'
132 -complete --command yt-dlp --long-option write-annotations
133 -complete --command yt-dlp --long-option no-write-annotations
134 -complete --command yt-dlp --long-option write-playlist-metafiles --description 'Write playlist metadata in addition to the video metadata when using --write-info-json, --write-description etc. (default)'
135 -complete --command yt-dlp --long-option no-write-playlist-metafiles --description 'Do not write playlist metadata when using --write-info-json, --write-description etc.'
136 -complete --command yt-dlp --long-option clean-info-json --description 'Remove some internal metadata such as filenames from the infojson (default)'
137 -complete --command yt-dlp --long-option no-clean-info-json --description 'Write all fields to the infojson'
138 -complete --command yt-dlp --long-option write-comments --description 'Retrieve video comments to be placed in the infojson. The comments are fetched even without this option if the extraction is known to be quick (Alias: --get-comments)'
139 -complete --command yt-dlp --long-option no-write-comments --description 'Do not retrieve video comments unless the extraction is known to be quick (Alias: --no-get-comments)'
140 -complete --command yt-dlp --long-option load-info-json --description 'JSON file containing the video information (created with the "--write-info-json" option)'
141 -complete --command yt-dlp --long-option cookies --description 'Netscape formatted file to read cookies from and dump cookie jar in' --require-parameter
142 -complete --command yt-dlp --long-option no-cookies --description 'Do not read/dump cookies from/to file (default)'
143 -complete --command yt-dlp --long-option cookies-from-browser --description 'The name of the browser to load cookies from. Currently supported browsers are: brave, chrome, chromium, edge, firefox, opera, safari, vivaldi, whale. Optionally, the KEYRING used for decrypting Chromium cookies on Linux, the name/path of the PROFILE to load cookies from, and the CONTAINER name (if Firefox) ("none" for no container) can be given with their respective separators. By default, all containers of the most recently accessed profile are used. Currently supported keyrings are: basictext, gnomekeyring, kwallet, kwallet5, kwallet6'
144 -complete --command yt-dlp --long-option no-cookies-from-browser --description 'Do not load cookies from browser (default)'
145 -complete --command yt-dlp --long-option cache-dir --description 'Location in the filesystem where yt-dlp can store some downloaded information (such as client ids and signatures) permanently. By default ${XDG_CACHE_HOME}/yt-dlp'
146 -complete --command yt-dlp --long-option no-cache-dir --description 'Disable filesystem caching'
147 -complete --command yt-dlp --long-option rm-cache-dir --description 'Delete all filesystem cache files'
148 -complete --command yt-dlp --long-option write-thumbnail --description 'Write thumbnail image to disk'
149 -complete --command yt-dlp --long-option no-write-thumbnail --description 'Do not write thumbnail image to disk (default)'
150 -complete --command yt-dlp --long-option write-all-thumbnails --description 'Write all thumbnail image formats to disk'
151 -complete --command yt-dlp --long-option list-thumbnails --description 'List available thumbnails of each video. Simulate unless --no-simulate is used'
152 -complete --command yt-dlp --long-option write-link --description 'Write an internet shortcut file, depending on the current platform (.url, .webloc or .desktop). The URL may be cached by the OS'
153 -complete --command yt-dlp --long-option write-url-link --description 'Write a .url Windows internet shortcut. The OS caches the URL based on the file path'
154 -complete --command yt-dlp --long-option write-webloc-link --description 'Write a .webloc macOS internet shortcut'
155 -complete --command yt-dlp --long-option write-desktop-link --description 'Write a .desktop Linux internet shortcut'
156 -complete --command yt-dlp --long-option quiet --short-option q --description 'Activate quiet mode. If used with --verbose, print the log to stderr'
157 -complete --command yt-dlp --long-option no-quiet --description 'Deactivate quiet mode. (Default)'
158 -complete --command yt-dlp --long-option no-warnings --description 'Ignore warnings'
159 -complete --command yt-dlp --long-option simulate --short-option s --description 'Do not download the video and do not write anything to disk'
160 -complete --command yt-dlp --long-option no-simulate --description 'Download the video even if printing/listing options are used'
161 -complete --command yt-dlp --long-option ignore-no-formats-error --description 'Ignore "No video formats" error. Useful for extracting metadata even if the videos are not actually available for download (experimental)'
162 -complete --command yt-dlp --long-option no-ignore-no-formats-error --description 'Throw error when no downloadable video formats are found (default)'
163 -complete --command yt-dlp --long-option skip-download --description 'Do not download the video but write all related files (Alias: --no-download)'
164 -complete --command yt-dlp --long-option print --short-option O --description 'Field name or output template to print to screen, optionally prefixed with when to print it, separated by a ":". Supported values of "WHEN" are the same as that of --use-postprocessor (default: video). Implies --quiet. Implies --simulate unless --no-simulate or later stages of WHEN are used. This option can be used multiple times'
165 -complete --command yt-dlp --long-option print-to-file --description 'Append given template to the file. The values of WHEN and TEMPLATE are the same as that of --print. FILE uses the same syntax as the output template. This option can be used multiple times'
166 -complete --command yt-dlp --long-option get-url --short-option g
167 -complete --command yt-dlp --long-option get-title --short-option e
168 -complete --command yt-dlp --long-option get-id
169 -complete --command yt-dlp --long-option get-thumbnail
170 -complete --command yt-dlp --long-option get-description
171 -complete --command yt-dlp --long-option get-duration
172 -complete --command yt-dlp --long-option get-filename
173 -complete --command yt-dlp --long-option get-format
174 -complete --command yt-dlp --long-option dump-json --short-option j --description 'Quiet, but print JSON information for each video. Simulate unless --no-simulate is used. See "OUTPUT TEMPLATE" for a description of available keys'
175 -complete --command yt-dlp --long-option dump-single-json --short-option J --description 'Quiet, but print JSON information for each URL or infojson passed. Simulate unless --no-simulate is used. If the URL refers to a playlist, the whole playlist information is dumped in a single line'
176 -complete --command yt-dlp --long-option print-json
177 -complete --command yt-dlp --long-option force-write-archive --description 'Force download archive entries to be written as far as no errors occur, even if -s or another simulation option is used (Alias: --force-download-archive)'
178 -complete --command yt-dlp --long-option newline --description 'Output progress bar as new lines'
179 -complete --command yt-dlp --long-option no-progress --description 'Do not print progress bar'
180 -complete --command yt-dlp --long-option progress --description 'Show progress bar, even if in quiet mode'
181 -complete --command yt-dlp --long-option console-title --description 'Display progress in console titlebar'
182 -complete --command yt-dlp --long-option progress-template --description 'Template for progress outputs, optionally prefixed with one of "download:" (default), "download-title:" (the console title), "postprocess:", or "postprocess-title:". The video'"'"'s fields are accessible under the "info" key and the progress attributes are accessible under "progress" key. E.g. --console-title --progress-template "download-title:%(info.id)s-%(progress.eta)s"'
183 -complete --command yt-dlp --long-option progress-delta --description 'Time between progress output (default: 0)'
184 -complete --command yt-dlp --long-option verbose --short-option v --description 'Print various debugging information'
185 -complete --command yt-dlp --long-option dump-pages --description 'Print downloaded pages encoded using base64 to debug problems (very verbose)'
186 -complete --command yt-dlp --long-option write-pages --description 'Write downloaded intermediary pages to files in the current directory to debug problems'
187 -complete --command yt-dlp --long-option load-pages
188 -complete --command yt-dlp --long-option youtube-print-sig-code
189 -complete --command yt-dlp --long-option print-traffic --description 'Display sent and read HTTP traffic'
190 -complete --command yt-dlp --long-option call-home --short-option C
191 -complete --command yt-dlp --long-option no-call-home
192 -complete --command yt-dlp --long-option encoding --description 'Force the specified encoding (experimental)'
193 -complete --command yt-dlp --long-option legacy-server-connect --description 'Explicitly allow HTTPS connection to servers that do not support RFC 5746 secure renegotiation'
194 -complete --command yt-dlp --long-option no-check-certificates --description 'Suppress HTTPS certificate validation'
195 -complete --command yt-dlp --long-option prefer-insecure --description 'Use an unencrypted connection to retrieve information about the video (Currently supported only for YouTube)'
196 -complete --command yt-dlp --long-option user-agent
197 -complete --command yt-dlp --long-option referer
198 -complete --command yt-dlp --long-option add-headers --description 'Specify a custom HTTP header and its value, separated by a colon ":". You can use this option multiple times'
199 -complete --command yt-dlp --long-option bidi-workaround --description 'Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH'
200 -complete --command yt-dlp --long-option sleep-requests --description 'Number of seconds to sleep between requests during data extraction'
201 -complete --command yt-dlp --long-option sleep-interval --description 'Number of seconds to sleep before each download. This is the minimum time to sleep when used along with --max-sleep-interval (Alias: --min-sleep-interval)'
202 -complete --command yt-dlp --long-option max-sleep-interval --description 'Maximum number of seconds to sleep. Can only be used along with --min-sleep-interval'
203 -complete --command yt-dlp --long-option sleep-subtitles --description 'Number of seconds to sleep before each subtitle download'
204 -complete --command yt-dlp --long-option format --short-option f --description 'Video format code, see "FORMAT SELECTION" for more details'
205 -complete --command yt-dlp --long-option format-sort --short-option S --description 'Sort the formats by the fields given, see "Sorting Formats" for more details'
206 -complete --command yt-dlp --long-option format-sort-force --description 'Force user specified sort order to have precedence over all fields, see "Sorting Formats" for more details (Alias: --S-force)'
207 -complete --command yt-dlp --long-option no-format-sort-force --description 'Some fields have precedence over the user specified sort order (default)'
208 -complete --command yt-dlp --long-option video-multistreams --description 'Allow multiple video streams to be merged into a single file'
209 -complete --command yt-dlp --long-option no-video-multistreams --description 'Only one video stream is downloaded for each output file (default)'
210 -complete --command yt-dlp --long-option audio-multistreams --description 'Allow multiple audio streams to be merged into a single file'
211 -complete --command yt-dlp --long-option no-audio-multistreams --description 'Only one audio stream is downloaded for each output file (default)'
212 -complete --command yt-dlp --long-option all-formats
213 -complete --command yt-dlp --long-option prefer-free-formats --description 'Prefer video formats with free containers over non-free ones of the same quality. Use with "-S ext" to strictly prefer free containers irrespective of quality'
214 -complete --command yt-dlp --long-option no-prefer-free-formats --description 'Don'"'"'t give any special preference to free containers (default)'
215 -complete --command yt-dlp --long-option check-formats --description 'Make sure formats are selected only from those that are actually downloadable'
216 -complete --command yt-dlp --long-option check-all-formats --description 'Check all formats for whether they are actually downloadable'
217 -complete --command yt-dlp --long-option no-check-formats --description 'Do not check that the formats are actually downloadable'
218 -complete --command yt-dlp --long-option list-formats --short-option F --description 'List available formats of each video. Simulate unless --no-simulate is used'
219 -complete --command yt-dlp --long-option list-formats-as-table
220 -complete --command yt-dlp --long-option list-formats-old
221 -complete --command yt-dlp --long-option merge-output-format --description 'Containers that may be used when merging formats, separated by "/", e.g. "mp4/mkv". Ignored if no merge is required. (currently supported: avi, flv, mkv, mov, mp4, webm)'
222 -complete --command yt-dlp --long-option allow-unplayable-formats
223 -complete --command yt-dlp --long-option no-allow-unplayable-formats
224 -complete --command yt-dlp --long-option write-subs --description 'Write subtitle file'
225 -complete --command yt-dlp --long-option no-write-subs --description 'Do not write subtitle file (default)'
226 -complete --command yt-dlp --long-option write-auto-subs --description 'Write automatically generated subtitle file (Alias: --write-automatic-subs)'
227 -complete --command yt-dlp --long-option no-write-auto-subs --description 'Do not write auto-generated subtitles (default) (Alias: --no-write-automatic-subs)'
228 -complete --command yt-dlp --long-option all-subs
229 -complete --command yt-dlp --long-option list-subs --description 'List available subtitles of each video. Simulate unless --no-simulate is used'
230 -complete --command yt-dlp --long-option sub-format --description 'Subtitle format; accepts formats preference separated by "/", e.g. "srt" or "ass/srt/best"'
231 -complete --command yt-dlp --long-option sub-langs --description 'Languages of the subtitles to download (can be regex) or "all" separated by commas, e.g. --sub-langs "en.*,ja" (where "en.*" is a regex pattern that matches "en" followed by 0 or more of any character). You can prefix the language code with a "-" to exclude it from the requested languages, e.g. --sub-langs all,-live_chat. Use --list-subs for a list of available language tags'
232 -complete --command yt-dlp --long-option username --short-option u --description 'Login with this account ID'
233 -complete --command yt-dlp --long-option password --short-option p --description 'Account password. If this option is left out, yt-dlp will ask interactively'
234 -complete --command yt-dlp --long-option twofactor --short-option 2 --description 'Two-factor authentication code'
235 -complete --command yt-dlp --long-option netrc --short-option n --description 'Use .netrc authentication data'
236 -complete --command yt-dlp --long-option netrc-location --description 'Location of .netrc authentication data; either the path or its containing directory. Defaults to ~/.netrc'
237 -complete --command yt-dlp --long-option netrc-cmd --description 'Command to execute to get the credentials for an extractor.'
238 -complete --command yt-dlp --long-option video-password --description 'Video-specific password'
239 -complete --command yt-dlp --long-option ap-mso --description 'Adobe Pass multiple-system operator (TV provider) identifier, use --ap-list-mso for a list of available MSOs'
240 -complete --command yt-dlp --long-option ap-username --description 'Multiple-system operator account login'
241 -complete --command yt-dlp --long-option ap-password --description 'Multiple-system operator account password. If this option is left out, yt-dlp will ask interactively'
242 -complete --command yt-dlp --long-option ap-list-mso --description 'List all supported multiple-system operators'
243 -complete --command yt-dlp --long-option client-certificate --description 'Path to client certificate file in PEM format. May include the private key'
244 -complete --command yt-dlp --long-option client-certificate-key --description 'Path to private key file for client certificate'
245 -complete --command yt-dlp --long-option client-certificate-password --description 'Password for client certificate private key, if encrypted. If not provided, and the key is encrypted, yt-dlp will ask interactively'
246 -complete --command yt-dlp --long-option extract-audio --short-option x --description 'Convert video files to audio-only files (requires ffmpeg and ffprobe)'
247 -complete --command yt-dlp --long-option audio-format --description 'Format to convert the audio to when -x is used. (currently supported: best (default), aac, alac, flac, m4a, mp3, opus, vorbis, wav). You can specify multiple rules using similar syntax as --remux-video'
248 -complete --command yt-dlp --long-option audio-quality --description 'Specify ffmpeg audio quality to use when converting the audio with -x. Insert a value between 0 (best) and 10 (worst) for VBR or a specific bitrate like 128K (default %default)'
249 -complete --command yt-dlp --long-option remux-video --description 'Remux the video into another container if necessary (currently supported: avi, flv, gif, mkv, mov, mp4, webm, aac, aiff, alac, flac, m4a, mka, mp3, ogg, opus, vorbis, wav). If the target container does not support the video/audio codec, remuxing will fail. You can specify multiple rules; e.g. "aac>m4a/mov>mp4/mkv" will remux aac to m4a, mov to mp4 and anything else to mkv' --arguments 'mp4 mkv' --exclusive
250 -complete --command yt-dlp --long-option recode-video --description 'Re-encode the video into another format if necessary. The syntax and supported formats are the same as --remux-video' --arguments 'mp4 flv ogg webm mkv' --exclusive
251 -complete --command yt-dlp --long-option postprocessor-args --description 'Give these arguments to the postprocessors. Specify the postprocessor/executable name and the arguments separated by a colon ":" to give the argument to the specified postprocessor/executable. Supported PP are: Merger, ModifyChapters, SplitChapters, ExtractAudio, VideoRemuxer, VideoConvertor, Metadata, EmbedSubtitle, EmbedThumbnail, SubtitlesConvertor, ThumbnailsConvertor, FixupStretched, FixupM4a, FixupM3u8, FixupTimestamp and FixupDuration. The supported executables are: AtomicParsley, FFmpeg and FFprobe. You can also specify "PP+EXE:ARGS" to give the arguments to the specified executable only when being used by the specified postprocessor. Additionally, for ffmpeg/ffprobe, "_i"/"_o" can be appended to the prefix optionally followed by a number to pass the argument before the specified input/output file, e.g. --ppa "Merger+ffmpeg_i1:-v quiet". You can use this option multiple times to give different arguments to different postprocessors. (Alias: --ppa)'
252 -complete --command yt-dlp --long-option keep-video --short-option k --description 'Keep the intermediate video file on disk after post-processing'
253 -complete --command yt-dlp --long-option no-keep-video --description 'Delete the intermediate video file after post-processing (default)'
254 -complete --command yt-dlp --long-option post-overwrites --description 'Overwrite post-processed files (default)'
255 -complete --command yt-dlp --long-option no-post-overwrites --description 'Do not overwrite post-processed files'
256 -complete --command yt-dlp --long-option embed-subs --description 'Embed subtitles in the video (only for mp4, webm and mkv videos)'
257 -complete --command yt-dlp --long-option no-embed-subs --description 'Do not embed subtitles (default)'
258 -complete --command yt-dlp --long-option embed-thumbnail --description 'Embed thumbnail in the video as cover art'
259 -complete --command yt-dlp --long-option no-embed-thumbnail --description 'Do not embed thumbnail (default)'
260 -complete --command yt-dlp --long-option embed-metadata --description 'Embed metadata to the video file. Also embeds chapters/infojson if present unless --no-embed-chapters/--no-embed-info-json are used (Alias: --add-metadata)'
261 -complete --command yt-dlp --long-option no-embed-metadata --description 'Do not add metadata to file (default) (Alias: --no-add-metadata)'
262 -complete --command yt-dlp --long-option embed-chapters --description 'Add chapter markers to the video file (Alias: --add-chapters)'
263 -complete --command yt-dlp --long-option no-embed-chapters --description 'Do not add chapter markers (default) (Alias: --no-add-chapters)'
264 -complete --command yt-dlp --long-option embed-info-json --description 'Embed the infojson as an attachment to mkv/mka video files'
265 -complete --command yt-dlp --long-option no-embed-info-json --description 'Do not embed the infojson as an attachment to the video file'
266 -complete --command yt-dlp --long-option metadata-from-title
267 -complete --command yt-dlp --long-option parse-metadata --description 'Parse additional metadata like title/artist from other fields; see "MODIFYING METADATA" for details. Supported values of "WHEN" are the same as that of --use-postprocessor (default: pre_process)'
268 -complete --command yt-dlp --long-option replace-in-metadata --description 'Replace text in a metadata field using the given regex. This option can be used multiple times. Supported values of "WHEN" are the same as that of --use-postprocessor (default: pre_process)'
269 -complete --command yt-dlp --long-option xattrs --description 'Write metadata to the video file'"'"'s xattrs (using Dublin Core and XDG standards)'
270 -complete --command yt-dlp --long-option concat-playlist --description 'Concatenate videos in a playlist. One of "never", "always", or "multi_video" (default; only when the videos form a single show). All the video files must have the same codecs and number of streams to be concatenable. The "pl_video:" prefix can be used with "--paths" and "--output" to set the output filename for the concatenated files. See "OUTPUT TEMPLATE" for details'
271 -complete --command yt-dlp --long-option fixup --description 'Automatically correct known faults of the file. One of never (do nothing), warn (only emit a warning), detect_or_warn (the default; fix the file if we can, warn otherwise), force (try fixing even if the file already exists)'
272 -complete --command yt-dlp --long-option prefer-avconv
273 -complete --command yt-dlp --long-option prefer-ffmpeg
274 -complete --command yt-dlp --long-option ffmpeg-location --description 'Location of the ffmpeg binary; either the path to the binary or its containing directory'
275 -complete --command yt-dlp --long-option exec --description 'Execute a command, optionally prefixed with when to execute it, separated by a ":". Supported values of "WHEN" are the same as that of --use-postprocessor (default: after_move). The same syntax as the output template can be used to pass any field as arguments to the command. If no fields are passed, %(filepath,_filename|)q is appended to the end of the command. This option can be used multiple times'
276 -complete --command yt-dlp --long-option no-exec --description 'Remove any previously defined --exec'
277 -complete --command yt-dlp --long-option exec-before-download
278 -complete --command yt-dlp --long-option no-exec-before-download
279 -complete --command yt-dlp --long-option convert-subs --description 'Convert the subtitles to another format (currently supported: ass, lrc, srt, vtt). Use "--convert-subs none" to disable conversion (default) (Alias: --convert-subtitles)'
280 -complete --command yt-dlp --long-option convert-thumbnails --description 'Convert the thumbnails to another format (currently supported: jpg, png, webp). You can specify multiple rules using similar syntax as "--remux-video". Use "--convert-thumbnails none" to disable conversion (default)'
281 -complete --command yt-dlp --long-option split-chapters --description 'Split video into multiple files based on internal chapters. The "chapter:" prefix can be used with "--paths" and "--output" to set the output filename for the split files. See "OUTPUT TEMPLATE" for details'
282 -complete --command yt-dlp --long-option no-split-chapters --description 'Do not split video based on chapters (default)'
283 -complete --command yt-dlp --long-option remove-chapters --description 'Remove chapters whose title matches the given regular expression. The syntax is the same as --download-sections. This option can be used multiple times'
284 -complete --command yt-dlp --long-option no-remove-chapters --description 'Do not remove any chapters from the file (default)'
285 -complete --command yt-dlp --long-option force-keyframes-at-cuts --description 'Force keyframes at cuts when downloading/splitting/removing sections. This is slow due to needing a re-encode, but the resulting video may have fewer artifacts around the cuts'
286 -complete --command yt-dlp --long-option no-force-keyframes-at-cuts --description 'Do not force keyframes around the chapters when cutting/splitting (default)'
287 -complete --command yt-dlp --long-option use-postprocessor --description 'The (case-sensitive) name of plugin postprocessors to be enabled, and (optionally) arguments to be passed to it, separated by a colon ":". ARGS are a semicolon ";" delimited list of NAME=VALUE. The "when" argument determines when the postprocessor is invoked. It can be one of "pre_process" (after video extraction), "after_filter" (after video passes filter), "video" (after --format; before --print/--output), "before_dl" (before each video download), "post_process" (after each video download; default), "after_move" (after moving the video file to its final location), "after_video" (after downloading and processing all formats of a video), or "playlist" (at end of playlist). This option can be used multiple times to add different postprocessors'
288 -complete --command yt-dlp --long-option sponsorblock-mark --description 'SponsorBlock categories to create chapters for, separated by commas. Available categories are sponsor, intro, outro, selfpromo, preview, filler, interaction, music_offtopic, poi_highlight, chapter, all and default (=all). You can prefix the category with a "-" to exclude it. See [1] for descriptions of the categories. E.g. --sponsorblock-mark all,-preview [1] https://wiki.sponsor.ajay.app/w/Segment_Categories'
289 -complete --command yt-dlp --long-option sponsorblock-remove --description 'SponsorBlock categories to be removed from the video file, separated by commas. If a category is present in both mark and remove, remove takes precedence. The syntax and available categories are the same as for --sponsorblock-mark except that "default" refers to "all,-filler" and poi_highlight, chapter are not available'
290 -complete --command yt-dlp --long-option sponsorblock-chapter-title --description 'An output template for the title of the SponsorBlock chapters created by --sponsorblock-mark. The only available fields are start_time, end_time, category, categories, name, category_names. Defaults to "%default"'
291 -complete --command yt-dlp --long-option no-sponsorblock --description 'Disable both --sponsorblock-mark and --sponsorblock-remove'
292 -complete --command yt-dlp --long-option sponsorblock-api --description 'SponsorBlock API location, defaults to %default'
293 -complete --command yt-dlp --long-option sponskrub
294 -complete --command yt-dlp --long-option no-sponskrub
295 -complete --command yt-dlp --long-option sponskrub-cut
296 -complete --command yt-dlp --long-option no-sponskrub-cut
297 -complete --command yt-dlp --long-option sponskrub-force
298 -complete --command yt-dlp --long-option no-sponskrub-force
299 -complete --command yt-dlp --long-option sponskrub-location
300 -complete --command yt-dlp --long-option sponskrub-args
301 -complete --command yt-dlp --long-option extractor-retries --description 'Number of retries for known extractor errors (default is %default), or "infinite"'
302 -complete --command yt-dlp --long-option allow-dynamic-mpd --description 'Process dynamic DASH manifests (default) (Alias: --no-ignore-dynamic-mpd)'
303 -complete --command yt-dlp --long-option ignore-dynamic-mpd --description 'Do not process dynamic DASH manifests (Alias: --no-allow-dynamic-mpd)'
304 -complete --command yt-dlp --long-option hls-split-discontinuity --description 'Split HLS playlists to different formats at discontinuities such as ad breaks'
305 -complete --command yt-dlp --long-option no-hls-split-discontinuity --description 'Do not split HLS playlists into different formats at discontinuities such as ad breaks (default)'
306 -complete --command yt-dlp --long-option extractor-args --description 'Pass ARGS arguments to the IE_KEY extractor. See "EXTRACTOR ARGUMENTS" for details. You can use this option multiple times to give arguments for different extractors'
307 -complete --command yt-dlp --long-option youtube-include-dash-manifest
308 -complete --command yt-dlp --long-option youtube-skip-dash-manifest
309 -complete --command yt-dlp --long-option youtube-include-hls-manifest
310 -complete --command yt-dlp --long-option youtube-skip-hls-manifest
311 -
312 -
313 -complete --command yt-dlp --arguments ":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
1 -.\" Man page generated from reStructuredText.
2 -.
3 -.
4 -.nr rst2man-indent-level 0
5 -.
6 -.de1 rstReportMargin
7 -\\$1 \\n[an-margin]
8 -level \\n[rst2man-indent-level]
9 -level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
10 --
11 -\\n[rst2man-indent0]
12 -\\n[rst2man-indent1]
13 -\\n[rst2man-indent2]
14 -..
15 -.de1 INDENT
16 -.\" .rstReportMargin pre:
17 -. RS \\$1
18 -. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
19 -. nr rst2man-indent-level +1
20 -.\" .rstReportMargin post:
21 -..
22 -.de UNINDENT
23 -. RE
24 -.\" indent \\n[an-margin]
25 -.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
26 -.nr rst2man-indent-level -1
27 -.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28 -.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29 -..
30 -.TH "STREAMLINK" "1" "Nov 04, 2024" "7.0.0" "Streamlink"
31 -.SH NAME
32 -streamlink \- extracts streams from various services and pipes them into a video player of choice
33 -.SH SYNOPSIS
34 -.INDENT 0.0
35 -.INDENT 3.5
36 -.sp
37 -.EX
38 -streamlink [OPTIONS] <URL> [STREAM]
39 -.EE
40 -.UNINDENT
41 -.UNINDENT
42 -.SH EXAMPLES
43 -.INDENT 0.0
44 -.INDENT 3.5
45 -.sp
46 -.EX
47 -streamlink \-\-loglevel debug youtu.be/VIDEO\-ID best
48 -streamlink \-\-player mpv \-\-player\-args \(aq\-\-no\-border \-\-no\-keepaspect\-window\(aq twitch.tv/CHANNEL 1080p60
49 -streamlink \-\-player\-external\-http \-\-player\-external\-http\-port 8888 URL STREAM
50 -streamlink \-\-output /path/to/file \-\-http\-timeout 60 URL STREAM
51 -streamlink \-\-stdout URL STREAM | ffmpeg \-i pipe:0 ...
52 -streamlink \-\-http\-header \(aqAuthorization=OAuth TOKEN\(aq \-\-http\-header \(aqReferer=URL\(aq URL STREAM
53 -streamlink \-\-hls\-live\-edge 5 \-\-stream\-segment\-threads 5 \(aqhls://https://host/playlist.m3u8\(aq best
54 -streamlink \-\-twitch\-low\-latency \-p mpv \-a \(aq\-\-cache=yes \-\-demuxer\-max\-back\-bytes=2G\(aq twitch.tv/CHANNEL best
55 -.EE
56 -.UNINDENT
57 -.UNINDENT
58 -.SH OPTIONS
59 -.SS Positional arguments
60 -.INDENT 0.0
61 -.TP
62 -.B URL
63 -A URL to attempt to extract streams from.
64 -.sp
65 -Usually, the protocol of http(s) URLs can be omitted (\fBhttps://\fP),
66 -depending on the implementation of the plugin being used.
67 -.sp
68 -Alternatively, the URL can also be specified by using the \fI\%\-\-url\fP option.
69 -.UNINDENT
70 -.INDENT 0.0
71 -.TP
72 -.B STREAM
73 -Stream to play.
74 -.sp
75 -Use \fBbest\fP or \fBworst\fP for selecting the highest or lowest available quality.
76 -.sp
77 -Fallback streams can be specified by using a comma\-separated list:
78 -.INDENT 7.0
79 -.INDENT 3.5
80 -.sp
81 -.EX
82 -\(dq720p,480p,best\(dq
83 -.EE
84 -.UNINDENT
85 -.UNINDENT
86 -.sp
87 -If no stream is specified and \fI\%\-\-default\-stream\fP is not used, then a list of available streams will be printed.
88 -.UNINDENT
89 -.SS General options
90 -.INDENT 0.0
91 -.TP
92 -.B \-h
93 -.TP
94 -.B \-\-help
95 -Show this help message and exit.
96 -.UNINDENT
97 -.INDENT 0.0
98 -.TP
99 -.B \-V
100 -.TP
101 -.B \-\-version
102 -Show version string and exit.
103 -.UNINDENT
104 -.INDENT 0.0
105 -.TP
106 -.B \-\-version\-check
107 -Run a version check and exit.
108 -.UNINDENT
109 -.INDENT 0.0
110 -.TP
111 -.B \-\-auto\-version\-check {yes,true,1,on,no,false,0,off}
112 -Enable or disable the automatic check for a new version of Streamlink.
113 -.sp
114 -Default is: \fB\(dqno\(dq\fP\&.
115 -.UNINDENT
116 -.INDENT 0.0
117 -.TP
118 -.B \-\-plugins
119 -Print a list of all currently installed plugins.
120 -.UNINDENT
121 -.INDENT 0.0
122 -.TP
123 -.B \-\-plugin\-dir DIRECTORY
124 -Load plugins from this directory.
125 -.sp
126 -Can be set multiple times to load plugins from multiple directories.
127 -.UNINDENT
128 -.INDENT 0.0
129 -.TP
130 -.B \-\-plugin\-dirs DIRECTORY
131 -Load plugins from a list of comma\-separated directories. (deprecated)
132 -.UNINDENT
133 -.INDENT 0.0
134 -.TP
135 -.B \-\-can\-handle\-url URL
136 -Check if Streamlink has a plugin that can handle the specified URL.
137 -.sp
138 -Status code is \fB0\fP on success, \fB1\fP on failure.
139 -.sp
140 -Useful for external scripting.
141 -.UNINDENT
142 -.INDENT 0.0
143 -.TP
144 -.B \-\-can\-handle\-url\-no\-redirect URL
145 -Same as \fI\%\-\-can\-handle\-url\fP, but without following redirects when looking up the URL.
146 -.UNINDENT
147 -.INDENT 0.0
148 -.TP
149 -.B \-\-config FILENAME
150 -Load options from this config file.
151 -.sp
152 -Can be repeated to load multiple files, in which case the options are
153 -merged on top of each other where the last config has highest priority.
154 -.UNINDENT
155 -.INDENT 0.0
156 -.TP
157 -.B \-\-no\-config
158 -Disable loading any default or custom config files.
159 -.UNINDENT
160 -.INDENT 0.0
161 -.TP
162 -.B \-\-locale LOCALE
163 -Override the system\(aqs locale setting, for selecting the preferred subtitle and audio language.
164 -.sp
165 -The locale is formatted as \fB[language_code]_[country_code]\fP, e.g. \fBen_US\fP or \fBes_ES\fP\&.
166 -.sp
167 -Default is: \fBsystem locale\fP\&.
168 -.UNINDENT
169 -.SS Logging arguments
170 -.INDENT 0.0
171 -.TP
172 -.B \-l LEVEL
173 -.TP
174 -.B \-\-loglevel LEVEL
175 -Set the log message threshold.
176 -.sp
177 -Valid levels are, in order of increasing verbosity:
178 -.sp
179 -\fBnone\fP, \fBcritical\fP, \fBerror\fP, \fBwarning\fP, \fBinfo\fP, \fBdebug\fP, \fBtrace\fP, \fBall\fP
180 -.sp
181 -Default is: \fB\(dqinfo\(dq\fP\&.
182 -.UNINDENT
183 -.INDENT 0.0
184 -.TP
185 -.B \-\-logformat FORMAT
186 -Set a custom logging format.
187 -.sp
188 -See the Python standard library\(aqs \fBlogging.Formatter\fP docs for more information about the logging format
189 -and the available \fBLogRecord\fP attributes. Streamlink\(aqs formatter uses the curly brace style.
190 -.sp
191 -The default format depends on the chosen log level (may include the \fBasctime\fP attribute).
192 -.sp
193 -Default is: \fB\(dq[{name}][{levelname}] {message}\(dq\fP\&.
194 -.UNINDENT
195 -.INDENT 0.0
196 -.TP
197 -.B \-\-logdateformat DATEFORMAT
198 -Set a custom logging date format.
199 -.sp
200 -This formats the \fBLogRecord\fP\(aqs \fBasctime\fP attribute via \fBstrftime()\fP\&.
201 -.sp
202 -The default date format depends on the chosen log level (may include fractions).
203 -.sp
204 -Default is: \fB\(dq%H:%M:%S\(dq\fP\&.
205 -.UNINDENT
206 -.INDENT 0.0
207 -.TP
208 -.B \-\-logfile FILE
209 -Append log output to \fBFILE\fP instead of writing to stdout/stderr.
210 -.sp
211 -User prompts and download progress won\(aqt be written to \fBFILE\fP\&.
212 -.sp
213 -A value of \fB\-\fP (dash) will set the file name to an ISO8601\-like string
214 -and will choose the following default log directories.
215 -.sp
216 -Windows:
217 -.INDENT 7.0
218 -.INDENT 3.5
219 -.sp
220 -.EX
221 -%TEMP%\estreamlink\elogs
222 -.EE
223 -.UNINDENT
224 -.UNINDENT
225 -.sp
226 -macOS:
227 -.INDENT 7.0
228 -.INDENT 3.5
229 -.sp
230 -.EX
231 -${HOME}/Library/Logs/streamlink
232 -.EE
233 -.UNINDENT
234 -.UNINDENT
235 -.sp
236 -Linux/BSD:
237 -.INDENT 7.0
238 -.INDENT 3.5
239 -.sp
240 -.EX
241 -${XDG_STATE_HOME:\-${HOME}/.local/state}/streamlink/logs
242 -.EE
243 -.UNINDENT
244 -.UNINDENT
245 -.UNINDENT
246 -.INDENT 0.0
247 -.TP
248 -.B \-Q
249 -.TP
250 -.B \-\-quiet
251 -Hide all log output.
252 -.sp
253 -Alias for \fI\%\-\-loglevel=none\fP\&.
254 -.UNINDENT
255 -.INDENT 0.0
256 -.TP
257 -.B \-j
258 -.TP
259 -.B \-\-json
260 -Output JSON representations instead of the normal text output.
261 -.sp
262 -Useful for external scripting.
263 -.UNINDENT
264 -.SS Network arguments
265 -.INDENT 0.0
266 -.TP
267 -.B \-\-interface INTERFACE
268 -Set the network interface.
269 -.UNINDENT
270 -.INDENT 0.0
271 -.TP
272 -.B \-4
273 -.TP
274 -.B \-\-ipv4
275 -Resolve address names to IPv4 only. This option overrides \fI\%\-\-ipv6\fP\&.
276 -.UNINDENT
277 -.INDENT 0.0
278 -.TP
279 -.B \-6
280 -.TP
281 -.B \-\-ipv6
282 -Resolve address names to IPv6 only. This option overrides \fI\%\-\-ipv4\fP\&.
283 -.UNINDENT
284 -.SS Player options
285 -.INDENT 0.0
286 -.TP
287 -.B \-p PATH
288 -.TP
289 -.B \-\-player PATH
290 -Set the player executable that will be launched (unless a different output method was chosen).
291 -.sp
292 -Either set an absolute or relative path to the player executable, or just set the executable\(aqs name
293 -if it can be resolved from the paths of the system\(aqs \fBPATH\fP environment variable.
294 -.sp
295 -In addition to setting the player executable path, custom player arguments can be set via \fI\%\-\-player\-args\fP\&.
296 -.sp
297 -\fBNOTE:\fP
298 -.INDENT 7.0
299 -.INDENT 3.5
300 -In the past, \fI\%\-\-player\fP allowed defining additional player arguments, which as a consequence required wrapping
301 -player paths that contained spaces in quotation marks. This is unsupported since release \fB6.0.0\fP\&.
302 -.UNINDENT
303 -.UNINDENT
304 -.sp
305 -Default is: \fBVLC player, if available\fP\&.
306 -.UNINDENT
307 -.INDENT 0.0
308 -.TP
309 -.B \-a ARGUMENTS
310 -.TP
311 -.B \-\-player\-args ARGUMENTS
312 -Set a string of custom \fI\%\-\-player\fP launch arguments that will be parsed and tokenized.
313 -.sp
314 -The value can contain formatting variables surrounded by curly braces, \fB{\fP and \fB}\fP\&.
315 -Curly brace characters can be escaped by doubling, e.g. \fB{{\fP and \fB}}\fP\&.
316 -.sp
317 -Available formatting variables:
318 -.INDENT 7.0
319 -.TP
320 -.B \fB{playerinput}\fP
321 -This is the input argument that the \fI\%\-\-player\fP will receive. For standard input (stdin),
322 -it is \fB\-\fP (dash), but it can also be a file path or URL, depending on the options used.
323 -If unset, then the player input argument will be appended to the parsed player arguments list.
324 -.TP
325 -.B \fB{playertitleargs}\fP
326 -The automatically generated player title arguments, if a supported \fI\%\-\-player\fP was found. See \fI\%\-\-title\fP for more.
327 -If unset, automatically generated player title arguments will be prepended to the parsed player arguments list.
328 -.UNINDENT
329 -.sp
330 -Example:
331 -.INDENT 7.0
332 -.INDENT 3.5
333 -.sp
334 -.EX
335 -streamlink \-p vlc \-a \(dq\-\-play\-and\-exit \-\-no\-one\-instance\(dq <url> [stream]
336 -.EE
337 -.UNINDENT
338 -.UNINDENT
339 -.sp
340 -Default is: \fB\(dq\(dq\fP\&.
341 -.UNINDENT
342 -.INDENT 0.0
343 -.TP
344 -.B \-\-player\-env KEY=VALUE
345 -Add an additional environment variable to the spawned \fI\%\-\-player\fP process, in addition to the ones inherited from
346 -the Streamlink/Python parent process. This allows setting player environment variables in config files.
347 -.sp
348 -Can be repeated to add multiple environment variables.
349 -.UNINDENT
350 -.INDENT 0.0
351 -.TP
352 -.B \-v
353 -.TP
354 -.B \-\-player\-verbose
355 -Write the \fI\%\-\-player\fP\(aqs stdout/stderr output to Streamlink\(aqs stdout/stderr output.
356 -.UNINDENT
357 -.INDENT 0.0
358 -.TP
359 -.B \-\-verbose\-player
360 -Deprecated in favor of \fI\%\-\-player\-verbose\fP\&.
361 -.UNINDENT
362 -.INDENT 0.0
363 -.TP
364 -.B \-n
365 -.TP
366 -.B \-\-player\-fifo
367 -Make the \fI\%\-\-player\fP read the stream through a named pipe instead of the stdin pipe.
368 -.UNINDENT
369 -.INDENT 0.0
370 -.TP
371 -.B \-\-fifo
372 -Deprecated in favor of \fI\%\-\-player\-fifo\fP\&.
373 -.UNINDENT
374 -.INDENT 0.0
375 -.TP
376 -.B \-\-player\-http
377 -Make the \fI\%\-\-player\fP read the stream through HTTP instead of the stdin pipe.
378 -.UNINDENT
379 -.INDENT 0.0
380 -.TP
381 -.B \-\-player\-continuous\-http
382 -Make the \fI\%\-\-player\fP read the stream through HTTP, but unlike \fI\%\-\-player\-http\fP,
383 -it will continuously try to open the stream if the player requests it.
384 -.sp
385 -This enables the handling of stream disconnects if the player is
386 -capable of reconnecting to a HTTP stream. This is usually done by
387 -setting the player to a \(dqrepeat mode\(dq.
388 -.UNINDENT
389 -.INDENT 0.0
390 -.TP
391 -.B \-\-player\-external\-http
392 -Serve stream data through HTTP without opening the \fI\%\-\-player\fP\&. This is
393 -useful to allow external devices like smartphones or streaming boxes to
394 -watch streams they wouldn\(aqt be able to otherwise.
395 -.sp
396 -The default behavior is similar to the \fI\%\-\-player\-continuous\-http\fP option,
397 -but no player program will be started, and the server will listen on all available
398 -connections instead of just in the local (loopback) interface.
399 -.sp
400 -See \fI\%\-\-player\-external\-http\-interface\fP for choosing a specific network interface, and
401 -see \fI\%\-\-player\-external\-http\-port\fP for choosing a non\-randomized port.
402 -.sp
403 -Optionally, the \fI\%\-\-player\-external\-http\-continuous\fP option allows for disabling
404 -the continuous run\-mode, so that Streamlink will stop when the stream ends.
405 -.sp
406 -The URLs that can be used to access the stream will be printed to the
407 -console, and the server can be interrupted using CTRL\-C.
408 -.UNINDENT
409 -.INDENT 0.0
410 -.TP
411 -.B \-\-player\-external\-http\-continuous {yes,true,1,on,no,false,0,off}
412 -Set the run\-mode of \fI\%\-\-player\-external\-http\fP to continuous or non\-continuous.
413 -.sp
414 -In the continuous run\-mode, Streamlink will keep running after the stream has ended
415 -and will wait for the next HTTP request being made unless it gets shut down via CTRL\-C.
416 -.sp
417 -If set to non\-continuous, Streamlink will stop once the stream has ended.
418 -.sp
419 -Default is: \fBtrue\fP\&.
420 -.UNINDENT
421 -.INDENT 0.0
422 -.TP
423 -.B \-\-player\-external\-http\-interface INTERFACE
424 -Set the network interface on which the HTTP server will be listening on.
425 -If unset or set to \fB0.0.0.0\fP, all available interfaces will be bound.
426 -.UNINDENT
427 -.INDENT 0.0
428 -.TP
429 -.B \-\-player\-external\-http\-port PORT
430 -Set the port of the external HTTP server if that mode is enabled.
431 -Omit or set to \fB0\fP to use a random high ( >1024) port.
432 -.UNINDENT
433 -.INDENT 0.0
434 -.TP
435 -.B \-\-player\-passthrough TYPES
436 -A comma\-delimited list of stream types to pass to the \fI\%\-\-player\fP as a URL to
437 -let it handle the transport of the stream instead of Streamlink.
438 -.sp
439 -Stream types that can be converted into a playable URL are:
440 -.sp
441 -hls, http
442 -.sp
443 -Make sure the player can handle the stream type when using this.
444 -.UNINDENT
445 -.INDENT 0.0
446 -.TP
447 -.B \-\-player\-no\-close
448 -By default, Streamlink will close the \fI\%\-\-player\fP when the stream ends.
449 -This is to avoid \(dqdead\(dq GUI players lingering after Streamlink has exited.
450 -.sp
451 -It does however have the side\-effect of sometimes closing a
452 -player before it has played back all of its cached data.
453 -.sp
454 -This option will instead let the player decide when to exit.
455 -.UNINDENT
456 -.INDENT 0.0
457 -.TP
458 -.B \-t TITLE
459 -.TP
460 -.B \-\-title TITLE
461 -Change the title of the \fI\%\-\-player\fP\(aqs window.
462 -.sp
463 -Please see the \(dq\fI\%Metadata variables\fP\(dq section of Streamlink\(aqs CLI documentation for all available metadata variables,
464 -as well as the \(dq\fI\%Plugins\fP\(dq section for the list of metadata variables defined in each plugin.
465 -.sp
466 -Only the following players are supported:
467 -.sp
468 -mpv, potplayer, vlc
469 -.sp
470 -Example:
471 -.INDENT 7.0
472 -.INDENT 3.5
473 -.sp
474 -.EX
475 -streamlink \-p mpv \-\-title \(dq{author} \- {category} \- {title}\(dq <URL> [STREAM]
476 -.EE
477 -.UNINDENT
478 -.UNINDENT
479 -.UNINDENT
480 -.SS File output options
481 -.INDENT 0.0
482 -.TP
483 -.B \-O
484 -.TP
485 -.B \-\-stdout
486 -Write stream data to \fBstdout\fP instead of playing it in the \fI\%\-\-player\fP\&.
487 -.UNINDENT
488 -.INDENT 0.0
489 -.TP
490 -.B \-o FILENAME
491 -.TP
492 -.B \-\-output FILENAME
493 -Write stream data to \fBFILENAME\fP instead of playing it in the \fI\%\-\-player\fP\&.
494 -If \fBFILENAME\fP is set to \fB\-\fP (dash), then the stream data will be written to \fBstdout\fP,
495 -similar to the \fI\%\-\-stdout\fP argument.
496 -.sp
497 -Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
498 -.sp
499 -Unless \fI\%\-\-force\fP is set, Streamlink will ask for confirmation before writing if \fBFILENAME\fP already exists.
500 -.sp
501 -Please see the \(dq\fI\%Metadata variables\fP\(dq section of Streamlink\(aqs CLI documentation for all available metadata variables,
502 -as well as the \(dq\fI\%Plugins\fP\(dq section for the list of metadata variables defined in each plugin.
503 -.sp
504 -Unsupported characters in substituted variables will be replaced with an underscore.
505 -.sp
506 -Example:
507 -.INDENT 7.0
508 -.INDENT 3.5
509 -.sp
510 -.EX
511 -streamlink \-\-output \(dq~/recordings/{author}/{category}/{id}\-{time:%Y%m%d%H%M%S}.ts\(dq <URL> [STREAM]
512 -.EE
513 -.UNINDENT
514 -.UNINDENT
515 -.UNINDENT
516 -.INDENT 0.0
517 -.TP
518 -.B \-r FILENAME
519 -.TP
520 -.B \-\-record FILENAME
521 -Write stream data to \fBFILENAME\fP while at the same time allowing playback in the \fI\%\-\-player\fP or writing it to \fI\%\-\-stdout\fP\&.
522 -If \fBFILENAME\fP is set to \fB\-\fP (dash), then the stream data will be written to \fBstdout\fP,
523 -similar to the \fI\%\-\-stdout\fP argument, while still opening the player.
524 -.sp
525 -Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
526 -.sp
527 -Unless \fI\%\-\-force\fP is set, Streamlink will ask for confirmation before writing if \fBFILENAME\fP already exists.
528 -.sp
529 -Please see the \(dq\fI\%Metadata variables\fP\(dq section of Streamlink\(aqs CLI documentation for all available metadata variables,
530 -as well as the \(dq\fI\%Plugins\fP\(dq section for the list of metadata variables defined in each plugin.
531 -.sp
532 -Unsupported characters in substituted variables will be replaced with an underscore.
533 -.sp
534 -Example:
535 -.INDENT 7.0
536 -.INDENT 3.5
537 -.sp
538 -.EX
539 -streamlink \-\-record \(dq~/recordings/{author}/{category}/{id}\-{time:%Y%m%d%H%M%S}.ts\(dq <URL> [STREAM]
540 -.EE
541 -.UNINDENT
542 -.UNINDENT
543 -.UNINDENT
544 -.INDENT 0.0
545 -.TP
546 -.B \-R FILENAME
547 -.TP
548 -.B \-\-record\-and\-pipe FILENAME
549 -Deprecated in favor of \fI\%\-\-stdout\fP \fI\%\-\-record=FILENAME\fP\&.
550 -.UNINDENT
551 -.INDENT 0.0
552 -.TP
553 -.B \-\-fs\-safe\-rules
554 -The rules used to make formatting variables filesystem\-safe are chosen
555 -automatically according to the type of system in use. This overrides
556 -the automatic detection.
557 -.sp
558 -Intended for use when Streamlink is running on a UNIX\-like OS but writing
559 -to Windows filesystems such as NTFS; USB devices using VFAT or exFAT; CIFS
560 -shares that are enforcing Windows filename limitations, etc.
561 -.sp
562 -These characters are replaced with an underscore for the rules in use:
563 -.INDENT 7.0
564 -.IP \(bu 2
565 -POSIX: \fB\ex00\-\ex1F /\fP
566 -.IP \(bu 2
567 -Windows: \fB\ex00\-\ex1F \ex7F \(dq * / : < > ? \e |\fP
568 -.UNINDENT
569 -.UNINDENT
570 -.INDENT 0.0
571 -.TP
572 -.B \-f
573 -.TP
574 -.B \-\-force
575 -When using \fI\%\-\-output\fP or \fI\%\-\-record\fP, always write to file even if it already exists (overwrite).
576 -.UNINDENT
577 -.INDENT 0.0
578 -.TP
579 -.B \-\-progress {yes,force,no}
580 -When using \fI\%\-\-output\fP or \fI\%\-\-record\fP, show or hide the download progress bar, or force it if there\(aqs no terminal.
581 -.sp
582 -Default is: \fByes\fP\&.
583 -.UNINDENT
584 -.SS Stream options
585 -.INDENT 0.0
586 -.TP
587 -.B \-\-url URL
588 -A URL to attempt to extract streams from.
589 -.sp
590 -Usually, the protocol of http(s) URLs can be omitted (\fBhttps://\fP),
591 -depending on the implementation of the plugin being used.
592 -.sp
593 -This is an alternative to setting the URL using a positional argument and can be useful if set in a config file.
594 -.UNINDENT
595 -.INDENT 0.0
596 -.TP
597 -.B \-\-default\-stream STREAM
598 -Stream to play.
599 -.sp
600 -Use \fBbest\fP or \fBworst\fP for selecting the highest or lowest available quality.
601 -.sp
602 -Fallback streams can be specified by using a comma\-separated list:
603 -.INDENT 7.0
604 -.INDENT 3.5
605 -.sp
606 -.EX
607 -\(dq720p,480p,best\(dq
608 -.EE
609 -.UNINDENT
610 -.UNINDENT
611 -.sp
612 -This is an alternative to setting the stream using a positional argument and can be useful if set in a config file.
613 -.UNINDENT
614 -.INDENT 0.0
615 -.TP
616 -.B \-\-stream\-url
617 -If possible, translate the resolved stream to a URL and print it.
618 -.UNINDENT
619 -.INDENT 0.0
620 -.TP
621 -.B \-\-retry\-streams DELAY
622 -Retry fetching the list of available streams until streams are found
623 -while waiting \fBDELAY\fP second(s) between each attempt. If unset, only one
624 -attempt will be made to fetch the list of streams available.
625 -.sp
626 -The number of fetch retry attempts can be capped with \fI\%\-\-retry\-max\fP\&.
627 -.UNINDENT
628 -.INDENT 0.0
629 -.TP
630 -.B \-\-retry\-max COUNT
631 -When using \fI\%\-\-retry\-streams\fP, stop retrying the fetch after \fBCOUNT\fP retry
632 -attempt(s). Fetch will retry infinitely if \fBCOUNT\fP is zero or unset.
633 -.sp
634 -If \fI\%\-\-retry\-max\fP is set without setting \fI\%\-\-retry\-streams\fP, the delay between retries will default to 1 second.
635 -.UNINDENT
636 -.INDENT 0.0
637 -.TP
638 -.B \-\-retry\-open ATTEMPTS
639 -After a successful fetch, try \fBATTEMPTS\fP time(s) to open the stream until giving up.
640 -.sp
641 -Default is: \fB1\fP\&.
642 -.UNINDENT
643 -.INDENT 0.0
644 -.TP
645 -.B \-\-stream\-types TYPES
646 -.TP
647 -.B \-\-stream\-priority TYPES
648 -A comma\-delimited list of stream types to allow.
649 -.sp
650 -The order will be used to separate streams when there are multiple
651 -streams with the same name but different stream types. Any stream type
652 -not listed will be omitted from the available streams list. An \fB*\fP (asterisk) can
653 -be used as a wildcard to match any other type of stream, e.g. dash.
654 -.sp
655 -Default is: \fB\(dqhls,http,*\(dq\fP\&.
656 -.UNINDENT
657 -.INDENT 0.0
658 -.TP
659 -.B \-\-stream\-sorting\-excludes STREAMS
660 -Fine\-tune the \fBbest\fP and \fBworst\fP stream name synonyms by excluding unwanted streams.
661 -.sp
662 -If all of the available streams get excluded, \fBbest\fP and \fBworst\fP will become
663 -inaccessible and new special stream synonyms \fBbest\-unfiltered\fP and \fBworst\-unfiltered\fP
664 -can be used as a fallback selection method.
665 -.sp
666 -The filter\-expression\(aqs format is:
667 -.INDENT 7.0
668 -.INDENT 3.5
669 -.sp
670 -.EX
671 -[operator]<value>
672 -.EE
673 -.UNINDENT
674 -.UNINDENT
675 -.sp
676 -Valid operators are \fB>\fP, \fB>=\fP, \fB<\fP and \fB<=\fP\&. If no operator is specified then
677 -equality is tested.
678 -.sp
679 -For example this will exclude streams ranked higher than \(dq480p\(dq:
680 -.INDENT 7.0
681 -.INDENT 3.5
682 -.sp
683 -.EX
684 -\-\-stream\-sorting\-excludes \(dq>480p\(dq
685 -.EE
686 -.UNINDENT
687 -.UNINDENT
688 -.sp
689 -Multiple filters can be used by separating each expression with a comma.
690 -.sp
691 -For example this will exclude streams from two quality types:
692 -.INDENT 7.0
693 -.INDENT 3.5
694 -.sp
695 -.EX
696 -\-\-stream\-sorting\-excludes \(dq>480p,>medium\(dq
697 -.EE
698 -.UNINDENT
699 -.UNINDENT
700 -.UNINDENT
701 -.SS Stream transport options
702 -.INDENT 0.0
703 -.TP
704 -.B \-\-ringbuffer\-size SIZE
705 -The maximum size of the ringbuffer.
706 -.sp
707 -Mebibytes or kibibytes (base 2) can be specified via the M or K suffix respectively.
708 -.sp
709 -The ringbuffer is used as a temporary storage between the stream and the player.
710 -This allows Streamlink to download the stream faster than the player which reads the data from the ringbuffer.
711 -.sp
712 -The smaller the size of the ringbuffer, the higher the chance of the player buffering if the download speed
713 -decreases, and the higher the size, the more data can be use as a storage to recover from volatile download speeds.
714 -.sp
715 -Most players have their own additional cache and will read the ringbuffer\(aqs content as soon as data is available.
716 -If the player stops reading data while playback is paused, Streamlink will continue to download the stream in the
717 -background as long as the ringbuffer doesn\(aqt get full.
718 -.sp
719 -Default is: \fB\(dq16M\(dq\fP\&.
720 -.UNINDENT
721 -.INDENT 0.0
722 -.TP
723 -.B \-\-stream\-segment\-attempts ATTEMPTS
724 -The number of download attempts of each stream segment before giving up.
725 -.sp
726 -This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
727 -.sp
728 -Default is: \fB3\fP\&.
729 -.UNINDENT
730 -.INDENT 0.0
731 -.TP
732 -.B \-\-stream\-segment\-threads THREADS
733 -The size of the thread pool used to download segments. Minimum value is \fB1\fP and maximum is \fB10\fP\&.
734 -.sp
735 -This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
736 -.sp
737 -Default is: \fB1\fP\&.
738 -.UNINDENT
739 -.INDENT 0.0
740 -.TP
741 -.B \-\-stream\-segment\-timeout TIMEOUT
742 -The maximum time to wait for each segment to start downloading.
743 -.sp
744 -This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
745 -.sp
746 -Default is: \fB10.0\fP\&.
747 -.UNINDENT
748 -.INDENT 0.0
749 -.TP
750 -.B \-\-stream\-timeout TIMEOUT
751 -The maximum time to wait for an unfiltered stream to continue outputting data.
752 -.sp
753 -This applies to all different kinds of stream types, such as DASH, HLS, HTTP, etc.
754 -.sp
755 -Default is: \fB60.0\fP\&.
756 -.UNINDENT
757 -.INDENT 0.0
758 -.TP
759 -.B \-\-mux\-subtitles
760 -Automatically mux available subtitles into the output stream.
761 -.sp
762 -Needs to be supported by the used plugin.
763 -.UNINDENT
764 -.SS HLS options
765 -.INDENT 0.0
766 -.TP
767 -.B \-\-hls\-live\-edge SEGMENTS
768 -Number of segments from the live stream\(aqs current live position to begin streaming.
769 -The size or length of each segment is determined by the streaming provider.
770 -.sp
771 -Lower values will decrease the latency, but will also increase the chance of buffering, as there is less time for
772 -Streamlink to download segments and write their data to the output buffer. The number of parallel segment downloads
773 -can be set with \fI\%\-\-stream\-segment\-threads\fP and the HLS playlist reload time to fetch and queue new segments can be
774 -overridden with \fI\%\-\-hls\-playlist\-reload\-time\fP\&.
775 -.sp
776 -Default is: \fB3\fP\&.
777 -.sp
778 -\fBNOTE:\fP
779 -.INDENT 7.0
780 -.INDENT 3.5
781 -During live playback, the caching/buffering settings of the used player will add additional latency.
782 -To adjust this, please refer to the player\(aqs own documentation for the required configuration.
783 -Player parameters can be set via \fI\%\-\-player\-args\fP\&.
784 -.UNINDENT
785 -.UNINDENT
786 -.UNINDENT
787 -.INDENT 0.0
788 -.TP
789 -.B \-\-hls\-segment\-stream\-data
790 -Immediately write segment data into output buffer while downloading.
791 -.UNINDENT
792 -.INDENT 0.0
793 -.TP
794 -.B \-\-hls\-playlist\-reload\-attempts ATTEMPTS
795 -The maximum number of attempts when reloading the HLS playlist before giving up.
796 -.sp
797 -Default is: \fB3\fP\&.
798 -.UNINDENT
799 -.INDENT 0.0
800 -.TP
801 -.B \-\-hls\-playlist\-reload\-time TIME
802 -Set a custom HLS playlist reload time value, either in seconds or by using one of the following keywords:
803 -.INDENT 7.0
804 -.IP \(bu 2
805 -segment: The duration of the last segment in the current playlist
806 -.IP \(bu 2
807 -live\-edge: The sum of segment durations of the live edge value minus one
808 -.IP \(bu 2
809 -default: The playlist\(aqs target duration metadata
810 -.UNINDENT
811 -.sp
812 -Default is: \fBdefault\fP\&.
813 -.UNINDENT
814 -.INDENT 0.0
815 -.TP
816 -.B \-\-hls\-segment\-queue\-threshold FACTOR
817 -The multiplication factor of the HLS playlist\(aqs target duration after which the stream will be stopped early
818 -if no new segments were queued after refreshing the playlist (multiple times). The target duration defines the
819 -maximum duration a single segment can have, meaning new segments must be available during this time frame,
820 -otherwise playback issues can occur.
821 -.sp
822 -The intention of this queue threshold is to be able to stop early when the end of a stream doesn\(aqt get
823 -announced by the server, so Streamlink doesn\(aqt have to wait until a read\-timeout occurs. See \fI\%\-\-stream\-timeout\fP\&.
824 -.sp
825 -Set to \fB0\fP to disable.
826 -.sp
827 -Default is: \fB3\fP\&.
828 -.UNINDENT
829 -.INDENT 0.0
830 -.TP
831 -.B \-\-hls\-segment\-ignore\-names NAMES
832 -A comma\-delimited list of segment names that will get filtered out.
833 -.sp
834 -Example: \fB\-\-hls\-segment\-ignore\-names 000,001,002\fP
835 -.sp
836 -This will ignore every segment that ends with 000.ts, 001.ts and 002.ts
837 -.sp
838 -Default is: \fBNone\fP\&.
839 -.UNINDENT
840 -.INDENT 0.0
841 -.TP
842 -.B \-\-hls\-segment\-key\-uri URI
843 -Override the segment encryption key URIs for encrypted streams.
844 -.sp
845 -The value can be templated using the following variables, which will be
846 -replaced with their respective part from the source segment URI:
847 -.INDENT 7.0
848 -.INDENT 3.5
849 -.sp
850 -.EX
851 -{url} {scheme} {netloc} {path} {query}
852 -.EE
853 -.UNINDENT
854 -.UNINDENT
855 -.sp
856 -Examples:
857 -.INDENT 7.0
858 -.INDENT 3.5
859 -.sp
860 -.EX
861 -\-\-hls\-segment\-key\-uri \(dqhttps://example.com/hls/encryption_key\(dq
862 -\-\-hls\-segment\-key\-uri \(dq{scheme}://1.2.3.4{path}{query}\(dq
863 -\-\-hls\-segment\-key\-uri \(dq{scheme}://{netloc}/custom/path/to/key\(dq
864 -.EE
865 -.UNINDENT
866 -.UNINDENT
867 -.sp
868 -Default is: \fBNone\fP\&.
869 -.UNINDENT
870 -.INDENT 0.0
871 -.TP
872 -.B \-\-hls\-audio\-select CODE
873 -Select one or more specific audio sources by language code or name.
874 -Can be set to \fB*\fP (asterisk) to include all audio sources.
875 -.sp
876 -Examples:
877 -.INDENT 7.0
878 -.INDENT 3.5
879 -.sp
880 -.EX
881 -\-\-hls\-audio\-select \(dqEnglish,German\(dq
882 -\-\-hls\-audio\-select \(dqen,de\(dq
883 -\-\-hls\-audio\-select \(dq*\(dq
884 -.EE
885 -.UNINDENT
886 -.UNINDENT
887 -.sp
888 -\fBNOTE:\fP
889 -.INDENT 7.0
890 -.INDENT 3.5
891 -This is only useful in special circumstances where the regular
892 -locale option fails, such as when multiple sources of the same language exist.
893 -.UNINDENT
894 -.UNINDENT
895 -.UNINDENT
896 -.INDENT 0.0
897 -.TP
898 -.B \-\-hls\-start\-offset [[XX:]XX:]XX[.XX] | [XXh][XXm][XX[.XX]s]
899 -The amount of time to skip from the beginning of the stream.
900 -For live streams, this is a negative offset from the end of the stream (rewind).
901 -.sp
902 -Default is: \fB0\fP\&.
903 -.UNINDENT
904 -.INDENT 0.0
905 -.TP
906 -.B \-\-hls\-duration [[XX:]XX:]XX[.XX] | [XXh][XXm][XX[.XX]s]
907 -Limit the playback duration, useful for watching segments of a stream.
908 -The actual duration may be slightly longer, as it is rounded to the nearest HLS segment.
909 -.sp
910 -Default is: \fBunlimited\fP\&.
911 -.UNINDENT
912 -.INDENT 0.0
913 -.TP
914 -.B \-\-hls\-live\-restart
915 -Skip to the beginning of a live stream, or as far back as possible.
916 -.UNINDENT
917 -.SS DASH options
918 -.INDENT 0.0
919 -.TP
920 -.B \-\-dash\-manifest\-reload\-attempts ATTEMPTS
921 -The maximum number of attempts when reloading the DASH manifest before giving up.
922 -.sp
923 -Default is: \fB3\fP\&.
924 -.UNINDENT
925 -.SS FFmpeg options
926 -.INDENT 0.0
927 -.TP
928 -.B \-\-ffmpeg\-ffmpeg FILENAME
929 -Set the location of the FFmpeg executable if it can\(aqt be resolved
930 -from the paths of the system\(aqs \fBPATH\fP environment variable.
931 -.sp
932 -FFmpeg is required to access or mux separate video and audio streams,
933 -e.g. in DASH streams or HLS streams with multiple sources.
934 -.sp
935 -Example: \fB\-\-ffmpeg\-ffmpeg \(dq/usr/local/bin/ffmpeg\(dq\fP
936 -.UNINDENT
937 -.INDENT 0.0
938 -.TP
939 -.B \-\-ffmpeg\-no\-validation
940 -Disable FFmpeg validation and version logging.
941 -.UNINDENT
942 -.INDENT 0.0
943 -.TP
944 -.B \-\-ffmpeg\-verbose
945 -Write FFmpeg\(aqs stderr output to Streamlink\(aqs stderr output.
946 -.UNINDENT
947 -.INDENT 0.0
948 -.TP
949 -.B \-\-ffmpeg\-verbose\-path PATH
950 -Write FFmpeg\(aqs stderr output to PATH.
951 -.UNINDENT
952 -.INDENT 0.0
953 -.TP
954 -.B \-\-ffmpeg\-loglevel LOGLEVEL
955 -Change FFmpeg\(aqs \fB\-loglevel\fP value to \fBLOGLEVEL\fP\&.
956 -.sp
957 -Unless \fI\%\-\-ffmpeg\-verbose\fP or \fI\%\-\-ffmpeg\-verbose\-path\fP is set, changing the log level won\(aqt have any effect.
958 -.sp
959 -Default is: \fB\(dqinfo\(dq\fP\&.
960 -.UNINDENT
961 -.INDENT 0.0
962 -.TP
963 -.B \-\-ffmpeg\-fout OUTFORMAT
964 -Set the output format to \fBOUTFORMAT\fP\&. This only applies to streams which require muxing.
965 -.sp
966 -Default is: \fB\(dqmatroska\(dq\fP\&.
967 -.sp
968 -Example: \fB\-\-ffmpeg\-fout \(dqmpegts\(dq\fP
969 -.UNINDENT
970 -.INDENT 0.0
971 -.TP
972 -.B \-\-ffmpeg\-video\-transcode CODEC
973 -Transcode the video to \fBCODEC\fP\&. This only applies to streams which require muxing.
974 -.sp
975 -Default is: \fB\(dqcopy\(dq\fP\&.
976 -.sp
977 -Example: \fB\-\-ffmpeg\-video\-transcode \(dqh264\(dq\fP
978 -.UNINDENT
979 -.INDENT 0.0
980 -.TP
981 -.B \-\-ffmpeg\-audio\-transcode CODEC
982 -Transcode the audio to \fBCODEC\fP\&. This only applies to streams which require muxing.
983 -.sp
984 -Default is: \fB\(dqcopy\(dq\fP\&.
985 -.sp
986 -Example: \fB\-\-ffmpeg\-audio\-transcode \(dqaac\(dq\fP
987 -.UNINDENT
988 -.INDENT 0.0
989 -.TP
990 -.B \-\-ffmpeg\-copyts
991 -Set the \fB\-copyts\fP FFmpeg option, so input timestamps won\(aqt be processed
992 -and the initial start time offset value be kept.
993 -.UNINDENT
994 -.INDENT 0.0
995 -.TP
996 -.B \-\-ffmpeg\-start\-at\-zero
997 -Enable the \fB\-start_at_zero\fP FFmpeg option when using \fI\%\-\-ffmpeg\-copyts\fP\&.
998 -.UNINDENT
999 -.SS HTTP options
1000 -.INDENT 0.0
1001 -.TP
1002 -.B \-\-http\-proxy HTTP_PROXY
1003 -An HTTP proxy to use for all HTTP and HTTPS requests, including WebSocket connections.
1004 -.sp
1005 -Example: \fB\-\-http\-proxy \(dqhttp://hostname:port/\(dq\fP
1006 -.UNINDENT
1007 -.INDENT 0.0
1008 -.TP
1009 -.B \-\-http\-cookie KEY=VALUE
1010 -A cookie to add to each HTTP request.
1011 -.sp
1012 -Can be repeated to add multiple cookies.
1013 -.UNINDENT
1014 -.INDENT 0.0
1015 -.TP
1016 -.B \-\-http\-header KEY=VALUE
1017 -A header to add to each HTTP request.
1018 -.sp
1019 -Can be repeated to add multiple headers.
1020 -.UNINDENT
1021 -.INDENT 0.0
1022 -.TP
1023 -.B \-\-http\-query\-param KEY=VALUE
1024 -A query parameter to add to each HTTP request.
1025 -.sp
1026 -Can be repeated to add multiple query parameters.
1027 -.UNINDENT
1028 -.INDENT 0.0
1029 -.TP
1030 -.B \-\-http\-ignore\-env
1031 -Ignore HTTP settings set in the environment, such as environment variables (\fBHTTP_PROXY\fP, etc)
1032 -or \fB~/.netrc\fP authentication.
1033 -.UNINDENT
1034 -.INDENT 0.0
1035 -.TP
1036 -.B \-\-http\-no\-ssl\-verify
1037 -Don\(aqt attempt to verify TLS/SSL certificates.
1038 -.sp
1039 -Use with caution, as it has TLS/SSL security implications.
1040 -.UNINDENT
1041 -.INDENT 0.0
1042 -.TP
1043 -.B \-\-http\-disable\-dh
1044 -Disable Diffie Hellman key exchange.
1045 -.sp
1046 -Use with caution, as it has TLS/SSL security implications.
1047 -.UNINDENT
1048 -.INDENT 0.0
1049 -.TP
1050 -.B \-\-http\-ssl\-cert PEM_FILENAME
1051 -SSL certificate to use: a .pem file.
1052 -.UNINDENT
1053 -.INDENT 0.0
1054 -.TP
1055 -.B \-\-http\-ssl\-cert\-crt\-key CRT_FILENAME KEY_FILENAME
1056 -SSL certificate to use: a .crt and a .key file.
1057 -.UNINDENT
1058 -.INDENT 0.0
1059 -.TP
1060 -.B \-\-http\-timeout TIMEOUT
1061 -Set the general timeout value used by all HTTP requests except the ones covered by other options.
1062 -.sp
1063 -Default is: \fB20.0\fP\&.
1064 -.UNINDENT
1065 -.SS Web browser options
1066 -.INDENT 0.0
1067 -.TP
1068 -.B \-\-webbrowser {yes,true,1,on,no,false,0,off}
1069 -Enable or disable support for Streamlink\(aqs webbrowser API.
1070 -.sp
1071 -Streamlink\(aqs webbrowser API allows plugins which implement it to launch a web browser and extract data from websites
1072 -which they otherwise couldn\(aqt do via the regular HTTP session in Python due to specific JavaScript restrictions.
1073 -.sp
1074 -The web browser is run isolated and in a clean environment without access to regular user data.
1075 -.sp
1076 -Streamlink currently only supports Chromium\-based web browsers using the Chrome Devtools Protocol (CDP).
1077 -This includes Chromium itself, Google Chrome, Microsoft Edge, Brave, Vivaldi, and others, but full support for
1078 -third party Chromium forks is not guaranteed. Please try Chromium or Google Chrome when encountering any issues.
1079 -.sp
1080 -Default is: \fBtrue\fP\&.
1081 -.UNINDENT
1082 -.INDENT 0.0
1083 -.TP
1084 -.B \-\-webbrowser\-executable PATH
1085 -Path to the web browser\(aqs executable.
1086 -.sp
1087 -By default, it is looked up automatically according to the rules of the used webbrowser API implementation.
1088 -This usually involves a list of known executable names and fallback paths on all supported operating systems.
1089 -.UNINDENT
1090 -.INDENT 0.0
1091 -.TP
1092 -.B \-\-webbrowser\-timeout TIME
1093 -The maximum amount of time which the web browser can take to launch and execute.
1094 -.UNINDENT
1095 -.INDENT 0.0
1096 -.TP
1097 -.B \-\-webbrowser\-cdp\-host HOST
1098 -Host for the web browser\(aqs inter\-process communication interface (CDP specific).
1099 -.sp
1100 -Default is: \fB127.0.0.1\fP\&.
1101 -.UNINDENT
1102 -.INDENT 0.0
1103 -.TP
1104 -.B \-\-webbrowser\-cdp\-port PORT
1105 -Port for the web browser\(aqs inter\-process communication interface (CDP specific).
1106 -.sp
1107 -Tries to find a free port by default.
1108 -.UNINDENT
1109 -.INDENT 0.0
1110 -.TP
1111 -.B \-\-webbrowser\-cdp\-timeout TIME
1112 -The maximum amount of time for waiting on a single CDP command response.
1113 -.UNINDENT
1114 -.INDENT 0.0
1115 -.TP
1116 -.B \-\-webbrowser\-headless {yes,true,1,on,no,false,0,off}
1117 -Whether to launch the web browser in headless mode or not.
1118 -When enabled, it stays completely hidden and doesn\(aqt require a desktop environment to run.
1119 -.sp
1120 -Please be aware that headless mode might be blocked by websites which implement bot detections.
1121 -.sp
1122 -Default is: \fBfalse\fP\&.
1123 -.UNINDENT
1124 -.SS Plugin options
1125 -.SS Bbciplayer
1126 -.INDENT 0.0
1127 -.TP
1128 -.B \-\-bbciplayer\-username USERNAME
1129 -The username used to register with bbc.co.uk.
1130 -.UNINDENT
1131 -.INDENT 0.0
1132 -.TP
1133 -.B \-\-bbciplayer\-password PASSWORD
1134 -A bbc.co.uk account password to use with \fI\%\-\-bbciplayer\-username\fP\&.
1135 -.UNINDENT
1136 -.INDENT 0.0
1137 -.TP
1138 -.B \-\-bbciplayer\-hd
1139 -Prefer HD streams over local SD streams, some live programmes may not be broadcast in HD.
1140 -.UNINDENT
1141 -.SS Clubbingtv
1142 -.INDENT 0.0
1143 -.TP
1144 -.B \-\-clubbingtv\-username
1145 -The username used to register with Clubbing TV.
1146 -.UNINDENT
1147 -.INDENT 0.0
1148 -.TP
1149 -.B \-\-clubbingtv\-password
1150 -A Clubbing TV account password to use with \fI\%\-\-clubbingtv\-username\fP\&.
1151 -.UNINDENT
1152 -.SS Nicolive
1153 -.INDENT 0.0
1154 -.TP
1155 -.B \-\-niconico\-email EMAIL
1156 -The email or phone number associated with your Niconico account
1157 -.UNINDENT
1158 -.INDENT 0.0
1159 -.TP
1160 -.B \-\-niconico\-password PASSWORD
1161 -The password of your Niconico account
1162 -.UNINDENT
1163 -.INDENT 0.0
1164 -.TP
1165 -.B \-\-niconico\-user\-session VALUE
1166 -Value of the user\-session token.
1167 -.sp
1168 -Can be used as an alternative to providing a password.
1169 -.UNINDENT
1170 -.INDENT 0.0
1171 -.TP
1172 -.B \-\-niconico\-purge\-credentials
1173 -Purge cached Niconico credentials to initiate a new session and reauthenticate.
1174 -.UNINDENT
1175 -.INDENT 0.0
1176 -.TP
1177 -.B \-\-niconico\-timeshift\-offset [[XX:]XX:]XX | [XXh][XXm][XXs]
1178 -Amount of time to skip from the beginning of a stream.
1179 -.sp
1180 -Default is: \fB0\fP\&.
1181 -.UNINDENT
1182 -.SS Openrectv
1183 -.INDENT 0.0
1184 -.TP
1185 -.B \-\-openrectv\-email EMAIL
1186 -The email associated with your openrectv account, required to access any openrectv stream.
1187 -.UNINDENT
1188 -.INDENT 0.0
1189 -.TP
1190 -.B \-\-openrectv\-password PASSWORD
1191 -An openrectv account password to use with \fI\%\-\-openrectv\-email\fP\&.
1192 -.UNINDENT
1193 -.SS Pixiv
1194 -.INDENT 0.0
1195 -.TP
1196 -.B \-\-pixiv\-sessionid SESSIONID
1197 -The pixiv.net sessionid that\(aqs used in pixiv\(aqs PHPSESSID cookie.
1198 -.UNINDENT
1199 -.INDENT 0.0
1200 -.TP
1201 -.B \-\-pixiv\-devicetoken DEVICETOKEN
1202 -The pixiv.net device token that\(aqs used in pixiv\(aqs device_token cookie.
1203 -.UNINDENT
1204 -.INDENT 0.0
1205 -.TP
1206 -.B \-\-pixiv\-purge\-credentials
1207 -Purge cached Pixiv credentials to initiate a new session and reauthenticate.
1208 -.UNINDENT
1209 -.INDENT 0.0
1210 -.TP
1211 -.B \-\-pixiv\-performer USER
1212 -Select a co\-host stream instead of the owner stream.
1213 -.UNINDENT
1214 -.SS Raiplay
1215 -.INDENT 0.0
1216 -.TP
1217 -.B \-\-raiplay\-email EMAIL
1218 -The email used to register with raiplay.it.
1219 -.UNINDENT
1220 -.INDENT 0.0
1221 -.TP
1222 -.B \-\-raiplay\-password PASSWORD
1223 -A raiplay.it account password to use with \fI\%\-\-raiplay\-email\fP\&.
1224 -.UNINDENT
1225 -.INDENT 0.0
1226 -.TP
1227 -.B \-\-raiplay\-purge\-credentials
1228 -Purge cached RaiPlay credentials to initiate a new session and reauthenticate.
1229 -.UNINDENT
1230 -.SS Soop
1231 -.INDENT 0.0
1232 -.TP
1233 -.B \-\-soop\-username USERNAME
1234 -The username used to register with sooplive.co.kr.
1235 -.UNINDENT
1236 -.INDENT 0.0
1237 -.TP
1238 -.B \-\-soop\-password PASSWORD
1239 -A sooplive.co.kr account password to use with \fI\%\-\-soop\-username\fP\&.
1240 -.UNINDENT
1241 -.INDENT 0.0
1242 -.TP
1243 -.B \-\-soop\-purge\-credentials
1244 -Purge cached Soop credentials to initiate a new session and reauthenticate.
1245 -.UNINDENT
1246 -.INDENT 0.0
1247 -.TP
1248 -.B \-\-soop\-stream\-password STREAM_PASSWORD
1249 -The password for the stream.
1250 -.UNINDENT
1251 -.SS Steam
1252 -.INDENT 0.0
1253 -.TP
1254 -.B \-\-steam\-email EMAIL
1255 -A Steam account email address to access friends/private streams
1256 -.UNINDENT
1257 -.INDENT 0.0
1258 -.TP
1259 -.B \-\-steam\-password PASSWORD
1260 -A Steam account password to use with \fI\%\-\-steam\-email\fP\&.
1261 -.UNINDENT
1262 -.SS Streann
1263 -.INDENT 0.0
1264 -.TP
1265 -.B \-\-streann\-url URL
1266 -Source URL where the iframe is located, only required for direct URLs of ott.streann.com
1267 -.UNINDENT
1268 -.SS Tf1
1269 -.INDENT 0.0
1270 -.TP
1271 -.B \-\-tf1\-email EMAIL
1272 -The email address used to register with tf1.fr.
1273 -.UNINDENT
1274 -.INDENT 0.0
1275 -.TP
1276 -.B \-\-tf1\-password PASSWORD
1277 -A tf1.fr account password to use with \-\-tf1\-username.
1278 -.UNINDENT
1279 -.INDENT 0.0
1280 -.TP
1281 -.B \-\-tf1\-purge\-credentials
1282 -Purge cached tf1.fr credentials to initiate a new session and reauthenticate.
1283 -.UNINDENT
1284 -.SS Twitcasting
1285 -.INDENT 0.0
1286 -.TP
1287 -.B \-\-twitcasting\-password PASSWORD
1288 -Password for private Twitcasting streams.
1289 -.UNINDENT
1290 -.SS Twitch
1291 -.INDENT 0.0
1292 -.TP
1293 -.B \-\-twitch\-disable\-ads
1294 -Skip embedded advertisement segments at the beginning or during a stream.
1295 -Will cause these segments to be missing from the output.
1296 -.UNINDENT
1297 -.INDENT 0.0
1298 -.TP
1299 -.B \-\-twitch\-low\-latency
1300 -Enables low latency streaming by prefetching HLS segments.
1301 -Sets \fI\%\-\-hls\-segment\-stream\-data\fP to true and \fI\%\-\-hls\-live\-edge\fP to 2, if it is higher.
1302 -Reducing \fI\%\-\-hls\-live\-edge\fP to \fB1\fP will result in the lowest latency possible, but will most likely cause buffering.
1303 -.sp
1304 -In order to achieve true low latency streaming during playback, the player\(aqs caching/buffering settings will
1305 -need to be adjusted and reduced to a value as low as possible, but still high enough to not cause any buffering.
1306 -This depends on the stream\(aqs bitrate and the quality of the connection to Twitch\(aqs servers. Please refer to the
1307 -player\(aqs own documentation for the required configuration. Player parameters can be set via \fI\%\-\-player\-args\fP\&.
1308 -.sp
1309 -\fBNOTE:\fP
1310 -.INDENT 7.0
1311 -.INDENT 3.5
1312 -Low latency streams have to be enabled by the broadcasters on Twitch themselves.
1313 -Regular streams can cause buffering issues with this option enabled due to the reduced \fI\%\-\-hls\-live\-edge\fP value.
1314 -.UNINDENT
1315 -.UNINDENT
1316 -.UNINDENT
1317 -.INDENT 0.0
1318 -.TP
1319 -.B \-\-twitch\-api\-header KEY=VALUE
1320 -A header to add to each Twitch API HTTP request.
1321 -.sp
1322 -Can be repeated to add multiple headers.
1323 -.sp
1324 -Useful for adding authentication data that can prevent ads. See the plugin\-specific documentation for more information.
1325 -.UNINDENT
1326 -.INDENT 0.0
1327 -.TP
1328 -.B \-\-twitch\-access\-token\-param KEY=VALUE
1329 -A parameter to add to the API request for acquiring the streaming access token.
1330 -.sp
1331 -Can be repeated to add multiple parameters.
1332 -.UNINDENT
1333 -.INDENT 0.0
1334 -.TP
1335 -.B \-\-twitch\-force\-client\-integrity
1336 -Don\(aqt attempt requesting the streaming access token without a client\-integrity token.
1337 -.UNINDENT
1338 -.INDENT 0.0
1339 -.TP
1340 -.B \-\-twitch\-purge\-client\-integrity
1341 -Purge cached Twitch client\-integrity token and acquire a new one.
1342 -.UNINDENT
1343 -.SS Ustreamtv
1344 -.INDENT 0.0
1345 -.TP
1346 -.B \-\-ustream\-password PASSWORD
1347 -A password to access password protected UStream.tv channels.
1348 -.UNINDENT
1349 -.SS Ustvnow
1350 -.INDENT 0.0
1351 -.TP
1352 -.B \-\-ustvnow\-username USERNAME
1353 -Your USTV Now account username
1354 -.UNINDENT
1355 -.INDENT 0.0
1356 -.TP
1357 -.B \-\-ustvnow\-password PASSWORD
1358 -Your USTV Now account password
1359 -.UNINDENT
1360 -.SS Wwenetwork
1361 -.INDENT 0.0
1362 -.TP
1363 -.B \-\-wwenetwork\-email EMAIL
1364 -The email associated with your WWE Network account, required to access any WWE Network stream.
1365 -.UNINDENT
1366 -.INDENT 0.0
1367 -.TP
1368 -.B \-\-wwenetwork\-password PASSWORD
1369 -A WWE Network account password to use with \fI\%\-\-wwenetwork\-email\fP\&.
1370 -.UNINDENT
1371 -.SS Yupptv
1372 -.INDENT 0.0
1373 -.TP
1374 -.B \-\-yupptv\-boxid BOXID
1375 -The yupptv.com boxid that\(aqs used in the BoxId cookie.
1376 -.UNINDENT
1377 -.INDENT 0.0
1378 -.TP
1379 -.B \-\-yupptv\-yuppflixtoken YUPPFLIXTOKEN
1380 -The yupptv.com yuppflixtoken that\(aqs used in the YuppflixToken cookie.
1381 -.UNINDENT
1382 -.INDENT 0.0
1383 -.TP
1384 -.B \-\-yupptv\-purge\-credentials
1385 -Purge cached YuppTV credentials to initiate a new session and reauthenticate.
1386 -.UNINDENT
1387 -.SS Zattoo
1388 -.INDENT 0.0
1389 -.TP
1390 -.B \-\-zattoo\-email EMAIL
1391 -The email associated with your zattoo account, required to access any zattoo stream.
1392 -.UNINDENT
1393 -.INDENT 0.0
1394 -.TP
1395 -.B \-\-zattoo\-password PASSWORD
1396 -A zattoo account password to use with \fI\%\-\-zattoo\-email\fP\&.
1397 -.UNINDENT
1398 -.INDENT 0.0
1399 -.TP
1400 -.B \-\-zattoo\-purge\-credentials
1401 -Purge cached zattoo credentials to initiate a new session and reauthenticate.
1402 -.UNINDENT
1403 -.INDENT 0.0
1404 -.TP
1405 -.B \-\-zattoo\-stream\-types TYPES
1406 -A comma\-delimited list of stream types which should be used.
1407 -.sp
1408 -The following types are allowed: dash, hls7
1409 -.sp
1410 -Default is: \fB\(dqdash\(dq\fP\&.
1411 -.UNINDENT
1412 -.SH BUGS
1413 -.sp
1414 -Please open a new issue on Streamlink\(aqs issue tracker on GitHub and use the appropriate issue forms:
1415 -.sp
1416 -\X'tty: link https://github.com/streamlink/streamlink/issues'\fI\%https://github.com/streamlink/streamlink/issues\fP\X'tty: link'
1417 -.SH SEE ALSO
1418 -.sp
1419 -For more detailed information about config files, plugin sideloading, streaming protocols, proxy support, metadata,
1420 -or plugin specific stuff, please see Streamlink\(aqs online CLI documentation here:
1421 -.sp
1422 -\X'tty: link https://streamlink.github.io/cli.html'\fI\%https://streamlink.github.io/cli.html\fP\X'tty: link'
1423 -.sp
1424 -The list of available plugins and their descriptions can be found here:
1425 -.sp
1426 -\X'tty: link https://streamlink.github.io/plugins.html'\fI\%https://streamlink.github.io/plugins.html\fP\X'tty: link'
1427 -.SH AUTHOR
1428 -Streamlink Contributors
1429 -.SH COPYRIGHT
1430 -2024, Streamlink
1431 -.\" Generated by docutils manpage writer.
1432 -.
This diff could not be displayed because it is too large.
1 -#compdef streamlink
2 -
3 -# AUTOMATICALLY GENERATED by `shtab`
4 -
5 -
6 -_shtab_streamlink_cli_commands() {
7 - local _commands=(
8 -
9 - )
10 - _describe 'streamlink commands' _commands
11 -}
12 -
13 -_shtab_streamlink_cli_options=(
14 - {-h,--help}"[
15 - Show this help message and exit.
16 - ]"
17 - "(- : *)"{-V,--version}"[
18 - Show version string and exit.
19 - ]"
20 - "--version-check[
21 - Run a version check and exit.
22 - ]"
23 - "--auto-version-check[
24 - Enable or disable the automatic check for a new version of Streamlink.
25 -
26 - Default is \"no\".
27 - ]:auto_version_check:"
28 - "--plugins[
29 - Print a list of all currently installed plugins.
30 - ]"
31 - "*--plugin-dir[
32 - Load plugins from this directory.
33 -
34 - Can be set multiple times to load plugins from multiple directories.
35 - ]:plugin_dirs:"
36 - "*--plugin-dirs[
37 - Load plugins from a list of comma-separated directories. (deprecated)
38 - ]:plugin_dirs:"
39 - "--can-handle-url[
40 - Check if Streamlink has a plugin that can handle the specified URL.
41 -
42 - Status code is \`0\` on success, \`1\` on failure.
43 -
44 - Useful for external scripting.
45 - ]:can_handle_url:"
46 - "--can-handle-url-no-redirect[
47 - Same as --can-handle-url, but without following redirects when looking up the URL.
48 - ]:can_handle_url_no_redirect:"
49 - "*--config[
50 - Load options from this config file.
51 -
52 - Can be repeated to load multiple files, in which case the options are
53 - merged on top of each other where the last config has highest priority.
54 - ]:config:"
55 - "--no-config[
56 - Disable loading any default or custom config files.
57 - ]"
58 - "--locale[
59 - Override the system\'s locale setting, for selecting the preferred subtitle and audio language.
60 -
61 - The locale is formatted as \`\[language_code\]_\[country_code\]\`, e.g. \`en_US\` or \`es_ES\`.
62 -
63 - Default is system locale.
64 - ]:locale:"
65 - {-l,--loglevel}"[
66 - Set the log message threshold.
67 -
68 - Valid levels are, in order of increasing verbosity\:
69 -
70 - \`none\`, \`critical\`, \`error\`, \`warning\`, \`info\`, \`debug\`, \`trace\`, \`all\`
71 -
72 - Default is \"info\".
73 - ]:loglevel:(none critical error warning info debug trace all)"
74 - "--logformat[
75 - Set a custom logging format.
76 -
77 - See the Python standard library\'s \`logging.Formatter\` docs for more information about the logging format
78 - and the available \`LogRecord\` attributes. Streamlink\'s formatter uses the curly brace style.
79 -
80 - The default format depends on the chosen log level (may include the \`asctime\` attribute).
81 -
82 - Default is \"\[\{name\}\]\[\{levelname\}\] \{message\}\".
83 - ]:logformat:"
84 - "--logdateformat[
85 - Set a custom logging date format.
86 -
87 - This formats the \`LogRecord\`\'s \`asctime\` attribute via \`strftime()\`.
88 -
89 - The default date format depends on the chosen log level (may include fractions).
90 -
91 - Default is \"\%H\:\%M\:\%S\".
92 - ]:logdateformat:"
93 - "--logfile[
94 - Append log output to \`FILE\` instead of writing to stdout\/stderr.
95 -
96 - User prompts and download progress won\'t be written to \`FILE\`.
97 -
98 - A value of \`-\` (dash) will set the file name to an ISO8601-like string
99 - and will choose the following default log directories.
100 -
101 - Windows\:
102 -
103 - \%TEMP\%\\streamlink\\logs
104 -
105 - macOS\:
106 -
107 - \$\{HOME\}\/Library\/Logs\/streamlink
108 -
109 - Linux\/BSD\:
110 -
111 - \$\{XDG_STATE_HOME\:-\$\{HOME\}\/.local\/state\}\/streamlink\/logs
112 - ]:logfile:"
113 - {-Q,--quiet}"[
114 - Hide all log output.
115 -
116 - Alias for --loglevel\=none.
117 - ]"
118 - {-j,--json}"[
119 - Output JSON representations instead of the normal text output.
120 -
121 - Useful for external scripting.
122 - ]"
123 - "--interface[
124 - Set the network interface.
125 - ]:interface:"
126 - {-4,--ipv4}"[
127 - Resolve address names to IPv4 only. This option overrides --ipv6.
128 - ]"
129 - {-6,--ipv6}"[
130 - Resolve address names to IPv6 only. This option overrides --ipv4.
131 - ]"
132 - {-p,--player}"[
133 - Set the player executable that will be launched (unless a different output method was chosen).
134 -
135 - Either set an absolute or relative path to the player executable, or just set the executable\'s name
136 - if it can be resolved from the paths of the system\'s \`PATH\` environment variable.
137 -
138 - In addition to setting the player executable path, custom player arguments can be set via --player-args.
139 -
140 - Note\: In the past, --player allowed defining additional player arguments, which as a consequence required wrapping
141 - player paths that contained spaces in quotation marks. This is unsupported since release \`6.0.0\`.
142 -
143 - Default is VLC player, if available.
144 - ]:player:"
145 - {-a,--player-args}"[
146 - Set a string of custom --player launch arguments that will be parsed and tokenized.
147 -
148 - The value can contain formatting variables surrounded by curly braces, \`\{\` and \`\}\`.
149 - Curly brace characters can be escaped by doubling, e.g. \`\{\{\` and \`\}\}\`.
150 -
151 - Available formatting variables\:
152 -
153 - \`\{playerinput\}\`
154 - This is the input argument that the --player will receive. For standard input (stdin),
155 - it is \`-\` (dash), but it can also be a file path or URL, depending on the options used.
156 - If unset, then the player input argument will be appended to the parsed player arguments list.
157 -
158 - \`\{playertitleargs\}\`
159 - The automatically generated player title arguments, if a supported --player was found. See --title for more.
160 - If unset, automatically generated player title arguments will be prepended to the parsed player arguments list.
161 -
162 - Example\:
163 -
164 - streamlink -p vlc -a \"--play-and-exit --no-one-instance\" \<url\> \[stream\]
165 -
166 - Default is \"\".
167 - ]:player_args:"
168 - "*--player-env[
169 - Add an additional environment variable to the spawned --player process, in addition to the ones inherited from
170 - the Streamlink\/Python parent process. This allows setting player environment variables in config files.
171 -
172 - Can be repeated to add multiple environment variables.
173 - ]:player_env:"
174 - {-v,--player-verbose}"[
175 - Write the --player\'s stdout\/stderr output to Streamlink\'s stdout\/stderr output.
176 - ]"
177 - "--verbose-player[
178 - Deprecated in favor of --player-verbose.
179 - ]"
180 - {-n,--player-fifo}"[
181 - Make the --player read the stream through a named pipe instead of the stdin pipe.
182 - ]"
183 - "--fifo[
184 - Deprecated in favor of --player-fifo.
185 - ]"
186 - "--player-http[
187 - Make the --player read the stream through HTTP instead of the stdin pipe.
188 - ]"
189 - "--player-continuous-http[
190 - Make the --player read the stream through HTTP, but unlike --player-http,
191 - it will continuously try to open the stream if the player requests it.
192 -
193 - This enables the handling of stream disconnects if the player is
194 - capable of reconnecting to a HTTP stream. This is usually done by
195 - setting the player to a \"repeat mode\".
196 - ]"
197 - "--player-external-http[
198 - Serve stream data through HTTP without opening the --player. This is
199 - useful to allow external devices like smartphones or streaming boxes to
200 - watch streams they wouldn\'t be able to otherwise.
201 -
202 - The default behavior is similar to the --player-continuous-http option,
203 - but no player program will be started, and the server will listen on all available
204 - connections instead of just in the local (loopback) interface.
205 -
206 - See --player-external-http-interface for choosing a specific network interface, and
207 - see --player-external-http-port for choosing a non-randomized port.
208 -
209 - Optionally, the --player-external-http-continuous option allows for disabling
210 - the continuous run-mode, so that Streamlink will stop when the stream ends.
211 -
212 - The URLs that can be used to access the stream will be printed to the
213 - console, and the server can be interrupted using CTRL-C.
214 - ]"
215 - "--player-external-http-continuous[
216 - Set the run-mode of --player-external-http to continuous or non-continuous.
217 -
218 - In the continuous run-mode, Streamlink will keep running after the stream has ended
219 - and will wait for the next HTTP request being made unless it gets shut down via CTRL-C.
220 -
221 - If set to non-continuous, Streamlink will stop once the stream has ended.
222 -
223 - Default is true.
224 - ]:player_external_http_continuous:"
225 - "--player-external-http-interface[
226 - Set the network interface on which the HTTP server will be listening on.
227 - If unset or set to \`0.0.0.0\`, all available interfaces will be bound.
228 - ]:player_external_http_interface:"
229 - "--player-external-http-port[
230 - Set the port of the external HTTP server if that mode is enabled.
231 - Omit or set to \`0\` to use a random high ( \>1024) port.
232 - ]:player_external_http_port:"
233 - "--player-passthrough[
234 - A comma-delimited list of stream types to pass to the --player as a URL to
235 - let it handle the transport of the stream instead of Streamlink.
236 -
237 - Stream types that can be converted into a playable URL are\:
238 -
239 - hls, http
240 -
241 - Make sure the player can handle the stream type when using this.
242 - ]:player_passthrough:"
243 - "--player-no-close[
244 - By default, Streamlink will close the --player when the stream ends.
245 - This is to avoid \"dead\" GUI players lingering after Streamlink has exited.
246 -
247 - It does however have the side-effect of sometimes closing a
248 - player before it has played back all of its cached data.
249 -
250 - This option will instead let the player decide when to exit.
251 - ]"
252 - {-t,--title}"[
253 - Change the title of the --player\'s window.
254 -
255 - Please see the \"Metadata variables\" section of Streamlink\'s CLI documentation for all available metadata variables,
256 - as well as the \"Plugins\" section for the list of metadata variables defined in each plugin.
257 -
258 - Only the following players are supported\:
259 -
260 - mpv, potplayer, vlc
261 -
262 - Example\:
263 -
264 - streamlink -p mpv --title \"\{author\} - \{category\} - \{title\}\" \<URL\> \[STREAM\]
265 - ]:title:"
266 - {-O,--stdout}"[
267 - Write stream data to \`stdout\` instead of playing it in the --player.
268 - ]"
269 - {-o,--output}"[
270 - Write stream data to \`FILENAME\` instead of playing it in the --player.
271 - If \`FILENAME\` is set to \`-\` (dash), then the stream data will be written to \`stdout\`,
272 - similar to the --stdout argument.
273 -
274 - Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
275 -
276 - Unless --force is set, Streamlink will ask for confirmation before writing if \`FILENAME\` already exists.
277 -
278 - Please see the \"Metadata variables\" section of Streamlink\'s CLI documentation for all available metadata variables,
279 - as well as the \"Plugins\" section for the list of metadata variables defined in each plugin.
280 -
281 - Unsupported characters in substituted variables will be replaced with an underscore.
282 -
283 - Example\:
284 -
285 - streamlink --output \"\~\/recordings\/\{author\}\/\{category\}\/\{id\}-\{time\:\%Y\%m\%d\%H\%M\%S\}.ts\" \<URL\> \[STREAM\]
286 - ]:output:"
287 - {-r,--record}"[
288 - Write stream data to \`FILENAME\` while at the same time allowing playback in the --player or writing it to --stdout.
289 - If \`FILENAME\` is set to \`-\` (dash), then the stream data will be written to \`stdout\`,
290 - similar to the --stdout argument, while still opening the player.
291 -
292 - Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
293 -
294 - Unless --force is set, Streamlink will ask for confirmation before writing if \`FILENAME\` already exists.
295 -
296 - Please see the \"Metadata variables\" section of Streamlink\'s CLI documentation for all available metadata variables,
297 - as well as the \"Plugins\" section for the list of metadata variables defined in each plugin.
298 -
299 - Unsupported characters in substituted variables will be replaced with an underscore.
300 -
301 - Example\:
302 -
303 - streamlink --record \"\~\/recordings\/\{author\}\/\{category\}\/\{id\}-\{time\:\%Y\%m\%d\%H\%M\%S\}.ts\" \<URL\> \[STREAM\]
304 - ]:record:"
305 - {-R,--record-and-pipe}"[
306 - Deprecated in favor of --stdout --record\=FILENAME.
307 - ]:record_and_pipe:"
308 - "--fs-safe-rules[
309 - The rules used to make formatting variables filesystem-safe are chosen
310 - automatically according to the type of system in use. This overrides
311 - the automatic detection.
312 -
313 - Intended for use when Streamlink is running on a UNIX-like OS but writing
314 - to Windows filesystems such as NTFS\; USB devices using VFAT or exFAT\; CIFS
315 - shares that are enforcing Windows filename limitations, etc.
316 -
317 - These characters are replaced with an underscore for the rules in use\:
318 -
319 - - POSIX\: \`\\x00-\\x1F \/\`
320 - - Windows\: \`\\x00-\\x1F \\x7F \" \* \/ \: \< \> \? \\ \|\`
321 - ]:fs_safe_rules:(POSIX Windows)"
322 - {-f,--force}"[
323 - When using --output or --record, always write to file even if it already exists (overwrite).
324 - ]"
325 - "--progress[
326 - When using --output or --record, show or hide the download progress bar, or force it if there\'s no terminal.
327 -
328 - Default is yes.
329 - ]:progress:(yes force no)"
330 - "--url[
331 - A URL to attempt to extract streams from.
332 -
333 - Usually, the protocol of http(s) URLs can be omitted (\`https\:\/\/\`),
334 - depending on the implementation of the plugin being used.
335 -
336 - This is an alternative to setting the URL using a positional argument and can be useful if set in a config file.
337 - ]:url_param:"
338 - "--default-stream[
339 - Stream to play.
340 -
341 - Use \`best\` or \`worst\` for selecting the highest or lowest available quality.
342 -
343 - Fallback streams can be specified by using a comma-separated list\:
344 -
345 - \"720p,480p,best\"
346 -
347 - This is an alternative to setting the stream using a positional argument and can be useful if set in a config file.
348 - ]:default_stream:"
349 - "--stream-url[
350 - If possible, translate the resolved stream to a URL and print it.
351 - ]"
352 - "--retry-streams[
353 - Retry fetching the list of available streams until streams are found
354 - while waiting \`DELAY\` second(s) between each attempt. If unset, only one
355 - attempt will be made to fetch the list of streams available.
356 -
357 - The number of fetch retry attempts can be capped with --retry-max.
358 - ]:retry_streams:"
359 - "--retry-max[
360 - When using --retry-streams, stop retrying the fetch after \`COUNT\` retry
361 - attempt(s). Fetch will retry infinitely if \`COUNT\` is zero or unset.
362 -
363 - If --retry-max is set without setting --retry-streams, the delay between retries will default to 1 second.
364 - ]:retry_max:"
365 - "--retry-open[
366 - After a successful fetch, try \`ATTEMPTS\` time(s) to open the stream until giving up.
367 -
368 - Default is 1.
369 - ]:retry_open:"
370 - {--stream-types,--stream-priority}"[
371 - A comma-delimited list of stream types to allow.
372 -
373 - The order will be used to separate streams when there are multiple
374 - streams with the same name but different stream types. Any stream type
375 - not listed will be omitted from the available streams list. An \`\*\` (asterisk) can
376 - be used as a wildcard to match any other type of stream, e.g. dash.
377 -
378 - Default is \"hls,http,\*\".
379 - ]:stream_types:"
380 - "--stream-sorting-excludes[
381 - Fine-tune the \`best\` and \`worst\` stream name synonyms by excluding unwanted streams.
382 -
383 - If all of the available streams get excluded, \`best\` and \`worst\` will become
384 - inaccessible and new special stream synonyms \`best-unfiltered\` and \`worst-unfiltered\`
385 - can be used as a fallback selection method.
386 -
387 - The filter-expression\'s format is\:
388 -
389 - \[operator\]\<value\>
390 -
391 - Valid operators are \`\>\`, \`\>\=\`, \`\<\` and \`\<\=\`. If no operator is specified then
392 - equality is tested.
393 -
394 - For example this will exclude streams ranked higher than \"480p\"\:
395 -
396 - --stream-sorting-excludes \"\>480p\"
397 -
398 - Multiple filters can be used by separating each expression with a comma.
399 -
400 - For example this will exclude streams from two quality types\:
401 -
402 - --stream-sorting-excludes \"\>480p,\>medium\"
403 -
404 - ]:stream_sorting_excludes:"
405 - "--ringbuffer-size[
406 - The maximum size of the ringbuffer.
407 -
408 - Mebibytes or kibibytes (base 2) can be specified via the M or K suffix respectively.
409 -
410 - The ringbuffer is used as a temporary storage between the stream and the player.
411 - This allows Streamlink to download the stream faster than the player which reads the data from the ringbuffer.
412 -
413 - The smaller the size of the ringbuffer, the higher the chance of the player buffering if the download speed
414 - decreases, and the higher the size, the more data can be use as a storage to recover from volatile download speeds.
415 -
416 - Most players have their own additional cache and will read the ringbuffer\'s content as soon as data is available.
417 - If the player stops reading data while playback is paused, Streamlink will continue to download the stream in the
418 - background as long as the ringbuffer doesn\'t get full.
419 -
420 - Default is \"16M\".
421 - ]:ringbuffer_size:"
422 - "--stream-segment-attempts[
423 - The number of download attempts of each stream segment before giving up.
424 -
425 - This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
426 -
427 - Default is 3.
428 - ]:stream_segment_attempts:"
429 - "--stream-segment-threads[
430 - The size of the thread pool used to download segments. Minimum value is \`1\` and maximum is \`10\`.
431 -
432 - This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
433 -
434 - Default is 1.
435 - ]:stream_segment_threads:"
436 - "--stream-segment-timeout[
437 - The maximum time to wait for each segment to start downloading.
438 -
439 - This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
440 -
441 - Default is 10.0.
442 - ]:stream_segment_timeout:"
443 - "--stream-timeout[
444 - The maximum time to wait for an unfiltered stream to continue outputting data.
445 -
446 - This applies to all different kinds of stream types, such as DASH, HLS, HTTP, etc.
447 -
448 - Default is 60.0.
449 - ]:stream_timeout:"
450 - "--mux-subtitles[
451 - Automatically mux available subtitles into the output stream.
452 -
453 - Needs to be supported by the used plugin.
454 - ]"
455 - "--hls-live-edge[
456 - Number of segments from the live stream\'s current live position to begin streaming.
457 - The size or length of each segment is determined by the streaming provider.
458 -
459 - Lower values will decrease the latency, but will also increase the chance of buffering, as there is less time for
460 - Streamlink to download segments and write their data to the output buffer. The number of parallel segment downloads
461 - can be set with --stream-segment-threads and the HLS playlist reload time to fetch and queue new segments can be
462 - overridden with --hls-playlist-reload-time.
463 -
464 - Default is 3.
465 -
466 - Note\: During live playback, the caching\/buffering settings of the used player will add additional latency.
467 - To adjust this, please refer to the player\'s own documentation for the required configuration.
468 - Player parameters can be set via --player-args.
469 - ]:hls_live_edge:"
470 - "--hls-segment-stream-data[
471 - Immediately write segment data into output buffer while downloading.
472 - ]"
473 - "--hls-playlist-reload-attempts[
474 - The maximum number of attempts when reloading the HLS playlist before giving up.
475 -
476 - Default is 3.
477 - ]:hls_playlist_reload_attempts:"
478 - "--hls-playlist-reload-time[
479 - Set a custom HLS playlist reload time value, either in seconds or by using one of the following keywords\:
480 -
481 - - segment\: The duration of the last segment in the current playlist
482 - - live-edge\: The sum of segment durations of the live edge value minus one
483 - - default\: The playlist\'s target duration metadata
484 -
485 - Default is default.
486 - ]:hls_playlist_reload_time:"
487 - "--hls-segment-queue-threshold[
488 - The multiplication factor of the HLS playlist\'s target duration after which the stream will be stopped early
489 - if no new segments were queued after refreshing the playlist (multiple times). The target duration defines the
490 - maximum duration a single segment can have, meaning new segments must be available during this time frame,
491 - otherwise playback issues can occur.
492 -
493 - The intention of this queue threshold is to be able to stop early when the end of a stream doesn\'t get
494 - announced by the server, so Streamlink doesn\'t have to wait until a read-timeout occurs. See --stream-timeout.
495 -
496 - Set to \`\`0\`\` to disable.
497 -
498 - Default is 3.
499 - ]:hls_segment_queue_threshold:"
500 - "--hls-segment-ignore-names[
501 - A comma-delimited list of segment names that will get filtered out.
502 -
503 - Example\: --hls-segment-ignore-names 000,001,002
504 -
505 - This will ignore every segment that ends with 000.ts, 001.ts and 002.ts
506 -
507 - Default is None.
508 - ]:hls_segment_ignore_names:"
509 - "--hls-segment-key-uri[
510 - Override the segment encryption key URIs for encrypted streams.
511 -
512 - The value can be templated using the following variables, which will be
513 - replaced with their respective part from the source segment URI\:
514 -
515 - \{url\} \{scheme\} \{netloc\} \{path\} \{query\}
516 -
517 - Examples\:
518 -
519 - --hls-segment-key-uri \"https\:\/\/example.com\/hls\/encryption_key\"
520 - --hls-segment-key-uri \"\{scheme\}\:\/\/1.2.3.4\{path\}\{query\}\"
521 - --hls-segment-key-uri \"\{scheme\}\:\/\/\{netloc\}\/custom\/path\/to\/key\"
522 -
523 - Default is None.
524 - ]:hls_segment_key_uri:"
525 - "--hls-audio-select[
526 - Select one or more specific audio sources by language code or name.
527 - Can be set to \`\*\` (asterisk) to include all audio sources.
528 -
529 - Examples\:
530 -
531 - --hls-audio-select \"English,German\"
532 - --hls-audio-select \"en,de\"
533 - --hls-audio-select \"\*\"
534 -
535 - Note\: This is only useful in special circumstances where the regular
536 - locale option fails, such as when multiple sources of the same language exist.
537 - ]:hls_audio_select:"
538 - "--hls-start-offset[
539 - The amount of time to skip from the beginning of the stream.
540 - For live streams, this is a negative offset from the end of the stream (rewind).
541 -
542 - Default is 0.
543 - ]:hls_start_offset:"
544 - "--hls-duration[
545 - Limit the playback duration, useful for watching segments of a stream.
546 - The actual duration may be slightly longer, as it is rounded to the nearest HLS segment.
547 -
548 - Default is unlimited.
549 - ]:hls_duration:"
550 - "--hls-live-restart[
551 - Skip to the beginning of a live stream, or as far back as possible.
552 - ]"
553 - "--dash-manifest-reload-attempts[
554 - The maximum number of attempts when reloading the DASH manifest before giving up.
555 -
556 - Default is 3.
557 - ]:dash_manifest_reload_attempts:"
558 - "--ffmpeg-ffmpeg[
559 - Set the location of the FFmpeg executable if it can\'t be resolved
560 - from the paths of the system\'s \`PATH\` environment variable.
561 -
562 - FFmpeg is required to access or mux separate video and audio streams,
563 - e.g. in DASH streams or HLS streams with multiple sources.
564 -
565 - Example\: --ffmpeg-ffmpeg \"\/usr\/local\/bin\/ffmpeg\"
566 - ]:ffmpeg_ffmpeg:"
567 - "--ffmpeg-no-validation[
568 - Disable FFmpeg validation and version logging.
569 - ]"
570 - "--ffmpeg-verbose[
571 - Write FFmpeg\'s stderr output to Streamlink\'s stderr output.
572 - ]"
573 - "--ffmpeg-verbose-path[
574 - Write FFmpeg\'s stderr output to PATH.
575 - ]:ffmpeg_verbose_path:"
576 - "--ffmpeg-loglevel[
577 - Change FFmpeg\'s \`-loglevel\` value to \`LOGLEVEL\`.
578 -
579 - Unless --ffmpeg-verbose or --ffmpeg-verbose-path is set, changing the log level won\'t have any effect.
580 -
581 - Default is \"info\".
582 - ]:ffmpeg_loglevel:"
583 - "--ffmpeg-fout[
584 - Set the output format to \`OUTFORMAT\`. This only applies to streams which require muxing.
585 -
586 - Default is \"matroska\".
587 -
588 - Example\: --ffmpeg-fout \"mpegts\"
589 - ]:ffmpeg_fout:"
590 - "--ffmpeg-video-transcode[
591 - Transcode the video to \`CODEC\`. This only applies to streams which require muxing.
592 -
593 - Default is \"copy\".
594 -
595 - Example\: --ffmpeg-video-transcode \"h264\"
596 - ]:ffmpeg_video_transcode:"
597 - "--ffmpeg-audio-transcode[
598 - Transcode the audio to \`CODEC\`. This only applies to streams which require muxing.
599 -
600 - Default is \"copy\".
601 -
602 - Example\: --ffmpeg-audio-transcode \"aac\"
603 - ]:ffmpeg_audio_transcode:"
604 - "--ffmpeg-copyts[
605 - Set the \`-copyts\` FFmpeg option, so input timestamps won\'t be processed
606 - and the initial start time offset value be kept.
607 - ]"
608 - "--ffmpeg-start-at-zero[
609 - Enable the \`-start_at_zero\` FFmpeg option when using --ffmpeg-copyts.
610 - ]"
611 - "--http-proxy[
612 - An HTTP proxy to use for all HTTP and HTTPS requests, including WebSocket connections.
613 -
614 - Example\: --http-proxy \"http\:\/\/hostname\:port\/\"
615 - ]:http_proxy:"
616 - "*--http-cookie[
617 - A cookie to add to each HTTP request.
618 -
619 - Can be repeated to add multiple cookies.
620 - ]:http_cookie:"
621 - "*--http-header[
622 - A header to add to each HTTP request.
623 -
624 - Can be repeated to add multiple headers.
625 - ]:http_header:"
626 - "*--http-query-param[
627 - A query parameter to add to each HTTP request.
628 -
629 - Can be repeated to add multiple query parameters.
630 - ]:http_query_param:"
631 - "--http-ignore-env[
632 - Ignore HTTP settings set in the environment, such as environment variables (\`HTTP_PROXY\`, etc)
633 - or \`\~\/.netrc\` authentication.
634 - ]"
635 - "--http-no-ssl-verify[
636 - Don\'t attempt to verify TLS\/SSL certificates.
637 -
638 - Use with caution, as it has TLS\/SSL security implications.
639 - ]"
640 - "--http-disable-dh[
641 - Disable Diffie Hellman key exchange.
642 -
643 - Use with caution, as it has TLS\/SSL security implications.
644 - ]"
645 - "--http-ssl-cert[
646 - SSL certificate to use\: a .pem file.
647 - ]:http_ssl_cert:"
648 - "--http-ssl-cert-crt-key[
649 - SSL certificate to use\: a .crt and a .key file.
650 - ]:http_ssl_cert_crt_key:"
651 - "--http-timeout[
652 - Set the general timeout value used by all HTTP requests except the ones covered by other options.
653 -
654 - Default is 20.0.
655 - ]:http_timeout:"
656 - "--webbrowser[
657 - Enable or disable support for Streamlink\'s webbrowser API.
658 -
659 - Streamlink\'s webbrowser API allows plugins which implement it to launch a web browser and extract data from websites
660 - which they otherwise couldn\'t do via the regular HTTP session in Python due to specific JavaScript restrictions.
661 -
662 - The web browser is run isolated and in a clean environment without access to regular user data.
663 -
664 - Streamlink currently only supports Chromium-based web browsers using the Chrome Devtools Protocol (CDP).
665 - This includes Chromium itself, Google Chrome, Microsoft Edge, Brave, Vivaldi, and others, but full support for
666 - third party Chromium forks is not guaranteed. Please try Chromium or Google Chrome when encountering any issues.
667 -
668 - Default is true.
669 - ]:webbrowser:"
670 - "--webbrowser-executable[
671 - Path to the web browser\'s executable.
672 -
673 - By default, it is looked up automatically according to the rules of the used webbrowser API implementation.
674 - This usually involves a list of known executable names and fallback paths on all supported operating systems.
675 - ]:webbrowser_executable:"
676 - "--webbrowser-timeout[
677 - The maximum amount of time which the web browser can take to launch and execute.
678 - ]:webbrowser_timeout:"
679 - "--webbrowser-cdp-host[
680 - Host for the web browser\'s inter-process communication interface (CDP specific).
681 -
682 - Default is 127.0.0.1.
683 - ]:webbrowser_cdp_host:"
684 - "--webbrowser-cdp-port[
685 - Port for the web browser\'s inter-process communication interface (CDP specific).
686 -
687 - Tries to find a free port by default.
688 - ]:webbrowser_cdp_port:"
689 - "--webbrowser-cdp-timeout[
690 - The maximum amount of time for waiting on a single CDP command response.
691 - ]:webbrowser_cdp_timeout:"
692 - "--webbrowser-headless[
693 - Whether to launch the web browser in headless mode or not.
694 - When enabled, it stays completely hidden and doesn\'t require a desktop environment to run.
695 -
696 - Please be aware that headless mode might be blocked by websites which implement bot detections.
697 -
698 - Default is false.
699 - ]:webbrowser_headless:"
700 - "--bbciplayer-username[The username used to register with bbc.co.uk.]:bbciplayer_username:"
701 - "--bbciplayer-password[A bbc.co.uk account password to use with --bbciplayer-username.]:bbciplayer_password:"
702 - "--bbciplayer-hd[Prefer HD streams over local SD streams, some live programmes may not be broadcast in HD.]"
703 - "--clubbingtv-username[The username used to register with Clubbing TV.]:clubbingtv_username:"
704 - "--clubbingtv-password[A Clubbing TV account password to use with --clubbingtv-username.]:clubbingtv_password:"
705 - "--niconico-email[The email or phone number associated with your Niconico account]:niconico_email:"
706 - "--niconico-password[The password of your Niconico account]:niconico_password:"
707 - "--niconico-user-session[
708 - Value of the user-session token.
709 -
710 - Can be used as an alternative to providing a password.
711 - ]:niconico_user_session:"
712 - "--niconico-purge-credentials[Purge cached Niconico credentials to initiate a new session and reauthenticate.]"
713 - "--niconico-timeshift-offset[
714 - Amount of time to skip from the beginning of a stream.
715 -
716 - Default is 0.
717 - ]:niconico_timeshift_offset:"
718 - "--openrectv-email[The email associated with your openrectv account, required to access any openrectv stream.]:openrectv_email:"
719 - "--openrectv-password[An openrectv account password to use with --openrectv-email.]:openrectv_password:"
720 - "--pixiv-sessionid[The pixiv.net sessionid that\'s used in pixiv\'s PHPSESSID cookie.]:pixiv_sessionid:"
721 - "--pixiv-devicetoken[The pixiv.net device token that\'s used in pixiv\'s device_token cookie.]:pixiv_devicetoken:"
722 - "--pixiv-purge-credentials[Purge cached Pixiv credentials to initiate a new session and reauthenticate.]"
723 - "--pixiv-performer[Select a co-host stream instead of the owner stream.]:pixiv_performer:"
724 - "--raiplay-email[The email used to register with raiplay.it.]:raiplay_email:"
725 - "--raiplay-password[A raiplay.it account password to use with --raiplay-email.]:raiplay_password:"
726 - "--raiplay-purge-credentials[Purge cached RaiPlay credentials to initiate a new session and reauthenticate.]"
727 - "--soop-username[The username used to register with sooplive.co.kr.]:soop_username:"
728 - "--soop-password[A sooplive.co.kr account password to use with --soop-username.]:soop_password:"
729 - "--soop-purge-credentials[Purge cached Soop credentials to initiate a new session and reauthenticate.]"
730 - "--soop-stream-password[The password for the stream.]:soop_stream_password:"
731 - "--steam-email[A Steam account email address to access friends\/private streams]:steam_email:"
732 - "--steam-password[A Steam account password to use with --steam-email.]:steam_password:"
733 - "--streann-url[Source URL where the iframe is located, only required for direct URLs of ott.streann.com]:streann_url:"
734 - "--tf1-email[The email address used to register with tf1.fr.]:tf1_email:"
735 - "--tf1-password[A tf1.fr account password to use with --tf1-username.]:tf1_password:"
736 - "--tf1-purge-credentials[Purge cached tf1.fr credentials to initiate a new session and reauthenticate.]"
737 - "--twitcasting-password[Password for private Twitcasting streams.]:twitcasting_password:"
738 - "--twitch-disable-ads[
739 - Skip embedded advertisement segments at the beginning or during a stream.
740 - Will cause these segments to be missing from the output.
741 - ]"
742 - "--twitch-low-latency[
743 - Enables low latency streaming by prefetching HLS segments.
744 - Sets --hls-segment-stream-data to true and --hls-live-edge to 2, if it is higher.
745 - Reducing --hls-live-edge to \`1\` will result in the lowest latency possible, but will most likely cause buffering.
746 -
747 - In order to achieve true low latency streaming during playback, the player\'s caching\/buffering settings will
748 - need to be adjusted and reduced to a value as low as possible, but still high enough to not cause any buffering.
749 - This depends on the stream\'s bitrate and the quality of the connection to Twitch\'s servers. Please refer to the
750 - player\'s own documentation for the required configuration. Player parameters can be set via --player-args.
751 -
752 - Note\: Low latency streams have to be enabled by the broadcasters on Twitch themselves.
753 - Regular streams can cause buffering issues with this option enabled due to the reduced --hls-live-edge value.
754 - ]"
755 - "*--twitch-api-header[
756 - A header to add to each Twitch API HTTP request.
757 -
758 - Can be repeated to add multiple headers.
759 -
760 - Useful for adding authentication data that can prevent ads. See the plugin-specific documentation for more information.
761 - ]:twitch_api_header:"
762 - "*--twitch-access-token-param[
763 - A parameter to add to the API request for acquiring the streaming access token.
764 -
765 - Can be repeated to add multiple parameters.
766 - ]:twitch_access_token_param:"
767 - "--twitch-force-client-integrity[Don\'t attempt requesting the streaming access token without a client-integrity token.]"
768 - "--twitch-purge-client-integrity[Purge cached Twitch client-integrity token and acquire a new one.]"
769 - "--ustream-password[A password to access password protected UStream.tv channels.]:ustream_password:"
770 - "--ustvnow-username[Your USTV Now account username]:ustvnow_username:"
771 - "--ustvnow-password[Your USTV Now account password]:ustvnow_password:"
772 - "--wwenetwork-email[The email associated with your WWE Network account, required to access any WWE Network stream.]:wwenetwork_email:"
773 - "--wwenetwork-password[A WWE Network account password to use with --wwenetwork-email.]:wwenetwork_password:"
774 - "--yupptv-boxid[The yupptv.com boxid that\'s used in the BoxId cookie.]:yupptv_boxid:"
775 - "--yupptv-yuppflixtoken[The yupptv.com yuppflixtoken that\'s used in the YuppflixToken cookie.]:yupptv_yuppflixtoken:"
776 - "--yupptv-purge-credentials[Purge cached YuppTV credentials to initiate a new session and reauthenticate.]"
777 - "--zattoo-email[The email associated with your zattoo account, required to access any zattoo stream.]:zattoo_email:"
778 - "--zattoo-password[A zattoo account password to use with --zattoo-email.]:zattoo_password:"
779 - "--zattoo-purge-credentials[Purge cached zattoo credentials to initiate a new session and reauthenticate.]"
780 - "--zattoo-stream-types[
781 - A comma-delimited list of stream types which should be used.
782 -
783 - The following types are allowed\: dash, hls7
784 -
785 - Default is \"dash\".
786 - ]:zattoo_stream_types:"
787 - ":A URL to attempt to extract streams from.:"
788 - ":Stream to play.:"
789 -)
790 -
791 -
792 -_shtab_streamlink_cli() {
793 - local context state line curcontext="$curcontext" one_or_more='(-)*' remainder='(*)'
794 -
795 - if ((${_shtab_streamlink_cli_options[(I)${(q)one_or_more}*]} + ${_shtab_streamlink_cli_options[(I)${(q)remainder}*]} == 0)); then # noqa: E501
796 - _shtab_streamlink_cli_options+=(': :_shtab_streamlink_cli_commands' '*::: :->streamlink')
797 - fi
798 - _arguments -C -s $_shtab_streamlink_cli_options
799 -
800 - case $state in
801 - streamlink)
802 - words=($line[1] "${words[@]}")
803 - (( CURRENT += 1 ))
804 - curcontext="${curcontext%:*:*}:_shtab_streamlink_cli-$line[1]:"
805 - case $line[1] in
806 -
807 - esac
808 - esac
809 -}
810 -
811 -
812 -
813 -typeset -A opt_args
814 -
815 -if [[ $zsh_eval_context[-1] == eval ]]; then
816 - # eval/source/. command, register function for later
817 - compdef _shtab_streamlink_cli -N streamlink
818 -else
819 - # autoload from fpath, call function directly
820 - _shtab_streamlink_cli "$@"
821 -fi
822 -
1 -#compdef yt-dlp
2 -
3 -__yt_dlp() {
4 - local curcontext="$curcontext" fileopts diropts cur prev
5 - typeset -A opt_args
6 - fileopts="--download-archive|-a|--batch-file|--load-info-json|--load-info|--cookies|--no-cookies"
7 - diropts="--cache-dir"
8 - cur=$words[CURRENT]
9 - case $cur in
10 - :)
11 - _arguments '*: :(::ytfavorites ::ytrecommended ::ytsubscriptions ::ytwatchlater ::ythistory)'
12 - ;;
13 - *)
14 - prev=$words[CURRENT-1]
15 - if [[ ${prev} =~ ${fileopts} ]]; then
16 - _path_files
17 - elif [[ ${prev} =~ ${diropts} ]]; then
18 - _path_files -/
19 - elif [[ ${prev} == "--remux-video" ]]; then
20 - _arguments '*: :(mp4 mkv)'
21 - elif [[ ${prev} == "--recode-video" ]]; then
22 - _arguments '*: :(mp4 flv ogg webm mkv)'
23 - else
24 - _arguments '*: :(--help --version --update --no-update --update-to --ignore-errors --no-abort-on-error --abort-on-error --dump-user-agent --list-extractors --extractor-descriptions --use-extractors --force-generic-extractor --default-search --ignore-config --no-config-locations --config-locations --plugin-dirs --flat-playlist --no-flat-playlist --live-from-start --no-live-from-start --wait-for-video --no-wait-for-video --mark-watched --no-mark-watched --no-colors --color --compat-options --alias --proxy --socket-timeout --source-address --impersonate --list-impersonate-targets --force-ipv4 --force-ipv6 --enable-file-urls --geo-verification-proxy --cn-verification-proxy --xff --geo-bypass --no-geo-bypass --geo-bypass-country --geo-bypass-ip-block --playlist-start --playlist-end --playlist-items --match-title --reject-title --min-filesize --max-filesize --date --datebefore --dateafter --min-views --max-views --match-filters --no-match-filters --break-match-filters --no-break-match-filters --no-playlist --yes-playlist --age-limit --download-archive --no-download-archive --max-downloads --break-on-existing --no-break-on-existing --break-on-reject --break-per-input --no-break-per-input --skip-playlist-after-errors --include-ads --no-include-ads --concurrent-fragments --limit-rate --throttled-rate --retries --file-access-retries --fragment-retries --retry-sleep --skip-unavailable-fragments --abort-on-unavailable-fragments --keep-fragments --no-keep-fragments --buffer-size --resize-buffer --no-resize-buffer --http-chunk-size --test --playlist-reverse --no-playlist-reverse --playlist-random --lazy-playlist --no-lazy-playlist --xattr-set-filesize --hls-prefer-native --hls-prefer-ffmpeg --hls-use-mpegts --no-hls-use-mpegts --download-sections --downloader --downloader-args --batch-file --no-batch-file --id --paths --output --output-na-placeholder --autonumber-size --autonumber-start --restrict-filenames --no-restrict-filenames --windows-filenames --no-windows-filenames --trim-filenames --no-overwrites --force-overwrites --no-force-overwrites --continue --no-continue --part --no-part --mtime --no-mtime --write-description --no-write-description --write-info-json --no-write-info-json --write-annotations --no-write-annotations --write-playlist-metafiles --no-write-playlist-metafiles --clean-info-json --no-clean-info-json --write-comments --no-write-comments --load-info-json --cookies --no-cookies --cookies-from-browser --no-cookies-from-browser --cache-dir --no-cache-dir --rm-cache-dir --write-thumbnail --no-write-thumbnail --write-all-thumbnails --list-thumbnails --write-link --write-url-link --write-webloc-link --write-desktop-link --quiet --no-quiet --no-warnings --simulate --no-simulate --ignore-no-formats-error --no-ignore-no-formats-error --skip-download --print --print-to-file --get-url --get-title --get-id --get-thumbnail --get-description --get-duration --get-filename --get-format --dump-json --dump-single-json --print-json --force-write-archive --newline --no-progress --progress --console-title --progress-template --progress-delta --verbose --dump-pages --write-pages --load-pages --youtube-print-sig-code --print-traffic --call-home --no-call-home --encoding --legacy-server-connect --no-check-certificates --prefer-insecure --user-agent --referer --add-headers --bidi-workaround --sleep-requests --sleep-interval --max-sleep-interval --sleep-subtitles --format --format-sort --format-sort-force --no-format-sort-force --video-multistreams --no-video-multistreams --audio-multistreams --no-audio-multistreams --all-formats --prefer-free-formats --no-prefer-free-formats --check-formats --check-all-formats --no-check-formats --list-formats --list-formats-as-table --list-formats-old --merge-output-format --allow-unplayable-formats --no-allow-unplayable-formats --write-subs --no-write-subs --write-auto-subs --no-write-auto-subs --all-subs --list-subs --sub-format --sub-langs --username --password --twofactor --netrc --netrc-location --netrc-cmd --video-password --ap-mso --ap-username --ap-password --ap-list-mso --client-certificate --client-certificate-key --client-certificate-password --extract-audio --audio-format --audio-quality --remux-video --recode-video --postprocessor-args --keep-video --no-keep-video --post-overwrites --no-post-overwrites --embed-subs --no-embed-subs --embed-thumbnail --no-embed-thumbnail --embed-metadata --no-embed-metadata --embed-chapters --no-embed-chapters --embed-info-json --no-embed-info-json --metadata-from-title --parse-metadata --replace-in-metadata --xattrs --concat-playlist --fixup --prefer-avconv --prefer-ffmpeg --ffmpeg-location --exec --no-exec --exec-before-download --no-exec-before-download --convert-subs --convert-thumbnails --split-chapters --no-split-chapters --remove-chapters --no-remove-chapters --force-keyframes-at-cuts --no-force-keyframes-at-cuts --use-postprocessor --sponsorblock-mark --sponsorblock-remove --sponsorblock-chapter-title --no-sponsorblock --sponsorblock-api --sponskrub --no-sponskrub --sponskrub-cut --no-sponskrub-cut --sponskrub-force --no-sponskrub-force --sponskrub-location --sponskrub-args --extractor-retries --allow-dynamic-mpd --ignore-dynamic-mpd --hls-split-discontinuity --no-hls-split-discontinuity --extractor-args --youtube-include-dash-manifest --youtube-skip-dash-manifest --youtube-include-hls-manifest --youtube-skip-hls-manifest)'
25 - fi
26 - ;;
27 - esac
28 -}
29 -
30 -__yt_dlp
...\ No newline at end of file ...\ No newline at end of file
...@@ -72,11 +72,12 @@ async def get_xhs_cookie(account_file): ...@@ -72,11 +72,12 @@ async def get_xhs_cookie(account_file):
72 await page.goto("https://www.xiaohongshu.com") 72 await page.goto("https://www.xiaohongshu.com")
73 await asyncio.sleep(1) 73 await asyncio.sleep(1)
74 await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel", timeout=50000) 74 await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel", timeout=50000)
75 - xhs_logger.info("小红书登录成功") 75 + print("小红书登录成功")
76 await asyncio.sleep(3) 76 await asyncio.sleep(3)
77 77
78 # await page.pause() 78 # await page.pause()
79 # 点击调试器的继续,保存cookie 79 # 点击调试器的继续,保存cookie
80 + await asyncio.sleep(3)
80 cookies = await context.cookies() 81 cookies = await context.cookies()
81 await write_cookies_to_file(cookies, account_file) 82 await write_cookies_to_file(cookies, account_file)
82 83
......
No preview for this file type
1 -美丽的花花
2 -#花花 #熊猫 #奋斗使者 #短视频
...\ No newline at end of file ...\ No newline at end of file