New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Orchestrates one narrated vertical short from idea

sk-pipeline: one video, idea to hand-off

by howznguyen · MIT license · ★ 69 on GitHub

sk-pipeline: one video, idea to hand-off cover

Orchestrates one narrated vertical short (TikTok, YouTube Shorts, Reels) from idea to upload-ready hand-off files, in the fixed order idea, facts, flow and visual choice, brief, narration, TTS, lint, scenes, still review, render, cover,…

---
name: sk-pipeline
description: Orchestrates one narrated vertical short (TikTok, YouTube Shorts, Reels) from idea to upload-ready hand-off files, in the fixed order idea, facts, flow and visual choice, brief, narration, TTS, lint, scenes, still review, render, cover, normalize, encode, hand-off. Use when the user says "make a video about X", "start a new short", "take this idea to a finished video", "what's the next step", "where was I on this video", or asks how the whole pipeline fits together. Also when the user gives a video or audio file (or a folder of clips) to edit: "edit this video", "dựng video này", a .mov/.mp4 path. Points at the skill and the SOUL section that governs each step.
---

# sk-pipeline: one video, idea to hand-off

**Announce:** "Using sk-pipeline for <id>."

## This skill is not the rules

The rules live in `SOUL.md` and `docs/soul/`. This skill only fixes the **order**
and points at the skill and § for each step. Where it disagrees with a §, the §
wins and this file is the one to fix. Do not copy rules into skills: two copies
drift and nobody knows which is current.

Read `SOUL.md` first (index, three first rules, pipeline order, checklist). It
holds this channel's editable defaults; changing them is `sk-improve`'s job. Then

Overview

The rules live in SOUL.md and docs/soul/. This skill only fixes the order and points at the skill and § for each step. Where it disagrees with a §, the § wins and this file is the one to fix. Do not copy rules into skills: two copies drift and nobody knows which is current.

Manual install (npx, ZIP)
Claude Codenpx skills add howznguyen/shorts-kit --skill sk-pipeline -g -a claude-code
Claude Code (degit)npx degit howznguyen/shorts-kit/.claude/skills/sk-pipeline#main ~/.claude/skills/sk-pipeline
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.5 KB
Read SKILL.md here
howznguyen/main1 file shown
SKILL.md
Show the full text103 lines

sk-pipeline: one video, idea to hand-off

Announce: "Using sk-pipeline for <id>."

This skill is not the rules

The rules live in SOUL.md and docs/soul/. This skill only fixes the order and points at the skill and § for each step. Where it disagrees with a §, the § wins and this file is the one to fix. Do not copy rules into skills: two copies drift and nobody knows which is current.

Read SOUL.md first (index, three first rules, pipeline order, checklist). It holds this channel's editable defaults; changing them is sk-improve's job. Then open only the § for the step you are on; do not load the whole of docs/soul/. Exact commands per step are in docs/making-a-video.md.

The steps

# Step Skill Rules Evidence on disk before moving on
0 If SOUL.md's change log has no entries, the rules were never adapted: offer first-run setup sk-improve SOUL.md change log has entries, or user declined
1 Idea: one sentence the viewer can repeat after watching sk-brief §1 sentence written in the brief
2 Facts: every claim sourced and recorded sk-facts §9 bun run facts clean
3 Flow + visual choice, image licences checked sk-brief §2, §5, docs/flows/, docs/visuals/ bun run new <id> --flow <X> done
4 Brief sk-brief §2, §5 briefs/<id>.md with fact ids
5 Narration sk-narration (polish: sk-style) §1, §3, §3b, §3c src/videos/<id>/narration.json
6 TTS sk-narration §4 voice.json + public/audio/<id>/voice.mp3, listened to
7 Lint sk-narration docs/soul/thresholds.json bun run lint <id> 0 errors, warnings read
7b Storyboard: one row per camera shot, approved by the user before any scene code sk-scene §12, docs/storyboard.md bun run storyboard <id> clean, shots approved
8 Scenes (+ optional SFX, docs/sfx.md) sk-scene §5, §6, §7, §8, §12, §13 bun run check clean
9 Still review sk-scene §7 stills in out/<id>/ opened and looked at
10 Render sk-render §11 out/<id>/<id>.mp4, frames checked
11 Cover sk-handoff §10 out/<id>/<id>-cover.png checked at 200 px
12 Normalize sk-render §8 out/<id>/<id>-loud.mp4, loudness measured
13 Encode sk-render §11 out/<id>/<id>-upload.mp4, ffprobe checked
14 Hand-off sk-handoff §10, §11 caption, pinned comment, credits in out/<id>/
A recorded voice instead of TTS (§5j)

