
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
pybalt
Advanced tools
☄️ Your ultimate tool & python module to download videos and audio from various platforms. Supports YouTube, Instagram, Twitter (X), Reddit, TikTok, BiliBili & More! Powered by cobalt instances
pybalt is a powerful and flexible tool for downloading media files from various platforms, including YouTube, X (formerly Twitter), Reddit, Instagram, TikTok, and more. It works using cobalt processing instances and serves both as a CLI and a Python module.
https://github.com/user-attachments/assets/cf5fd9a9-520b-4970-b8c2-42baa80d7523
Install pybalt with pip:
pip install pybalt -U
Or install pybalt on Windows with the bat file included in the repo (if you don't have Python installed):
cobalt and pybalt in the terminal, and install python if needed)powershell -Command "Invoke-WebRequest -Uri https://raw.githubusercontent.com/nichind/pybalt/main/install.bat -OutFile install.bat; .\install.bat"
[!NOTE] pybalt will automatically detect if you're running a local cobalt instance and use it first before trying public instances.
[!NOTE] If the
cobaltalias isn't working in your terminal, usepython -m pybalt <command>instead.
[!CAUTION] Remuxing (
-r) requires ffmpeg to be installed on your device and added to your system path.
The CLI is intuitive and easy to use! Here are some examples:
-vQ max) and remux it (-remux):cobalt "https://youtube.com/watch?v=DG2QqcHwNdE" -remux -vQ max
cobalt "C:/Users/username/Videos/video.mp4"
cobalt "path/to/links.txt"
cobalt "https://youtube.com/watch?v=DG2QqcHwNdE" -o
cobalt "https://youtube.com/watch?v=DG2QqcHwNdE" -s
cobalt "https://youtube.com/watch?v=DG2QqcHwNdE" -vQ 1080 -aF mp3 --audioBitrate 320 -fp "C:/Downloads"
Use cobalt -h to see all available options.
pybalt can work with multiple cobalt instances, including your own local instance:
cobalt -li
cobalt -ai "https://example-instance.com" "optional-api-key"
cobalt -ri 1
Run your own cobalt instance with Docker:
cobalt -ls
cobalt -lstart
cobalt -lstop
cobalt -lstatus
pybalt can be easily integrated into your Python projects:
from pybalt import download
from asyncio import run
async def main():
# Simple download with default settings
file_path = await download("https://youtube.com/watch?v=DG2QqcHwNdE")
print(f"Downloaded to: {file_path}")
# Download with custom parameters
file_path = await download(
"https://youtube.com/watch?v=DG2QqcHwNdE",
videoQuality="1080",
audioFormat="mp3",
audioBitrate="320",
filenameStyle="pretty",
remux=True
)
print(f"Downloaded to: {file_path}")
run(main())
from pybalt.core.wrapper import InstanceManager
from asyncio import run
async def main():
# Create an instance manager
manager = InstanceManager(debug=True)
# Get a list of available instances
instances = await manager.get_instances()
print(f"Found {len(instances)} available instances")
# Download a file using the first available instance
file_path = await manager.download(
url="https://youtube.com/watch?v=DG2QqcHwNdE",
videoQuality="1080",
remux=True
)
print(f"Downloaded to: {file_path}")
# Bulk download multiple URLs
urls = [
"https://youtube.com/watch?v=DG2QqcHwNdE",
"https://youtube.com/watch?v=anotherVideo"
]
# Download multiple files concurrently
async for path in manager.download_generator(urls=urls, remux=True):
print(f"Downloaded: {path}")
run(main())
from pybalt import download
from asyncio import run
async def main():
# Define a status callback function
async def status_callback(downloaded_size, total_size, download_speed, eta, **kwargs):
percent = (downloaded_size / total_size * 100) if total_size > 0 else 0
print(f"Downloaded: {downloaded_size / 1024 / 1024:.2f}MB / "
f"{total_size / 1024 / 1024:.2f}MB ({percent:.1f}%) at "
f"{download_speed / 1024 / 1024:.2f}MB/s, ETA: {eta:.0f}s")
# Define a completion callback
async def done_callback(file_path, downloaded_size, time_passed, **kwargs):
print(f"Download completed in {time_passed:.2f}s")
print(f"File saved to: {file_path}")
# Download with progress tracking
file_path = await download(
"https://youtube.com/watch?v=DG2QqcHwNdE",
status_callback=status_callback,
done_callback=done_callback
)
run(main())
from pybalt import download
from asyncio import run, create_task
class StatusParent:
def __init__(self):
self.downloaded_size = 0
self.total_size = 0
self.download_speed = 0
self.eta = 0
self.completed = False
self.file_path = None
async def main():
# Create status parent object to track progress
status = StatusParent()
# Start download as a background task
task = create_task(download(
"https://youtube.com/watch?v=DG2QqcHwNdE",
status_parent=status
))
# Monitor progress while download is running
while not task.done():
if status.total_size > 0:
percent = status.downloaded_size / status.total_size * 100
print(f"Progress: {percent:.1f}% - Speed: {status.download_speed / 1024 / 1024:.2f}MB/s")
await run(sleep(1))
# Get the result
file_path = await task
print(f"Downloaded to: {file_path}")
run(main())
pybalt features a comprehensive configuration system for customizing behavior:
Open the interactive configuration interface:
cobalt -c
Get a specific configuration value:
cobalt -gc "network" "timeout"
Set a configuration value:
cobalt -sc "network" "timeout" "30"
%APPDATA%\pybalt\settings.ini~/Library/Application Support/pybalt/settings.ini~/.config/pybalt/settings.iniYou can configure pybalt with environment variables:
PYBALT_CONFIG_DIR=path/to/config/dir # Custom config directory
PYBALT_CONFIG_PATH=path/to/settings.ini # Custom config file path
# Section-specific settings
PYBALT_GENERAL_DEBUG=True # Enable debug mode
PYBALT_GENERAL_USER_AGENT=custom-agent # Custom user agent
PYBALT_NETWORK_TIMEOUT=30 # Network timeout
PYBALT_NETWORK_USE_SYSTEM_PROXY=True # Use system proxy
PYBALT_NETWORK_PROXY=http://my-proxy:8080 # Custom proxy
PYBALT_PATHS_DEFAULT_DOWNLOADS_DIR=/path # Custom download directory
PYBALT_LOCAL_LOCAL_INSTANCE_PORT=9000 # Local instance port
You can also set variables in a .env file in your project directory.
pybalt can set up and manage a local cobalt instance using Docker:
cobalt -ls
This interactive wizard will guide you through:
Start your local instance:
cobalt -lstart
Stop your local instance:
cobalt -lstop
Check the status:
cobalt -lstatus
Restart your instance:
cobalt -lrestart
pybalt includes a built-in API server that allows you to interact with multiple cobalt instances through a single HTTP request. It also provides a web UI for easy downloading.
Start the API server in detached mode:
cobalt --api-start
Specify a custom port (default is 8009):
cobalt --api-port 8080 --api-start
Check if the API server is running:
cobalt --api-status
Stop the running API server:
cobalt --api-stop
The API server exposes the following endpoints:
/: Returns information about the API server, including version and instance count/: Accepts a JSON payload with a URL and parameters to download content and returns a JSON response with download information/ui: Serves a web-based user interface for downloading contentThe API server includes a comprehensive web UI that allows you to:
Access the web UI at http://localhost:8009/ui (or your custom port).
curl -X POST "http://localhost:8009/" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.youtube.com/watch?v=DG2QqcHwNdE", "videoQuality": "1080", "audioFormat": "mp3"}'
{
"status": "tunnel",
"url": "http://download-link.mp4",
"instance_info": {
"url": "https://instance-url.com",
},
}
pybalt is used by the following projects:
I spent too much time on this project... please consider leaving a :star: if you like it!
FAQs
☄️ Your ultimate tool & python module to download videos and audio from various platforms. Supports YouTube, Instagram, Twitter (X), Reddit, TikTok, BiliBili & More! Powered by cobalt instances
We found that pybalt demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.