End-to-end automation pipeline for turning long videos into short-form content and distributing them across multiple platforms automatically.
This project handles downloading videos, clipping by timestamp, formatting for shorts, adding subtitles, scheduling uploads, managing multiple accounts, and sending upload notifications via Telegram.
Built for batch processing and unattended execution.
- Download videos from YouTube by URL
- Clip videos using start and end timestamps
- Auto-generate short-form vertical videos
- Subtitle embedding (auto or provided)
- Video cropping and positioning
- Multi-account support
- Upload automation:
- YouTube
- Upload scheduling
- Telegram success notifications per platform
- Telegram video downloader
- Generate
jobs.jsonautomatically using date ranges - Fully JSON-driven workflow
This project uses Nix shell for dependency management.
All required system tools and Python packages are provided automatically.
- Linux or WSL2 (Windows, not tested yet)
- Nix package manager
wsl --installcurl -L https://nixos.org/nix/install | shcurl -L https://nixos.org/nix/install | shnix-shell
# for send notif to telegram bot when successfully upload to a each platform
# create bot using this bot official telegram `@BotFather`
TELEGRAM_TOKEN=
TELEGRAM_CHAT_ID=
# (optional)
# for pull video from telegram channel
# get the api id and hash from below link
# https://my.telegram.org/apps
TELEGRAM_API_ID=
TELEGRAM_API_HASH=
Authentication is already documented in detail. Follow these guides exactly:
/src/auth/GOOGLE_OAUTH.md
Covers:
- Google Cloud project creation
- OAuth consent screen
- Client ID setup
- Refresh token generation
/src/auth/META_GRAPH.md
You need to create an accounts/ folder in project root,
then make a folder based username or account name ex: obrolan_clip/
inside that folder username add client_secret.json and meta.env
Complete folders accounts
accounts/
└── obrolan_clip/
├── client_secret.json
└── meta.env
└── other_account/[
{
"date": "2026-01-28,12:00", # date for scheduling
"status": "pending", # if already executed will change to completed
"items": [
{
"url": "", # url youtube
"start": "00:06:18", # time start clip
"end": "00:07:18", # end time clip (result will be 01:00 minute shorts video)
"position": "c", # position crop (l,c,r)
"crop": true, # by default true, if set to false it will not crop, but still make the video vertical
"subs": true, # by default true, if set to false will skip fast-whisper (auto generate subtitle)
"brainrot": false, # if true it will added other video below the original shorts
"tests": false, # if true will skip upload to social media and only download and saved to media/shorts/
"account": "other_username", # acccount name based on folder inside accounts/
"title": "", # title video
"description": "" # description (pass tags is accepted)
}
]
}
]it also has script for auto generating _jobs.json based date range you provide the script inside ./src/utils/generate_jobs.py
open the script and change the date range u wanna generate
Enter folder ./src
then run
python3 job_runner.py
It also have proxy configuration (to reduce the risk of YouTube rate limiting), but i've never use it since i don't have yet
The proxy config inside job_runner.py
This project is intended for educational and automation purposes only.
You are responsible for:
- API usage
- Platform rate limits
- Content ownership
- Compliance with YouTube, Meta, and Telegram policies
SOL: E1D96h652zzTzh8QyT1Dq8AqECT3j7dbJxJMiumnBV7c
EVM: 0x965244d54FFdf69A287e122090d320ae648f4cf8
- Test all social media (instagram and facebook)