When the user brings a recording (a filmed take, several clips, or a voice-only audio file), the voice is what was said, not written. Start with bun run from <file|dir>...: it does steps 3, 5a and 5b below in one go and prints what to ask the speaker. Steps 5 and 6 become ingest and cut; the rest keeps its order:

# Step Command Evidence
3 Flow + visual: talking-head shows the take; any other visual uses only its audio bun run new <id> --flow <X> --visual talking-head or --visual <type> --voice recorded narration.json voice.engine recorded
5a Ingest: normalise, Whisper transcript, proposed cuts bun run ingest <id> <file> --lang <code> [--prompt "names"] transcript.json, review read, every ⟪words missing?⟫ heard
5b Cut: edit cuts.json (reasons), fix misheard words with spelling, never retype a line bun run cut <id> footage.json, voice.mp3 listened to end to end
2 Facts, AFTER the transcript: every claim said is verified, cut, or "claim": false sk-facts lint has no "cites no fact" error

Ask the user for the exact words wherever Whisper is unsure (? in the review, numbers, names, ⟪words missing?⟫): an agent cannot hear the take, and Whisper writes what it expects. Then regroup lines into the flow's beats, declare face for talking-head, and continue at step 7.

The step list the preview shows lives in docs/pipeline.json. A channel that adds, removes or reorders a step changes it there (with sk-improve), and the preview follows.

After the user has posted and has numbers: sk-improve.

Three orderings that are rules, not habits

  1. Facts before words (step 2 before step 5). No sentence is written before its claim has a verified record. Writing first and sourcing later is how a good-sounding sentence survives with no source behind it.
  2. Visual language before words (step 3 before step 5). Decide how each claim gets on screen, and check the licence of every image, before scripting. A script built around an image you may not use has to be rewritten.
  3. Script is final before TTS, TTS before scenes. Scene length comes from the real voice track, never set by hand. Editing text after TTS means running TTS again, or captions drift silently.

The cross-cutting principle

A step is done when there is evidence on disk, not when the command exits 0. This pipeline fails silently: an mp4 that exits 0 but is truncated, a still that renders but has text under the platform UI, a voice track that loops a phrase. Open the file, look at the frame, listen to the audio.

Hard limits

  • Never auto-publish. The pipeline ends at files in out/<id>/. The user uploads by hand. Do not write or run upload scripts.
  • Never hand-edit voice.json. It is generated by bun run tts <id> (or bun run cut <id> for a recorded voice).
  • A video never imports another video. Shared code goes to src/shared/. bun run check enforces this.

Checklist

Use the pre-hand-off checklist in SOUL.md, not a copy of it anywhere else.

Resuming a video

