<p align="center">
<img src="assets/streamledge_logo.svg" alt="Streamledge" width="520">
</p>
# Streamledge
Streamledge is a command-line tool for playing YouTube and Twitch.tv videos.
Streamledge works by loading a lightweight (~30MB RAM) local flask web server in the background when first ran. This allows Streamledge to be ran with command line arguments that utilize the server to embed and play videos in a **minimal** [Chromium-based web browser](https://en.wikipedia.org/wiki/Chromium_(web_browser)#Browsers_based_on_Chromium) `--app` window.
# Usage Examples
### YouTube
Play the first YouTube search result for a **video**:
`sl --yt ava max american`

Play the first YouTube search result for a **playlist**:
`sl --ytpl dua lipa music videos`

Play YouTube video by ID and override `config.ini` settings to force autoplay, fullscreen, and autoclose (note: `--fullscreen` is Windows OS only):
`sl --yt dQw4w9WgXcQ --autoplay --fullscreen --autoclose`
Play YouTube video by URL and override `config.ini` settings to NOT autoplay and NOT run fullscreen:
`sl --yt "https://www.youtube.com/watch?v=dQw4w9WgXcQ&list=RDdQw4w9WgXcQ&start_radio=1" --autoplay 0 --fullscreen 0`
Shuffle and play a YouTube playlist:
`sl --ytpl dua lipa music videos --shuffle`
### Twitch.tv
Play a Twitch stream:
`sl --live hasanabi`

Play the most recent VOD (including the VOD for an active live stream) for a Twitch channel:
`sl --vod hasanabi`

Open the chat for a Twitch channel:
`sl --chat extraemily`

Play Twitch stream in a 360p sized window at 360p quality and 1% volume:
`sl --live hasanabi --height 360 --quality 360p --volume 1`
# Installation
### 🪟 Windows Installation:
Open a command prompt and run:
```
py -m pip install --upgrade pip
py -m pip install streamledge
```
You can begin using Streamledge with the `sl` or `streamledge` command.
If `py` is not a valid command than you may be using the Windows Store version of Python (or no Python at all). It is recommended to use the [official Python release](https://www.python.org/downloads/windows/).
Included [here on this repo](Windows_Helper_Files/) are several simple `.bat` files for your double clicking conveinience.
### 🐧🍎 Linux/MacOS Installation:
Note: Streamledge has not been tested on MacOS.
Open a terminal and run:
```
python3 -m pip install --upgrade pip
python3 -m pip install streamledge
```
As long as Chrome or Chromium is installed in a default location, you should be able to begin using Streamledge with the `sl` or `streamledge` command.
## Recommended -> Configure Application
Run in terminal / command prompt:
`sl --appdata`
This will open the appdata directory for Streamledge in your systems file explorer so you may edit your `config.ini` file. Streamledge also stores its server log files and *default* web browser user data directory in this folder.
If Streamledge cannot find a default web browser, you will need to specify a path to one in `config.ini`.
With the exception of the server port, you do **not** need to restart the server for changes to take effect.
**Default config.ini file:**
```ini
[Server]
# Network port for the local Streamledge flask web server background service. The default of '5008' should be fine.
port = 5008
# Have the 'streamledge_server' process automatically terminate itself after serving content.
# Set to true/false
self_destruct = False
[Browser]
# Display area HEIGHT of the web browser window.
# Override with --height [num]
display_area_height = 540
# For Windows OS, Streamledge attempts to auto-detect windows titlebar_height which is required info to draw a properly sized browser window.
# For Linux OS, this info does not appear to be required, therefor '0' is the default non-Windows OS value.
# If you see any solid black color around the borders of the display area, then you may want to adjust your titlebar_height accordingly.
# To adjust or correctly set the height in pixels of your windows titlebars, uncomment the line below and set value.
# titlebar_height = 0
# For Windows OS and Linux OS, Streamledge attempts to position the web browser window in the middle and closer to the top of your display.
# For Mac OS or to manually set either of the X and/or Y position(s), uncomment the x_pos and/or y_pos lines below and set desired value(s).
# Override with --x [num] and/or --y [num]
# x_pos = 480
# y_pos = 135
# Streamledge searches your system for a suitable default chromium based web browser in order of preference: MS Edge > Chrome > Chromium
# Optionally specify path to compatible chromium based web browser executable file by uncommenting the 'browser_path = ' line below.
# Override with --browser-path [path]
# browser_path = C:\Program Files\Google\Chrome\Application\chrome.exe
# By default, Streamledge creates the web browsers user data dir within Streamledge's --appdata dir.
# To use a different directory, uncomment the user_data_dir line below and set path.
# Override with --data-dir [dir]
# user_data_dir =
# Optionally modify the chromium browser arguments used in addition to those already used/hardcoded in the commented line below.
# --app --user-data-dir --window-size --window-position --no-first-run --no-default-browser-check --autoplay-policy=no-user-gesture-required
arguments =
--enable-features=OverrideSiteSettings,ParallelDownloading,ZeroCopy
--disable-features=WindowPlacement,NWNewWindow,WindowsOcclusion,PreloadMediaEngagementData
--enable-zero-copy
--enable-parallel-downloading
--disable-logging
--disable-breakpad
--ignore-gpu-blocklist
# Problematic args: --in-process-gpu --disable-site-isolation-trials
# Begin playback of videos muted.
# Set to true/false
# Override with --muted [0|1]
muted = False
# Optionally add service name suffix to window title in the form of ' - ServiceName'. eg: false == "UserName" vs true == "UserName - Twitch"
title_suffix = False
[YouTube]
# Automatically begin playback for videos/playlists.
# Set to true/false
# Override with --autoplay [0|1]
autoplay = True
# Automatically close the window when playback ends.
# Set to true/false
# Override with --autoclose [0|1]
autoclose = True
# WINDOWS OS ONLY. Automatically switch to fullscreen mode when playback begins. This is a bit of a gimmick.
# This simulates a double click on the video upon video playback and then moves/hides the mouse cursor back to its original position.
# Set to true/false
# Override with --fullscreen [0|1]
fullscreen = False
# Shuffle the *entire* playlist and return up to 200 results (200 is the limit for all embedded playlists).
# Set to true/false
# Override with --shuffle [0|1]
shuffle = False
# Enable continuous playback looping.
# Set to true/false
# Override with --loop [0|1]
loop = False
# Enable closed captioning on by default.
# Set to true/false
# Override with --cc [0|1]
cc = False
# Enable/disable video controls.
# Set to true/false
# Override with --video-controls [0|1]
video_controls = True
# Enable/disable keyboard controls.
# Set to true/false
# Overrise with --keyboard [0|1]
keyboard = True
# Enable/disable fullscreen button on GUI. Disabling the button also disables the ability to fullscreen.
# Set to true/false
# Override with --fsbutton [0|1]
fsbutton = True
# Enable/disable video annotations. Effectiveness is questionable. 'nocookie' option below has this forcibly disabled.
# Set to true/false
annotations = False
# Optionally play videos/playlists with 'youtube-nocookie.com' instead of 'youtube.com'.
# Set to true/false
nocookie = True
# Optionally set ISO 639-1 two-letter language code for YouTube GUI and preferred closed caption language.
# Reference: https://www.loc.gov/standards/iso639-2/php/code_list.php
# language =
# Playlists only: Update the window titlebar with the name of the currently playing video.
# When 'true': Begin playback with the name of the playlist in the window titlebar until progressing to the next video.
# When 'false': Keeps the playlist name in the window titlebar at all times.
update_title = True
# Optionally override global [Browser] settings.
# display_area_height =
# x_pos =
# y_pos =
# muted =
[Twitch]
# Note that the following options (except 'extensions') are simply the loading values when playing a video.
# You can always use the cogwheel on the video to change these options at any time during playback.
# Default Twitch video_quality. You may specify *any* desired resolution with an optional 60 for 60fps.
# If specific video_quality is not available, then the next best option is used.
# Example: if 1080p is unavailable, then 720p60 is used rather than 1080p60. Therefor, be sure to specify the 60 if wanting 60fps.
# You may specify a comma-separated list of qualities in order of preference. ie: video_quality = 1080p, 720p, 1080p60, 720p60
# Common options: source | auto | 1080p60 | 1080p | 720p60 | 720p | 480p | 360p | 160p
# Override with --quality [quality]
video_quality = source
# Set default volume percentage (1-100).
# Override with --volume [1-100]
volume = 100
# Enable Twitch extensions on the video overlay.
# Set to true/false
# Override with --extensions [0|1]
extensions = True
# Optionally override global [Browser] settings.
# display_area_height =
# x_pos =
# y_pos =
# muted =
# Optionally set size, loading position, and light/dark mode for --chat arg to open Twitch chat. (x and y will center if not set)
# Default settings will force the chat window to the right of the screen and utilize all screen space from top to bottom.
chat_height = 99999
chat_width = 600
chat_x_pos = 99999
chat_y_pos = 0
chat_dark_mode = True
[Kick]
# Optionally override global [Browser] settings.
# display_area_height =
# x_pos =
# y_pos =
# muted =
```
# Usage / Command Line Arguments
General command line arguments for `streamledge`:
`--help` or `--h` :: Show the following Streamledge help message and version number:
```
usage: sl [-h] [--start | --stop] [--config PATH] [--height HEIGHT] [--x X_POS] [--y Y_POS]
[--browser-path PATH] [--data-dir DIR] [--muted [0|1]] [--url-only]
[--yt VIDEO_ID(s)/URL(s)/QUERY [VIDEO_ID(s)/URL(s)/QUERY ...] |
--ytpl PLAYLIST_ID/URL/QUERY [PLAYLIST_ID/URL/QUERY ...] | --ytsearch QUERY [QUERY ...] |
--ytplsearch QUERY [QUERY ...] | --ytmix VIDEO_ID/URL/QUERY [VIDEO_ID/URL/QUERY ...]]
[--autoplay [0|1]] [--autoclose [0|1]] [--fullscreen [0|1]] [--shuffle [0|1]]
[--loop [0|1]] [--cc [0|1]] [--video-controls [0|1]] [--keyboard [0|1]]
[--fsbutton [0|1]] [--vidstart TIME] [--plstart NUM]
[--live CHANNEL/URL [CHANNEL/URL ...] | --vod CHANNEL[:N]/URL [CHANNEL[:N]/URL ...] |
--vodid VOD ID/URL [VOD ID/URL ...] | --clip CLIP ID/URL [CLIP ID/URL ...] |
--chat CHANNEL/URL [CHANNEL/URL ...]] [--volume [1-100]] [--extensions [0|1]]
[--quality QUALITY] [--vodstart TIME] [--kick CHANNEL/URL [CHANNEL/URL ...] |
--kickvod CHANNEL/URL [CHANNEL/URL ...]] [--browse [URL] | --appdata]
Streamledge v0.1.0
options:
-h, --help show this help message and exit
--start Start streamledge_server background process (NOT STRICTLY REQUIRED -
happens automatically if needed)
--stop Close streamledge_server background process
Player/Browser options:
--config PATH Path to alternate config file (either full path or filename in current
directory)
--height, --size HEIGHT
Set display area height of web browser window
--x X_POS Set X position of browser window
--y Y_POS Set Y position of browser window
--browser-path PATH Full path to Chromium-based browser executable
--data-dir DIR Base dir for generated user data directory
--muted [0|1] Begin playback muted
--url-only Only display generated URL. Do not run Streamledge
YouTube.com options:
--yt VIDEO_ID(s)/URL(s)/QUERY [VIDEO_ID(s)/URL(s)/QUERY ...]
Play YouTube video ID(s)/URL(s)/first search query result
--ytpl PLAYLIST_ID/URL/QUERY [PLAYLIST_ID/URL/QUERY ...]
Play YouTube playlist ID/URL/first search query result
--ytsearch QUERY [QUERY ...]
Search for videos and choose from the top 10 results
--ytplsearch QUERY [QUERY ...]
Search for playlists and choose from the top 10 results
--ytmix VIDEO_ID/URL/QUERY [VIDEO_ID/URL/QUERY ...]
Play YouTube generated Mix/Radio playlist from video
--autoplay [0|1] *OPTIONAL* Begin playback automaticaly
--autoclose [0|1] *OPTIONAL* Close window automatically when playback ends
--fullscreen, --fs [0|1]
*OPTIONAL* Fullscreen video (auto mouse clicks window)
--shuffle [0|1] *OPTIONAL* Shuffle playlist order
--loop [0|1] *OPTIONAL* Toggle continuous playback looping
--cc [0|1] *OPTIONAL* Toggle closed captions on by default
--video-controls [0|1]
*OPTIONAL* Toggle video controls
--keyboard [0|1] *OPTIONAL* Toggle keyboard controls
--fsbutton [0|1] *OPTIONAL* Toggle fullscreen button on GUI
--vidstart TIME *OPTIONAL* Begin video playback at timestamp like '120' for seconds or
'1h2m3s' (automatically detected if in URL)
--plstart NUM *OPTIONAL* Begin/create playlist from the NUM video of playlist
Twitch.tv options:
--live, --twitch CHANNEL/URL [CHANNEL/URL ...]
Play live stream of channel name(s)
--vod CHANNEL[:N]/URL [CHANNEL[:N]/URL ...]
Play most recent VOD of channel name(s). Add :N for Nth most recent (e.g.
username:2 for 2nd most recent)
--vodid VOD ID/URL [VOD ID/URL ...]
Play Twitch VOD for ID(s)/URL(s)
--clip CLIP ID/URL [CLIP ID/URL ...]
Play Twitch clips for ID(s)/URL(s)
--chat CHANNEL/URL [CHANNEL/URL ...]
Open chat of channel names(s)
--volume [1-100] *OPTIONAL* Volume level (1-100)
--extensions [0|1] *OPTIONAL* Enable Twitch extensions on video
--quality QUALITY *OPTIONAL* Preferred video qualitie(s) (comma-separated list). Use
"source", "auto", or any resolution like "720p" or "1080p60"
--vodstart TIME *OPTIONAL* Begin VOD playback at timestamp like '1h2m3s' (automatically
detected if in URL)
Kick.com options:
--kick CHANNEL/URL [CHANNEL/URL ...]
Play live stream of channel name(s)
--kickvod CHANNEL/URL [CHANNEL/URL ...]
Play most recent VOD of channel name(s)
Misc options:
--browse [URL] Open browser normally (with optional URL). Install extensions, log in to
Twitch, etc.
--appdata Open Streamledge appdata directory in file explorer
```
`--start` :: Manually pre-start background process for the streamledge_server. This is not strictly required as the first usage of Streamledge to play a video will do this automatically at the cost of a very minor delay. If you would prefer to run the server in it's own terminal, you may run the `streamledge_server` command directly instead. Either way, server activity is logged to `streamledge_server.log` file.
`--stop` :: Terminate the active streamledge_server process.
`--url-only` :: Only display generated URL (for the local flask server). Do not launch browser.
### Optional config.ini Override Args
`--muted` :: Begin playback muted.
`--config PATH` :: Set path to custom config file. Note: if server is already active, just make sure that the Server 'port' is the same as the running server.
`--height HEIGHT` :: Set display area height of web browser window.
`--x X_POS` :: Set X position of browser window.
`--y Y_POS` :: Set Y position of browser window.
`--browser-path PATH` :: Full path to Chromium-based web browser executable.
`--data-dir DIR` :: Base dir for generated user data directory.
## YouTube.com
A nice side-effect of embedding YouTube videos with Streamledge is that this appears to remove all advertisements. A limitation of embedding is that age-restricted videos will not play.
`--yt` :: Play **Video** from specified video ID, URL, or search query. Specifying more than one video ID/URL will create a playlist. **Examples:**
```
sl --yt 59H3_8oCqic
sl --yt https://www.youtube.com/watch?v=59H3_8oCqic
# Ideally use quotations for search queries, however, simple search queries will work without them:
sl --yt rick astley never gonna give
sl --yt "ava max my head & my heart"
sl --yt "https://www.youtube.com/watch?v=cTr-aGK-LpA&list=PLgtFJ5i1fDDdnkmR1ltQ0rwWebUMGM0ho"
# Use multiple video IDs/URLs to generate a playlist to play:
sl --yt https://www.youtube.com/watch?v=59H3_8oCqic https://www.youtube.com/watch?v=EOj4gOFn5QA https://www.youtube.com/watch?v=ijS_orLb6VU
```
`--ytpl` :: Play **Playlist** from specified playlist ID, URL, or search query. The first 200 videos (a limitation of embedding) are returned. You may combine with `--plstart` to work around this limitation. **Examples:**
```
sl --ytpl PLgtFJ5i1fDDdnkmR1ltQ0rwWebUMGM0ho
sl --ytpl "https://www.youtube.com/watch?v=cTr-aGK-LpA&list=PLgtFJ5i1fDDdnkmR1ltQ0rwWebUMGM0ho"
sl --ytpl 90s alternative rock
sl --ytpl "metallica black album"
sl --ytpl newest taylor swift album
```
`--ytmix` :: Play a YouTube **Mix/Radio** based off of specified video ID, URL, or search query. Note that this does not always return the original video, but always seems to return 49 videos.
`--ytsearch` :: Searches YouTube and returns the top 10 search results for videos and lets you choose from them.
`--ytplsearch` :: Same as above but for playlists.
### Optional YouTube Args
You may override any config.ini settings with these optional args.
#### Boolean YouTube Args
For 'True' you may use either `--arg 1` or `--arg`.
For 'False' you must use `--arg 0`.
`--autoplay` :: Begins playback automatically without user interaction.
`--autoclose` :: Closes video/playlist automatically when playback ends.
`--fullscreen` :: Windows OS only: Upon playback, automatically double clicks the window and moves the mouse cursor back to its original position.
`--shuffle` :: Shuffle the *entire* playlist and return up to 200 random videos.
`--loop` :: Continuous playback looping of videos/playlist.
`--cc` :: Closed captions on by default.
`--video-controls` :: Video controls for video/playlist.
`--keyboard` :: Keyboard controls for video/playlist.
`--fsbutton` :: Display fullscreen button. When disabled, also disables the option to fullscreen the video.
#### Other YouTube Args
`--vidstart TIME` :: Begin video playback at timestamp like '120' for seconds or '1h2m3s'. Start time is automatically detected if included in URL.
`--plstart NUM` :: Start/create playlist from the NUM video of specified/searched playlist.
## Twitch.tv
`--live` or `--twitch` :: Play the live stream of specified channel(s). **Examples:**
```
sl --live hasanabi
sl --live https://twitch.tv/hasanabi
```
`--vod` :: Play the most recent VOD of specified channel(s) (returns the VOD for the current live stream if auto-publish VOD is enabled by streamer). Use with optional :N parameter to play most recent Nth VOD. **Examples:**
```
# Play most recent VOD:
sl --vod extraemily
sl --vod https://twitch.tv/extraemily
# Play the second most recent VOD:
sl --vod extraemily:2
```
`--vodid` :: Play a specific VOD. **Examples:**
```
sl --vodid 2520137284
sl --vodid "https://www.twitch.tv/videos/2520137284?filter=archives&sort=time"
```
`--clip` :: Play a specific clip. **Examples:**
```
sl --clip MuddyPluckyNarwhalNotLikeThis-k5tg2-VPtLNDQv0_
sl --clip https://www.twitch.tv/extraemily/clip/MuddyPluckyNarwhalNotLikeThis-k5tg2-VPtLNDQv0_
sl --clip "https://clips.twitch.tv/embed?clip=MuddyPluckyNarwhalNotLikeThis-k5tg2-VPtLNDQv0_&parent=localhost"
```
`--chat` :: Opens chat for specified channel(s).
### Optional Twitch Args
#### Boolean Twitch Args
For 'True' you may use either `--arg 1` or `--arg`.
For 'False' you must use `--arg 0`.
`--extensions` :: Enable Twitch extensions on video overlay.
#### Other Twitch Args
`--volume [1-100]` :: Volume level from 1 to 100.
`--quality` :: Override config.ini setting for Twitch video_quality. **Examples:**
```
sl --live jinnytty --quality 720p60
sl --live jinnytty --quality 1080p
sl --live jinnytty --quality 1080p60
sl --live jinnytty --quality 720p,1080p,720p60
sl --live jinnytty --quality source
sl --vod jinnytty --quality auto
sl --vodid 2520137284 --quality source
```
`--vodstart` :: Begin VOD playback at timestamp like '1h2m3s'. Start time is automatically detected if included in URL.
## Kick.com
`--kick` :: Play the live stream of a specified user. **Examples:**
```
sl --kick rick92647
sl --kick https://kick.com/rick92647
```
`--kickvod` :: Play the most recent VOD of a specified user. **NOTICE**: this command will load the normal Kick webpage for the most recent VOD as embedding VOD's does not seem to be a Kick feature at the moment. **Examples:**
```
sl --kickvod rick92647
sl --kickvod https://kick.com/rick92647
```
## Misc
`--browse [URL]` :: Open web browser normally (with optional URL). This is to allow installing extensions, logging into Twitch, etc.
`--appdata` :: Open the appdata directory for Streamledge in your systems file explorer. You can find your `config.ini` file here.
# Web Browser Extension
Streamledge includes a web browser extension for chromium based web browsers that currently allows you to right click YouTube, Twitch, and Kick links to either open in Streamledge or open in a new tab.
You will obviously need to have the `streamledge_server` process running (by using `--start` or by playing a video with Streamledge first) for the menu options to function.
Until the extension is available via the Chrome/Edge web stores, you will need to enable developer mode in your browser and load unpacked extension from the [streamledge_browser_extension](/streamledge_browser_extension) folder. Slow one minute tutorial here: https://www.youtube.com/watch?v=AnvFyHUQw9M&t=5s
YouTube screenshot of Streamledge context menu in Chrome:

Twitch screenshot of Streamledge context menu in Chrome:

# Chatty Integration
To use with [Chatty](https://github.com/chatty/chatty), first create the streamledge alias in Chatty's "Custom Commands." To do this, navigate to Main > Settings > Click on 'Commands' under the 'Other' tab on the left > Click the '+' symbol on the top right and paste the following:
`_streamledge_ /proc exec streamledge`
You may use `/procEcho` instead of `/proc` if you would like to display Streamledge's output in Chatty (ie `SERVING URL:`).
Use this alias for your streamledge commands in Chatty. To create a "Play Stream" and "Play VOD" option at the top of both the Streams and Channel Context Menu's, press the 'Edit' button on the "Streams Context Menu" option in the "Custom Commands" section of Chatty and paste the following:
```
Play Stream{0}=$(_streamledge_) --live $(1-)
Play VOD{1}=$(_streamledge_) --vod $(1-)
-{2}
```
This example will add "Play Stream" and "Play VOD" options at the top of the Streams and Channel context menu's.

You can get creative by using command line arguments to create various menu options (ie "Play Stream Muted", etc). This example will add "quality options" for live streams:
```
Play Stream{0}=$(_streamledge_) --live $(1-)
Play VOD{1}=$(_streamledge_) --vod $(1-)
@Play Stream Options{2}
.source=$(_streamledge_) --live $(1-) --quality source
.auto=$(_streamledge_) --live $(1-) --quality auto
.1080p60=$(_streamledge_) --live $(1-) --quality 1080p60
.1080p=$(_streamledge_) --live $(1-) --quality 1080p
.720p60=$(_streamledge_) --live $(1-) --quality 720p60
.720p=$(_streamledge_) --live $(1-) --quality 720p
.480p=$(_streamledge_) --live $(1-) --quality 480p
.360p=$(_streamledge_) --live $(1-) --quality 360p
.160p=$(_streamledge_) --live $(1-) --quality 160p
-{3}
```

For YouTube or Kick.com, you can create aliases to launch Streamledge. For example, you can create a `/yt`, `/kick`, etc alias to use in the editbox that will open Streamledge with provided arguments as if you were running it from the command line.
In the same "Other - Commands" menu where the streamledge alias was created, you may create these aliases:
```
/yt $(_streamledge_) --yt "$$1-"
/kick $(_streamledge_) --kick "$$1-"
```
Usage example: `/yt rick roll`
# FreeTube "Integration" (Windows OS)
Included on this repository is [a basic AutoHotkey (v1.1) script](Windows_Helper_Files/FreeTube-to-Streamledge.ahk) that when used with [FreeTube](https://github.com/FreeTubeApp/FreeTube) it will effectively turn the "Copy Invidious Link" context menu item into a Streamledge launcher for the linked video/playlist.
Raw data
{
"_id": null,
"home_page": null,
"name": "streamledge",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "youtube, twitch, cli, player, stream, video, kick",
"author": "Blasman",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/d8/03/6eadef13c67355934b4e32d39c9c6dc05477420e567e3f738e0ddaf64eb4/streamledge-0.1.0.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <img src=\"assets/streamledge_logo.svg\" alt=\"Streamledge\" width=\"520\">\n</p>\n\n# Streamledge\n\nStreamledge is a command-line tool for playing YouTube and Twitch.tv videos.\n\nStreamledge works by loading a lightweight (~30MB RAM) local flask web server in the background when first ran. This allows Streamledge to be ran with command line arguments that utilize the server to embed and play videos in a **minimal** [Chromium-based web browser](https://en.wikipedia.org/wiki/Chromium_(web_browser)#Browsers_based_on_Chromium) `--app` window.\n\n\n# Usage Examples\n\n### YouTube\n\nPlay the first YouTube search result for a **video**:\n\n`sl --yt ava max american`\n\n\n\nPlay the first YouTube search result for a **playlist**:\n\n`sl --ytpl dua lipa music videos`\n\n\n\nPlay YouTube video by ID and override `config.ini` settings to force autoplay, fullscreen, and autoclose (note: `--fullscreen` is Windows OS only):\n\n`sl --yt dQw4w9WgXcQ --autoplay --fullscreen --autoclose`\n\nPlay YouTube video by URL and override `config.ini` settings to NOT autoplay and NOT run fullscreen:\n\n`sl --yt \"https://www.youtube.com/watch?v=dQw4w9WgXcQ&list=RDdQw4w9WgXcQ&start_radio=1\" --autoplay 0 --fullscreen 0`\n\nShuffle and play a YouTube playlist:\n\n`sl --ytpl dua lipa music videos --shuffle`\n\n### Twitch.tv\n\nPlay a Twitch stream:\n\n`sl --live hasanabi`\n\n\n\nPlay the most recent VOD (including the VOD for an active live stream) for a Twitch channel:\n\n`sl --vod hasanabi`\n\n\n\nOpen the chat for a Twitch channel:\n\n`sl --chat extraemily`\n\n\n\nPlay Twitch stream in a 360p sized window at 360p quality and 1% volume:\n\n`sl --live hasanabi --height 360 --quality 360p --volume 1`\n\n\n# Installation\n\n### \ud83e\ude9f Windows Installation:\n\nOpen a command prompt and run:\n\n```\npy -m pip install --upgrade pip\npy -m pip install streamledge\n```\n\nYou can begin using Streamledge with the `sl` or `streamledge` command.\n\nIf `py` is not a valid command than you may be using the Windows Store version of Python (or no Python at all). It is recommended to use the [official Python release](https://www.python.org/downloads/windows/).\n\nIncluded [here on this repo](Windows_Helper_Files/) are several simple `.bat` files for your double clicking conveinience.\n\n### \ud83d\udc27\ud83c\udf4e Linux/MacOS Installation:\n\nNote: Streamledge has not been tested on MacOS.\n\nOpen a terminal and run:\n```\npython3 -m pip install --upgrade pip\npython3 -m pip install streamledge\n```\n\nAs long as Chrome or Chromium is installed in a default location, you should be able to begin using Streamledge with the `sl` or `streamledge` command.\n\n## Recommended -> Configure Application\n\nRun in terminal / command prompt:\n\n`sl --appdata`\n\nThis will open the appdata directory for Streamledge in your systems file explorer so you may edit your `config.ini` file. Streamledge also stores its server log files and *default* web browser user data directory in this folder.\n\nIf Streamledge cannot find a default web browser, you will need to specify a path to one in `config.ini`.\n\nWith the exception of the server port, you do **not** need to restart the server for changes to take effect.\n\n**Default config.ini file:**\n```ini\n[Server]\n\n# Network port for the local Streamledge flask web server background service. The default of '5008' should be fine.\nport = 5008\n\n# Have the 'streamledge_server' process automatically terminate itself after serving content.\n# Set to true/false\nself_destruct = False\n\n[Browser]\n\n# Display area HEIGHT of the web browser window.\n# Override with --height [num]\ndisplay_area_height = 540\n\n# For Windows OS, Streamledge attempts to auto-detect windows titlebar_height which is required info to draw a properly sized browser window.\n# For Linux OS, this info does not appear to be required, therefor '0' is the default non-Windows OS value.\n# If you see any solid black color around the borders of the display area, then you may want to adjust your titlebar_height accordingly.\n# To adjust or correctly set the height in pixels of your windows titlebars, uncomment the line below and set value.\n# titlebar_height = 0\n\n# For Windows OS and Linux OS, Streamledge attempts to position the web browser window in the middle and closer to the top of your display.\n# For Mac OS or to manually set either of the X and/or Y position(s), uncomment the x_pos and/or y_pos lines below and set desired value(s).\n# Override with --x [num] and/or --y [num]\n# x_pos = 480\n# y_pos = 135\n\n# Streamledge searches your system for a suitable default chromium based web browser in order of preference: MS Edge > Chrome > Chromium\n# Optionally specify path to compatible chromium based web browser executable file by uncommenting the 'browser_path = ' line below.\n# Override with --browser-path [path]\n# browser_path = C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\n\n# By default, Streamledge creates the web browsers user data dir within Streamledge's --appdata dir.\n# To use a different directory, uncomment the user_data_dir line below and set path.\n# Override with --data-dir [dir]\n# user_data_dir = \n\n# Optionally modify the chromium browser arguments used in addition to those already used/hardcoded in the commented line below.\n# --app --user-data-dir --window-size --window-position --no-first-run --no-default-browser-check --autoplay-policy=no-user-gesture-required\narguments = \n --enable-features=OverrideSiteSettings,ParallelDownloading,ZeroCopy\n --disable-features=WindowPlacement,NWNewWindow,WindowsOcclusion,PreloadMediaEngagementData\n --enable-zero-copy\n --enable-parallel-downloading\n --disable-logging\n --disable-breakpad\n --ignore-gpu-blocklist\n# Problematic args: --in-process-gpu --disable-site-isolation-trials\n\n# Begin playback of videos muted.\n# Set to true/false\n# Override with --muted [0|1]\nmuted = False\n\n# Optionally add service name suffix to window title in the form of ' - ServiceName'. eg: false == \"UserName\" vs true == \"UserName - Twitch\"\ntitle_suffix = False\n\n[YouTube]\n\n# Automatically begin playback for videos/playlists.\n# Set to true/false\n# Override with --autoplay [0|1]\nautoplay = True\n\n# Automatically close the window when playback ends.\n# Set to true/false\n# Override with --autoclose [0|1]\nautoclose = True\n\n# WINDOWS OS ONLY. Automatically switch to fullscreen mode when playback begins. This is a bit of a gimmick.\n# This simulates a double click on the video upon video playback and then moves/hides the mouse cursor back to its original position.\n# Set to true/false\n# Override with --fullscreen [0|1]\nfullscreen = False\n\n# Shuffle the *entire* playlist and return up to 200 results (200 is the limit for all embedded playlists).\n# Set to true/false\n# Override with --shuffle [0|1]\nshuffle = False\n\n# Enable continuous playback looping.\n# Set to true/false\n# Override with --loop [0|1]\nloop = False\n\n# Enable closed captioning on by default.\n# Set to true/false\n# Override with --cc [0|1]\ncc = False\n\n# Enable/disable video controls.\n# Set to true/false\n# Override with --video-controls [0|1]\nvideo_controls = True\n\n# Enable/disable keyboard controls.\n# Set to true/false\n# Overrise with --keyboard [0|1]\nkeyboard = True\n\n# Enable/disable fullscreen button on GUI. Disabling the button also disables the ability to fullscreen.\n# Set to true/false\n# Override with --fsbutton [0|1]\nfsbutton = True\n\n# Enable/disable video annotations. Effectiveness is questionable. 'nocookie' option below has this forcibly disabled.\n# Set to true/false\nannotations = False\n\n# Optionally play videos/playlists with 'youtube-nocookie.com' instead of 'youtube.com'.\n# Set to true/false\nnocookie = True\n\n# Optionally set ISO 639-1 two-letter language code for YouTube GUI and preferred closed caption language.\n# Reference: https://www.loc.gov/standards/iso639-2/php/code_list.php\n# language = \n\n# Playlists only: Update the window titlebar with the name of the currently playing video.\n# When 'true': Begin playback with the name of the playlist in the window titlebar until progressing to the next video.\n# When 'false': Keeps the playlist name in the window titlebar at all times.\nupdate_title = True\n\n# Optionally override global [Browser] settings.\n# display_area_height = \n# x_pos = \n# y_pos = \n# muted = \n\n[Twitch]\n\n# Note that the following options (except 'extensions') are simply the loading values when playing a video.\n# You can always use the cogwheel on the video to change these options at any time during playback.\n\n# Default Twitch video_quality. You may specify *any* desired resolution with an optional 60 for 60fps.\n# If specific video_quality is not available, then the next best option is used.\n# Example: if 1080p is unavailable, then 720p60 is used rather than 1080p60. Therefor, be sure to specify the 60 if wanting 60fps.\n# You may specify a comma-separated list of qualities in order of preference. ie: video_quality = 1080p, 720p, 1080p60, 720p60\n# Common options: source | auto | 1080p60 | 1080p | 720p60 | 720p | 480p | 360p | 160p\n# Override with --quality [quality]\nvideo_quality = source\n\n# Set default volume percentage (1-100).\n# Override with --volume [1-100]\nvolume = 100\n\n# Enable Twitch extensions on the video overlay.\n# Set to true/false\n# Override with --extensions [0|1]\nextensions = True\n\n# Optionally override global [Browser] settings.\n# display_area_height = \n# x_pos = \n# y_pos = \n# muted = \n\n# Optionally set size, loading position, and light/dark mode for --chat arg to open Twitch chat. (x and y will center if not set)\n# Default settings will force the chat window to the right of the screen and utilize all screen space from top to bottom.\nchat_height = 99999\nchat_width = 600\nchat_x_pos = 99999\nchat_y_pos = 0\nchat_dark_mode = True\n\n[Kick]\n\n# Optionally override global [Browser] settings.\n# display_area_height = \n# x_pos = \n# y_pos = \n# muted = \n```\n\n\n# Usage / Command Line Arguments\n\nGeneral command line arguments for `streamledge`:\n\n`--help` or `--h` :: Show the following Streamledge help message and version number:\n```\nusage: sl [-h] [--start | --stop] [--config PATH] [--height HEIGHT] [--x X_POS] [--y Y_POS]\n [--browser-path PATH] [--data-dir DIR] [--muted [0|1]] [--url-only]\n [--yt VIDEO_ID(s)/URL(s)/QUERY [VIDEO_ID(s)/URL(s)/QUERY ...] |\n --ytpl PLAYLIST_ID/URL/QUERY [PLAYLIST_ID/URL/QUERY ...] | --ytsearch QUERY [QUERY ...] |\n --ytplsearch QUERY [QUERY ...] | --ytmix VIDEO_ID/URL/QUERY [VIDEO_ID/URL/QUERY ...]]\n [--autoplay [0|1]] [--autoclose [0|1]] [--fullscreen [0|1]] [--shuffle [0|1]]\n [--loop [0|1]] [--cc [0|1]] [--video-controls [0|1]] [--keyboard [0|1]]\n [--fsbutton [0|1]] [--vidstart TIME] [--plstart NUM]\n [--live CHANNEL/URL [CHANNEL/URL ...] | --vod CHANNEL[:N]/URL [CHANNEL[:N]/URL ...] |\n --vodid VOD ID/URL [VOD ID/URL ...] | --clip CLIP ID/URL [CLIP ID/URL ...] |\n --chat CHANNEL/URL [CHANNEL/URL ...]] [--volume [1-100]] [--extensions [0|1]]\n [--quality QUALITY] [--vodstart TIME] [--kick CHANNEL/URL [CHANNEL/URL ...] |\n --kickvod CHANNEL/URL [CHANNEL/URL ...]] [--browse [URL] | --appdata]\n\nStreamledge v0.1.0\n\noptions:\n -h, --help show this help message and exit\n --start Start streamledge_server background process (NOT STRICTLY REQUIRED -\n happens automatically if needed)\n --stop Close streamledge_server background process\n\nPlayer/Browser options:\n --config PATH Path to alternate config file (either full path or filename in current\n directory)\n --height, --size HEIGHT\n Set display area height of web browser window\n --x X_POS Set X position of browser window\n --y Y_POS Set Y position of browser window\n --browser-path PATH Full path to Chromium-based browser executable\n --data-dir DIR Base dir for generated user data directory\n --muted [0|1] Begin playback muted\n --url-only Only display generated URL. Do not run Streamledge\n\nYouTube.com options:\n --yt VIDEO_ID(s)/URL(s)/QUERY [VIDEO_ID(s)/URL(s)/QUERY ...]\n Play YouTube video ID(s)/URL(s)/first search query result\n --ytpl PLAYLIST_ID/URL/QUERY [PLAYLIST_ID/URL/QUERY ...]\n Play YouTube playlist ID/URL/first search query result\n --ytsearch QUERY [QUERY ...]\n Search for videos and choose from the top 10 results\n --ytplsearch QUERY [QUERY ...]\n Search for playlists and choose from the top 10 results\n --ytmix VIDEO_ID/URL/QUERY [VIDEO_ID/URL/QUERY ...]\n Play YouTube generated Mix/Radio playlist from video\n --autoplay [0|1] *OPTIONAL* Begin playback automaticaly\n --autoclose [0|1] *OPTIONAL* Close window automatically when playback ends\n --fullscreen, --fs [0|1]\n *OPTIONAL* Fullscreen video (auto mouse clicks window)\n --shuffle [0|1] *OPTIONAL* Shuffle playlist order\n --loop [0|1] *OPTIONAL* Toggle continuous playback looping\n --cc [0|1] *OPTIONAL* Toggle closed captions on by default\n --video-controls [0|1]\n *OPTIONAL* Toggle video controls\n --keyboard [0|1] *OPTIONAL* Toggle keyboard controls\n --fsbutton [0|1] *OPTIONAL* Toggle fullscreen button on GUI\n --vidstart TIME *OPTIONAL* Begin video playback at timestamp like '120' for seconds or\n '1h2m3s' (automatically detected if in URL)\n --plstart NUM *OPTIONAL* Begin/create playlist from the NUM video of playlist\n\nTwitch.tv options:\n --live, --twitch CHANNEL/URL [CHANNEL/URL ...]\n Play live stream of channel name(s)\n --vod CHANNEL[:N]/URL [CHANNEL[:N]/URL ...]\n Play most recent VOD of channel name(s). Add :N for Nth most recent (e.g.\n username:2 for 2nd most recent)\n --vodid VOD ID/URL [VOD ID/URL ...]\n Play Twitch VOD for ID(s)/URL(s)\n --clip CLIP ID/URL [CLIP ID/URL ...]\n Play Twitch clips for ID(s)/URL(s)\n --chat CHANNEL/URL [CHANNEL/URL ...]\n Open chat of channel names(s)\n --volume [1-100] *OPTIONAL* Volume level (1-100)\n --extensions [0|1] *OPTIONAL* Enable Twitch extensions on video\n --quality QUALITY *OPTIONAL* Preferred video qualitie(s) (comma-separated list). Use\n \"source\", \"auto\", or any resolution like \"720p\" or \"1080p60\"\n --vodstart TIME *OPTIONAL* Begin VOD playback at timestamp like '1h2m3s' (automatically\n detected if in URL)\n\nKick.com options:\n --kick CHANNEL/URL [CHANNEL/URL ...]\n Play live stream of channel name(s)\n --kickvod CHANNEL/URL [CHANNEL/URL ...]\n Play most recent VOD of channel name(s)\n\nMisc options:\n --browse [URL] Open browser normally (with optional URL). Install extensions, log in to\n Twitch, etc.\n --appdata Open Streamledge appdata directory in file explorer\n```\n\n`--start` :: Manually pre-start background process for the streamledge_server. This is not strictly required as the first usage of Streamledge to play a video will do this automatically at the cost of a very minor delay. If you would prefer to run the server in it's own terminal, you may run the `streamledge_server` command directly instead. Either way, server activity is logged to `streamledge_server.log` file.\n\n`--stop` :: Terminate the active streamledge_server process.\n\n`--url-only` :: Only display generated URL (for the local flask server). Do not launch browser.\n\n### Optional config.ini Override Args\n\n`--muted` :: Begin playback muted.\n\n`--config PATH` :: Set path to custom config file. Note: if server is already active, just make sure that the Server 'port' is the same as the running server.\n\n`--height HEIGHT` :: Set display area height of web browser window.\n\n`--x X_POS` :: Set X position of browser window.\n\n`--y Y_POS` :: Set Y position of browser window.\n\n`--browser-path PATH` :: Full path to Chromium-based web browser executable.\n\n`--data-dir DIR` :: Base dir for generated user data directory.\n\n\n## YouTube.com\nA nice side-effect of embedding YouTube videos with Streamledge is that this appears to remove all advertisements. A limitation of embedding is that age-restricted videos will not play.\n\n`--yt` :: Play **Video** from specified video ID, URL, or search query. Specifying more than one video ID/URL will create a playlist. **Examples:**\n```\nsl --yt 59H3_8oCqic\nsl --yt https://www.youtube.com/watch?v=59H3_8oCqic\n# Ideally use quotations for search queries, however, simple search queries will work without them:\nsl --yt rick astley never gonna give\nsl --yt \"ava max my head & my heart\"\nsl --yt \"https://www.youtube.com/watch?v=cTr-aGK-LpA&list=PLgtFJ5i1fDDdnkmR1ltQ0rwWebUMGM0ho\"\n# Use multiple video IDs/URLs to generate a playlist to play:\nsl --yt https://www.youtube.com/watch?v=59H3_8oCqic https://www.youtube.com/watch?v=EOj4gOFn5QA https://www.youtube.com/watch?v=ijS_orLb6VU\n```\n`--ytpl` :: Play **Playlist** from specified playlist ID, URL, or search query. The first 200 videos (a limitation of embedding) are returned. You may combine with `--plstart` to work around this limitation. **Examples:**\n```\nsl --ytpl PLgtFJ5i1fDDdnkmR1ltQ0rwWebUMGM0ho\nsl --ytpl \"https://www.youtube.com/watch?v=cTr-aGK-LpA&list=PLgtFJ5i1fDDdnkmR1ltQ0rwWebUMGM0ho\"\nsl --ytpl 90s alternative rock\nsl --ytpl \"metallica black album\"\nsl --ytpl newest taylor swift album\n```\n`--ytmix` :: Play a YouTube **Mix/Radio** based off of specified video ID, URL, or search query. Note that this does not always return the original video, but always seems to return 49 videos.\n\n`--ytsearch` :: Searches YouTube and returns the top 10 search results for videos and lets you choose from them.\n\n`--ytplsearch` :: Same as above but for playlists.\n\n### Optional YouTube Args\n\nYou may override any config.ini settings with these optional args.\n\n#### Boolean YouTube Args\n\nFor 'True' you may use either `--arg 1` or `--arg`.\nFor 'False' you must use `--arg 0`.\n\n`--autoplay` :: Begins playback automatically without user interaction.\n\n`--autoclose` :: Closes video/playlist automatically when playback ends.\n\n`--fullscreen` :: Windows OS only: Upon playback, automatically double clicks the window and moves the mouse cursor back to its original position.\n\n`--shuffle` :: Shuffle the *entire* playlist and return up to 200 random videos.\n\n`--loop` :: Continuous playback looping of videos/playlist.\n\n`--cc` :: Closed captions on by default.\n\n`--video-controls` :: Video controls for video/playlist.\n\n`--keyboard` :: Keyboard controls for video/playlist.\n\n`--fsbutton` :: Display fullscreen button. When disabled, also disables the option to fullscreen the video.\n\n#### Other YouTube Args\n\n`--vidstart TIME` :: Begin video playback at timestamp like '120' for seconds or '1h2m3s'. Start time is automatically detected if included in URL.\n\n`--plstart NUM` :: Start/create playlist from the NUM video of specified/searched playlist.\n\n\n## Twitch.tv\n`--live` or `--twitch` :: Play the live stream of specified channel(s). **Examples:**\n```\nsl --live hasanabi\nsl --live https://twitch.tv/hasanabi\n```\n`--vod` :: Play the most recent VOD of specified channel(s) (returns the VOD for the current live stream if auto-publish VOD is enabled by streamer). Use with optional :N parameter to play most recent Nth VOD. **Examples:**\n```\n# Play most recent VOD:\nsl --vod extraemily\nsl --vod https://twitch.tv/extraemily\n# Play the second most recent VOD:\nsl --vod extraemily:2\n```\n`--vodid` :: Play a specific VOD. **Examples:**\n```\nsl --vodid 2520137284\nsl --vodid \"https://www.twitch.tv/videos/2520137284?filter=archives&sort=time\"\n```\n`--clip` :: Play a specific clip. **Examples:**\n```\nsl --clip MuddyPluckyNarwhalNotLikeThis-k5tg2-VPtLNDQv0_\nsl --clip https://www.twitch.tv/extraemily/clip/MuddyPluckyNarwhalNotLikeThis-k5tg2-VPtLNDQv0_\nsl --clip \"https://clips.twitch.tv/embed?clip=MuddyPluckyNarwhalNotLikeThis-k5tg2-VPtLNDQv0_&parent=localhost\"\n```\n`--chat` :: Opens chat for specified channel(s).\n\n### Optional Twitch Args\n\n#### Boolean Twitch Args\n\nFor 'True' you may use either `--arg 1` or `--arg`.\nFor 'False' you must use `--arg 0`.\n\n`--extensions` :: Enable Twitch extensions on video overlay.\n\n#### Other Twitch Args\n\n`--volume [1-100]` :: Volume level from 1 to 100.\n\n`--quality` :: Override config.ini setting for Twitch video_quality. **Examples:**\n```\nsl --live jinnytty --quality 720p60\nsl --live jinnytty --quality 1080p\nsl --live jinnytty --quality 1080p60\nsl --live jinnytty --quality 720p,1080p,720p60\nsl --live jinnytty --quality source\nsl --vod jinnytty --quality auto\nsl --vodid 2520137284 --quality source\n```\n\n`--vodstart` :: Begin VOD playback at timestamp like '1h2m3s'. Start time is automatically detected if included in URL.\n\n## Kick.com\n`--kick` :: Play the live stream of a specified user. **Examples:**\n```\nsl --kick rick92647\nsl --kick https://kick.com/rick92647\n```\n`--kickvod` :: Play the most recent VOD of a specified user. **NOTICE**: this command will load the normal Kick webpage for the most recent VOD as embedding VOD's does not seem to be a Kick feature at the moment. **Examples:**\n```\nsl --kickvod rick92647\nsl --kickvod https://kick.com/rick92647\n```\n\n\n## Misc\n`--browse [URL]` :: Open web browser normally (with optional URL). This is to allow installing extensions, logging into Twitch, etc.\n\n`--appdata` :: Open the appdata directory for Streamledge in your systems file explorer. You can find your `config.ini` file here.\n\n\n# Web Browser Extension\n\nStreamledge includes a web browser extension for chromium based web browsers that currently allows you to right click YouTube, Twitch, and Kick links to either open in Streamledge or open in a new tab.\n\nYou will obviously need to have the `streamledge_server` process running (by using `--start` or by playing a video with Streamledge first) for the menu options to function.\n\nUntil the extension is available via the Chrome/Edge web stores, you will need to enable developer mode in your browser and load unpacked extension from the [streamledge_browser_extension](/streamledge_browser_extension) folder. Slow one minute tutorial here: https://www.youtube.com/watch?v=AnvFyHUQw9M&t=5s\n\nYouTube screenshot of Streamledge context menu in Chrome:\n\n\n\nTwitch screenshot of Streamledge context menu in Chrome:\n\n\n\n\n# Chatty Integration\n\nTo use with [Chatty](https://github.com/chatty/chatty), first create the streamledge alias in Chatty's \"Custom Commands.\" To do this, navigate to Main > Settings > Click on 'Commands' under the 'Other' tab on the left > Click the '+' symbol on the top right and paste the following:\n\n`_streamledge_ /proc exec streamledge`\n\nYou may use `/procEcho` instead of `/proc` if you would like to display Streamledge's output in Chatty (ie `SERVING URL:`).\n\nUse this alias for your streamledge commands in Chatty. To create a \"Play Stream\" and \"Play VOD\" option at the top of both the Streams and Channel Context Menu's, press the 'Edit' button on the \"Streams Context Menu\" option in the \"Custom Commands\" section of Chatty and paste the following:\n\n```\nPlay Stream{0}=$(_streamledge_) --live $(1-)\nPlay VOD{1}=$(_streamledge_) --vod $(1-)\n-{2}\n```\n\nThis example will add \"Play Stream\" and \"Play VOD\" options at the top of the Streams and Channel context menu's.\n\n\n\nYou can get creative by using command line arguments to create various menu options (ie \"Play Stream Muted\", etc). This example will add \"quality options\" for live streams:\n\n```\nPlay Stream{0}=$(_streamledge_) --live $(1-)\nPlay VOD{1}=$(_streamledge_) --vod $(1-)\n@Play Stream Options{2}\n.source=$(_streamledge_) --live $(1-) --quality source\n.auto=$(_streamledge_) --live $(1-) --quality auto\n.1080p60=$(_streamledge_) --live $(1-) --quality 1080p60\n.1080p=$(_streamledge_) --live $(1-) --quality 1080p\n.720p60=$(_streamledge_) --live $(1-) --quality 720p60\n.720p=$(_streamledge_) --live $(1-) --quality 720p\n.480p=$(_streamledge_) --live $(1-) --quality 480p\n.360p=$(_streamledge_) --live $(1-) --quality 360p\n.160p=$(_streamledge_) --live $(1-) --quality 160p\n-{3}\n```\n\n\n\nFor YouTube or Kick.com, you can create aliases to launch Streamledge. For example, you can create a `/yt`, `/kick`, etc alias to use in the editbox that will open Streamledge with provided arguments as if you were running it from the command line.\n\nIn the same \"Other - Commands\" menu where the streamledge alias was created, you may create these aliases:\n\n```\n/yt $(_streamledge_) --yt \"$$1-\"\n/kick $(_streamledge_) --kick \"$$1-\"\n```\nUsage example: `/yt rick roll`\n\n\n# FreeTube \"Integration\" (Windows OS)\n\nIncluded on this repository is [a basic AutoHotkey (v1.1) script](Windows_Helper_Files/FreeTube-to-Streamledge.ahk) that when used with [FreeTube](https://github.com/FreeTubeApp/FreeTube) it will effectively turn the \"Copy Invidious Link\" context menu item into a Streamledge launcher for the linked video/playlist.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A command line YouTube and Twitch.tv player",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/Blasman/Streamledge",
"Source": "https://github.com/Blasman/Streamledge"
},
"split_keywords": [
"youtube",
" twitch",
" cli",
" player",
" stream",
" video",
" kick"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "aaf15274085dbaa98c1bab16f858a6bdada0e173a2a3c75b9ce02e94bd2d4349",
"md5": "b406cd1da4a6e33056f2750e86e36cab",
"sha256": "8bd61c0962c7442192cf6e66255697fd7515e895dfe227b488e33f5647987829"
},
"downloads": -1,
"filename": "streamledge-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b406cd1da4a6e33056f2750e86e36cab",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 60372,
"upload_time": "2025-09-03T15:31:30",
"upload_time_iso_8601": "2025-09-03T15:31:30.518084Z",
"url": "https://files.pythonhosted.org/packages/aa/f1/5274085dbaa98c1bab16f858a6bdada0e173a2a3c75b9ce02e94bd2d4349/streamledge-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d8036eadef13c67355934b4e32d39c9c6dc05477420e567e3f738e0ddaf64eb4",
"md5": "39d253feec0a243197dd95b5a730c5e2",
"sha256": "137bc75163c6c5d300d24c047d9486a0f5126fdd056b4e68cf10be47833b3509"
},
"downloads": -1,
"filename": "streamledge-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "39d253feec0a243197dd95b5a730c5e2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 65454,
"upload_time": "2025-09-03T15:31:31",
"upload_time_iso_8601": "2025-09-03T15:31:31.525853Z",
"url": "https://files.pythonhosted.org/packages/d8/03/6eadef13c67355934b4e32d39c9c6dc05477420e567e3f738e0ddaf64eb4/streamledge-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-03 15:31:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Blasman",
"github_project": "Streamledge",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "platformdirs",
"specs": [
[
"==",
"4.4.0"
]
]
},
{
"name": "Flask",
"specs": [
[
"==",
"3.1.1"
]
]
},
{
"name": "curl-cffi",
"specs": [
[
"==",
"0.12.0"
]
]
}
],
"lcname": "streamledge"
}