The project's README from github.com/mushigaite/short-video-maker. As one markdown file: README.md.
A free open-source project designed to turn youtube-videos into viral short videos. Highlight detection, subtitles, translation, voiceover, all in one for your content: no pre-clip credits or any watermarks. Designed for creators who want an alternative to short-video SaaS tools like OpusClip or Vidyo.ai for free.
![]() "The Speech that Made Obama President" |
![]() "How Tom Overcame Social Anxiety - The Mindset That Changed Everything" |
![]() "How to stay calm when you know you'll be stressed | Daniel Levitin | TED" |
faster-whisper produces a timestamped transcript locally — same step regardless of which LLM_PROVIDER is selectedopenai / gemini / muapi) scans the transcript through a virality framework — hook moments, emotional peaks, opinion bombs, revelations, conflict, quotables, story peaks, practical value — and emits ranked candidates with scores 0–100--n candidates are selected--ratio, with an optional AI-generated hook at the start unless --no-hook is setrequirements.txt file dependenciesgit clone https://github.com/mushigaite/short-video-generator-AI.git
cd short-video-generator-AI
Windows:
python -m venv venv
venv\Scripts\activate
Linux/MacOS:
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
.env# Used LLM provider(openai/gemini/MuAPI)
LLM_PROVIDER=openai
# Enter the API key for the chosen provider
OPENAI_API_KEY=your_openai_key_here
OPENAI_MODEL=gpt-4o-mini # optional
GEMINI_API_KEY=your_gemini_key_here
GEMINI_MODEL=gemini-2.5-flash # optional
MUAPI_API_KEY=your_muapi_key_here
# Whisper settings
LOCAL_WHISPER_MODEL=base # tiny / base / small / medium / large-v3
LOCAL_WHISPER_DEVICE=auto # auto / cpu / cuda
If you uncertain about the provider:
| Provider | Free tier? | Get key |
|---|---|---|
| Gemini | ✅ Yes, but daily limit | https://aistudio.google.com |
| OpenAI | ❌ Paid | https://platform.openai.com |
| MuAPI | ❌ Paid, but pay-per-use, no subscription | https://muapi.ai |
Basic usage:
python main.py "https://www.youtube.com/watch?v=video_id"
Renderred clips are saved to output folder
With flags:
python main.py "https://www.youtube.com/watch?v=video_id" \
--n 3 \
--ratio 9:16 \
--resolution 1080 \
You can also provide a local video file instead of a YouTube link, for example:
python main.py "/Users/Admin/Folder/video.mp4" \
--n 4 \
--ratio 9:16 \
--resolution 720 \
--language zh \
| Flag | Default | Notes |
|---|---|---|
| --n | 3 | How many clips to render |
| --ratio | 9:16 | Any ratio / 9:16 for short videos / 1:1 for square |
| --resolution | 720 | Source video download resolution: 360 / 480 / 720 / 1080 |
| --language | auto | Force Whisper language code (e.g. en) |
| --no-hook | - | Excludes AI generated hook from the start of the clip |
Instead of the CLI, you can use a local web interface to queue multiple videos at once and adjust flags visually. The LLM provider and API keys are still configured in .env — the web version only handles video input and render flags.
python3 server.py
Serve the frontend:
cd web
python3 -m http.server 8000
Then, open in your browser:
http://localhost:8000/shorts-generator-ui.html
Feel free to open an issue or fork the repository for your projects.
This project is licensed under the MIT License.