by howznguyen
Make narrated vertical shorts (TikTok, YouTube Shorts, Reels) with a coding agent and Remotion. 9+ agent skills, 20+ story flows, fact ledger, CC0 SFX.
# Add to your Claude Code skills
git clone https://github.com/howznguyen/shorts-kitGuides for using ai agents skills like shorts-kit.
See how shorts-kit compares with popular alternatives.
shorts-kit is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by howznguyen. Make narrated vertical shorts (TikTok, YouTube Shorts, Reels) with a coding agent and Remotion. 9+ agent skills, 20+ story flows, fact ledger, CC0 SFX. It has 59 GitHub stars.
shorts-kit's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/howznguyen/shorts-kit" and add it to your Claude Code skills directory (see the Installation section above).
shorts-kit is primarily written in TypeScript. It is open-source under howznguyen on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh shorts-kit against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.

Make narrated vertical shorts (TikTok, YouTube Shorts, Reels) with a coding agent and Remotion.
You talk to your agent ("make a video about why the sky is blue"). The agent follows the kit's skills step by step: facts first, a storytelling flow, the script, the voice, the scenes, stills to check, the render, the cover and the caption. You review, then you upload the file yourself. The kit never posts anything.
The rules and skills come from a private pipeline that took a new knowledge channel from zero to about 120k views on its best video in two months. Every rule keeps the reason it exists, because most of them were written after a published video broke it. They are defaults: change them for your own channel.
The channel these rules came from, two months in. The best videos and the flops sit side by side on purpose: topics close to the audience carried it (tens of thousands of views), topics that drifted from the channel's niche got a few hundred. The kit cannot pick your topic for you.

What a finished run reports, from the original private pipeline (it also copied files to a NAS and applied that channel's own swearing rule; neither is part of this kit):

.claude/skills/sk-*), started by sk-pipeline. They work in
Claude Code, and in any agent that reads AGENTS.md (Codex, OpenCode, ...).[measured], [default], [craft] or [hard] so you know how freely to
change it.docs/flows/): Three reasons, Trace back, Explain it,
Reading a graph, Empty world with a late reveal, and more. Each has beats, when to use
it and its traps.docs/facts/). No sentence goes into a script before its claim
has a verified record, and the linter enforces it.src/shared/): word-timed captions, kinetic type, safe-zone
overlay, music bed and SFX, camera moves, and an illustrated world (sky, sea, sun,
moon, stars, clouds, rain, birds, people, fish).src/shared/map/): satellite imagery with a camera that flies
from country to street and stays sharp, coastlines, borders and rivers from Natural
Earth, routes that draw on, pins, measured distances, filled regions, a ready Vietnam map
with the Hoàng Sa and Trường Sa archipelagos, a 3D globe with great-circle lines, and a
pull-out from any scene to the globe.bun run dev gallery.bun run ingest, bun run cut): Whisper
transcribes the recording, fillers, retakes and long silences are proposed as cuts, and
the cut voice drives the video like a TTS voice would. Film yourself (talking-head, the
take is the background and effects stay off your face) or bring a voice recording only.
The words stay what was said: every claim in them still needs a verified fact. See
docs/visuals/talking-head.md.public/sfx/), and a guide to using
them (docs/sfx.md).bun run preview) showing each video's progress, the render,
the stills, the cover at profile-grid size, and the caption ready to copy. The Script tab
plays the voice with the spoken word highlighted; the Storyboard tab shows every planned
shot with its line, still and playback, for approval before scenes are built. The steps
it tracks come from docs/pipeline.json, so a step your channel adds shows up too.
PATHedge (Microsoft Edge online voices): free, no key. The service
sometimes stops answering; bun run tts retries.vieneu (VieNeu-TTS):
free and offline on CPU, 25 preset voices or clone your own. Needs Python 3.10+.say (built into macOS): free and offline, for testing only. The example uses it
so the kit runs with no network.whisper-cli) and its large-v3-turbo model, below.Install the tools:
# macOS
brew install bun ffmpeg
# Linux
curl -fsSL https://bun.sh/install | bash
sudo apt install ffmpeg
# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"
winget install ffmpeg
git clone https://github.com/howznguyen/shorts-kit.git
cd shorts-kit
bun install
For ElevenLabs, copy .env.example to .env and set ELEVENLABS_API_KEY.
For VieNeu (Vietnamese), install it once into a local Python env (needs uv):
uv venv --python 3.12 .venv-vieneu
uv pip install --python .venv-vieneu/bin/python vieneu
.venv-vieneu/bin/python scripts/lib/engines/vieneu_bridge.py --voices # downloads the model (~600 MB), lists voices
Then in narration.json: "voice": {"engine": "vieneu", "voice": "Thiện Minh"}. voice
is a preset name or the path to a 3–8 s .wav to clone (only a voice you have the
right to use).
To use your own recording instead of TTS, install whisper.cpp and download the model once (1.6 GB):
brew install whisper-cpp # macOS; on Linux or Windows build it from github.com/ggml-org/whisper.cpp
mkdir -p .cache/whisper && curl -L -o .cache/whisper/ggml-large-v3-turbo.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo.bin
Build the example video ("Why is the sky blue?", about 43 s) from start to finish. On macOS this needs no key and no network except for fonts:
bun run tts example # voice + word timestamps
bun run lint example # machine checks: 0 errors expected
bun run render example # out/example/example.mp4
bun run cover example # out/example/example-cover.png
bun run normalize example # loudness to -13 LUFS
bun run encode example # out/example/example-upload.mp4, ready to upload
bun run preview # open http://127.0.0.1:7788
On Linux or Windows there is no say: set "engine": "edge" (or "elevenlabs") in
src/videos/example/narration.json first.
Open your agent in the repo and say:
set up the kit for my channel
sk-improve asks about your niche, language, platform, voice, tone and video length,
then edits SOUL.md and docs/soul/thresholds.json to match, and logs every change.
Then:
make a video about
sk-pipeline takes it from there. It tells you where it is and what it needs from you:
mostly approving the script, listening to the voice, and looking at stills.
Already have a recording? Say:
make a video from ~/Movies/take.mov
The agent runs bun run from (a talking-head video, or a voice-only one for an audio file;
several clips or a folder work too), and asks you what you actually said wherever Whisper was unsure. Expect
that: on a real take it misheard a phrase as a number and dropped whole words.
| Command | What it does |
|---|---|
bun run new <id> --flow <A..T> |
scaffold src/videos/<id>/ from a flow's beats |
bun run dev <id> |
Remotion Studio for that video |
bun run tts <id> [--force] |
synthesise the whole script, write the audio and voice.json |
bun run from <file|dir>... |
"here is my video, edit it": scaffold, transcribe every clip, cut, storyboard stub, and the questions only the speaker can answer |
bun run ingest <id> <file> |
recorded voice instead of TTS (a filmed take or a voice recording): Whisper transcript and proposed cuts |
bun run cut <id> |
apply the reviewed cuts.json: the voice track (and the cut video for talking-head), voice.json |
bun run storyboard <id> [--init|--sync] |
the shot list after the voice: scaffold it, print each shot with its time and what to fix; --sync re-pins shots to their lines after the words change |
bun run lint <id> |
style, facts, length and timing checks from thresholds.json |
bun run facts |
validate the fact ledger |
| `bun run still --frame=N |