โก Quick Start: pip install streamingcommunity
or download the executable for your platform above
๐ฆ Installation
- ๐ Update Domains
- ๐ Available Sites
- ๐ ๏ธ Installation
- ๐ฆ PyPI Installation
- ๐ Automatic Installation
- ๐ง Binary Location
- ๐ Manual Installation
โ๏ธ Configuration & Usage
- โ๏ธ Configuration
- ๐ Command
- ๐ Global search
- ๐ป Examples of terminal
๐ง Advanced Features
- ๐ง Manual domain configuration
- ๐ณ Docker
- ๐ Telegram Usage
- ๐งฉ Hook/Plugin System
โน๏ธ Help & Support
- ๐ Tutorial
- ๐ To do
โ ๏ธ Disclaimer
Install directly from PyPI:
pip install StreamingCommunity
Update to the latest version:
pip install --upgrade StreamingCommunity
Create a simple script (run_streaming.py
) to launch the main application:
from StreamingCommunity.run import main
if __name__ == "__main__":
main()
Run the script:
python run_streaming.py
๐ฅ HLS Downloader
Download HTTP Live Streaming (HLS) content from m3u8 URLs.
from StreamingCommunity import HLS_Downloader
# Initialize with m3u8 URL and optional output path
downloader = HLS_Downloader(
m3u8_url="https://example.com/stream.m3u8",
output_path="/downloads/video.mp4" # Optional
)
# Start the download
downloader.download()
See HLS example for complete usage.
๐ฝ๏ธ MP4 Downloader
Direct MP4 file downloader with support for custom headers and referrer.
from StreamingCommunity import MP4_downloader
# Basic usage
downloader = MP4_downloader(
url="https://example.com/video.mp4",
path="/downloads/saved_video.mp4"
)
# Advanced usage with custom headers and referrer
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
downloader = MP4_downloader(
url="https://example.com/video.mp4",
path="/downloads/saved_video.mp4",
referer="https://example.com",
headers_=headers
)
# Start download
downloader.download()
See MP4 example for complete usage.
๐งฒ Torrent Client
Download content via torrent magnet links.
from StreamingCommunity import TOR_downloader
# Initialize torrent client
client = TOR_downloader()
# Add magnet link
client.add_magnet_link("magnet:?xt=urn:btih:example_hash&dn=example_name", save_path=".")
# Start download
client.start_download()
See Torrent example for complete usage.
๐๏ธ DASH Downloader
license_url = "https://example.com/stream.mpd"
mpd_url = "https://example.com/get_license"
dash_process = DASH_Downloader(
cdm_device=get_wvd_path(),
license_url=license_url,
mpd_url=mpd_url,
output_path="output.mp4",
)
dash_process.parse_manifest()
if dash_process.download_and_decrypt():
dash_process.finalize_output()
dash_process.get_status()
๐ Default Locations
- Windows:
C:\binary
- MacOS:
~/Applications/binary
- Linux:
~/.local/bin/binary
๐ช Windows Configuration
- Move the binary folder from
C:\binary
to your desired location - Add the new path to Windows environment variables:
- Open Start menu and search for "Environment Variables"
- Click "Edit the system environment variables"
- Click "Environment Variables" button
- Under "System Variables", find and select "Path"
- Click "Edit"
- Add the new binary folder path
- Click "OK" to save changes
For detailed Windows PATH instructions, see the Windows PATH guide.
๐ MacOS Configuration
- Move the binary folder from
~/Applications/binary
to your desired location - Add the new path to your shell's configuration file:
# For bash (edit ~/.bash_profile) export PATH="/your/custom/path:$PATH" # For zsh (edit ~/.zshrc) export PATH="/your/custom/path:$PATH"
- Reload your shell configuration:
# For bash source ~/.bash_profile # For zsh source ~/.zshrc
๐ง Linux Configuration
- Move the binary folder from
~/.local/bin/binary
to your desired location - Add the new path to your shell's configuration file:
# For bash (edit ~/.bashrc) export PATH="/your/custom/path:$PATH" # For zsh (edit ~/.zshrc) export PATH="/your/custom/path:$PATH"
- Apply the changes:
source ~/.bashrc # for bash # or source ~/.zshrc # for zsh
Important
After moving the binary folder, ensure that all executables (ffmpeg, ffprobe, ffplay) are present in the new location and have the correct permissions:
- Windows:
.exe
extensions required - MacOS/Linux: Ensure files have execute permissions (
chmod +x filename
)
โ๏ธ Python Dependencies
pip install -r requirements.txt
Keep your script up to date with the latest features by running:
python update.py
python3 update.py
๐ Domain Configuration Methods
There are two ways to manage the domains for the supported websites:
Set fetch_domain_online
to true
in your config.json
:
{
"DEFAULT": {
"fetch_domain_online": true
}
}
This will:
- Download the latest domains from the GitHub repository
- Automatically save them to a local
domains.json
file - Ensure you always have the most up-to-date streaming site domains
Set fetch_domain_online
to false
to use a local configuration:
{
"DEFAULT": {
"fetch_domain_online": false
}
}
Then create a domains.json
file in the root directory with your domain configuration:
{
"altadefinizione": {
"domain": "si",
"full_url": "https://altadefinizione.si/"
},
"streamingcommunity": {
"domain": "best",
"full_url": "https://streamingcommunity.best/"
}
}
If online fetching fails, the script will automatically attempt to use the local domains.json
file as a fallback, ensuring maximum reliability.
If you want to request a new site to be added to the repository, message us on the Discord server!
๐งฉ Run custom scripts before/after the main execution
Define pre/post hooks in config.json
under the HOOKS
section. Supported types:
- python: runs
script.py
with the current Python interpreter - bash/sh: runs via
bash
/sh
on macOS/Linux - bat/cmd: runs via
cmd /c
on Windows - Inline command: use
command
instead ofpath
Sample configuration:
{
"HOOKS": {
"pre_run": [
{
"name": "prepare-env",
"type": "python",
"path": "scripts/prepare.py",
"args": ["--clean"],
"env": {"MY_FLAG": "1"},
"cwd": "~",
"os": ["linux", "darwin"],
"timeout": 60,
"enabled": true,
"continue_on_error": true
}
],
"post_run": [
{
"name": "notify",
"type": "bash",
"command": "echo 'Download completed'"
}
]
}
}
Notes:
- os: optional OS filter (
windows
,darwin
(darwin
is used for MacOS),linux
). - args: list of arguments passed to the script.
- env: additional environment variables.
- cwd: working directory for the script; supports
~
and environment variables. - continue_on_error: if
false
, the app stops when the hook fails. - timeout: in seconds; when exceeded the hook fails.
Hooks are executed automatically by run.py
before (pre_run
) and after (post_run
) the main execution.
โ๏ธ Overview
You can change some behaviors by tweaking the configuration file. The configuration file is divided into several main sections.
๐ง DEFAULT Settings
{
"DEFAULT": {
"debug": false,
"show_message": true,
"show_trending": true,
"fetch_domain_online": true,
"telegram_bot": false,
"validate_github_config": false
}
}
debug
: Enables debug loggingshow_message
: Displays informational messagesshow_trending
: Shows trending contentfetch_domain_online
: If true, downloads domains from GitHub repository and saves to local file; if false, uses existing local domains.json filetelegram_bot
: Enables Telegram bot integrationvalidate_github_config
: If set to false, disables validation and updating of configuration from GitHub
๐ OUT_FOLDER Settings
{
"OUT_FOLDER": {
"root_path": "Video",
"movie_folder_name": "Movie",
"serie_folder_name": "Serie",
"anime_folder_name": "Anime",
"map_episode_name": "E%(episode)_%(episode_name)",
"add_siteName": false
}
}
root_path
: Directory where all videos will be saved- Windows:
C:\\MyLibrary\\Folder
or\\\\MyServer\\MyLibrary
(network folder) - Linux/MacOS:
Desktop/MyLibrary/Folder
- Windows:
movie_folder_name
: Subdirectory for movies (can be changed with--movie_folder_name
)serie_folder_name
: Subdirectory for TV series (can be changed with--serie_folder_name
)anime_folder_name
: Subdirectory for anime (can be changed with--anime_folder_name
)
map_episode_name
: Template for episode filenames%(tv_name)
: Name of TV Show%(season)
: Season number%(episode)
: Episode number%(episode_name)
: Episode name- Can be changed with
--map_episode_name
add_siteName
: Appends site_name to root path (can be changed with--add_siteName true/false
)
๐ QBIT_CONFIG Settings
{
"QBIT_CONFIG": {
"host": "192.168.1.51",
"port": "6666",
"user": "admin",
"pass": "adminadmin"
}
}
To enable qBittorrent integration, follow the setup guide here.
๐ก REQUESTS Settings
{
"REQUESTS": {
"verify": false,
"timeout": 20,
"max_retry": 8,
"proxy": {
"http": "http://username:password@host:port",
"https": "https://username:password@host:port"
}
}
}
verify
: Verifies SSL certificatestimeout
: Maximum timeout (in seconds) for each requestmax_retry
: Number of retry attempts per segment during M3U8 index downloadproxy
: Proxy configuration for HTTP/HTTPS requests- Set to empty string
""
to disable proxies (default) - Example with authentication:
"proxy": { "http": "http://username:password@host:port", "https": "https://username:password@host:port" }
- Example without authentication:
"proxy": { "http": "http://host:port", "https": "https://host:port" }
- Set to empty string
๐ฅ M3U8_DOWNLOAD Settings
{
"M3U8_DOWNLOAD": {
"tqdm_delay": 0.01,
"default_video_workser": 12,
"default_audio_workser": 12,
"segment_timeout": 8,
"specific_list_audio": [
"ita"
],
"download_subtitle": true,
"merge_subs": true,
"specific_list_subtitles": [
"ita", // Specify language codes or use ["*"] to download all available subtitles
"eng"
],
"cleanup_tmp_folder": true
}
}
tqdm_delay
: Delay between progress bar updatesdefault_video_workser
: Number of threads for video download- Can be changed with
--default_video_worker <number>
- Can be changed with
default_audio_workser
: Number of threads for audio download- Can be changed with
--default_audio_worker <number>
- Can be changed with
segment_timeout
: Timeout for downloading individual segments
download_audio
: Whether to download audio tracksspecific_list_audio
: List of audio languages to download- Can be changed with
--specific_list_audio ita,eng
- Can be changed with
download_subtitle
: Whether to download subtitlesmerge_subs
: Whether to merge subtitles with videospecific_list_subtitles
: List of subtitle languages to download- Use
["*"]
to download all available subtitles - Or specify individual languages like
["ita", "eng"]
- Can be changed with
--specific_list_subtitles ita,eng
- Use
cleanup_tmp_folder
: Remove temporary .ts files after download
๐ Available Language Codes
European | Asian | Middle Eastern | Others |
---|---|---|---|
ita - Italian | chi - Chinese | ara - Arabic | eng - English |
spa - Spanish | jpn - Japanese | heb - Hebrew | por - Portuguese |
fre - French | kor - Korean | tur - Turkish | fil - Filipino |
ger - German | hin - Hindi | ind - Indonesian | |
rus - Russian | mal - Malayalam | may - Malay | |
swe - Swedish | tam - Tamil | vie - Vietnamese | |
pol - Polish | tel - Telugu | ||
ukr - Ukrainian | tha - Thai |
๐ฅ M3U8_CONVERSION Settings
{
"M3U8_CONVERSION": {
"use_codec": false,
"use_vcodec": true,
"use_acodec": true,
"use_bitrate": true,
"use_gpu": false,
"default_preset": "ultrafast"
}
}
use_codec
: Use specific codec settingsuse_vcodec
: Use specific video codecuse_acodec
: Use specific audio codecuse_bitrate
: Apply bitrate settingsuse_gpu
: Enable GPU acceleration (if available)default_preset
: FFmpeg encoding preset
The default_preset
configuration can be set to:
ultrafast
: Extremely fast conversion but larger file sizesuperfast
: Very fast with good quality/size ratioveryfast
: Fast with good compressionfaster
: Optimal balance for most usersfast
: Good compression, moderate timemedium
: FFmpeg default settingslow
: High quality, slower processslower
: Very high quality, slow processveryslow
: Maximum quality, very slow process
When use_gpu
is enabled, supports:
- NVIDIA: NVENC
- AMD: AMF
- Intel: QSV
Note: Requires updated drivers and FFmpeg with hardware acceleration support.
๐ M3U8_PARSER Settings
{
"M3U8_PARSER": {
"force_resolution": "Best"
}
}
force_resolution
: Choose video resolution:"Best"
: Highest available resolution"Worst"
: Lowest available resolution"720p"
: Force 720p resolution- Specific resolutions:
- 1080p (1920x1080)
- 720p (1280x720)
- 480p (640x480)
- 360p (640x360)
- 320p (480x320)
- 240p (426x240)
- 240p (320x240)
- 144p (256x144)
๐ Feature Overview
You can now search across multiple streaming sites at once using the Global Search feature. This allows you to find content more efficiently without having to search each site individually.
๐ฏ Search Options
When using Global Search, you have three ways to select which sites to search:
- Search all sites - Searches across all available streaming sites
- Search by category - Group sites by their categories (movies, series, anime, etc.)
- Select specific sites - Choose individual sites to include in your search
๐ Navigation and Selection
After performing a search:
-
Results are displayed in a consolidated table showing:
- Title
- Media type (movie, TV series, etc.)
- Source site
-
Select an item by number to view details or download
-
The system will automatically use the appropriate site's API to handle the download
โจ๏ธ Command Line Arguments
The Global Search can be configured from the command line:
--global
- Perform a global search across multiple sites.-s
,--search
- Specify the search terms.
# Run a specific site by name with a search term
python test_run.py --site streamingcommunity --search "interstellar"
# Run a specific site by numeric index (as shown in -h help)
python test_run.py --site 0 --search "interstellar"
# Auto-download the first result from search (requires --site and --search)
python test_run.py --site streamingcommunity --search "interstellar" --auto-first
# Show help (includes available sites by name and by index)
python test_run.py -h
# Change video and audio workers
python test_run.py --default_video_worker 8 --default_audio_worker 8
# Set specific languages
python test_run.py --specific_list_audio ita,eng --specific_list_subtitles eng,spa
# Keep console open after download
python test_run.py --not_close true
# Use global search
python test_run.py --global -s "cars"
# Select specific category
python test_run.py --category 1 # Search in anime category
python test_run.py --category 2 # Search in movies & series
python test_run.py --category 3 # Search in series
python test_run.py --category 4 # Search in torrent category
# If installed via pip, you can also use the entrypoint directly
streamingcommunity --site streamingcommunity --search "interstellar" --auto-first
๐ณ Basic Setup
Build the image:
docker build -t streaming-community-api .
Run the container with Cloudflare DNS for better connectivity:
docker run -it --dns 1.1.1.1 -p 8000:8000 streaming-community-api
๐พ Custom Storage Location
By default the videos will be saved in /app/Video
inside the container. To save them on your machine:
docker run -it --dns 9.9.9.9 -p 8000:8000 -v /path/to/download:/app/Video streaming-community-api
๐ ๏ธ Quick Setup with Make
Inside the Makefile (install make
) are already configured two commands to build and run the container:
make build-container
# set your download directory as ENV variable
make LOCAL_DIR=/path/to/download run-container
The run-container
command mounts also the config.json
file, so any change to the configuration file is reflected immediately without having to rebuild the image.
โ๏ธ Basic Configuration
The bot was created to replace terminal commands and allow interaction via Telegram. Each download runs within a screen session, enabling multiple downloads to run simultaneously.
To run the bot in the background, simply start it inside a screen session and then press Ctrl + A, followed by D, to detach from the session without stopping the bot.
Command Functions:
๐น /start โ Starts a new search for a download. This command performs the same operations as manually running the script in the terminal with test_run.py.
๐น /list โ Displays the status of active downloads, with options to:
Stop an incorrect download using /stop .
View the real-time output of a download using /screen .
โ Warning: If a download is interrupted, incomplete files may remain in the folder specified in config.json. These files must be deleted manually to avoid storage or management issues.
๐ Configuration: Currently, the bot's settings are stored in the config.json file, which is located in the same directory as the telegram_bot.py script.
You need to create an .env file and enter your Telegram token and user ID to authorize only one user to use it
TOKEN_TELEGRAM=IlTuo2131TOKEN$12D3Telegram
AUTHORIZED_USER_ID=12345678
DEBUG=False
๐ฅ Dependencies & Launch
Install dependencies:
pip install -r requirements.txt
Start the bot (from /StreamingCommunity/TelegramHelp):
python3 telegram_bot.py
- To Finish website API
- To finish website API 2
๐ฏ Unit3Dup
Bot in Python per la generazione e l'upload automatico di torrent su tracker basati su Unit3D.
๐ฎ๐น MammaMia
Addon per Stremio che consente lo streaming HTTPS di film, serie, anime e TV in diretta in lingua italiana.
API non ufficiale per accedere ai contenuti del sito italiano StreamingCommunity.
This software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.
Note: DASH downloads require a valid L3 CDM (Content Decryption Module) to proceed. This project does not provide, include, or facilitate obtaining any CDM. Users are responsible for ensuring compliance with all applicable laws and requirements regarding DRM and decryption modules.