Model or dataset
mushigaite/short-video-maker avatar
mushigaite/short-video-maker

short-video-maker turns a long video into ranked vertical clips

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.

632 stars77 forksPythonMIT

At a glance

What is it?
This Python tool downloads a YouTube video or takes a local file, transcribes it with faster-whisper, asks an LLM to rank candidate highlights on a virality framework, and renders the top N as vertical clips with subtitles and an optional hook. The LLM call is mandatory and paid for most providers.
Who is it for?
short-video-maker fits a creator who wants to test a batch of clips from a long recording without a subscription and who already has an LLM key, and it fits a developer who wants to automate the highlight ranking step in a pipeline. It does not fit someone expecting a free end to end run, because the ranking step needs an LLM API and only Gemini has a free tier with a daily limit, and it does not fit a publisher who cannot use the source footage.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 6 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The pipeline is seven steps, and only one of them is optional

The project is a Python tool that turns YouTube videos into short vertical clips, and the README walks through the whole pipeline explicitly. First the source is fetched from YouTube, or a local file path is used directly. Second, faster-whisper produces a timestamped transcript locally, and the README notes this step is the same regardless of which LLM provider is selected. Third, the chosen LLM classifies the video, deciding the content type such as podcast, interview, tutorial or vlog, and its pacing, so the highlight prompt can be tuned per content style. Fourth, the same LLM scans the transcript through a virality framework made up of hook moments, emotional peaks, opinion bombs, revelations, conflict, quotables, story peaks and practical value, and emits ranked candidates with scores from 0 to 100. Fifth, overlapping candidates are collapsed by score. Sixth, the top candidates are selected. Seventh, each highlight is rendered as a vertical short at the requested ratio, with an optional AI generated hook at the start.

The LLM provider is a required dependency, not a preference

This is the point most people miss when they read the requirements, which list Python 3.10 or newer and any LLM API key for OpenAI, Gemini or MuAPI. There is no local model option for the ranking step, so the tool cannot run entirely offline, and the free tier situation is uneven. The README tabulates it: Gemini has a free tier but with a daily limit, OpenAI is paid, and MuAPI is paid but pay-per-use with no subscription. The provider is selected through the LLM_PROVIDER setting in the .env file, with the matching key and an optional model name, and the examples show OPENAI_MODEL set to gpt-4o-mini and GEMINI_MODEL set to gemini-2.5-flash as optional overrides. The transcription step is a separate concern and is fully local, so a team with a GPU can keep the expensive part small by only sending the transcript text to the model.

Installation, with one documentation slip to watch for

The quick start is a clone, a virtual environment, a dependency install and an .env file. The clone command in the README points at a repository named short-video-generator-AI, which does not match the repository slug this project lives under, so check the URL before running it:

bash
git clone https://github.com/mushigaite/short-video-generator-AI.git
cd short-video-generator-AI

The environment setup and dependency install are standard:

bash
python -m venv venv
pip install -r requirements.txt

One thing to correct if you follow the text literally: the activation command given for Linux and macOS is venv\Scripts\activate, which is the Windows form and will not work in a POSIX shell. The Linux and macOS activation is source venv/bin/activate. The Whisper settings also live in the .env file, with LOCAL_WHISPER_MODEL set to base by default and the options tiny, base, small, medium and large-v3, plus LOCAL_WHISPER_DEVICE set to auto with auto, cpu and cuda as the choices. Those two settings are the main performance lever you have over the local transcription step.

Five flags cover what most runs need

The command line takes a URL or a local file and five flags. The default run is a single argument:

bash
python main.py "https://www.youtube.com/watch?v=video_id"

Rendered clips are written into an output folder. The flags table lists them with defaults. The --n flag sets how many clips to render and defaults to 3. The --ratio flag defaults to 9:16 and accepts any ratio, with 1:1 offered for square output. The --resolution flag sets the source video download resolution with the values 360, 480, 720 and 1080, defaulting to 720, which is worth understanding as a download setting rather than an output setting. The --language flag forces the Whisper language code, for example en, and defaults to auto. The --no-hook flag excludes the AI generated hook from the start of the clip, which is the switch to reach for when the model produced a hook you do not want. Several flags combine, so a run of four 720p clips in 9:16 with a forced language looks like this:

bash
python main.py "/Users/Admin/Folder/video.mp4" \
      --n 4 \
      --ratio 9:16 \
      --resolution 720 \
      --language zh

A local web front end for queueing several videos

Beyond the CLI there is a local website that lets you queue multiple videos and adjust flags visually, and the README is careful about the division of responsibility: the LLM provider and API keys are still configured in .env, and the web version only handles video input and render flags. That means the server does not need secret handling of its own, which is a sensible boundary for a tool that renders code-driven results locally. The server starts with python3 server.py, and the frontend is served separately from the web directory with python3 -m http.server 8000, after which the page is at http://localhost:8000/shorts-generator-ui.html. Splitting the two into separate processes is a small friction, and it means the interface is plain static files rather than a template that the Python server has to render.

Where this sits against the paid clipping services

The project positions itself explicitly as an alternative to short-video SaaS tools like OpusClip and Vidyo.ai, and the difference in approach is real. A hosted clipping service runs the whole chain on its own infrastructure, including the transcription and the models that decide what is worth clipping, so there is nothing to install and no API key of your own, but you upload your footage and you depend on someone else's idea of what performs. Running it yourself means the video never has to leave your machine except for the transcript text you send to the model, the highlight ranking can be tuned by editing the prompt, and the pipeline can be embedded in something larger. The project also advertises an API so the generator can be used from your own projects, and an SDK topic is set on the repository. The cost of self hosting is the one already noted: the LLM call, and your own maintenance of the prompt and the Whisper settings.

Editorial conclusion

short-video-maker fits a creator who wants to test a batch of clips from a long recording without a subscription and who already has an LLM key, and it fits a developer who wants to automate the highlight ranking step in a pipeline. It does not fit someone expecting a free end to end run, because the ranking step needs an LLM API and only Gemini has a free tier with a daily limit, and it does not fit a publisher who cannot use the source footage. Verify first that you hold the rights to the videos you feed it, that your provider model handles a full transcript, and that the local Whisper settings fit the machine, since a larger model and a cuda device change both speed and memory cost.

Frequently asked questions

Does short-video-maker work without a paid LLM API?

Not entirely. The highlight ranking step requires a model, and the provider table lists Gemini as the only free tier option, with a daily limit, while OpenAI and MuAPI are paid. The transcription step is local through faster-whisper and needs no API key.

How does the tool decide which moments to clip?

The chosen LLM classifies the content type and pacing first, then scans the transcript through a virality framework covering hook moments, emotional peaks, opinion bombs, revelations, conflict, quotables, story peaks and practical value, emitting ranked candidates scored from 0 to 100. Overlapping candidates are collapsed by score and the top n are selected.

What CLI flags does short-video-maker support?

The flags are --n for the number of clips rendered, defaulting to 3, --ratio for the output shape defaulting to 9:16, --resolution for the source download resolution defaulting to 720, --language to force the Whisper language code defaulting to auto, and --no-hook to exclude the AI generated hook from the start of the clip.

Can I use a local video file instead of a YouTube link?

Yes. The tool accepts a local file path in place of the URL, and the README shows an example with --n 4, --ratio 9:16, --resolution 720 and --language zh pointing at a file on disk. Rendered clips are saved into the output folder.

Official sources

  1. Issues
  2. License: MIT
  3. mushigaite/short-video-maker on GitHub
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/mushigaite-short-video-maker.svg)](https://hysenlabs.com/projects/mushigaite-short-video-maker)

Was this useful?