rinalLi

Revert "u"

This reverts commit 416af690.
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
if [ "${BASH_SOURCE-}" = "$0" ]; then
echo "You must source this script: \$ source $0" >&2
exit 33
fi
deactivate () {
unset -f pydoc >/dev/null 2>&1 || true
# reset old environment variables
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# The hash command must be called to get it to forget past
# commands. Without forgetting past commands the $PATH changes
# we made may not be respected
hash -r 2>/dev/null
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
PS1="$_OLD_VIRTUAL_PS1"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
if [ ! "${1-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV='/Users/rinal/PycharmProjects/xj-marketing'
if ([ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]) && $(command -v cygpath &> /dev/null) ; then
VIRTUAL_ENV=$(cygpath -u "$VIRTUAL_ENV")
fi
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# unset PYTHONHOME if set
if ! [ -z "${PYTHONHOME+_}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1-}"
if [ "x" != x ] ; then
PS1="() ${PS1-}"
else
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
fi
export PS1
fi
# Make sure to unalias pydoc if it's already there
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
pydoc () {
python -m pydoc "$@"
}
# The hash command must be called to get it to forget past
# commands. Without forgetting past commands the $PATH changes
# we made may not be respected
hash -r 2>/dev/null
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
set newline='\
'
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'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV '/Users/rinal/PycharmProjects/xj-marketing'
set _OLD_VIRTUAL_PATH="$PATH:q"
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
if ('' != "") then
set env_name = '() '
else
set env_name = '('"$VIRTUAL_ENV:t:q"') '
endif
if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
set do_prompt = "1"
else
set do_prompt = "0"
endif
else
set do_prompt = "1"
endif
if ( $do_prompt == "1" ) then
# Could be in a non-interactive environment,
# in which case, $prompt is undefined and we wouldn't
# care about the prompt anyway.
if ( $?prompt ) then
set _OLD_VIRTUAL_PROMPT="$prompt:q"
if ( "$prompt:q" =~ *"$newline:q"* ) then
:
else
set prompt = "$env_name:q$prompt:q"
endif
endif
endif
unset env_name
unset do_prompt
alias pydoc python -m pydoc
rehash
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
# Do not run it directly.
function _bashify_path -d "Converts a fish path to something bash can recognize"
set fishy_path $argv
set bashy_path $fishy_path[1]
for path_part in $fishy_path[2..-1]
set bashy_path "$bashy_path:$path_part"
end
echo $bashy_path
end
function _fishify_path -d "Converts a bash path to something fish can recognize"
echo $argv | tr ':' '\n'
end
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3
set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
else
set -gx PATH $_OLD_VIRTUAL_PATH
end
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
and functions -q _old_fish_prompt
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
set -l fish_function_path
# Erase virtualenv's `fish_prompt` and restore the original.
functions -e fish_prompt
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
set -e _OLD_FISH_PROMPT_OVERRIDE
end
set -e VIRTUAL_ENV
if test "$argv[1]" != 'nondestructive'
# Self-destruct!
functions -e pydoc
functions -e deactivate
functions -e _bashify_path
functions -e _fishify_path
end
end
# Unset irrelevant variables.
deactivate nondestructive
set -gx VIRTUAL_ENV '/Users/rinal/PycharmProjects/xj-marketing'
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
else
set -gx _OLD_VIRTUAL_PATH $PATH
end
set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
# Unset `$PYTHONHOME` if set.
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
function pydoc
python -m pydoc $argv
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
functions -c fish_prompt _old_fish_prompt
function fish_prompt
# Run the user's prompt first; it might depend on (pipe)status.
set -l prompt (_old_fish_prompt)
# Prompt override provided?
# If not, just prepend the environment name.
if test -n ''
printf '(%s) ' ''
else
printf '(%s) ' (basename "$VIRTUAL_ENV")
end
string join -- \n $prompt # handle multi-line prompts
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
end
# Setting all environment variables for the venv
let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" })
let virtual-env = "/Users/rinal/PycharmProjects/xj-marketing"
let bin = "bin"
let path-sep = ":"
let old-path = ($nu.path | str collect ($path-sep))
let venv-path = ([$virtual-env $bin] | path join)
let new-path = ($nu.path | prepend $venv-path | str collect ($path-sep))
# environment variables that will be batched loaded to the virtual env
let new-env = ([
[name, value];
[$path-name $new-path]
[_OLD_VIRTUAL_PATH $old-path]
[VIRTUAL_ENV $virtual-env]
])
load-env $new-env
# Creating the new prompt for the session
let virtual_prompt = (if ("" != "") {
"() "
} {
(build-string '(' ($virtual-env | path basename) ') ')
}
)
# If there is no default prompt, then only the env is printed in the prompt
let new_prompt = (if ( config | select prompt | empty? ) {
($"build-string '($virtual_prompt)'")
} {
($"build-string '($virtual_prompt)' (config get prompt | str find-replace "build-string" "")")
})
let-env PROMPT_COMMAND = $new_prompt
# We are using alias as the function definitions because only aliases can be
# removed from the scope
alias pydoc = python -m pydoc
alias deactivate = source "/Users/rinal/PycharmProjects/xj-marketing/bin/deactivate.nu"
$script:THIS_PATH = $myinvocation.mycommand.path
$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
function global:deactivate([switch] $NonDestructive) {
if (Test-Path variable:_OLD_VIRTUAL_PATH) {
$env:PATH = $variable:_OLD_VIRTUAL_PATH
Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
}
if (Test-Path function:_old_virtual_prompt) {
$function:prompt = $function:_old_virtual_prompt
Remove-Item function:\_old_virtual_prompt
}
if ($env:VIRTUAL_ENV) {
Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
}
if (!$NonDestructive) {
# Self destruct!
Remove-Item function:deactivate
Remove-Item function:pydoc
}
}
function global:pydoc {
python -m pydoc $args
}
# unset irrelevant variables
deactivate -nondestructive
$VIRTUAL_ENV = $BASE_DIR
$env:VIRTUAL_ENV = $VIRTUAL_ENV
New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
function global:_old_virtual_prompt {
""
}
$function:_old_virtual_prompt = $function:prompt
if ("" -ne "") {
function global:prompt {
# Add the custom prefix to the existing prompt
$previous_prompt_value = & $function:_old_virtual_prompt
("() " + $previous_prompt_value)
}
}
else {
function global:prompt {
# Add a prefix to the current prompt, but don't discard it.
$previous_prompt_value = & $function:_old_virtual_prompt
$new_prompt_value = "($( Split-Path $env:VIRTUAL_ENV -Leaf )) "
($new_prompt_value + $previous_prompt_value)
}
}
}
# -*- coding: utf-8 -*-
"""Activate virtualenv for current interpreter:
Use exec(open(this_file).read(), {'__file__': this_file}).
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
"""
import os
import site
import sys
try:
abs_file = os.path.abspath(__file__)
except NameError:
raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
bin_dir = os.path.dirname(abs_file)
base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
# prepend bin to PATH (this file is inside the bin directory)
os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
# add the virtual environments libraries to the host python import mechanism
prev_length = len(sys.path)
for lib in "../lib/python3.12/site-packages".split(os.pathsep):
path = os.path.realpath(os.path.join(bin_dir, lib))
site.addsitedir(path.decode("utf-8") if "" else path)
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
sys.real_prefix = sys.prefix
sys.prefix = base
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from alembic.config import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from biliup.__main__ import arg_parser
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(arg_parser())
# Setting the old path
let path-name = (if ((sys).host.name == "Windows") { "Path" } { "PATH" })
let-env $path-name = $nu.env._OLD_VIRTUAL_PATH
# Unleting the environment variables that were created when activating the env
unlet-env VIRTUAL_ENV
unlet-env _OLD_VIRTUAL_PATH
unlet-env PROMPT_COMMAND
unalias pydoc
unalias deactivate
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from httpx import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from mako.cmd import cmdline
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(cmdline())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from charset_normalizer.cli import cli_detect
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(cli_detect())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from playwright.__main__ import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import decrypt
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(decrypt())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import encrypt
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(encrypt())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import keygen
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(keygen())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from rsa.util import private_to_public
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(private_to_public())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import sign
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(sign())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import verify
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(verify())
/usr/local/bin/python3.12
\ No newline at end of file
python
\ No newline at end of file
python
\ No newline at end of file
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from qrcode.console_scripts import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from streamlink_cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from websocket._wsdump import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from cykdl.__main__ import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
#!/Users/rinal/PycharmProjects/xj-marketing/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from yt_dlp import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
/* -*- indent-tabs-mode: nil; tab-width: 4; -*- */
/* Greenlet object interface */
#ifndef Py_GREENLETOBJECT_H
#define Py_GREENLETOBJECT_H
#include <Python.h>
#ifdef __cplusplus
extern "C" {
#endif
/* This is deprecated and undocumented. It does not change. */
#define GREENLET_VERSION "1.0.0"
#ifndef GREENLET_MODULE
#define implementation_ptr_t void*
#endif
typedef struct _greenlet {
PyObject_HEAD
PyObject* weakreflist;
PyObject* dict;
implementation_ptr_t pimpl;
} PyGreenlet;
#define PyGreenlet_Check(op) (op && PyObject_TypeCheck(op, &PyGreenlet_Type))
/* C API functions */
/* Total number of symbols that are exported */
#define PyGreenlet_API_pointers 12
#define PyGreenlet_Type_NUM 0
#define PyExc_GreenletError_NUM 1
#define PyExc_GreenletExit_NUM 2
#define PyGreenlet_New_NUM 3
#define PyGreenlet_GetCurrent_NUM 4
#define PyGreenlet_Throw_NUM 5
#define PyGreenlet_Switch_NUM 6
#define PyGreenlet_SetParent_NUM 7
#define PyGreenlet_MAIN_NUM 8
#define PyGreenlet_STARTED_NUM 9
#define PyGreenlet_ACTIVE_NUM 10
#define PyGreenlet_GET_PARENT_NUM 11
#ifndef GREENLET_MODULE
/* This section is used by modules that uses the greenlet C API */
static void** _PyGreenlet_API = NULL;
# define PyGreenlet_Type \
(*(PyTypeObject*)_PyGreenlet_API[PyGreenlet_Type_NUM])
# define PyExc_GreenletError \
((PyObject*)_PyGreenlet_API[PyExc_GreenletError_NUM])
# define PyExc_GreenletExit \
((PyObject*)_PyGreenlet_API[PyExc_GreenletExit_NUM])
/*
* PyGreenlet_New(PyObject *args)
*
* greenlet.greenlet(run, parent=None)
*/
# define PyGreenlet_New \
(*(PyGreenlet * (*)(PyObject * run, PyGreenlet * parent)) \
_PyGreenlet_API[PyGreenlet_New_NUM])
/*
* PyGreenlet_GetCurrent(void)
*
* greenlet.getcurrent()
*/
# define PyGreenlet_GetCurrent \
(*(PyGreenlet * (*)(void)) _PyGreenlet_API[PyGreenlet_GetCurrent_NUM])
/*
* PyGreenlet_Throw(
* PyGreenlet *greenlet,
* PyObject *typ,
* PyObject *val,
* PyObject *tb)
*
* g.throw(...)
*/
# define PyGreenlet_Throw \
(*(PyObject * (*)(PyGreenlet * self, \
PyObject * typ, \
PyObject * val, \
PyObject * tb)) \
_PyGreenlet_API[PyGreenlet_Throw_NUM])
/*
* PyGreenlet_Switch(PyGreenlet *greenlet, PyObject *args)
*
* g.switch(*args, **kwargs)
*/
# define PyGreenlet_Switch \
(*(PyObject * \
(*)(PyGreenlet * greenlet, PyObject * args, PyObject * kwargs)) \
_PyGreenlet_API[PyGreenlet_Switch_NUM])
/*
* PyGreenlet_SetParent(PyObject *greenlet, PyObject *new_parent)
*
* g.parent = new_parent
*/
# define PyGreenlet_SetParent \
(*(int (*)(PyGreenlet * greenlet, PyGreenlet * nparent)) \
_PyGreenlet_API[PyGreenlet_SetParent_NUM])
/*
* PyGreenlet_GetParent(PyObject* greenlet)
*
* return greenlet.parent;
*
* This could return NULL even if there is no exception active.
* If it does not return NULL, you are responsible for decrementing the
* reference count.
*/
# define PyGreenlet_GetParent \
(*(PyGreenlet* (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_GET_PARENT_NUM])
/*
* deprecated, undocumented alias.
*/
# define PyGreenlet_GET_PARENT PyGreenlet_GetParent
# define PyGreenlet_MAIN \
(*(int (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_MAIN_NUM])
# define PyGreenlet_STARTED \
(*(int (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_STARTED_NUM])
# define PyGreenlet_ACTIVE \
(*(int (*)(PyGreenlet*)) \
_PyGreenlet_API[PyGreenlet_ACTIVE_NUM])
/* Macro that imports greenlet and initializes C API */
/* NOTE: This has actually moved to ``greenlet._greenlet._C_API``, but we
keep the older definition to be sure older code that might have a copy of
the header still works. */
# define PyGreenlet_Import() \
{ \
_PyGreenlet_API = (void**)PyCapsule_Import("greenlet._C_API", 0); \
}
#endif /* GREENLET_MODULE */
#ifdef __cplusplus
}
#endif
#endif /* !Py_GREENLETOBJECT_H */
from playwright.sync_api import sync_playwright
import asyncio
import asyncio
import json
from playwright.async_api import async_playwright, expect
async def write_cookies_to_file(cookies, file_path):
with open(file_path, 'w') as f:
json.dump(cookies, f)
async def read_cookies_from_file(file_path):
try:
with open(file_path, 'r') as f:
return json.load(f)
except FileNotFoundError:
return []
async def main():
filePath = "/Users/rinal/Downloads/xhs.json"
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://www.xiaohongshu.com")
print(await page.title()) # login-container
await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel")
await asyncio.sleep(3)
cookies = await context.cookies()
print(cookies)
await write_cookies_to_file(cookies, filePath)
await browser.close()
async def upload():
filePath = "/Users/rinal/Downloads/xhs.json"
print(filePath)
async with async_playwright() as p:
browser = await p.chromium.launch()
context = await browser.new_context()
page = await context.new_page()
saved_cookies = await read_cookies_from_file(filePath)
await context.add_cookies(saved_cookies)
await page.goto("https://www.xiaohongshu.com") # 再次访问对应网址,此时带着之前保存的cookie
await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel")
await page.goto("https://creator.xiaohongshu.com/publish/publish?source=official")
await page.locator("input.upload-input").set_input_files(
"/Users/rinal/PycharmProjects/xj-marketing/videos/huahua.mp4")
button_elem = page.locator('button div span:has-text("发布")')
await button_elem.wait_for(state='visible') # 确保按钮可见
await page.locator("div.titleInput div div input").fill("花花")
tags = ['花花', '熊猫']
inputTag = page.locator('id=quillEditor').locator('div p')
await inputTag.click()
for index, tag in enumerate(tags, start=1):
await page.keyboard.type(f"#{tag} ")
await asyncio.sleep(2)
print("已写完tag")
await asyncio.sleep(10)
await button_elem.click()
await page.wait_for_selector('p:has-text("发布成功")')
await browser.close()
# asyncio.run(main())
asyncio.run(upload())
#
\ No newline at end of file
home = /Library/Frameworks/Python.framework/Versions/3.12
implementation = CPython
version_info = 3.12.8.final.0
virtualenv = 20.13.0
include-system-site-packages = false
base-prefix = /Library/Frameworks/Python.framework/Versions/3.12
base-exec-prefix = /Library/Frameworks/Python.framework/Versions/3.12
base-executable = /usr/local/bin/python3.12
# AUTOMATICALLY GENERATED by `shtab`
_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')
_shtab_streamlink_cli__l_choices=('none' 'critical' 'error' 'warning' 'info' 'debug' 'trace' 'all')
_shtab_streamlink_cli___loglevel_choices=('none' 'critical' 'error' 'warning' 'info' 'debug' 'trace' 'all')
_shtab_streamlink_cli___fs_safe_rules_choices=('POSIX' 'Windows')
_shtab_streamlink_cli___progress_choices=('yes' 'force' 'no')
_shtab_streamlink_cli__h_nargs=0
_shtab_streamlink_cli___help_nargs=0
_shtab_streamlink_cli__V_nargs=0
_shtab_streamlink_cli___version_nargs=0
_shtab_streamlink_cli___version_check_nargs=0
_shtab_streamlink_cli___plugins_nargs=0
_shtab_streamlink_cli___no_config_nargs=0
_shtab_streamlink_cli__Q_nargs=0
_shtab_streamlink_cli___quiet_nargs=0
_shtab_streamlink_cli__j_nargs=0
_shtab_streamlink_cli___json_nargs=0
_shtab_streamlink_cli__4_nargs=0
_shtab_streamlink_cli___ipv4_nargs=0
_shtab_streamlink_cli__6_nargs=0
_shtab_streamlink_cli___ipv6_nargs=0
_shtab_streamlink_cli__v_nargs=0
_shtab_streamlink_cli___player_verbose_nargs=0
_shtab_streamlink_cli___verbose_player_nargs=0
_shtab_streamlink_cli__n_nargs=0
_shtab_streamlink_cli___player_fifo_nargs=0
_shtab_streamlink_cli___fifo_nargs=0
_shtab_streamlink_cli___player_http_nargs=0
_shtab_streamlink_cli___player_continuous_http_nargs=0
_shtab_streamlink_cli___player_external_http_nargs=0
_shtab_streamlink_cli___player_no_close_nargs=0
_shtab_streamlink_cli__O_nargs=0
_shtab_streamlink_cli___stdout_nargs=0
_shtab_streamlink_cli__f_nargs=0
_shtab_streamlink_cli___force_nargs=0
_shtab_streamlink_cli___stream_url_nargs=0
_shtab_streamlink_cli___mux_subtitles_nargs=0
_shtab_streamlink_cli___hls_segment_stream_data_nargs=0
_shtab_streamlink_cli___hls_live_restart_nargs=0
_shtab_streamlink_cli___ffmpeg_no_validation_nargs=0
_shtab_streamlink_cli___ffmpeg_verbose_nargs=0
_shtab_streamlink_cli___ffmpeg_copyts_nargs=0
_shtab_streamlink_cli___ffmpeg_start_at_zero_nargs=0
_shtab_streamlink_cli___http_ignore_env_nargs=0
_shtab_streamlink_cli___http_no_ssl_verify_nargs=0
_shtab_streamlink_cli___http_disable_dh_nargs=0
_shtab_streamlink_cli___http_ssl_cert_crt_key_nargs=2
_shtab_streamlink_cli___bbciplayer_hd_nargs=0
_shtab_streamlink_cli___niconico_purge_credentials_nargs=0
_shtab_streamlink_cli___pixiv_purge_credentials_nargs=0
_shtab_streamlink_cli___raiplay_purge_credentials_nargs=0
_shtab_streamlink_cli___soop_purge_credentials_nargs=0
_shtab_streamlink_cli___afreeca_purge_credentials_nargs=0
_shtab_streamlink_cli___tf1_purge_credentials_nargs=0
_shtab_streamlink_cli___twitch_disable_ads_nargs=0
_shtab_streamlink_cli___twitch_disable_hosting_nargs=0
_shtab_streamlink_cli___twitch_disable_reruns_nargs=0
_shtab_streamlink_cli___twitch_low_latency_nargs=0
_shtab_streamlink_cli___twitch_force_client_integrity_nargs=0
_shtab_streamlink_cli___twitch_purge_client_integrity_nargs=0
_shtab_streamlink_cli___yupptv_purge_credentials_nargs=0
_shtab_streamlink_cli___zattoo_purge_credentials_nargs=0
# $1=COMP_WORDS[1]
_shtab_compgen_files() {
compgen -f -- $1 # files
}
# $1=COMP_WORDS[1]
_shtab_compgen_dirs() {
compgen -d -- $1 # recurse into subdirs
}
# $1=COMP_WORDS[1]
_shtab_replace_nonword() {
echo "${1//[^[:word:]]/_}"
}
# set default values (called for the initial parser & any subparsers)
_set_parser_defaults() {
local subparsers_var="${prefix}_subparsers[@]"
sub_parsers=${!subparsers_var-}
local current_option_strings_var="${prefix}_option_strings[@]"
current_option_strings=${!current_option_strings_var}
completed_positional_actions=0
_set_new_action "pos_${completed_positional_actions}" true
}
# $1=action identifier
# $2=positional action (bool)
# set all identifiers for an action's parameters
_set_new_action() {
current_action="${prefix}_$(_shtab_replace_nonword $1)"
local current_action_compgen_var=${current_action}_COMPGEN
current_action_compgen="${!current_action_compgen_var-}"
local current_action_choices_var="${current_action}_choices[@]"
current_action_choices="${!current_action_choices_var-}"
local current_action_nargs_var="${current_action}_nargs"
if [ -n "${!current_action_nargs_var-}" ]; then
current_action_nargs="${!current_action_nargs_var}"
else
current_action_nargs=1
fi
current_action_args_start_index=$(( $word_index + 1 - $pos_only ))
current_action_is_positional=$2
}
# Notes:
# `COMPREPLY`: what will be rendered after completion is triggered
# `completing_word`: currently typed word to generate completions for
# `${!var}`: evaluates the content of `var` and expand its content as a variable
# hello="world"
# x="hello"
# ${!x} -> ${hello} -> "world"
_shtab_streamlink_cli() {
local completing_word="${COMP_WORDS[COMP_CWORD]}"
local completed_positional_actions
local current_action
local current_action_args_start_index
local current_action_choices
local current_action_compgen
local current_action_is_positional
local current_action_nargs
local current_option_strings
local sub_parsers
COMPREPLY=()
local prefix=_shtab_streamlink_cli
local word_index=0
local pos_only=0 # "--" delimeter not encountered yet
_set_parser_defaults
word_index=1
# determine what arguments are appropriate for the current state
# of the arg parser
while [ $word_index -ne $COMP_CWORD ]; do
local this_word="${COMP_WORDS[$word_index]}"
if [[ $pos_only = 1 || " $this_word " != " -- " ]]; then
if [[ -n $sub_parsers && " ${sub_parsers[@]} " == *" ${this_word} "* ]]; then
# valid subcommand: add it to the prefix & reset the current action
prefix="${prefix}_$(_shtab_replace_nonword $this_word)"
_set_parser_defaults
fi
if [[ " ${current_option_strings[@]} " == *" ${this_word} "* ]]; then
# a new action should be acquired (due to recognised option string or
# no more input expected from current action);
# the next positional action can fill in here
_set_new_action $this_word false
fi
if [[ "$current_action_nargs" != "*" ]] && \
[[ "$current_action_nargs" != "+" ]] && \
[[ "$current_action_nargs" != *"..." ]] && \
(( $word_index + 1 - $current_action_args_start_index - $pos_only >= \
$current_action_nargs )); then
$current_action_is_positional && let "completed_positional_actions += 1"
_set_new_action "pos_${completed_positional_actions}" true
fi
else
pos_only=1 # "--" delimeter encountered
fi
let "word_index+=1"
done
# Generate the completions
if [[ $pos_only = 0 && "${completing_word}" == -* ]]; then
# optional argument started: use option strings
COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") )
else
# use choices & compgen
local IFS=$'\n' # items may contain spaces, so delimit using newline
COMPREPLY=( $([ -n "${current_action_compgen}" ] \
&& "${current_action_compgen}" "${completing_word}") )
unset IFS
COMPREPLY+=( $(compgen -W "${current_action_choices[*]}" -- "${completing_word}") )
fi
return 0
}
complete -o filenames -F _shtab_streamlink_cli streamlink
__yt_dlp()
{
local cur prev opts fileopts diropts keywords
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
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"
keywords=":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
fileopts="-a|--batch-file|--download-archive|--cookies|--load-info"
diropts="--cache-dir"
if [[ ${prev} =~ ${fileopts} ]]; then
COMPREPLY=( $(compgen -f -- ${cur}) )
return 0
elif [[ ${prev} =~ ${diropts} ]]; then
COMPREPLY=( $(compgen -d -- ${cur}) )
return 0
fi
if [[ ${cur} =~ : ]]; then
COMPREPLY=( $(compgen -W "${keywords}" -- ${cur}) )
return 0
elif [[ ${cur} == * ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F __yt_dlp yt-dlp
This diff could not be displayed because it is too large.
complete --command yt-dlp --long-option help --short-option h --description 'Print this help text and exit'
complete --command yt-dlp --long-option version --description 'Print program version and exit'
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'
complete --command yt-dlp --long-option no-update --description 'Do not check for updates (default)'
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'
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'
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)'
complete --command yt-dlp --long-option abort-on-error --description 'Abort downloading of further videos if an error occurs (Alias: --no-ignore-errors)'
complete --command yt-dlp --long-option dump-user-agent --description 'Display the current user-agent and exit'
complete --command yt-dlp --long-option list-extractors --description 'List all supported extractors and exit'
complete --command yt-dlp --long-option extractor-descriptions --description 'Output descriptions of all supported extractors and exit'
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)'
complete --command yt-dlp --long-option force-generic-extractor
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'
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)'
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'
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'
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'
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'
complete --command yt-dlp --long-option no-flat-playlist --description 'Fully extract the videos of a playlist (default)'
complete --command yt-dlp --long-option live-from-start --description 'Download livestreams from the start. Currently only supported for YouTube (Experimental)'
complete --command yt-dlp --long-option no-live-from-start --description 'Download livestreams from the current time (default)'
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'
complete --command yt-dlp --long-option no-wait-for-video --description 'Do not wait for scheduled streams (default)'
complete --command yt-dlp --long-option mark-watched --description 'Mark videos watched (even with --simulate)'
complete --command yt-dlp --long-option no-mark-watched --description 'Do not mark videos watched (default)'
complete --command yt-dlp --long-option no-colors
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'
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'
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'
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'
complete --command yt-dlp --long-option socket-timeout --description 'Time to wait before giving up, in seconds'
complete --command yt-dlp --long-option source-address --description 'Client-side IP address to bind to'
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'
complete --command yt-dlp --long-option list-impersonate-targets --description 'List available clients to impersonate.'
complete --command yt-dlp --long-option force-ipv4 --short-option 4 --description 'Make all connections via IPv4'
complete --command yt-dlp --long-option force-ipv6 --short-option 6 --description 'Make all connections via IPv6'
complete --command yt-dlp --long-option enable-file-urls --description 'Enable file:// URLs. This is disabled by default for security reasons.'
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'
complete --command yt-dlp --long-option cn-verification-proxy
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'
complete --command yt-dlp --long-option geo-bypass
complete --command yt-dlp --long-option no-geo-bypass
complete --command yt-dlp --long-option geo-bypass-country
complete --command yt-dlp --long-option geo-bypass-ip-block
complete --command yt-dlp --long-option playlist-start
complete --command yt-dlp --long-option playlist-end
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'
complete --command yt-dlp --long-option match-title
complete --command yt-dlp --long-option reject-title
complete --command yt-dlp --long-option min-filesize --description 'Abort download if filesize is smaller than SIZE, e.g. 50k or 44.6M'
complete --command yt-dlp --long-option max-filesize --description 'Abort download if filesize is larger than SIZE, e.g. 50k or 44.6M'
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'
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'
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'
complete --command yt-dlp --long-option min-views
complete --command yt-dlp --long-option max-views
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'
complete --command yt-dlp --long-option no-match-filters --description 'Do not use any --match-filters (default)'
complete --command yt-dlp --long-option break-match-filters --description 'Same as "--match-filters" but stops the download process when a video is rejected'
complete --command yt-dlp --long-option no-break-match-filters --description 'Do not use any --break-match-filters (default)'
complete --command yt-dlp --long-option no-playlist --description 'Download only the video, if the URL refers to a video and a playlist'
complete --command yt-dlp --long-option yes-playlist --description 'Download the playlist, if the URL refers to a video and a playlist'
complete --command yt-dlp --long-option age-limit --description 'Download only videos suitable for the given age'
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
complete --command yt-dlp --long-option no-download-archive --description 'Do not use archive file (default)'
complete --command yt-dlp --long-option max-downloads --description 'Abort after downloading NUMBER files'
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'
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)'
complete --command yt-dlp --long-option break-on-reject
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'
complete --command yt-dlp --long-option no-break-per-input --description '--break-on-existing and similar options terminates the entire download queue'
complete --command yt-dlp --long-option skip-playlist-after-errors --description 'Number of allowed failures until the rest of the playlist is skipped'
complete --command yt-dlp --long-option include-ads
complete --command yt-dlp --long-option no-include-ads
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)'
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'
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'
complete --command yt-dlp --long-option retries --short-option R --description 'Number of retries (default is %default), or "infinite"'
complete --command yt-dlp --long-option file-access-retries --description 'Number of times to retry on file access error (default is %default), or "infinite"'
complete --command yt-dlp --long-option fragment-retries --description 'Number of retries for a fragment (default is %default), or "infinite" (DASH, hlsnative and ISM)'
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'
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)'
complete --command yt-dlp --long-option abort-on-unavailable-fragments --description 'Abort download if a fragment is unavailable (Alias: --no-skip-unavailable-fragments)'
complete --command yt-dlp --long-option keep-fragments --description 'Keep downloaded fragments on disk after downloading is finished'
complete --command yt-dlp --long-option no-keep-fragments --description 'Delete downloaded fragments after downloading is finished (default)'
complete --command yt-dlp --long-option buffer-size --description 'Size of download buffer, e.g. 1024 or 16K (default is %default)'
complete --command yt-dlp --long-option resize-buffer --description 'The buffer size is automatically resized from an initial value of --buffer-size (default)'
complete --command yt-dlp --long-option no-resize-buffer --description 'Do not automatically adjust the buffer size'
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)'
complete --command yt-dlp --long-option test
complete --command yt-dlp --long-option playlist-reverse
complete --command yt-dlp --long-option no-playlist-reverse
complete --command yt-dlp --long-option playlist-random --description 'Download playlist videos in random order'
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'
complete --command yt-dlp --long-option no-lazy-playlist --description 'Process videos in the playlist only after the entire playlist is parsed (default)'
complete --command yt-dlp --long-option xattr-set-filesize --description 'Set file xattribute ytdl.filesize with expected file size'
complete --command yt-dlp --long-option hls-prefer-native
complete --command yt-dlp --long-option hls-prefer-ffmpeg
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'
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'
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"'
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)'
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)'
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
complete --command yt-dlp --long-option no-batch-file --description 'Do not read URLs from batch file (default)'
complete --command yt-dlp --long-option id
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'
complete --command yt-dlp --long-option output --short-option o --description 'Output filename template; see "OUTPUT TEMPLATE" for details'
complete --command yt-dlp --long-option output-na-placeholder --description 'Placeholder for unavailable fields in --output (default: "%default")'
complete --command yt-dlp --long-option autonumber-size
complete --command yt-dlp --long-option autonumber-start
complete --command yt-dlp --long-option restrict-filenames --description 'Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames'
complete --command yt-dlp --long-option no-restrict-filenames --description 'Allow Unicode characters, "&" and spaces in filenames (default)'
complete --command yt-dlp --long-option windows-filenames --description 'Force filenames to be Windows-compatible'
complete --command yt-dlp --long-option no-windows-filenames --description 'Make filenames Windows-compatible only if using Windows (default)'
complete --command yt-dlp --long-option trim-filenames --description 'Limit the filename length (excluding extension) to the specified number of characters'
complete --command yt-dlp --long-option no-overwrites --short-option w --description 'Do not overwrite any files'
complete --command yt-dlp --long-option force-overwrites --description 'Overwrite all video and metadata files. This option includes --no-continue'
complete --command yt-dlp --long-option no-force-overwrites --description 'Do not overwrite the video, but overwrite related files (default)'
complete --command yt-dlp --long-option continue --short-option c --description 'Resume partially downloaded files/fragments (default)'
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'
complete --command yt-dlp --long-option part --description 'Use .part files instead of writing directly into output file (default)'
complete --command yt-dlp --long-option no-part --description 'Do not use .part files - write directly into output file'
complete --command yt-dlp --long-option mtime --description 'Use the Last-modified header to set the file modification time (default)'
complete --command yt-dlp --long-option no-mtime --description 'Do not use the Last-modified header to set the file modification time'
complete --command yt-dlp --long-option write-description --description 'Write video description to a .description file'
complete --command yt-dlp --long-option no-write-description --description 'Do not write video description (default)'
complete --command yt-dlp --long-option write-info-json --description 'Write video metadata to a .info.json file (this may contain personal information)'
complete --command yt-dlp --long-option no-write-info-json --description 'Do not write video metadata (default)'
complete --command yt-dlp --long-option write-annotations
complete --command yt-dlp --long-option no-write-annotations
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)'
complete --command yt-dlp --long-option no-write-playlist-metafiles --description 'Do not write playlist metadata when using --write-info-json, --write-description etc.'
complete --command yt-dlp --long-option clean-info-json --description 'Remove some internal metadata such as filenames from the infojson (default)'
complete --command yt-dlp --long-option no-clean-info-json --description 'Write all fields to the infojson'
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)'
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)'
complete --command yt-dlp --long-option load-info-json --description 'JSON file containing the video information (created with the "--write-info-json" option)'
complete --command yt-dlp --long-option cookies --description 'Netscape formatted file to read cookies from and dump cookie jar in' --require-parameter
complete --command yt-dlp --long-option no-cookies --description 'Do not read/dump cookies from/to file (default)'
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'
complete --command yt-dlp --long-option no-cookies-from-browser --description 'Do not load cookies from browser (default)'
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'
complete --command yt-dlp --long-option no-cache-dir --description 'Disable filesystem caching'
complete --command yt-dlp --long-option rm-cache-dir --description 'Delete all filesystem cache files'
complete --command yt-dlp --long-option write-thumbnail --description 'Write thumbnail image to disk'
complete --command yt-dlp --long-option no-write-thumbnail --description 'Do not write thumbnail image to disk (default)'
complete --command yt-dlp --long-option write-all-thumbnails --description 'Write all thumbnail image formats to disk'
complete --command yt-dlp --long-option list-thumbnails --description 'List available thumbnails of each video. Simulate unless --no-simulate is used'
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'
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'
complete --command yt-dlp --long-option write-webloc-link --description 'Write a .webloc macOS internet shortcut'
complete --command yt-dlp --long-option write-desktop-link --description 'Write a .desktop Linux internet shortcut'
complete --command yt-dlp --long-option quiet --short-option q --description 'Activate quiet mode. If used with --verbose, print the log to stderr'
complete --command yt-dlp --long-option no-quiet --description 'Deactivate quiet mode. (Default)'
complete --command yt-dlp --long-option no-warnings --description 'Ignore warnings'
complete --command yt-dlp --long-option simulate --short-option s --description 'Do not download the video and do not write anything to disk'
complete --command yt-dlp --long-option no-simulate --description 'Download the video even if printing/listing options are used'
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)'
complete --command yt-dlp --long-option no-ignore-no-formats-error --description 'Throw error when no downloadable video formats are found (default)'
complete --command yt-dlp --long-option skip-download --description 'Do not download the video but write all related files (Alias: --no-download)'
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'
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'
complete --command yt-dlp --long-option get-url --short-option g
complete --command yt-dlp --long-option get-title --short-option e
complete --command yt-dlp --long-option get-id
complete --command yt-dlp --long-option get-thumbnail
complete --command yt-dlp --long-option get-description
complete --command yt-dlp --long-option get-duration
complete --command yt-dlp --long-option get-filename
complete --command yt-dlp --long-option get-format
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'
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'
complete --command yt-dlp --long-option print-json
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)'
complete --command yt-dlp --long-option newline --description 'Output progress bar as new lines'
complete --command yt-dlp --long-option no-progress --description 'Do not print progress bar'
complete --command yt-dlp --long-option progress --description 'Show progress bar, even if in quiet mode'
complete --command yt-dlp --long-option console-title --description 'Display progress in console titlebar'
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"'
complete --command yt-dlp --long-option progress-delta --description 'Time between progress output (default: 0)'
complete --command yt-dlp --long-option verbose --short-option v --description 'Print various debugging information'
complete --command yt-dlp --long-option dump-pages --description 'Print downloaded pages encoded using base64 to debug problems (very verbose)'
complete --command yt-dlp --long-option write-pages --description 'Write downloaded intermediary pages to files in the current directory to debug problems'
complete --command yt-dlp --long-option load-pages
complete --command yt-dlp --long-option youtube-print-sig-code
complete --command yt-dlp --long-option print-traffic --description 'Display sent and read HTTP traffic'
complete --command yt-dlp --long-option call-home --short-option C
complete --command yt-dlp --long-option no-call-home
complete --command yt-dlp --long-option encoding --description 'Force the specified encoding (experimental)'
complete --command yt-dlp --long-option legacy-server-connect --description 'Explicitly allow HTTPS connection to servers that do not support RFC 5746 secure renegotiation'
complete --command yt-dlp --long-option no-check-certificates --description 'Suppress HTTPS certificate validation'
complete --command yt-dlp --long-option prefer-insecure --description 'Use an unencrypted connection to retrieve information about the video (Currently supported only for YouTube)'
complete --command yt-dlp --long-option user-agent
complete --command yt-dlp --long-option referer
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'
complete --command yt-dlp --long-option bidi-workaround --description 'Work around terminals that lack bidirectional text support. Requires bidiv or fribidi executable in PATH'
complete --command yt-dlp --long-option sleep-requests --description 'Number of seconds to sleep between requests during data extraction'
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)'
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'
complete --command yt-dlp --long-option sleep-subtitles --description 'Number of seconds to sleep before each subtitle download'
complete --command yt-dlp --long-option format --short-option f --description 'Video format code, see "FORMAT SELECTION" for more details'
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'
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)'
complete --command yt-dlp --long-option no-format-sort-force --description 'Some fields have precedence over the user specified sort order (default)'
complete --command yt-dlp --long-option video-multistreams --description 'Allow multiple video streams to be merged into a single file'
complete --command yt-dlp --long-option no-video-multistreams --description 'Only one video stream is downloaded for each output file (default)'
complete --command yt-dlp --long-option audio-multistreams --description 'Allow multiple audio streams to be merged into a single file'
complete --command yt-dlp --long-option no-audio-multistreams --description 'Only one audio stream is downloaded for each output file (default)'
complete --command yt-dlp --long-option all-formats
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'
complete --command yt-dlp --long-option no-prefer-free-formats --description 'Don'"'"'t give any special preference to free containers (default)'
complete --command yt-dlp --long-option check-formats --description 'Make sure formats are selected only from those that are actually downloadable'
complete --command yt-dlp --long-option check-all-formats --description 'Check all formats for whether they are actually downloadable'
complete --command yt-dlp --long-option no-check-formats --description 'Do not check that the formats are actually downloadable'
complete --command yt-dlp --long-option list-formats --short-option F --description 'List available formats of each video. Simulate unless --no-simulate is used'
complete --command yt-dlp --long-option list-formats-as-table
complete --command yt-dlp --long-option list-formats-old
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)'
complete --command yt-dlp --long-option allow-unplayable-formats
complete --command yt-dlp --long-option no-allow-unplayable-formats
complete --command yt-dlp --long-option write-subs --description 'Write subtitle file'
complete --command yt-dlp --long-option no-write-subs --description 'Do not write subtitle file (default)'
complete --command yt-dlp --long-option write-auto-subs --description 'Write automatically generated subtitle file (Alias: --write-automatic-subs)'
complete --command yt-dlp --long-option no-write-auto-subs --description 'Do not write auto-generated subtitles (default) (Alias: --no-write-automatic-subs)'
complete --command yt-dlp --long-option all-subs
complete --command yt-dlp --long-option list-subs --description 'List available subtitles of each video. Simulate unless --no-simulate is used'
complete --command yt-dlp --long-option sub-format --description 'Subtitle format; accepts formats preference separated by "/", e.g. "srt" or "ass/srt/best"'
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'
complete --command yt-dlp --long-option username --short-option u --description 'Login with this account ID'
complete --command yt-dlp --long-option password --short-option p --description 'Account password. If this option is left out, yt-dlp will ask interactively'
complete --command yt-dlp --long-option twofactor --short-option 2 --description 'Two-factor authentication code'
complete --command yt-dlp --long-option netrc --short-option n --description 'Use .netrc authentication data'
complete --command yt-dlp --long-option netrc-location --description 'Location of .netrc authentication data; either the path or its containing directory. Defaults to ~/.netrc'
complete --command yt-dlp --long-option netrc-cmd --description 'Command to execute to get the credentials for an extractor.'
complete --command yt-dlp --long-option video-password --description 'Video-specific password'
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'
complete --command yt-dlp --long-option ap-username --description 'Multiple-system operator account login'
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'
complete --command yt-dlp --long-option ap-list-mso --description 'List all supported multiple-system operators'
complete --command yt-dlp --long-option client-certificate --description 'Path to client certificate file in PEM format. May include the private key'
complete --command yt-dlp --long-option client-certificate-key --description 'Path to private key file for client certificate'
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'
complete --command yt-dlp --long-option extract-audio --short-option x --description 'Convert video files to audio-only files (requires ffmpeg and ffprobe)'
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'
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)'
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
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
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)'
complete --command yt-dlp --long-option keep-video --short-option k --description 'Keep the intermediate video file on disk after post-processing'
complete --command yt-dlp --long-option no-keep-video --description 'Delete the intermediate video file after post-processing (default)'
complete --command yt-dlp --long-option post-overwrites --description 'Overwrite post-processed files (default)'
complete --command yt-dlp --long-option no-post-overwrites --description 'Do not overwrite post-processed files'
complete --command yt-dlp --long-option embed-subs --description 'Embed subtitles in the video (only for mp4, webm and mkv videos)'
complete --command yt-dlp --long-option no-embed-subs --description 'Do not embed subtitles (default)'
complete --command yt-dlp --long-option embed-thumbnail --description 'Embed thumbnail in the video as cover art'
complete --command yt-dlp --long-option no-embed-thumbnail --description 'Do not embed thumbnail (default)'
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)'
complete --command yt-dlp --long-option no-embed-metadata --description 'Do not add metadata to file (default) (Alias: --no-add-metadata)'
complete --command yt-dlp --long-option embed-chapters --description 'Add chapter markers to the video file (Alias: --add-chapters)'
complete --command yt-dlp --long-option no-embed-chapters --description 'Do not add chapter markers (default) (Alias: --no-add-chapters)'
complete --command yt-dlp --long-option embed-info-json --description 'Embed the infojson as an attachment to mkv/mka video files'
complete --command yt-dlp --long-option no-embed-info-json --description 'Do not embed the infojson as an attachment to the video file'
complete --command yt-dlp --long-option metadata-from-title
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)'
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)'
complete --command yt-dlp --long-option xattrs --description 'Write metadata to the video file'"'"'s xattrs (using Dublin Core and XDG standards)'
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'
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)'
complete --command yt-dlp --long-option prefer-avconv
complete --command yt-dlp --long-option prefer-ffmpeg
complete --command yt-dlp --long-option ffmpeg-location --description 'Location of the ffmpeg binary; either the path to the binary or its containing directory'
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'
complete --command yt-dlp --long-option no-exec --description 'Remove any previously defined --exec'
complete --command yt-dlp --long-option exec-before-download
complete --command yt-dlp --long-option no-exec-before-download
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)'
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)'
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'
complete --command yt-dlp --long-option no-split-chapters --description 'Do not split video based on chapters (default)'
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'
complete --command yt-dlp --long-option no-remove-chapters --description 'Do not remove any chapters from the file (default)'
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'
complete --command yt-dlp --long-option no-force-keyframes-at-cuts --description 'Do not force keyframes around the chapters when cutting/splitting (default)'
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'
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'
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'
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"'
complete --command yt-dlp --long-option no-sponsorblock --description 'Disable both --sponsorblock-mark and --sponsorblock-remove'
complete --command yt-dlp --long-option sponsorblock-api --description 'SponsorBlock API location, defaults to %default'
complete --command yt-dlp --long-option sponskrub
complete --command yt-dlp --long-option no-sponskrub
complete --command yt-dlp --long-option sponskrub-cut
complete --command yt-dlp --long-option no-sponskrub-cut
complete --command yt-dlp --long-option sponskrub-force
complete --command yt-dlp --long-option no-sponskrub-force
complete --command yt-dlp --long-option sponskrub-location
complete --command yt-dlp --long-option sponskrub-args
complete --command yt-dlp --long-option extractor-retries --description 'Number of retries for known extractor errors (default is %default), or "infinite"'
complete --command yt-dlp --long-option allow-dynamic-mpd --description 'Process dynamic DASH manifests (default) (Alias: --no-ignore-dynamic-mpd)'
complete --command yt-dlp --long-option ignore-dynamic-mpd --description 'Do not process dynamic DASH manifests (Alias: --no-allow-dynamic-mpd)'
complete --command yt-dlp --long-option hls-split-discontinuity --description 'Split HLS playlists to different formats at discontinuities such as ad breaks'
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)'
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'
complete --command yt-dlp --long-option youtube-include-dash-manifest
complete --command yt-dlp --long-option youtube-skip-dash-manifest
complete --command yt-dlp --long-option youtube-include-hls-manifest
complete --command yt-dlp --long-option youtube-skip-hls-manifest
complete --command yt-dlp --arguments ":ytfavorites :ytrecommended :ytsubscriptions :ytwatchlater :ythistory"
.\" Man page generated from reStructuredText.
.
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "STREAMLINK" "1" "Nov 04, 2024" "7.0.0" "Streamlink"
.SH NAME
streamlink \- extracts streams from various services and pipes them into a video player of choice
.SH SYNOPSIS
.INDENT 0.0
.INDENT 3.5
.sp
.EX
streamlink [OPTIONS] <URL> [STREAM]
.EE
.UNINDENT
.UNINDENT
.SH EXAMPLES
.INDENT 0.0
.INDENT 3.5
.sp
.EX
streamlink \-\-loglevel debug youtu.be/VIDEO\-ID best
streamlink \-\-player mpv \-\-player\-args \(aq\-\-no\-border \-\-no\-keepaspect\-window\(aq twitch.tv/CHANNEL 1080p60
streamlink \-\-player\-external\-http \-\-player\-external\-http\-port 8888 URL STREAM
streamlink \-\-output /path/to/file \-\-http\-timeout 60 URL STREAM
streamlink \-\-stdout URL STREAM | ffmpeg \-i pipe:0 ...
streamlink \-\-http\-header \(aqAuthorization=OAuth TOKEN\(aq \-\-http\-header \(aqReferer=URL\(aq URL STREAM
streamlink \-\-hls\-live\-edge 5 \-\-stream\-segment\-threads 5 \(aqhls://https://host/playlist.m3u8\(aq best
streamlink \-\-twitch\-low\-latency \-p mpv \-a \(aq\-\-cache=yes \-\-demuxer\-max\-back\-bytes=2G\(aq twitch.tv/CHANNEL best
.EE
.UNINDENT
.UNINDENT
.SH OPTIONS
.SS Positional arguments
.INDENT 0.0
.TP
.B URL
A URL to attempt to extract streams from.
.sp
Usually, the protocol of http(s) URLs can be omitted (\fBhttps://\fP),
depending on the implementation of the plugin being used.
.sp
Alternatively, the URL can also be specified by using the \fI\%\-\-url\fP option.
.UNINDENT
.INDENT 0.0
.TP
.B STREAM
Stream to play.
.sp
Use \fBbest\fP or \fBworst\fP for selecting the highest or lowest available quality.
.sp
Fallback streams can be specified by using a comma\-separated list:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
\(dq720p,480p,best\(dq
.EE
.UNINDENT
.UNINDENT
.sp
If no stream is specified and \fI\%\-\-default\-stream\fP is not used, then a list of available streams will be printed.
.UNINDENT
.SS General options
.INDENT 0.0
.TP
.B \-h
.TP
.B \-\-help
Show this help message and exit.
.UNINDENT
.INDENT 0.0
.TP
.B \-V
.TP
.B \-\-version
Show version string and exit.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-version\-check
Run a version check and exit.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-auto\-version\-check {yes,true,1,on,no,false,0,off}
Enable or disable the automatic check for a new version of Streamlink.
.sp
Default is: \fB\(dqno\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-plugins
Print a list of all currently installed plugins.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-plugin\-dir DIRECTORY
Load plugins from this directory.
.sp
Can be set multiple times to load plugins from multiple directories.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-plugin\-dirs DIRECTORY
Load plugins from a list of comma\-separated directories. (deprecated)
.UNINDENT
.INDENT 0.0
.TP
.B \-\-can\-handle\-url URL
Check if Streamlink has a plugin that can handle the specified URL.
.sp
Status code is \fB0\fP on success, \fB1\fP on failure.
.sp
Useful for external scripting.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-can\-handle\-url\-no\-redirect URL
Same as \fI\%\-\-can\-handle\-url\fP, but without following redirects when looking up the URL.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-config FILENAME
Load options from this config file.
.sp
Can be repeated to load multiple files, in which case the options are
merged on top of each other where the last config has highest priority.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-no\-config
Disable loading any default or custom config files.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-locale LOCALE
Override the system\(aqs locale setting, for selecting the preferred subtitle and audio language.
.sp
The locale is formatted as \fB[language_code]_[country_code]\fP, e.g. \fBen_US\fP or \fBes_ES\fP\&.
.sp
Default is: \fBsystem locale\fP\&.
.UNINDENT
.SS Logging arguments
.INDENT 0.0
.TP
.B \-l LEVEL
.TP
.B \-\-loglevel LEVEL
Set the log message threshold.
.sp
Valid levels are, in order of increasing verbosity:
.sp
\fBnone\fP, \fBcritical\fP, \fBerror\fP, \fBwarning\fP, \fBinfo\fP, \fBdebug\fP, \fBtrace\fP, \fBall\fP
.sp
Default is: \fB\(dqinfo\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-logformat FORMAT
Set a custom logging format.
.sp
See the Python standard library\(aqs \fBlogging.Formatter\fP docs for more information about the logging format
and the available \fBLogRecord\fP attributes. Streamlink\(aqs formatter uses the curly brace style.
.sp
The default format depends on the chosen log level (may include the \fBasctime\fP attribute).
.sp
Default is: \fB\(dq[{name}][{levelname}] {message}\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-logdateformat DATEFORMAT
Set a custom logging date format.
.sp
This formats the \fBLogRecord\fP\(aqs \fBasctime\fP attribute via \fBstrftime()\fP\&.
.sp
The default date format depends on the chosen log level (may include fractions).
.sp
Default is: \fB\(dq%H:%M:%S\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-logfile FILE
Append log output to \fBFILE\fP instead of writing to stdout/stderr.
.sp
User prompts and download progress won\(aqt be written to \fBFILE\fP\&.
.sp
A value of \fB\-\fP (dash) will set the file name to an ISO8601\-like string
and will choose the following default log directories.
.sp
Windows:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
%TEMP%\estreamlink\elogs
.EE
.UNINDENT
.UNINDENT
.sp
macOS:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
${HOME}/Library/Logs/streamlink
.EE
.UNINDENT
.UNINDENT
.sp
Linux/BSD:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
${XDG_STATE_HOME:\-${HOME}/.local/state}/streamlink/logs
.EE
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-Q
.TP
.B \-\-quiet
Hide all log output.
.sp
Alias for \fI\%\-\-loglevel=none\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-j
.TP
.B \-\-json
Output JSON representations instead of the normal text output.
.sp
Useful for external scripting.
.UNINDENT
.SS Network arguments
.INDENT 0.0
.TP
.B \-\-interface INTERFACE
Set the network interface.
.UNINDENT
.INDENT 0.0
.TP
.B \-4
.TP
.B \-\-ipv4
Resolve address names to IPv4 only. This option overrides \fI\%\-\-ipv6\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-6
.TP
.B \-\-ipv6
Resolve address names to IPv6 only. This option overrides \fI\%\-\-ipv4\fP\&.
.UNINDENT
.SS Player options
.INDENT 0.0
.TP
.B \-p PATH
.TP
.B \-\-player PATH
Set the player executable that will be launched (unless a different output method was chosen).
.sp
Either set an absolute or relative path to the player executable, or just set the executable\(aqs name
if it can be resolved from the paths of the system\(aqs \fBPATH\fP environment variable.
.sp
In addition to setting the player executable path, custom player arguments can be set via \fI\%\-\-player\-args\fP\&.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
In the past, \fI\%\-\-player\fP allowed defining additional player arguments, which as a consequence required wrapping
player paths that contained spaces in quotation marks. This is unsupported since release \fB6.0.0\fP\&.
.UNINDENT
.UNINDENT
.sp
Default is: \fBVLC player, if available\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-a ARGUMENTS
.TP
.B \-\-player\-args ARGUMENTS
Set a string of custom \fI\%\-\-player\fP launch arguments that will be parsed and tokenized.
.sp
The value can contain formatting variables surrounded by curly braces, \fB{\fP and \fB}\fP\&.
Curly brace characters can be escaped by doubling, e.g. \fB{{\fP and \fB}}\fP\&.
.sp
Available formatting variables:
.INDENT 7.0
.TP
.B \fB{playerinput}\fP
This is the input argument that the \fI\%\-\-player\fP will receive. For standard input (stdin),
it is \fB\-\fP (dash), but it can also be a file path or URL, depending on the options used.
If unset, then the player input argument will be appended to the parsed player arguments list.
.TP
.B \fB{playertitleargs}\fP
The automatically generated player title arguments, if a supported \fI\%\-\-player\fP was found. See \fI\%\-\-title\fP for more.
If unset, automatically generated player title arguments will be prepended to the parsed player arguments list.
.UNINDENT
.sp
Example:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
streamlink \-p vlc \-a \(dq\-\-play\-and\-exit \-\-no\-one\-instance\(dq <url> [stream]
.EE
.UNINDENT
.UNINDENT
.sp
Default is: \fB\(dq\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-env KEY=VALUE
Add an additional environment variable to the spawned \fI\%\-\-player\fP process, in addition to the ones inherited from
the Streamlink/Python parent process. This allows setting player environment variables in config files.
.sp
Can be repeated to add multiple environment variables.
.UNINDENT
.INDENT 0.0
.TP
.B \-v
.TP
.B \-\-player\-verbose
Write the \fI\%\-\-player\fP\(aqs stdout/stderr output to Streamlink\(aqs stdout/stderr output.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-verbose\-player
Deprecated in favor of \fI\%\-\-player\-verbose\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-n
.TP
.B \-\-player\-fifo
Make the \fI\%\-\-player\fP read the stream through a named pipe instead of the stdin pipe.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-fifo
Deprecated in favor of \fI\%\-\-player\-fifo\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-http
Make the \fI\%\-\-player\fP read the stream through HTTP instead of the stdin pipe.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-continuous\-http
Make the \fI\%\-\-player\fP read the stream through HTTP, but unlike \fI\%\-\-player\-http\fP,
it will continuously try to open the stream if the player requests it.
.sp
This enables the handling of stream disconnects if the player is
capable of reconnecting to a HTTP stream. This is usually done by
setting the player to a \(dqrepeat mode\(dq.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-external\-http
Serve stream data through HTTP without opening the \fI\%\-\-player\fP\&. This is
useful to allow external devices like smartphones or streaming boxes to
watch streams they wouldn\(aqt be able to otherwise.
.sp
The default behavior is similar to the \fI\%\-\-player\-continuous\-http\fP option,
but no player program will be started, and the server will listen on all available
connections instead of just in the local (loopback) interface.
.sp
See \fI\%\-\-player\-external\-http\-interface\fP for choosing a specific network interface, and
see \fI\%\-\-player\-external\-http\-port\fP for choosing a non\-randomized port.
.sp
Optionally, the \fI\%\-\-player\-external\-http\-continuous\fP option allows for disabling
the continuous run\-mode, so that Streamlink will stop when the stream ends.
.sp
The URLs that can be used to access the stream will be printed to the
console, and the server can be interrupted using CTRL\-C.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-external\-http\-continuous {yes,true,1,on,no,false,0,off}
Set the run\-mode of \fI\%\-\-player\-external\-http\fP to continuous or non\-continuous.
.sp
In the continuous run\-mode, Streamlink will keep running after the stream has ended
and will wait for the next HTTP request being made unless it gets shut down via CTRL\-C.
.sp
If set to non\-continuous, Streamlink will stop once the stream has ended.
.sp
Default is: \fBtrue\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-external\-http\-interface INTERFACE
Set the network interface on which the HTTP server will be listening on.
If unset or set to \fB0.0.0.0\fP, all available interfaces will be bound.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-external\-http\-port PORT
Set the port of the external HTTP server if that mode is enabled.
Omit or set to \fB0\fP to use a random high ( >1024) port.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-passthrough TYPES
A comma\-delimited list of stream types to pass to the \fI\%\-\-player\fP as a URL to
let it handle the transport of the stream instead of Streamlink.
.sp
Stream types that can be converted into a playable URL are:
.sp
hls, http
.sp
Make sure the player can handle the stream type when using this.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-player\-no\-close
By default, Streamlink will close the \fI\%\-\-player\fP when the stream ends.
This is to avoid \(dqdead\(dq GUI players lingering after Streamlink has exited.
.sp
It does however have the side\-effect of sometimes closing a
player before it has played back all of its cached data.
.sp
This option will instead let the player decide when to exit.
.UNINDENT
.INDENT 0.0
.TP
.B \-t TITLE
.TP
.B \-\-title TITLE
Change the title of the \fI\%\-\-player\fP\(aqs window.
.sp
Please see the \(dq\fI\%Metadata variables\fP\(dq section of Streamlink\(aqs CLI documentation for all available metadata variables,
as well as the \(dq\fI\%Plugins\fP\(dq section for the list of metadata variables defined in each plugin.
.sp
Only the following players are supported:
.sp
mpv, potplayer, vlc
.sp
Example:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
streamlink \-p mpv \-\-title \(dq{author} \- {category} \- {title}\(dq <URL> [STREAM]
.EE
.UNINDENT
.UNINDENT
.UNINDENT
.SS File output options
.INDENT 0.0
.TP
.B \-O
.TP
.B \-\-stdout
Write stream data to \fBstdout\fP instead of playing it in the \fI\%\-\-player\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-o FILENAME
.TP
.B \-\-output FILENAME
Write stream data to \fBFILENAME\fP instead of playing it in the \fI\%\-\-player\fP\&.
If \fBFILENAME\fP is set to \fB\-\fP (dash), then the stream data will be written to \fBstdout\fP,
similar to the \fI\%\-\-stdout\fP argument.
.sp
Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
.sp
Unless \fI\%\-\-force\fP is set, Streamlink will ask for confirmation before writing if \fBFILENAME\fP already exists.
.sp
Please see the \(dq\fI\%Metadata variables\fP\(dq section of Streamlink\(aqs CLI documentation for all available metadata variables,
as well as the \(dq\fI\%Plugins\fP\(dq section for the list of metadata variables defined in each plugin.
.sp
Unsupported characters in substituted variables will be replaced with an underscore.
.sp
Example:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
streamlink \-\-output \(dq~/recordings/{author}/{category}/{id}\-{time:%Y%m%d%H%M%S}.ts\(dq <URL> [STREAM]
.EE
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-r FILENAME
.TP
.B \-\-record FILENAME
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\&.
If \fBFILENAME\fP is set to \fB\-\fP (dash), then the stream data will be written to \fBstdout\fP,
similar to the \fI\%\-\-stdout\fP argument, while still opening the player.
.sp
Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
.sp
Unless \fI\%\-\-force\fP is set, Streamlink will ask for confirmation before writing if \fBFILENAME\fP already exists.
.sp
Please see the \(dq\fI\%Metadata variables\fP\(dq section of Streamlink\(aqs CLI documentation for all available metadata variables,
as well as the \(dq\fI\%Plugins\fP\(dq section for the list of metadata variables defined in each plugin.
.sp
Unsupported characters in substituted variables will be replaced with an underscore.
.sp
Example:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
streamlink \-\-record \(dq~/recordings/{author}/{category}/{id}\-{time:%Y%m%d%H%M%S}.ts\(dq <URL> [STREAM]
.EE
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-R FILENAME
.TP
.B \-\-record\-and\-pipe FILENAME
Deprecated in favor of \fI\%\-\-stdout\fP \fI\%\-\-record=FILENAME\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-fs\-safe\-rules
The rules used to make formatting variables filesystem\-safe are chosen
automatically according to the type of system in use. This overrides
the automatic detection.
.sp
Intended for use when Streamlink is running on a UNIX\-like OS but writing
to Windows filesystems such as NTFS; USB devices using VFAT or exFAT; CIFS
shares that are enforcing Windows filename limitations, etc.
.sp
These characters are replaced with an underscore for the rules in use:
.INDENT 7.0
.IP \(bu 2
POSIX: \fB\ex00\-\ex1F /\fP
.IP \(bu 2
Windows: \fB\ex00\-\ex1F \ex7F \(dq * / : < > ? \e |\fP
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-f
.TP
.B \-\-force
When using \fI\%\-\-output\fP or \fI\%\-\-record\fP, always write to file even if it already exists (overwrite).
.UNINDENT
.INDENT 0.0
.TP
.B \-\-progress {yes,force,no}
When using \fI\%\-\-output\fP or \fI\%\-\-record\fP, show or hide the download progress bar, or force it if there\(aqs no terminal.
.sp
Default is: \fByes\fP\&.
.UNINDENT
.SS Stream options
.INDENT 0.0
.TP
.B \-\-url URL
A URL to attempt to extract streams from.
.sp
Usually, the protocol of http(s) URLs can be omitted (\fBhttps://\fP),
depending on the implementation of the plugin being used.
.sp
This is an alternative to setting the URL using a positional argument and can be useful if set in a config file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-default\-stream STREAM
Stream to play.
.sp
Use \fBbest\fP or \fBworst\fP for selecting the highest or lowest available quality.
.sp
Fallback streams can be specified by using a comma\-separated list:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
\(dq720p,480p,best\(dq
.EE
.UNINDENT
.UNINDENT
.sp
This is an alternative to setting the stream using a positional argument and can be useful if set in a config file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-url
If possible, translate the resolved stream to a URL and print it.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-retry\-streams DELAY
Retry fetching the list of available streams until streams are found
while waiting \fBDELAY\fP second(s) between each attempt. If unset, only one
attempt will be made to fetch the list of streams available.
.sp
The number of fetch retry attempts can be capped with \fI\%\-\-retry\-max\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-retry\-max COUNT
When using \fI\%\-\-retry\-streams\fP, stop retrying the fetch after \fBCOUNT\fP retry
attempt(s). Fetch will retry infinitely if \fBCOUNT\fP is zero or unset.
.sp
If \fI\%\-\-retry\-max\fP is set without setting \fI\%\-\-retry\-streams\fP, the delay between retries will default to 1 second.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-retry\-open ATTEMPTS
After a successful fetch, try \fBATTEMPTS\fP time(s) to open the stream until giving up.
.sp
Default is: \fB1\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-types TYPES
.TP
.B \-\-stream\-priority TYPES
A comma\-delimited list of stream types to allow.
.sp
The order will be used to separate streams when there are multiple
streams with the same name but different stream types. Any stream type
not listed will be omitted from the available streams list. An \fB*\fP (asterisk) can
be used as a wildcard to match any other type of stream, e.g. dash.
.sp
Default is: \fB\(dqhls,http,*\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-sorting\-excludes STREAMS
Fine\-tune the \fBbest\fP and \fBworst\fP stream name synonyms by excluding unwanted streams.
.sp
If all of the available streams get excluded, \fBbest\fP and \fBworst\fP will become
inaccessible and new special stream synonyms \fBbest\-unfiltered\fP and \fBworst\-unfiltered\fP
can be used as a fallback selection method.
.sp
The filter\-expression\(aqs format is:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
[operator]<value>
.EE
.UNINDENT
.UNINDENT
.sp
Valid operators are \fB>\fP, \fB>=\fP, \fB<\fP and \fB<=\fP\&. If no operator is specified then
equality is tested.
.sp
For example this will exclude streams ranked higher than \(dq480p\(dq:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
\-\-stream\-sorting\-excludes \(dq>480p\(dq
.EE
.UNINDENT
.UNINDENT
.sp
Multiple filters can be used by separating each expression with a comma.
.sp
For example this will exclude streams from two quality types:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
\-\-stream\-sorting\-excludes \(dq>480p,>medium\(dq
.EE
.UNINDENT
.UNINDENT
.UNINDENT
.SS Stream transport options
.INDENT 0.0
.TP
.B \-\-ringbuffer\-size SIZE
The maximum size of the ringbuffer.
.sp
Mebibytes or kibibytes (base 2) can be specified via the M or K suffix respectively.
.sp
The ringbuffer is used as a temporary storage between the stream and the player.
This allows Streamlink to download the stream faster than the player which reads the data from the ringbuffer.
.sp
The smaller the size of the ringbuffer, the higher the chance of the player buffering if the download speed
decreases, and the higher the size, the more data can be use as a storage to recover from volatile download speeds.
.sp
Most players have their own additional cache and will read the ringbuffer\(aqs content as soon as data is available.
If the player stops reading data while playback is paused, Streamlink will continue to download the stream in the
background as long as the ringbuffer doesn\(aqt get full.
.sp
Default is: \fB\(dq16M\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-segment\-attempts ATTEMPTS
The number of download attempts of each stream segment before giving up.
.sp
This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
.sp
Default is: \fB3\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-segment\-threads THREADS
The size of the thread pool used to download segments. Minimum value is \fB1\fP and maximum is \fB10\fP\&.
.sp
This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
.sp
Default is: \fB1\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-segment\-timeout TIMEOUT
The maximum time to wait for each segment to start downloading.
.sp
This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
.sp
Default is: \fB10.0\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-stream\-timeout TIMEOUT
The maximum time to wait for an unfiltered stream to continue outputting data.
.sp
This applies to all different kinds of stream types, such as DASH, HLS, HTTP, etc.
.sp
Default is: \fB60.0\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-mux\-subtitles
Automatically mux available subtitles into the output stream.
.sp
Needs to be supported by the used plugin.
.UNINDENT
.SS HLS options
.INDENT 0.0
.TP
.B \-\-hls\-live\-edge SEGMENTS
Number of segments from the live stream\(aqs current live position to begin streaming.
The size or length of each segment is determined by the streaming provider.
.sp
Lower values will decrease the latency, but will also increase the chance of buffering, as there is less time for
Streamlink to download segments and write their data to the output buffer. The number of parallel segment downloads
can be set with \fI\%\-\-stream\-segment\-threads\fP and the HLS playlist reload time to fetch and queue new segments can be
overridden with \fI\%\-\-hls\-playlist\-reload\-time\fP\&.
.sp
Default is: \fB3\fP\&.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
During live playback, the caching/buffering settings of the used player will add additional latency.
To adjust this, please refer to the player\(aqs own documentation for the required configuration.
Player parameters can be set via \fI\%\-\-player\-args\fP\&.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-segment\-stream\-data
Immediately write segment data into output buffer while downloading.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-playlist\-reload\-attempts ATTEMPTS
The maximum number of attempts when reloading the HLS playlist before giving up.
.sp
Default is: \fB3\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-playlist\-reload\-time TIME
Set a custom HLS playlist reload time value, either in seconds or by using one of the following keywords:
.INDENT 7.0
.IP \(bu 2
segment: The duration of the last segment in the current playlist
.IP \(bu 2
live\-edge: The sum of segment durations of the live edge value minus one
.IP \(bu 2
default: The playlist\(aqs target duration metadata
.UNINDENT
.sp
Default is: \fBdefault\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-segment\-queue\-threshold FACTOR
The multiplication factor of the HLS playlist\(aqs target duration after which the stream will be stopped early
if no new segments were queued after refreshing the playlist (multiple times). The target duration defines the
maximum duration a single segment can have, meaning new segments must be available during this time frame,
otherwise playback issues can occur.
.sp
The intention of this queue threshold is to be able to stop early when the end of a stream doesn\(aqt get
announced by the server, so Streamlink doesn\(aqt have to wait until a read\-timeout occurs. See \fI\%\-\-stream\-timeout\fP\&.
.sp
Set to \fB0\fP to disable.
.sp
Default is: \fB3\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-segment\-ignore\-names NAMES
A comma\-delimited list of segment names that will get filtered out.
.sp
Example: \fB\-\-hls\-segment\-ignore\-names 000,001,002\fP
.sp
This will ignore every segment that ends with 000.ts, 001.ts and 002.ts
.sp
Default is: \fBNone\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-segment\-key\-uri URI
Override the segment encryption key URIs for encrypted streams.
.sp
The value can be templated using the following variables, which will be
replaced with their respective part from the source segment URI:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
{url} {scheme} {netloc} {path} {query}
.EE
.UNINDENT
.UNINDENT
.sp
Examples:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
\-\-hls\-segment\-key\-uri \(dqhttps://example.com/hls/encryption_key\(dq
\-\-hls\-segment\-key\-uri \(dq{scheme}://1.2.3.4{path}{query}\(dq
\-\-hls\-segment\-key\-uri \(dq{scheme}://{netloc}/custom/path/to/key\(dq
.EE
.UNINDENT
.UNINDENT
.sp
Default is: \fBNone\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-audio\-select CODE
Select one or more specific audio sources by language code or name.
Can be set to \fB*\fP (asterisk) to include all audio sources.
.sp
Examples:
.INDENT 7.0
.INDENT 3.5
.sp
.EX
\-\-hls\-audio\-select \(dqEnglish,German\(dq
\-\-hls\-audio\-select \(dqen,de\(dq
\-\-hls\-audio\-select \(dq*\(dq
.EE
.UNINDENT
.UNINDENT
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
This is only useful in special circumstances where the regular
locale option fails, such as when multiple sources of the same language exist.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-start\-offset [[XX:]XX:]XX[.XX] | [XXh][XXm][XX[.XX]s]
The amount of time to skip from the beginning of the stream.
For live streams, this is a negative offset from the end of the stream (rewind).
.sp
Default is: \fB0\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-duration [[XX:]XX:]XX[.XX] | [XXh][XXm][XX[.XX]s]
Limit the playback duration, useful for watching segments of a stream.
The actual duration may be slightly longer, as it is rounded to the nearest HLS segment.
.sp
Default is: \fBunlimited\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hls\-live\-restart
Skip to the beginning of a live stream, or as far back as possible.
.UNINDENT
.SS DASH options
.INDENT 0.0
.TP
.B \-\-dash\-manifest\-reload\-attempts ATTEMPTS
The maximum number of attempts when reloading the DASH manifest before giving up.
.sp
Default is: \fB3\fP\&.
.UNINDENT
.SS FFmpeg options
.INDENT 0.0
.TP
.B \-\-ffmpeg\-ffmpeg FILENAME
Set the location of the FFmpeg executable if it can\(aqt be resolved
from the paths of the system\(aqs \fBPATH\fP environment variable.
.sp
FFmpeg is required to access or mux separate video and audio streams,
e.g. in DASH streams or HLS streams with multiple sources.
.sp
Example: \fB\-\-ffmpeg\-ffmpeg \(dq/usr/local/bin/ffmpeg\(dq\fP
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-no\-validation
Disable FFmpeg validation and version logging.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-verbose
Write FFmpeg\(aqs stderr output to Streamlink\(aqs stderr output.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-verbose\-path PATH
Write FFmpeg\(aqs stderr output to PATH.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-loglevel LOGLEVEL
Change FFmpeg\(aqs \fB\-loglevel\fP value to \fBLOGLEVEL\fP\&.
.sp
Unless \fI\%\-\-ffmpeg\-verbose\fP or \fI\%\-\-ffmpeg\-verbose\-path\fP is set, changing the log level won\(aqt have any effect.
.sp
Default is: \fB\(dqinfo\(dq\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-fout OUTFORMAT
Set the output format to \fBOUTFORMAT\fP\&. This only applies to streams which require muxing.
.sp
Default is: \fB\(dqmatroska\(dq\fP\&.
.sp
Example: \fB\-\-ffmpeg\-fout \(dqmpegts\(dq\fP
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-video\-transcode CODEC
Transcode the video to \fBCODEC\fP\&. This only applies to streams which require muxing.
.sp
Default is: \fB\(dqcopy\(dq\fP\&.
.sp
Example: \fB\-\-ffmpeg\-video\-transcode \(dqh264\(dq\fP
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-audio\-transcode CODEC
Transcode the audio to \fBCODEC\fP\&. This only applies to streams which require muxing.
.sp
Default is: \fB\(dqcopy\(dq\fP\&.
.sp
Example: \fB\-\-ffmpeg\-audio\-transcode \(dqaac\(dq\fP
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-copyts
Set the \fB\-copyts\fP FFmpeg option, so input timestamps won\(aqt be processed
and the initial start time offset value be kept.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ffmpeg\-start\-at\-zero
Enable the \fB\-start_at_zero\fP FFmpeg option when using \fI\%\-\-ffmpeg\-copyts\fP\&.
.UNINDENT
.SS HTTP options
.INDENT 0.0
.TP
.B \-\-http\-proxy HTTP_PROXY
An HTTP proxy to use for all HTTP and HTTPS requests, including WebSocket connections.
.sp
Example: \fB\-\-http\-proxy \(dqhttp://hostname:port/\(dq\fP
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-cookie KEY=VALUE
A cookie to add to each HTTP request.
.sp
Can be repeated to add multiple cookies.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-header KEY=VALUE
A header to add to each HTTP request.
.sp
Can be repeated to add multiple headers.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-query\-param KEY=VALUE
A query parameter to add to each HTTP request.
.sp
Can be repeated to add multiple query parameters.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-ignore\-env
Ignore HTTP settings set in the environment, such as environment variables (\fBHTTP_PROXY\fP, etc)
or \fB~/.netrc\fP authentication.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-no\-ssl\-verify
Don\(aqt attempt to verify TLS/SSL certificates.
.sp
Use with caution, as it has TLS/SSL security implications.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-disable\-dh
Disable Diffie Hellman key exchange.
.sp
Use with caution, as it has TLS/SSL security implications.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-ssl\-cert PEM_FILENAME
SSL certificate to use: a .pem file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-ssl\-cert\-crt\-key CRT_FILENAME KEY_FILENAME
SSL certificate to use: a .crt and a .key file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-http\-timeout TIMEOUT
Set the general timeout value used by all HTTP requests except the ones covered by other options.
.sp
Default is: \fB20.0\fP\&.
.UNINDENT
.SS Web browser options
.INDENT 0.0
.TP
.B \-\-webbrowser {yes,true,1,on,no,false,0,off}
Enable or disable support for Streamlink\(aqs webbrowser API.
.sp
Streamlink\(aqs webbrowser API allows plugins which implement it to launch a web browser and extract data from websites
which they otherwise couldn\(aqt do via the regular HTTP session in Python due to specific JavaScript restrictions.
.sp
The web browser is run isolated and in a clean environment without access to regular user data.
.sp
Streamlink currently only supports Chromium\-based web browsers using the Chrome Devtools Protocol (CDP).
This includes Chromium itself, Google Chrome, Microsoft Edge, Brave, Vivaldi, and others, but full support for
third party Chromium forks is not guaranteed. Please try Chromium or Google Chrome when encountering any issues.
.sp
Default is: \fBtrue\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-webbrowser\-executable PATH
Path to the web browser\(aqs executable.
.sp
By default, it is looked up automatically according to the rules of the used webbrowser API implementation.
This usually involves a list of known executable names and fallback paths on all supported operating systems.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-webbrowser\-timeout TIME
The maximum amount of time which the web browser can take to launch and execute.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-webbrowser\-cdp\-host HOST
Host for the web browser\(aqs inter\-process communication interface (CDP specific).
.sp
Default is: \fB127.0.0.1\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-webbrowser\-cdp\-port PORT
Port for the web browser\(aqs inter\-process communication interface (CDP specific).
.sp
Tries to find a free port by default.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-webbrowser\-cdp\-timeout TIME
The maximum amount of time for waiting on a single CDP command response.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-webbrowser\-headless {yes,true,1,on,no,false,0,off}
Whether to launch the web browser in headless mode or not.
When enabled, it stays completely hidden and doesn\(aqt require a desktop environment to run.
.sp
Please be aware that headless mode might be blocked by websites which implement bot detections.
.sp
Default is: \fBfalse\fP\&.
.UNINDENT
.SS Plugin options
.SS Bbciplayer
.INDENT 0.0
.TP
.B \-\-bbciplayer\-username USERNAME
The username used to register with bbc.co.uk.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-bbciplayer\-password PASSWORD
A bbc.co.uk account password to use with \fI\%\-\-bbciplayer\-username\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-bbciplayer\-hd
Prefer HD streams over local SD streams, some live programmes may not be broadcast in HD.
.UNINDENT
.SS Clubbingtv
.INDENT 0.0
.TP
.B \-\-clubbingtv\-username
The username used to register with Clubbing TV.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-clubbingtv\-password
A Clubbing TV account password to use with \fI\%\-\-clubbingtv\-username\fP\&.
.UNINDENT
.SS Nicolive
.INDENT 0.0
.TP
.B \-\-niconico\-email EMAIL
The email or phone number associated with your Niconico account
.UNINDENT
.INDENT 0.0
.TP
.B \-\-niconico\-password PASSWORD
The password of your Niconico account
.UNINDENT
.INDENT 0.0
.TP
.B \-\-niconico\-user\-session VALUE
Value of the user\-session token.
.sp
Can be used as an alternative to providing a password.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-niconico\-purge\-credentials
Purge cached Niconico credentials to initiate a new session and reauthenticate.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-niconico\-timeshift\-offset [[XX:]XX:]XX | [XXh][XXm][XXs]
Amount of time to skip from the beginning of a stream.
.sp
Default is: \fB0\fP\&.
.UNINDENT
.SS Openrectv
.INDENT 0.0
.TP
.B \-\-openrectv\-email EMAIL
The email associated with your openrectv account, required to access any openrectv stream.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-openrectv\-password PASSWORD
An openrectv account password to use with \fI\%\-\-openrectv\-email\fP\&.
.UNINDENT
.SS Pixiv
.INDENT 0.0
.TP
.B \-\-pixiv\-sessionid SESSIONID
The pixiv.net sessionid that\(aqs used in pixiv\(aqs PHPSESSID cookie.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-pixiv\-devicetoken DEVICETOKEN
The pixiv.net device token that\(aqs used in pixiv\(aqs device_token cookie.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-pixiv\-purge\-credentials
Purge cached Pixiv credentials to initiate a new session and reauthenticate.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-pixiv\-performer USER
Select a co\-host stream instead of the owner stream.
.UNINDENT
.SS Raiplay
.INDENT 0.0
.TP
.B \-\-raiplay\-email EMAIL
The email used to register with raiplay.it.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-raiplay\-password PASSWORD
A raiplay.it account password to use with \fI\%\-\-raiplay\-email\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-raiplay\-purge\-credentials
Purge cached RaiPlay credentials to initiate a new session and reauthenticate.
.UNINDENT
.SS Soop
.INDENT 0.0
.TP
.B \-\-soop\-username USERNAME
The username used to register with sooplive.co.kr.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-soop\-password PASSWORD
A sooplive.co.kr account password to use with \fI\%\-\-soop\-username\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-soop\-purge\-credentials
Purge cached Soop credentials to initiate a new session and reauthenticate.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-soop\-stream\-password STREAM_PASSWORD
The password for the stream.
.UNINDENT
.SS Steam
.INDENT 0.0
.TP
.B \-\-steam\-email EMAIL
A Steam account email address to access friends/private streams
.UNINDENT
.INDENT 0.0
.TP
.B \-\-steam\-password PASSWORD
A Steam account password to use with \fI\%\-\-steam\-email\fP\&.
.UNINDENT
.SS Streann
.INDENT 0.0
.TP
.B \-\-streann\-url URL
Source URL where the iframe is located, only required for direct URLs of ott.streann.com
.UNINDENT
.SS Tf1
.INDENT 0.0
.TP
.B \-\-tf1\-email EMAIL
The email address used to register with tf1.fr.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-tf1\-password PASSWORD
A tf1.fr account password to use with \-\-tf1\-username.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-tf1\-purge\-credentials
Purge cached tf1.fr credentials to initiate a new session and reauthenticate.
.UNINDENT
.SS Twitcasting
.INDENT 0.0
.TP
.B \-\-twitcasting\-password PASSWORD
Password for private Twitcasting streams.
.UNINDENT
.SS Twitch
.INDENT 0.0
.TP
.B \-\-twitch\-disable\-ads
Skip embedded advertisement segments at the beginning or during a stream.
Will cause these segments to be missing from the output.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-twitch\-low\-latency
Enables low latency streaming by prefetching HLS segments.
Sets \fI\%\-\-hls\-segment\-stream\-data\fP to true and \fI\%\-\-hls\-live\-edge\fP to 2, if it is higher.
Reducing \fI\%\-\-hls\-live\-edge\fP to \fB1\fP will result in the lowest latency possible, but will most likely cause buffering.
.sp
In order to achieve true low latency streaming during playback, the player\(aqs caching/buffering settings will
need to be adjusted and reduced to a value as low as possible, but still high enough to not cause any buffering.
This depends on the stream\(aqs bitrate and the quality of the connection to Twitch\(aqs servers. Please refer to the
player\(aqs own documentation for the required configuration. Player parameters can be set via \fI\%\-\-player\-args\fP\&.
.sp
\fBNOTE:\fP
.INDENT 7.0
.INDENT 3.5
Low latency streams have to be enabled by the broadcasters on Twitch themselves.
Regular streams can cause buffering issues with this option enabled due to the reduced \fI\%\-\-hls\-live\-edge\fP value.
.UNINDENT
.UNINDENT
.UNINDENT
.INDENT 0.0
.TP
.B \-\-twitch\-api\-header KEY=VALUE
A header to add to each Twitch API HTTP request.
.sp
Can be repeated to add multiple headers.
.sp
Useful for adding authentication data that can prevent ads. See the plugin\-specific documentation for more information.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-twitch\-access\-token\-param KEY=VALUE
A parameter to add to the API request for acquiring the streaming access token.
.sp
Can be repeated to add multiple parameters.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-twitch\-force\-client\-integrity
Don\(aqt attempt requesting the streaming access token without a client\-integrity token.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-twitch\-purge\-client\-integrity
Purge cached Twitch client\-integrity token and acquire a new one.
.UNINDENT
.SS Ustreamtv
.INDENT 0.0
.TP
.B \-\-ustream\-password PASSWORD
A password to access password protected UStream.tv channels.
.UNINDENT
.SS Ustvnow
.INDENT 0.0
.TP
.B \-\-ustvnow\-username USERNAME
Your USTV Now account username
.UNINDENT
.INDENT 0.0
.TP
.B \-\-ustvnow\-password PASSWORD
Your USTV Now account password
.UNINDENT
.SS Wwenetwork
.INDENT 0.0
.TP
.B \-\-wwenetwork\-email EMAIL
The email associated with your WWE Network account, required to access any WWE Network stream.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-wwenetwork\-password PASSWORD
A WWE Network account password to use with \fI\%\-\-wwenetwork\-email\fP\&.
.UNINDENT
.SS Yupptv
.INDENT 0.0
.TP
.B \-\-yupptv\-boxid BOXID
The yupptv.com boxid that\(aqs used in the BoxId cookie.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-yupptv\-yuppflixtoken YUPPFLIXTOKEN
The yupptv.com yuppflixtoken that\(aqs used in the YuppflixToken cookie.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-yupptv\-purge\-credentials
Purge cached YuppTV credentials to initiate a new session and reauthenticate.
.UNINDENT
.SS Zattoo
.INDENT 0.0
.TP
.B \-\-zattoo\-email EMAIL
The email associated with your zattoo account, required to access any zattoo stream.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-zattoo\-password PASSWORD
A zattoo account password to use with \fI\%\-\-zattoo\-email\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-zattoo\-purge\-credentials
Purge cached zattoo credentials to initiate a new session and reauthenticate.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-zattoo\-stream\-types TYPES
A comma\-delimited list of stream types which should be used.
.sp
The following types are allowed: dash, hls7
.sp
Default is: \fB\(dqdash\(dq\fP\&.
.UNINDENT
.SH BUGS
.sp
Please open a new issue on Streamlink\(aqs issue tracker on GitHub and use the appropriate issue forms:
.sp
\X'tty: link https://github.com/streamlink/streamlink/issues'\fI\%https://github.com/streamlink/streamlink/issues\fP\X'tty: link'
.SH SEE ALSO
.sp
For more detailed information about config files, plugin sideloading, streaming protocols, proxy support, metadata,
or plugin specific stuff, please see Streamlink\(aqs online CLI documentation here:
.sp
\X'tty: link https://streamlink.github.io/cli.html'\fI\%https://streamlink.github.io/cli.html\fP\X'tty: link'
.sp
The list of available plugins and their descriptions can be found here:
.sp
\X'tty: link https://streamlink.github.io/plugins.html'\fI\%https://streamlink.github.io/plugins.html\fP\X'tty: link'
.SH AUTHOR
Streamlink Contributors
.SH COPYRIGHT
2024, Streamlink
.\" Generated by docutils manpage writer.
.
This diff could not be displayed because it is too large.
#compdef streamlink
# AUTOMATICALLY GENERATED by `shtab`
_shtab_streamlink_cli_commands() {
local _commands=(
)
_describe 'streamlink commands' _commands
}
_shtab_streamlink_cli_options=(
{-h,--help}"[
Show this help message and exit.
]"
"(- : *)"{-V,--version}"[
Show version string and exit.
]"
"--version-check[
Run a version check and exit.
]"
"--auto-version-check[
Enable or disable the automatic check for a new version of Streamlink.
Default is \"no\".
]:auto_version_check:"
"--plugins[
Print a list of all currently installed plugins.
]"
"*--plugin-dir[
Load plugins from this directory.
Can be set multiple times to load plugins from multiple directories.
]:plugin_dirs:"
"*--plugin-dirs[
Load plugins from a list of comma-separated directories. (deprecated)
]:plugin_dirs:"
"--can-handle-url[
Check if Streamlink has a plugin that can handle the specified URL.
Status code is \`0\` on success, \`1\` on failure.
Useful for external scripting.
]:can_handle_url:"
"--can-handle-url-no-redirect[
Same as --can-handle-url, but without following redirects when looking up the URL.
]:can_handle_url_no_redirect:"
"*--config[
Load options from this config file.
Can be repeated to load multiple files, in which case the options are
merged on top of each other where the last config has highest priority.
]:config:"
"--no-config[
Disable loading any default or custom config files.
]"
"--locale[
Override the system\'s locale setting, for selecting the preferred subtitle and audio language.
The locale is formatted as \`\[language_code\]_\[country_code\]\`, e.g. \`en_US\` or \`es_ES\`.
Default is system locale.
]:locale:"
{-l,--loglevel}"[
Set the log message threshold.
Valid levels are, in order of increasing verbosity\:
\`none\`, \`critical\`, \`error\`, \`warning\`, \`info\`, \`debug\`, \`trace\`, \`all\`
Default is \"info\".
]:loglevel:(none critical error warning info debug trace all)"
"--logformat[
Set a custom logging format.
See the Python standard library\'s \`logging.Formatter\` docs for more information about the logging format
and the available \`LogRecord\` attributes. Streamlink\'s formatter uses the curly brace style.
The default format depends on the chosen log level (may include the \`asctime\` attribute).
Default is \"\[\{name\}\]\[\{levelname\}\] \{message\}\".
]:logformat:"
"--logdateformat[
Set a custom logging date format.
This formats the \`LogRecord\`\'s \`asctime\` attribute via \`strftime()\`.
The default date format depends on the chosen log level (may include fractions).
Default is \"\%H\:\%M\:\%S\".
]:logdateformat:"
"--logfile[
Append log output to \`FILE\` instead of writing to stdout\/stderr.
User prompts and download progress won\'t be written to \`FILE\`.
A value of \`-\` (dash) will set the file name to an ISO8601-like string
and will choose the following default log directories.
Windows\:
\%TEMP\%\\streamlink\\logs
macOS\:
\$\{HOME\}\/Library\/Logs\/streamlink
Linux\/BSD\:
\$\{XDG_STATE_HOME\:-\$\{HOME\}\/.local\/state\}\/streamlink\/logs
]:logfile:"
{-Q,--quiet}"[
Hide all log output.
Alias for --loglevel\=none.
]"
{-j,--json}"[
Output JSON representations instead of the normal text output.
Useful for external scripting.
]"
"--interface[
Set the network interface.
]:interface:"
{-4,--ipv4}"[
Resolve address names to IPv4 only. This option overrides --ipv6.
]"
{-6,--ipv6}"[
Resolve address names to IPv6 only. This option overrides --ipv4.
]"
{-p,--player}"[
Set the player executable that will be launched (unless a different output method was chosen).
Either set an absolute or relative path to the player executable, or just set the executable\'s name
if it can be resolved from the paths of the system\'s \`PATH\` environment variable.
In addition to setting the player executable path, custom player arguments can be set via --player-args.
Note\: In the past, --player allowed defining additional player arguments, which as a consequence required wrapping
player paths that contained spaces in quotation marks. This is unsupported since release \`6.0.0\`.
Default is VLC player, if available.
]:player:"
{-a,--player-args}"[
Set a string of custom --player launch arguments that will be parsed and tokenized.
The value can contain formatting variables surrounded by curly braces, \`\{\` and \`\}\`.
Curly brace characters can be escaped by doubling, e.g. \`\{\{\` and \`\}\}\`.
Available formatting variables\:
\`\{playerinput\}\`
This is the input argument that the --player will receive. For standard input (stdin),
it is \`-\` (dash), but it can also be a file path or URL, depending on the options used.
If unset, then the player input argument will be appended to the parsed player arguments list.
\`\{playertitleargs\}\`
The automatically generated player title arguments, if a supported --player was found. See --title for more.
If unset, automatically generated player title arguments will be prepended to the parsed player arguments list.
Example\:
streamlink -p vlc -a \"--play-and-exit --no-one-instance\" \<url\> \[stream\]
Default is \"\".
]:player_args:"
"*--player-env[
Add an additional environment variable to the spawned --player process, in addition to the ones inherited from
the Streamlink\/Python parent process. This allows setting player environment variables in config files.
Can be repeated to add multiple environment variables.
]:player_env:"
{-v,--player-verbose}"[
Write the --player\'s stdout\/stderr output to Streamlink\'s stdout\/stderr output.
]"
"--verbose-player[
Deprecated in favor of --player-verbose.
]"
{-n,--player-fifo}"[
Make the --player read the stream through a named pipe instead of the stdin pipe.
]"
"--fifo[
Deprecated in favor of --player-fifo.
]"
"--player-http[
Make the --player read the stream through HTTP instead of the stdin pipe.
]"
"--player-continuous-http[
Make the --player read the stream through HTTP, but unlike --player-http,
it will continuously try to open the stream if the player requests it.
This enables the handling of stream disconnects if the player is
capable of reconnecting to a HTTP stream. This is usually done by
setting the player to a \"repeat mode\".
]"
"--player-external-http[
Serve stream data through HTTP without opening the --player. This is
useful to allow external devices like smartphones or streaming boxes to
watch streams they wouldn\'t be able to otherwise.
The default behavior is similar to the --player-continuous-http option,
but no player program will be started, and the server will listen on all available
connections instead of just in the local (loopback) interface.
See --player-external-http-interface for choosing a specific network interface, and
see --player-external-http-port for choosing a non-randomized port.
Optionally, the --player-external-http-continuous option allows for disabling
the continuous run-mode, so that Streamlink will stop when the stream ends.
The URLs that can be used to access the stream will be printed to the
console, and the server can be interrupted using CTRL-C.
]"
"--player-external-http-continuous[
Set the run-mode of --player-external-http to continuous or non-continuous.
In the continuous run-mode, Streamlink will keep running after the stream has ended
and will wait for the next HTTP request being made unless it gets shut down via CTRL-C.
If set to non-continuous, Streamlink will stop once the stream has ended.
Default is true.
]:player_external_http_continuous:"
"--player-external-http-interface[
Set the network interface on which the HTTP server will be listening on.
If unset or set to \`0.0.0.0\`, all available interfaces will be bound.
]:player_external_http_interface:"
"--player-external-http-port[
Set the port of the external HTTP server if that mode is enabled.
Omit or set to \`0\` to use a random high ( \>1024) port.
]:player_external_http_port:"
"--player-passthrough[
A comma-delimited list of stream types to pass to the --player as a URL to
let it handle the transport of the stream instead of Streamlink.
Stream types that can be converted into a playable URL are\:
hls, http
Make sure the player can handle the stream type when using this.
]:player_passthrough:"
"--player-no-close[
By default, Streamlink will close the --player when the stream ends.
This is to avoid \"dead\" GUI players lingering after Streamlink has exited.
It does however have the side-effect of sometimes closing a
player before it has played back all of its cached data.
This option will instead let the player decide when to exit.
]"
{-t,--title}"[
Change the title of the --player\'s window.
Please see the \"Metadata variables\" section of Streamlink\'s CLI documentation for all available metadata variables,
as well as the \"Plugins\" section for the list of metadata variables defined in each plugin.
Only the following players are supported\:
mpv, potplayer, vlc
Example\:
streamlink -p mpv --title \"\{author\} - \{category\} - \{title\}\" \<URL\> \[STREAM\]
]:title:"
{-O,--stdout}"[
Write stream data to \`stdout\` instead of playing it in the --player.
]"
{-o,--output}"[
Write stream data to \`FILENAME\` instead of playing it in the --player.
If \`FILENAME\` is set to \`-\` (dash), then the stream data will be written to \`stdout\`,
similar to the --stdout argument.
Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
Unless --force is set, Streamlink will ask for confirmation before writing if \`FILENAME\` already exists.
Please see the \"Metadata variables\" section of Streamlink\'s CLI documentation for all available metadata variables,
as well as the \"Plugins\" section for the list of metadata variables defined in each plugin.
Unsupported characters in substituted variables will be replaced with an underscore.
Example\:
streamlink --output \"\~\/recordings\/\{author\}\/\{category\}\/\{id\}-\{time\:\%Y\%m\%d\%H\%M\%S\}.ts\" \<URL\> \[STREAM\]
]:output:"
{-r,--record}"[
Write stream data to \`FILENAME\` while at the same time allowing playback in the --player or writing it to --stdout.
If \`FILENAME\` is set to \`-\` (dash), then the stream data will be written to \`stdout\`,
similar to the --stdout argument, while still opening the player.
Directories and subdirectories will be created if they do not exist, if filesystem permissions allow.
Unless --force is set, Streamlink will ask for confirmation before writing if \`FILENAME\` already exists.
Please see the \"Metadata variables\" section of Streamlink\'s CLI documentation for all available metadata variables,
as well as the \"Plugins\" section for the list of metadata variables defined in each plugin.
Unsupported characters in substituted variables will be replaced with an underscore.
Example\:
streamlink --record \"\~\/recordings\/\{author\}\/\{category\}\/\{id\}-\{time\:\%Y\%m\%d\%H\%M\%S\}.ts\" \<URL\> \[STREAM\]
]:record:"
{-R,--record-and-pipe}"[
Deprecated in favor of --stdout --record\=FILENAME.
]:record_and_pipe:"
"--fs-safe-rules[
The rules used to make formatting variables filesystem-safe are chosen
automatically according to the type of system in use. This overrides
the automatic detection.
Intended for use when Streamlink is running on a UNIX-like OS but writing
to Windows filesystems such as NTFS\; USB devices using VFAT or exFAT\; CIFS
shares that are enforcing Windows filename limitations, etc.
These characters are replaced with an underscore for the rules in use\:
- POSIX\: \`\\x00-\\x1F \/\`
- Windows\: \`\\x00-\\x1F \\x7F \" \* \/ \: \< \> \? \\ \|\`
]:fs_safe_rules:(POSIX Windows)"
{-f,--force}"[
When using --output or --record, always write to file even if it already exists (overwrite).
]"
"--progress[
When using --output or --record, show or hide the download progress bar, or force it if there\'s no terminal.
Default is yes.
]:progress:(yes force no)"
"--url[
A URL to attempt to extract streams from.
Usually, the protocol of http(s) URLs can be omitted (\`https\:\/\/\`),
depending on the implementation of the plugin being used.
This is an alternative to setting the URL using a positional argument and can be useful if set in a config file.
]:url_param:"
"--default-stream[
Stream to play.
Use \`best\` or \`worst\` for selecting the highest or lowest available quality.
Fallback streams can be specified by using a comma-separated list\:
\"720p,480p,best\"
This is an alternative to setting the stream using a positional argument and can be useful if set in a config file.
]:default_stream:"
"--stream-url[
If possible, translate the resolved stream to a URL and print it.
]"
"--retry-streams[
Retry fetching the list of available streams until streams are found
while waiting \`DELAY\` second(s) between each attempt. If unset, only one
attempt will be made to fetch the list of streams available.
The number of fetch retry attempts can be capped with --retry-max.
]:retry_streams:"
"--retry-max[
When using --retry-streams, stop retrying the fetch after \`COUNT\` retry
attempt(s). Fetch will retry infinitely if \`COUNT\` is zero or unset.
If --retry-max is set without setting --retry-streams, the delay between retries will default to 1 second.
]:retry_max:"
"--retry-open[
After a successful fetch, try \`ATTEMPTS\` time(s) to open the stream until giving up.
Default is 1.
]:retry_open:"
{--stream-types,--stream-priority}"[
A comma-delimited list of stream types to allow.
The order will be used to separate streams when there are multiple
streams with the same name but different stream types. Any stream type
not listed will be omitted from the available streams list. An \`\*\` (asterisk) can
be used as a wildcard to match any other type of stream, e.g. dash.
Default is \"hls,http,\*\".
]:stream_types:"
"--stream-sorting-excludes[
Fine-tune the \`best\` and \`worst\` stream name synonyms by excluding unwanted streams.
If all of the available streams get excluded, \`best\` and \`worst\` will become
inaccessible and new special stream synonyms \`best-unfiltered\` and \`worst-unfiltered\`
can be used as a fallback selection method.
The filter-expression\'s format is\:
\[operator\]\<value\>
Valid operators are \`\>\`, \`\>\=\`, \`\<\` and \`\<\=\`. If no operator is specified then
equality is tested.
For example this will exclude streams ranked higher than \"480p\"\:
--stream-sorting-excludes \"\>480p\"
Multiple filters can be used by separating each expression with a comma.
For example this will exclude streams from two quality types\:
--stream-sorting-excludes \"\>480p,\>medium\"
]:stream_sorting_excludes:"
"--ringbuffer-size[
The maximum size of the ringbuffer.
Mebibytes or kibibytes (base 2) can be specified via the M or K suffix respectively.
The ringbuffer is used as a temporary storage between the stream and the player.
This allows Streamlink to download the stream faster than the player which reads the data from the ringbuffer.
The smaller the size of the ringbuffer, the higher the chance of the player buffering if the download speed
decreases, and the higher the size, the more data can be use as a storage to recover from volatile download speeds.
Most players have their own additional cache and will read the ringbuffer\'s content as soon as data is available.
If the player stops reading data while playback is paused, Streamlink will continue to download the stream in the
background as long as the ringbuffer doesn\'t get full.
Default is \"16M\".
]:ringbuffer_size:"
"--stream-segment-attempts[
The number of download attempts of each stream segment before giving up.
This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
Default is 3.
]:stream_segment_attempts:"
"--stream-segment-threads[
The size of the thread pool used to download segments. Minimum value is \`1\` and maximum is \`10\`.
This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
Default is 1.
]:stream_segment_threads:"
"--stream-segment-timeout[
The maximum time to wait for each segment to start downloading.
This applies to all different kinds of segmented stream types, such as DASH, HLS, etc.
Default is 10.0.
]:stream_segment_timeout:"
"--stream-timeout[
The maximum time to wait for an unfiltered stream to continue outputting data.
This applies to all different kinds of stream types, such as DASH, HLS, HTTP, etc.
Default is 60.0.
]:stream_timeout:"
"--mux-subtitles[
Automatically mux available subtitles into the output stream.
Needs to be supported by the used plugin.
]"
"--hls-live-edge[
Number of segments from the live stream\'s current live position to begin streaming.
The size or length of each segment is determined by the streaming provider.
Lower values will decrease the latency, but will also increase the chance of buffering, as there is less time for
Streamlink to download segments and write their data to the output buffer. The number of parallel segment downloads
can be set with --stream-segment-threads and the HLS playlist reload time to fetch and queue new segments can be
overridden with --hls-playlist-reload-time.
Default is 3.
Note\: During live playback, the caching\/buffering settings of the used player will add additional latency.
To adjust this, please refer to the player\'s own documentation for the required configuration.
Player parameters can be set via --player-args.
]:hls_live_edge:"
"--hls-segment-stream-data[
Immediately write segment data into output buffer while downloading.
]"
"--hls-playlist-reload-attempts[
The maximum number of attempts when reloading the HLS playlist before giving up.
Default is 3.
]:hls_playlist_reload_attempts:"
"--hls-playlist-reload-time[
Set a custom HLS playlist reload time value, either in seconds or by using one of the following keywords\:
- segment\: The duration of the last segment in the current playlist
- live-edge\: The sum of segment durations of the live edge value minus one
- default\: The playlist\'s target duration metadata
Default is default.
]:hls_playlist_reload_time:"
"--hls-segment-queue-threshold[
The multiplication factor of the HLS playlist\'s target duration after which the stream will be stopped early
if no new segments were queued after refreshing the playlist (multiple times). The target duration defines the
maximum duration a single segment can have, meaning new segments must be available during this time frame,
otherwise playback issues can occur.
The intention of this queue threshold is to be able to stop early when the end of a stream doesn\'t get
announced by the server, so Streamlink doesn\'t have to wait until a read-timeout occurs. See --stream-timeout.
Set to \`\`0\`\` to disable.
Default is 3.
]:hls_segment_queue_threshold:"
"--hls-segment-ignore-names[
A comma-delimited list of segment names that will get filtered out.
Example\: --hls-segment-ignore-names 000,001,002
This will ignore every segment that ends with 000.ts, 001.ts and 002.ts
Default is None.
]:hls_segment_ignore_names:"
"--hls-segment-key-uri[
Override the segment encryption key URIs for encrypted streams.
The value can be templated using the following variables, which will be
replaced with their respective part from the source segment URI\:
\{url\} \{scheme\} \{netloc\} \{path\} \{query\}
Examples\:
--hls-segment-key-uri \"https\:\/\/example.com\/hls\/encryption_key\"
--hls-segment-key-uri \"\{scheme\}\:\/\/1.2.3.4\{path\}\{query\}\"
--hls-segment-key-uri \"\{scheme\}\:\/\/\{netloc\}\/custom\/path\/to\/key\"
Default is None.
]:hls_segment_key_uri:"
"--hls-audio-select[
Select one or more specific audio sources by language code or name.
Can be set to \`\*\` (asterisk) to include all audio sources.
Examples\:
--hls-audio-select \"English,German\"
--hls-audio-select \"en,de\"
--hls-audio-select \"\*\"
Note\: This is only useful in special circumstances where the regular
locale option fails, such as when multiple sources of the same language exist.
]:hls_audio_select:"
"--hls-start-offset[
The amount of time to skip from the beginning of the stream.
For live streams, this is a negative offset from the end of the stream (rewind).
Default is 0.
]:hls_start_offset:"
"--hls-duration[
Limit the playback duration, useful for watching segments of a stream.
The actual duration may be slightly longer, as it is rounded to the nearest HLS segment.
Default is unlimited.
]:hls_duration:"
"--hls-live-restart[
Skip to the beginning of a live stream, or as far back as possible.
]"
"--dash-manifest-reload-attempts[
The maximum number of attempts when reloading the DASH manifest before giving up.
Default is 3.
]:dash_manifest_reload_attempts:"
"--ffmpeg-ffmpeg[
Set the location of the FFmpeg executable if it can\'t be resolved
from the paths of the system\'s \`PATH\` environment variable.
FFmpeg is required to access or mux separate video and audio streams,
e.g. in DASH streams or HLS streams with multiple sources.
Example\: --ffmpeg-ffmpeg \"\/usr\/local\/bin\/ffmpeg\"
]:ffmpeg_ffmpeg:"
"--ffmpeg-no-validation[
Disable FFmpeg validation and version logging.
]"
"--ffmpeg-verbose[
Write FFmpeg\'s stderr output to Streamlink\'s stderr output.
]"
"--ffmpeg-verbose-path[
Write FFmpeg\'s stderr output to PATH.
]:ffmpeg_verbose_path:"
"--ffmpeg-loglevel[
Change FFmpeg\'s \`-loglevel\` value to \`LOGLEVEL\`.
Unless --ffmpeg-verbose or --ffmpeg-verbose-path is set, changing the log level won\'t have any effect.
Default is \"info\".
]:ffmpeg_loglevel:"
"--ffmpeg-fout[
Set the output format to \`OUTFORMAT\`. This only applies to streams which require muxing.
Default is \"matroska\".
Example\: --ffmpeg-fout \"mpegts\"
]:ffmpeg_fout:"
"--ffmpeg-video-transcode[
Transcode the video to \`CODEC\`. This only applies to streams which require muxing.
Default is \"copy\".
Example\: --ffmpeg-video-transcode \"h264\"
]:ffmpeg_video_transcode:"
"--ffmpeg-audio-transcode[
Transcode the audio to \`CODEC\`. This only applies to streams which require muxing.
Default is \"copy\".
Example\: --ffmpeg-audio-transcode \"aac\"
]:ffmpeg_audio_transcode:"
"--ffmpeg-copyts[
Set the \`-copyts\` FFmpeg option, so input timestamps won\'t be processed
and the initial start time offset value be kept.
]"
"--ffmpeg-start-at-zero[
Enable the \`-start_at_zero\` FFmpeg option when using --ffmpeg-copyts.
]"
"--http-proxy[
An HTTP proxy to use for all HTTP and HTTPS requests, including WebSocket connections.
Example\: --http-proxy \"http\:\/\/hostname\:port\/\"
]:http_proxy:"
"*--http-cookie[
A cookie to add to each HTTP request.
Can be repeated to add multiple cookies.
]:http_cookie:"
"*--http-header[
A header to add to each HTTP request.
Can be repeated to add multiple headers.
]:http_header:"
"*--http-query-param[
A query parameter to add to each HTTP request.
Can be repeated to add multiple query parameters.
]:http_query_param:"
"--http-ignore-env[
Ignore HTTP settings set in the environment, such as environment variables (\`HTTP_PROXY\`, etc)
or \`\~\/.netrc\` authentication.
]"
"--http-no-ssl-verify[
Don\'t attempt to verify TLS\/SSL certificates.
Use with caution, as it has TLS\/SSL security implications.
]"
"--http-disable-dh[
Disable Diffie Hellman key exchange.
Use with caution, as it has TLS\/SSL security implications.
]"
"--http-ssl-cert[
SSL certificate to use\: a .pem file.
]:http_ssl_cert:"
"--http-ssl-cert-crt-key[
SSL certificate to use\: a .crt and a .key file.
]:http_ssl_cert_crt_key:"
"--http-timeout[
Set the general timeout value used by all HTTP requests except the ones covered by other options.
Default is 20.0.
]:http_timeout:"
"--webbrowser[
Enable or disable support for Streamlink\'s webbrowser API.
Streamlink\'s webbrowser API allows plugins which implement it to launch a web browser and extract data from websites
which they otherwise couldn\'t do via the regular HTTP session in Python due to specific JavaScript restrictions.
The web browser is run isolated and in a clean environment without access to regular user data.
Streamlink currently only supports Chromium-based web browsers using the Chrome Devtools Protocol (CDP).
This includes Chromium itself, Google Chrome, Microsoft Edge, Brave, Vivaldi, and others, but full support for
third party Chromium forks is not guaranteed. Please try Chromium or Google Chrome when encountering any issues.
Default is true.
]:webbrowser:"
"--webbrowser-executable[
Path to the web browser\'s executable.
By default, it is looked up automatically according to the rules of the used webbrowser API implementation.
This usually involves a list of known executable names and fallback paths on all supported operating systems.
]:webbrowser_executable:"
"--webbrowser-timeout[
The maximum amount of time which the web browser can take to launch and execute.
]:webbrowser_timeout:"
"--webbrowser-cdp-host[
Host for the web browser\'s inter-process communication interface (CDP specific).
Default is 127.0.0.1.
]:webbrowser_cdp_host:"
"--webbrowser-cdp-port[
Port for the web browser\'s inter-process communication interface (CDP specific).
Tries to find a free port by default.
]:webbrowser_cdp_port:"
"--webbrowser-cdp-timeout[
The maximum amount of time for waiting on a single CDP command response.
]:webbrowser_cdp_timeout:"
"--webbrowser-headless[
Whether to launch the web browser in headless mode or not.
When enabled, it stays completely hidden and doesn\'t require a desktop environment to run.
Please be aware that headless mode might be blocked by websites which implement bot detections.
Default is false.
]:webbrowser_headless:"
"--bbciplayer-username[The username used to register with bbc.co.uk.]:bbciplayer_username:"
"--bbciplayer-password[A bbc.co.uk account password to use with --bbciplayer-username.]:bbciplayer_password:"
"--bbciplayer-hd[Prefer HD streams over local SD streams, some live programmes may not be broadcast in HD.]"
"--clubbingtv-username[The username used to register with Clubbing TV.]:clubbingtv_username:"
"--clubbingtv-password[A Clubbing TV account password to use with --clubbingtv-username.]:clubbingtv_password:"
"--niconico-email[The email or phone number associated with your Niconico account]:niconico_email:"
"--niconico-password[The password of your Niconico account]:niconico_password:"
"--niconico-user-session[
Value of the user-session token.
Can be used as an alternative to providing a password.
]:niconico_user_session:"
"--niconico-purge-credentials[Purge cached Niconico credentials to initiate a new session and reauthenticate.]"
"--niconico-timeshift-offset[
Amount of time to skip from the beginning of a stream.
Default is 0.
]:niconico_timeshift_offset:"
"--openrectv-email[The email associated with your openrectv account, required to access any openrectv stream.]:openrectv_email:"
"--openrectv-password[An openrectv account password to use with --openrectv-email.]:openrectv_password:"
"--pixiv-sessionid[The pixiv.net sessionid that\'s used in pixiv\'s PHPSESSID cookie.]:pixiv_sessionid:"
"--pixiv-devicetoken[The pixiv.net device token that\'s used in pixiv\'s device_token cookie.]:pixiv_devicetoken:"
"--pixiv-purge-credentials[Purge cached Pixiv credentials to initiate a new session and reauthenticate.]"
"--pixiv-performer[Select a co-host stream instead of the owner stream.]:pixiv_performer:"
"--raiplay-email[The email used to register with raiplay.it.]:raiplay_email:"
"--raiplay-password[A raiplay.it account password to use with --raiplay-email.]:raiplay_password:"
"--raiplay-purge-credentials[Purge cached RaiPlay credentials to initiate a new session and reauthenticate.]"
"--soop-username[The username used to register with sooplive.co.kr.]:soop_username:"
"--soop-password[A sooplive.co.kr account password to use with --soop-username.]:soop_password:"
"--soop-purge-credentials[Purge cached Soop credentials to initiate a new session and reauthenticate.]"
"--soop-stream-password[The password for the stream.]:soop_stream_password:"
"--steam-email[A Steam account email address to access friends\/private streams]:steam_email:"
"--steam-password[A Steam account password to use with --steam-email.]:steam_password:"
"--streann-url[Source URL where the iframe is located, only required for direct URLs of ott.streann.com]:streann_url:"
"--tf1-email[The email address used to register with tf1.fr.]:tf1_email:"
"--tf1-password[A tf1.fr account password to use with --tf1-username.]:tf1_password:"
"--tf1-purge-credentials[Purge cached tf1.fr credentials to initiate a new session and reauthenticate.]"
"--twitcasting-password[Password for private Twitcasting streams.]:twitcasting_password:"
"--twitch-disable-ads[
Skip embedded advertisement segments at the beginning or during a stream.
Will cause these segments to be missing from the output.
]"
"--twitch-low-latency[
Enables low latency streaming by prefetching HLS segments.
Sets --hls-segment-stream-data to true and --hls-live-edge to 2, if it is higher.
Reducing --hls-live-edge to \`1\` will result in the lowest latency possible, but will most likely cause buffering.
In order to achieve true low latency streaming during playback, the player\'s caching\/buffering settings will
need to be adjusted and reduced to a value as low as possible, but still high enough to not cause any buffering.
This depends on the stream\'s bitrate and the quality of the connection to Twitch\'s servers. Please refer to the
player\'s own documentation for the required configuration. Player parameters can be set via --player-args.
Note\: Low latency streams have to be enabled by the broadcasters on Twitch themselves.
Regular streams can cause buffering issues with this option enabled due to the reduced --hls-live-edge value.
]"
"*--twitch-api-header[
A header to add to each Twitch API HTTP request.
Can be repeated to add multiple headers.
Useful for adding authentication data that can prevent ads. See the plugin-specific documentation for more information.
]:twitch_api_header:"
"*--twitch-access-token-param[
A parameter to add to the API request for acquiring the streaming access token.
Can be repeated to add multiple parameters.
]:twitch_access_token_param:"
"--twitch-force-client-integrity[Don\'t attempt requesting the streaming access token without a client-integrity token.]"
"--twitch-purge-client-integrity[Purge cached Twitch client-integrity token and acquire a new one.]"
"--ustream-password[A password to access password protected UStream.tv channels.]:ustream_password:"
"--ustvnow-username[Your USTV Now account username]:ustvnow_username:"
"--ustvnow-password[Your USTV Now account password]:ustvnow_password:"
"--wwenetwork-email[The email associated with your WWE Network account, required to access any WWE Network stream.]:wwenetwork_email:"
"--wwenetwork-password[A WWE Network account password to use with --wwenetwork-email.]:wwenetwork_password:"
"--yupptv-boxid[The yupptv.com boxid that\'s used in the BoxId cookie.]:yupptv_boxid:"
"--yupptv-yuppflixtoken[The yupptv.com yuppflixtoken that\'s used in the YuppflixToken cookie.]:yupptv_yuppflixtoken:"
"--yupptv-purge-credentials[Purge cached YuppTV credentials to initiate a new session and reauthenticate.]"
"--zattoo-email[The email associated with your zattoo account, required to access any zattoo stream.]:zattoo_email:"
"--zattoo-password[A zattoo account password to use with --zattoo-email.]:zattoo_password:"
"--zattoo-purge-credentials[Purge cached zattoo credentials to initiate a new session and reauthenticate.]"
"--zattoo-stream-types[
A comma-delimited list of stream types which should be used.
The following types are allowed\: dash, hls7
Default is \"dash\".
]:zattoo_stream_types:"
":A URL to attempt to extract streams from.:"
":Stream to play.:"
)
_shtab_streamlink_cli() {
local context state line curcontext="$curcontext" one_or_more='(-)*' remainder='(*)'
if ((${_shtab_streamlink_cli_options[(I)${(q)one_or_more}*]} + ${_shtab_streamlink_cli_options[(I)${(q)remainder}*]} == 0)); then # noqa: E501
_shtab_streamlink_cli_options+=(': :_shtab_streamlink_cli_commands' '*::: :->streamlink')
fi
_arguments -C -s $_shtab_streamlink_cli_options
case $state in
streamlink)
words=($line[1] "${words[@]}")
(( CURRENT += 1 ))
curcontext="${curcontext%:*:*}:_shtab_streamlink_cli-$line[1]:"
case $line[1] in
esac
esac
}
typeset -A opt_args
if [[ $zsh_eval_context[-1] == eval ]]; then
# eval/source/. command, register function for later
compdef _shtab_streamlink_cli -N streamlink
else
# autoload from fpath, call function directly
_shtab_streamlink_cli "$@"
fi
#compdef yt-dlp
__yt_dlp() {
local curcontext="$curcontext" fileopts diropts cur prev
typeset -A opt_args
fileopts="--download-archive|-a|--batch-file|--load-info-json|--load-info|--cookies|--no-cookies"
diropts="--cache-dir"
cur=$words[CURRENT]
case $cur in
:)
_arguments '*: :(::ytfavorites ::ytrecommended ::ytsubscriptions ::ytwatchlater ::ythistory)'
;;
*)
prev=$words[CURRENT-1]
if [[ ${prev} =~ ${fileopts} ]]; then
_path_files
elif [[ ${prev} =~ ${diropts} ]]; then
_path_files -/
elif [[ ${prev} == "--remux-video" ]]; then
_arguments '*: :(mp4 mkv)'
elif [[ ${prev} == "--recode-video" ]]; then
_arguments '*: :(mp4 flv ogg webm mkv)'
else
_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)'
fi
;;
esac
}
__yt_dlp
\ No newline at end of file
......@@ -72,11 +72,12 @@ async def get_xhs_cookie(account_file):
await page.goto("https://www.xiaohongshu.com")
await asyncio.sleep(1)
await page.wait_for_selector("div.link-wrapper a.link-wrapper span.channel", timeout=50000)
xhs_logger.info("小红书登录成功")
print("小红书登录成功")
await asyncio.sleep(3)
# await page.pause()
# 点击调试器的继续,保存cookie
await asyncio.sleep(3)
cookies = await context.cookies()
await write_cookies_to_file(cookies, account_file)
......
No preview for this file type
美丽的花花
#花花 #熊猫 #奋斗使者 #短视频
\ No newline at end of file