Look at what exists: briefs/<id>.md, src/videos/<id>/narration.json, voice.json, out/<id>/*. The first missing piece in the table above is the next step. If narration.json is newer than voice.json, TTS is stale.

1---
2name: sk-pipeline
3description: Orchestrates one narrated vertical short (TikTok, YouTube Shorts, Reels) from idea to upload-ready hand-off files, in the fixed order idea, facts, flow and visual choice, brief, narration, TTS, lint, scenes, still review, render, cover, normalize, encode, hand-off. Use when the user says "make a video about X", "start a new short", "take this idea to a finished video", "what's the next step", "where was I on this video", or asks how the whole pipeline fits together. Also when the user gives a video or audio file (or a folder of clips) to edit: "edit this video", "dựng video này", a .mov/.mp4 path. Points at the skill and the SOUL section that governs each step.
4---
5 
6# sk-pipeline: one video, idea to hand-off
7 
8**Announce:** "Using sk-pipeline for <id>."
9 
10## This skill is not the rules
11 
12The rules live in `SOUL.md` and `docs/soul/`. This skill only fixes the **order**
13and points at the skill and § for each step. Where it disagrees with a §, the §
14wins and this file is the one to fix. Do not copy rules into skills: two copies
15drift and nobody knows which is current.
16 
17Read `SOUL.md` first (index, three first rules, pipeline order, checklist). It
18holds this channel's editable defaults; changing them is `sk-improve`'s job. Then
19open only the § for the step you are on; do not load the whole of `docs/soul/`.
20Exact commands per step are in `docs/making-a-video.md`.
21 
22## The steps
23 
24| # | Step | Skill | Rules | Evidence on disk before moving on |
25|---|---|---|---|---|
26| 0 | If `SOUL.md`'s change log has no entries, the rules were never adapted: offer first-run setup | `sk-improve` | `SOUL.md` | change log has entries, or user declined |
27| 1 | Idea: one sentence the viewer can repeat after watching | `sk-brief` | §1 | sentence written in the brief |
28| 2 | Facts: every claim sourced and recorded | `sk-facts` | §9 | `bun run facts` clean |
29| 3 | Flow + visual choice, image licences checked | `sk-brief` | §2, §5, `docs/flows/`, `docs/visuals/` | `bun run new <id> --flow <X>` done |
30| 4 | Brief | `sk-brief` | §2, §5 | `briefs/<id>.md` with fact ids |
31| 5 | Narration | `sk-narration` (polish: `sk-style`) | §1, §3, §3b, §3c | `src/videos/<id>/narration.json` |
32| 6 | TTS | `sk-narration` | §4 | `voice.json` + `public/audio/<id>/voice.mp3`, listened to |
33| 7 | Lint | `sk-narration` | `docs/soul/thresholds.json` | `bun run lint <id>` 0 errors, warnings read |
34| 7b | Storyboard: one row per camera shot, approved by the user before any scene code | `sk-scene` | §12, `docs/storyboard.md` | `bun run storyboard <id>` clean, shots `approved` |
35| 8 | Scenes (+ optional SFX, `docs/sfx.md`) | `sk-scene` | §5, §6, §7, §8, §12, §13 | `bun run check` clean |
36| 9 | Still review | `sk-scene` | §7 | stills in `out/<id>/` opened and looked at |
37| 10 | Render | `sk-render` | §11 | `out/<id>/<id>.mp4`, frames checked |
38| 11 | Cover | `sk-handoff` | §10 | `out/<id>/<id>-cover.png` checked at 200 px |
39| 12 | Normalize | `sk-render` | §8 | `out/<id>/<id>-loud.mp4`, loudness measured |
40| 13 | Encode | `sk-render` | §11 | `out/<id>/<id>-upload.mp4`, ffprobe checked |
41| 14 | Hand-off | `sk-handoff` | §10, §11 | caption, pinned comment, credits in `out/<id>/` |
42 
43### A recorded voice instead of TTS (§5j)
44 
45When the user brings a recording (a filmed take, several clips, or a voice-only audio
46file), the voice is what was said, not written. Start with `bun run from <file|dir>...`:
47it does steps 3, 5a and 5b below in one go and prints what to ask the speaker. Steps 5 and 6 become **ingest** and **cut**; the rest
48keeps its order:
49 
50| # | Step | Command | Evidence |
51|---|---|---|---|
52| 3 | Flow + visual: `talking-head` shows the take; any other visual uses only its audio | `bun run new <id> --flow <X> --visual talking-head` or `--visual <type> --voice recorded` | `narration.json` voice.engine `recorded` |
53| 5a | Ingest: normalise, Whisper transcript, proposed cuts | `bun run ingest <id> <file> --lang <code> [--prompt "names"]` | `transcript.json`, review read, every `⟪words missing?⟫` heard |
54| 5b | Cut: edit `cuts.json` (reasons), fix misheard words with `spelling`, never retype a line | `bun run cut <id>` | `footage.json`, `voice.mp3` listened to end to end |
55| 2 | Facts, AFTER the transcript: every claim said is verified, cut, or `"claim": false` | `sk-facts` | lint has no "cites no fact" error |
56 
57Ask the user for the exact words wherever Whisper is unsure (`?` in the review, numbers,
58names, `⟪words missing?⟫`): an agent cannot hear the take, and Whisper writes what it
59expects. Then regroup lines into the flow's beats, declare `face` for talking-head, and
60continue at step 7.
61 
62The step list the preview shows lives in `docs/pipeline.json`. A channel that adds, removes or reorders a step changes it there (with `sk-improve`), and the preview follows.
63 
64After the user has posted and has numbers: `sk-improve`.
65 
66## Three orderings that are rules, not habits
67 
681. **Facts before words** (step 2 before step 5). No sentence is written before
69 its claim has a `verified` record. Writing first and sourcing later is how a
70 good-sounding sentence survives with no source behind it.
712. **Visual language before words** (step 3 before step 5). Decide how each
72 claim gets on screen, and check the licence of every image, before scripting.
73 A script built around an image you may not use has to be rewritten.
743. **Script is final before TTS, TTS before scenes.** Scene length comes from the
75 real voice track, never set by hand. Editing text after TTS means running TTS
76 again, or captions drift silently.
77 
78## The cross-cutting principle
79 
80**A step is done when there is evidence on disk, not when the command exits 0.**
81This pipeline fails silently: an mp4 that exits 0 but is truncated, a still that
82renders but has text under the platform UI, a voice track that loops a phrase.
83Open the file, look at the frame, listen to the audio.
84 
85## Hard limits
86 
87- **Never auto-publish.** The pipeline ends at files in `out/<id>/`. The user
88 uploads by hand. Do not write or run upload scripts.
89- **Never hand-edit `voice.json`.** It is generated by `bun run tts <id>`
90 (or `bun run cut <id>` for a recorded voice).
91- **A video never imports another video.** Shared code goes to `src/shared/`.
92 `bun run check` enforces this.
93 
94## Checklist
95 
96Use the pre-hand-off checklist in `SOUL.md`, not a copy of it anywhere else.
97 
98## Resuming a video
99 
100Look at what exists: `briefs/<id>.md`, `src/videos/<id>/narration.json`,
101`voice.json`, `out/<id>/*`. The first missing piece in the table above is the
102next step. If `narration.json` is newer than `voice.json`, TTS is stale.
103 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 69
Checked
Source
howznguyen/shorts-kit ↗
Creator
howznguyen · 1 listing
View creator

Similar skills

See all →
MCPGet from zero to orchestrated multi-agent pipeline in 5⚡ NEXUS Quick-Start Guidemsitarzewski/agency-agents · by msitarzewski> Get from zero to orchestrated multi-agent pipeline in 5 minutes.★ 154k GitHub starsSkillStep 1 of the AI Video Editor pipelineclean-cut — the step-1 cut pipelinehassancs91/claude-youtube-editor · by hassancs91Step 1 of the AI Video Editor pipeline — turn raw talking-head footage into a clean master cut. Use when the user wants to "clean cut", "cut the raw footage", "remove filler / dead air / bad takes", "tighten the pacing", produce cuts.json, run the cut editor, or render a cleaned preview/master for a video-N project in this repo. Covers audio extraction, AssemblyAI transcription, authoring cuts.json (keeps/cuts/fluff categorized), the cut policy (content-aggressive, pause-natural ~0.5s), QA + review docs, the local cut-editor UI, tight/natural previews, the final 4K60 render, and producing edited-transcript.json as the handoff to /make-tsx. Not for building TSX overlays (that is /make-tsx) or the raw TSX authoring rules (that is vidtsx-2d-generator).★ 330 GitHub starsSkillMake an original animated music videoVocaloid-style MV pipeline (手書き / 文字PV)EGSECDA/vocaloid-style-mv-pipeline · by EGSECDAMake an original animated music video (MV / PV) for a song from its audio file plus lyrics, in the Vocaloid / J-pop lyric-video tradition: 手書き/tegaki (V家手书, 手描きMV, ボカロPV), 文字PV and kinetic typography (リリックモーション, リリックビデオ, 歌詞動画, 歌词视频, 动态歌词), anime-illustration MVs with an original character — for any mood, from dark ballads to bright upbeat summer pop. Renders to MP4 with a deterministic Canvas2D/WebGL2 engine in a headless browser: JIZURA lyric motion, AI-generated art, optional Blender toon 3D, beat-locked editing, 9:16 vertical/Shorts version. Use it whenever the user wants a music video, MV, PV, lyric video or beat-synced animation for a song, e.g. make an MV for my song", "turn this track into a lyric video", "给这首歌做个MV/PV", "做个V家手书", "この曲のMVを作って", ボカロPV作って", "縦型ショートも" — even if they only give a .wav/.mp3 and say "make a cool video for it". Not for editing existing footage or clip compilations.★ 169 GitHub starsSkillConstruction company AI agentConstruction Agent — Email → Project Management Pipelinehewi333/Mom-n-Pop-Skills · by hewi333Construction company AI agent — orchestrates email (Google Workspace), project management (JobTread Pave API), and file routing for a construction business. Handles email triage, attachment routing to JobTread, project status, task management, and daily briefings via Telegram. Reference implementation for a construction/trades business with an existing email→Drive→PM pipeline.★ 122 GitHub starsSkillTracking customer interactions, managing leadsCRM-Lite — Lightweight SQLite CRM for Small Businesshewi333/Mom-n-Pop-Skills · by hewi333Use when tracking customer interactions, managing leads, or building a lightweight CRM for small businesses without dedicated CRM software. Stores contacts, leads, activities, estimates, and communications in local SQLite.★ 122 GitHub starsMCPReady-to-use prompt templates for activating any agent🎯 NEXUS Agent Activation Promptsmsitarzewski/agency-agents · by msitarzewski> Ready-to-use prompt templates for activating any agent within the NEXUS pipeline. Copy, customize the [PLACEHOLDERS], and deploy.★ 154k GitHub stars