Showtime
FavioVazquez/showtime
A skill your agent uses when the user wants a video made, edited or finished: a launch or promo, product demo, explainer, trailer or teaser, tutorial or walkthrough, a screen recording turned into a…
Edit a Vietnamese vertical TikTok video (9:16) with HyperFrames following the Noti.vn/GĐT standard - talking-head + kinetic typography + karaoke captions + zoom/punch-in camera + timestamp-synced…
$ npx skills add notivn/AIEV --skill noti-tiktok-vn -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install notivn/AIEV noti-tiktok-vn --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/notivn/AIEV.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/noti-tiktok-vn .claude/skills/noti-tiktok-vn && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "noti-tiktok-vn" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vn into .claude/skills/noti-tiktok-vn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-tiktok-vn", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vnType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add notivn/AIEV --skill noti-tiktok-vn -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install notivn/AIEV noti-tiktok-vn --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notivn/AIEV.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/noti-tiktok-vn .agents/skills/noti-tiktok-vn && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "noti-tiktok-vn" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vn into .agents/skills/noti-tiktok-vn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-tiktok-vn", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add notivn/AIEV --skill noti-tiktok-vn -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install notivn/AIEV noti-tiktok-vn --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notivn/AIEV.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/noti-tiktok-vn .cursor/skills/noti-tiktok-vn && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "noti-tiktok-vn" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vn into .cursor/skills/noti-tiktok-vn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-tiktok-vn", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/notivn/AIEV.git --path .claude/skills/noti-tiktok-vn--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add notivn/AIEV --skill noti-tiktok-vn -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install notivn/AIEV noti-tiktok-vn --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notivn/AIEV.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/noti-tiktok-vn .gemini/skills/noti-tiktok-vn && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "noti-tiktok-vn" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vn into .gemini/skills/noti-tiktok-vn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-tiktok-vn", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install notivn/AIEV noti-tiktok-vnInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add notivn/AIEV --skill noti-tiktok-vn -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/notivn/AIEV.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/noti-tiktok-vn .github/skills/noti-tiktok-vn && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "noti-tiktok-vn" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vn into .github/skills/noti-tiktok-vn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-tiktok-vn", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add notivn/AIEV --skill noti-tiktok-vn -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install notivn/AIEV noti-tiktok-vn --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notivn/AIEV.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/noti-tiktok-vn .opencode/skills/noti-tiktok-vn && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "noti-tiktok-vn" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-tiktok-vn into .opencode/skills/noti-tiktok-vn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-tiktok-vn", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
noti-tiktok-vnEdit a Vietnamese vertical TikTok video (9:16) with HyperFrames following the Noti.vn/GĐT standard - talking-head + kinetic typography + karaoke captions + zoom/punch-in camera + timestamp-synced…
Noti Tiktok Vn is an agent skill from notivn/AIEV. Edit a Vietnamese vertical TikTok video (9:16) with HyperFrames following the Noti.vn/GĐT standard - talking-head + kinetic typography + karaoke captions + zoom/punch-in camera + timestamp-synced sound effects, rendered to MP4. Ships with the verified fixes (gradient text dropping diacritics, Vietnamese transcription, ffmpeg PATH). Use when the user hands over a Vietnamese clip and wants it built into a TikTok video with animated text + subtitles + beat-synced zoom in the dark fintech blue style.
Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Motion graphics, Transcription and Video production. It works with TikTok, HeyGen, FFmpeg and GSAP. The repository describes itself as: Automatic AI video editing. Claude directs HyperFrames (HTML + GSAP motion graphics) and Remotion (timeline assembly) to turn raw footage into a finished MP4 - transcript… The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e40fe03. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxffmpegwingetnpmpipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
fonts.googleapis.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Noti Tiktok Vn loads about 5.4k tokens when it runs. Until then it costs about 129 tokens; SKILL.md has 2,523 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from notivn/AIEV at commit e40fe03, republished under its MIT licence (© notivn). 2,523 words, ~5,385 tokens.
.claude/skills/noti-tiktok-vn/SKILL.md (or your agent's skills folder).If the edit prompt contains a "STYLE DESIGN (BẮT BUỘC TUÂN THỦ 100%)" section: the palette, fonts and tone in that section COMPLETELY REPLACE every color/font/branding rule in this skill (including "dark fintech blue", the GĐT hex values, the default gradient...). Keep only: animation technique, layout, cutting rhythm, render workflow, the bug fixes. Illustrations generated through /api/illustrations must pass the correct styleId in the prompt. NO Style Design section → use the skill's default branding.
If the edit prompt ALSO contains a "PHONG CÁCH DỰNG" (video style) section: that section WINS over this skill for ALL visual and motion language - materials, transitions, camera moves, effects. This skill then keeps only PROCESS: step order, cutting, captions/keys, draft→final, QC. Do not mix the skill's default visuals into the video style - half-and-half is exactly the failure this rule exists to prevent.
This skill builds Vietnamese vertical TikTok videos with HyperFrames (HTML/CSS/JS + GSAP → MP4).
Project structure: scaffold with npx hyperframes init, then follow the layout documented in the video-pipeline skill: index.html + compositions/*.html + assets/ + renders/ + hyperframes.json + meta.json.
(video-projects/sapo/ is an example project on the author's machine and is NOT shipped with the repo - video-projects/ is gitignored. If that folder is absent, everything you need is written out inline below.)
⚡ Read this whole file before building. Every ⚠️ section is a bug already hit & already fixed - do NOT repeat it.
Video editor working in HyperFrames. Compose HTML/CSS/JS, animate with GSAP, render a vertical MP4.
bottom: ~372px (above the app button column).<template> + data-composition-src), timed via data-start/data-duration/data-track-index.#0A0E1A → #0F1629 (gradient) + light grain.linear-gradient(100deg, #0061ff, #00c2ff) via background-clip:text for headings.background: rgba(255,255,255,0.06); backdrop-filter: blur(20px); border-radius: 20px; with the edge drawn by box-shadow (do NOT use a hard 1px border):
box-shadow: inset 0 1px 0 rgba(255,255,255,0.18), inset 0 0 0 1px rgba(255,255,255,0.05), 0 18px 50px rgba(0,0,0,0.45);-0.03em) on large headings.filter: drop-shadow(0 0 26px rgba(0,140,255,0.4)) (drop-shadow for gradient text, NOT text-shadow, because the glyphs are transparent).power3.out.filter drop-shadow).#19c8ff + scale 1.13.power4.inOut) on fast beats; scale-zoom on accent scenes (see the 🔍 ZOOM section).setTimeout/Date.now()/Math.random() - GSAP timeline only (HyperFrames captures frames by timeline time). Every animation must be deterministic.A talking head sitting still for 30–60s is deadly dull. Add camera motion (zoom) locked to timestamps + matched to SFX + fitting the content to hold the eye. This is the main retention driver → it is MANDATORY in every video, unless the video style's (PHONG CÁCH DỰNG) motion spec says otherwise.
width/height/top/left on a <video> → the frame freezes (already noted in RENDER CONTRACT). Zoom = animate scale (transform) on the DIV wrapping the video (#face-wrapper), never directly on the <video>.#face-wrapper { position:absolute; inset:0; overflow:hidden; will-change:transform; }
#face-video { width:100%; height:100%; object-fit:cover; }// aim transform-origin at the PERSON'S FACE (not the frame center) so the zoom lands on the face, not the forehead/chin
gsap.set("#face-wrapper", { transformOrigin: "50% 38%" });
// accent punch-in: snap in, hold, release
tl.to("#face-wrapper", { scale: 1.12, duration: 0.30, ease: "power4.out" }, AT)
.to("#face-wrapper", { scale: 1.0, duration: 0.45, ease: "power2.inOut" }, AT + HOLD);transform-origin fixed for the whole zoom move (do not change it mid-move → visible jerk). Every tween deterministic (GSAP timeline, no setTimeout/random).overflow:hidden and the video object-fit:cover with enough overscan; keep the punch amplitude small (see below) so the edge never reveals the background.| Type | When to use | Amplitude & ease |
|---|---|---|
| Accent punch-in (snap in, then release) | The payoff line/punchline, a shocking number, an expensive keyword, when the voice rises/tightens | 1.0→1.10–1.14, snap in power4.out 0.25–0.4s, hold ~0.6–1s then release power2.inOut |
| Ken Burns drift (very slow, continuous zoom) | Bed for ordinary long stretches of speech so the shot never goes static | 1.0→1.05 (or 1.05→1.0) stretched across the whole beat, ease none/sine.inOut - barely visible but kills the static feel |
| Zoom-out reveal (start close → pull back) | Opening a new scene, dropping the tempo, changing idea, "step back and see the whole picture" | 1.12→1.0, ease power3.out ~0.5s |
pop.mp3/ding.mp3/anime-wow-1.mp3) → the SFX data-start = the moment the scale tween begins. Eye sees the zoom and ear hears the hit on the same frame → the accent is doubled (see the 🔊 SOUND EFFECT section).Extract frames right at the edges of the zoom move (start, peak, end) - e.g. for a punch at 14.2s pull 14.1 / 14.4 / 15.0s - and check: the face scales smoothly with no distortion/freeze, no background edge exposed, the caption still sits still in place, and the zoom landing matches the SFX onset (listen back to that stretch).
Shared library: assets/sound-effects/ (from inside a project: ../../assets/sound-effects/). The recommended set = the entries tagged hay-dung in assets/sound-effects/library.json. Skip any entry whose file is not on disk - library.json still lists a few files that are not shipped with the repo. The exact <audio id="sfx-*"> wiring is in "Wiring it in" below.
data-start = the exact EVENT beat (= the zoom beat if that accent has a zoom), NOT the vague start of the scene.Semantic map → file: good numbers → ding.mp3/ting.wav; money → ka-ching.mp3/money.mp3; element/keyword pop → pop.mp3; image/snapshot → camera-snap.wav/camera-flash-1.wav; bad/wrong numbers → error.mp3; wow/punch → anime-wow-1.mp3; typing → mechanical-keyboard.mp3/iphone-typing.mp3; click → click-button.mp3/mouse-click.mp3.
Wiring it in:
assets/sfx/ (keeps the project portable - do NOT let src point outside the project).<audio> in the root composition, next to the narration <audio>. ⚠️ NO class="clip" on <audio> (Render Contract - it breaks audio):<audio id="sfx-1" data-start="14.20" data-duration="2.0" data-track-index="6" data-volume="0.5" src="assets/sfx/pop.mp3"></audio>data-track-index (4,5,6,…) - clips on the same track must NOT overlap in time. Narration is on track 0; SFX use tracks 4 and up.data-volume 0.4–0.6 (under the narration at 1.0) so it never buries the voice; a comedic punch can go 0.55–0.65.data-duration long enough for the SFX to finish ringing (1–3s); too short and it gets cut off.Four production-verified lessons - skipping any of them produced audible bugs:
data-media-start, not by re-encoding. Many library files carry 0.1–1.0s of silence before the actual sound, so the SFX lands late even with a correct data-start. Probe each file with ffmpeg -af silencedetect=noise=-45dB:d=0.05 and set data-media-start (HyperFrames) / mediaStart (Remotion manifest) to skip it.-ss <onset> -t 1.5 + volumedetect/ebur128) - a whole-file mean tells you nothing about whether the hit buries the voice at that moment.volume=0.71), then mix the SFX and re-check true peak.display=block - the HyperFrames renderer fetches & caches it and injects a deterministic @font-face (verified: log "Fetched ... font face(s) ... Injected deterministic @font-face"):<link href="https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@400;600;700;800&display=block&subset=vietnamese" rel="stylesheet"><meta charset="UTF-8"> + <html lang="vi">.font-display: block (NOT swap).font-family: "Be Vietnam Pro", "Inter", sans-serif;Ưu đãi độc quyền - giảm giá sốc! Đừng để vụt mất cơ hội này. ƯỢ Ễ Ỹ ặ ậ ềHeading text using background-clip:text; color:transparent will CLIP TALL STACKED DIACRITICS (the tilde on Ẫ, the hook on Ể, the circumflex on Ấ…) because the mark sticks out above the gradient fill box → that part never gets painted → it reads as a missing diacritic.
padding-top: 0.14em IS NOT ENOUGH. It must be 0.5em. Apply this to EVERY gradient heading line:
.heading-gradient {
background: linear-gradient(100deg, #0061ff 0%, #00c2ff 100%);
-webkit-background-clip: text; background-clip: text; color: transparent;
line-height: 1.0;
padding-top: 0.5em; /* stops the tall stacked marks above from being clipped (Ẫ Ể Ấ Ữ Ổ…) */
padding-bottom: 0.14em; /* stops the dot-below marks from being clipped (Ụ Ộ Ạ Ợ…) */
}Plain WHITE text (no background-clip) does NOT have this bug - overflowing marks still render. Only gradient text needs the fix.
Karaoke captions all sit at the same spot (bottom). If the video is spoken continuously with no pauses, the previous line has not finished fading out when the next one fades in → two lines stacked on top of each other, unreadable. (This bug stays hidden on clips with plenty of silence.)
Fix: the previous line must be FULLY off before/exactly when the next one appears - its fade-out completes at the fade-in time of the next line. Use PRE_ROLL = 0, and:
const inAts = SEGMENTS.map(s => Math.max(s.words[0].start, 0));
// per line: fadeInAt = inAts[i];
// fadeOutAt = (i < n-1) ? Math.max(segEnd+0.02, inAts[i+1] - FADE_OUT) : segEnd + POST_HOLD;When verifying, you MUST pull a few extra frames right at the BOUNDARY between two caption lines (not just mid-sentence) to be sure they never overlap.
Every sub-comp (data-composition-src) renders in its own context → it inherits NOTHING from the master:
<script src=".../gsap.min.js">.<link> (right inside the <template>).var(--accent-grad)) from the master's :root inside a sub-comp - use literal values (hex/gradient written out). The var resolves to empty when rendered in isolation.winget install Gyan.FFmpeg. The PATH change only applies to NEW shells → when calling npx hyperframes, prepend the bin to $env:Path inline:
$bin="C:\Users\<user>\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_*\ffmpeg-*-full_build\bin"; $env:Path="$bin;$env:Path"npm install at the repo root; npx hyperframes browser ensure (downloads its own Chromium).npx hyperframes transcribe needs an external whisper-cpp binary (NOT bundled) and an .en English-only model → do not use it for Vietnamese.Use faster-whisper (pip install faster-whisper - a wheel exists for Python 3.14):
import sys; sys.stdout.reconfigure(encoding="utf-8") # the Windows cp1252 console cannot print diacritics
from faster_whisper import WhisperModel
# GPU first (verified on a GTX 1660: TWICE as fast + frees the CPU for rendering) - fall back to CPU on error
try:
m = WhisperModel("large-v3", device="cuda", compute_type="float16")
except Exception:
m = WhisperModel("large-v3", device="cpu", compute_type="int8")
segs, info = m.transcribe("audio.wav", language="vi", word_timestamps=True, vad_filter=True, beam_size=5)
# export JSON {segments:[{start,end,text,words:[{word,start,end}]}]}Extract the audio: ffmpeg -i input.mp4 -vn -ac 1 -ar 16000 audio.wav.
Whisper mishears in places (e.g. "bằng bài công nghệ" → actually "về công nghệ") - reread the transcript and clean the captions up so they are correct and tight.
TikTok suits short video. If the source clip is long, propose trimming to ~30–60s by stitching the strongest stretches:
filter_complex (trim+atrim+setpts/asetpts → concat) into a cleanly re-encoded face.mp4.(start, end, shift) (new = orig - shift, where shift accumulates over everything cut before it); filter the words that fall inside kept stretches and convert them to the new timeline → generate the captions.ffprobe, ffmpeg -ss <t> -frames:v 1) → determine talking-head or not, duration, fps.assets/sfx/ → present the table to the user for approval (timecode | event | zoom | SFX | volume).index.html (zoomable face wrapper + narration audio + SFX + scrim + ambient + scenes + captions) + compositions/*.html. One file per scene, one paused GSAP timeline each, pad the full slot with tl.set({}, {}, DUR) (Law 11 - a timeline shorter than data-duration → black frames). Zoom = animate scale on #face-wrapper (NOT on the <video>).npx hyperframes lint → 0 errors (the composition_self_attribute_selector/google_fonts_import/font_family_without_font_face warnings are benign, ignore them).crop=...,scale=...:flags=neighbor) + timing + safe zone + a frame right at each zoom edge (face smooth, no edge exposed, caption sitting still) + listen back that the SFX lands on the zoom beat and never buries the voice. Read every PNG. Fix the bugs → render again.--quality standard.id, data-composition-id, data-start="0", data-width, data-height.class="clip" (EXCEPT <video>/<audio>). It needs data-start/data-duration/data-track-index. Clips on the same track must NOT overlap in time (watch out for float rounding: 6.86+1.84=8.7000…1 → overlap; leave a margin).<video> must be muted; audio goes in its own <audio> (narration + one <audio> per SFX with track-index ≥4, NO class="clip"). Do NOT animate width/height/top/left on a <video> (freezes the frame) - wrap it in a #face-wrapper div and animate scale on the wrapper (that is the ZOOM mechanism); scale transforms are fine.window.__timelines["<data-composition-id>"] (the key must match exactly).tl.duration().video-projects/<project>/)$bin="...\ffmpeg-...\bin"; $env:Path="$bin;$env:Path"
npx hyperframes lint
npx hyperframes compositions
npx hyperframes render --quality draft --output renders/draft.mp4
npx hyperframes render --quality standard --output renders/final.mp4
# verify diacritics: ffmpeg -ss <t> -i renders/draft.mp4 -frames:v 1 -vf "crop=700:340:60:260,scale=1400:680:flags=neighbor" out.png → Read out.png
# verify zoom: extract frames right at the zoom edges (start/peak/end), check the face is smooth, no edge exposed, caption still
# copy SFX: cp ../../assets/sound-effects/<file> assets/sfx/
# verify SFX: ffmpeg -ss <t> -i renders/draft.mp4 -t 4 -vn out.wav → listen that the SFX lands on the zoom beat and never buries the narrationrenders/final.mp4 is NOT the finished product. Continue with the video-pipeline skill: automated QC on the draft → assemble final via the render queue (Remotion) → outputs/<id>-v<N>.mp4 → update meta.json (status + output) → thumbnail/publish. Report to the user: the scene timeline table + a ZOOM & SFX table: timecode | event | zoom type | SFX file | volume. Clean up the temporary draft/test files when you are done.
© notivn, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/noti-tiktok-vn of notivn/AIEV.
Open the folder on GitHubat commit e40fe03
Noti Tiktok Vn next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Noti Tiktok Vn this skillnotivn/AIEV | 127 | — | ~5.4k | Automated safety check: Pass | MIT | |
| ShowtimeFavioVazquez/showtime | 220 | — | ~3k | Automated safety check: Pass | MIT | |
| Embedded Video Captionsheygen-com/hyperframes | 60k | 3 repos | ~8.6k | Automated safety check: Pass | Apache-2.0 | |
| Qiaomu Cutjoeseesun/qiaomu-cut-skill | 372 | — | ~6.8k | Automated safety check: Notes | MIT | |
| Content To Videoarchitectds/modeldock | 117 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| KinocutKyaniteLabs/kinocut | 198 | — | ~5.7k | Automated safety check: Pass | Apache-2.0 |
FavioVazquez/showtime
A skill your agent uses when the user wants a video made, edited or finished: a launch or promo, product demo, explainer, trailer or teaser, tutorial or walkthrough, a screen recording turned into a…
heygen-com/hyperframes
Adds captions to a single-subject talking-head video without editing the footage, from plain subtitles to cinematic text placed behind the speaker.
joeseesun/qiaomu-cut-skill
把一句话需求转成可复现、可验收视频工程的乔木智能剪辑导演。Use when the user asks to create, plan, edit, remix, explain, narrate, subtitle, animate, composite, or render a video—including one-line requests such as “制作一个科普视频:介绍…
architectds/modeldock
Turn arbitrary source content (README, article, story, slides, deck, data/report, product description, tutorial text, audio/transcript, or a bare topic) into a finished, high-quality MP4 video.
KyaniteLabs/kinocut
Use Kinocut for guarded video editing, source-backed planning, FFmpeg operations, media analysis, subtitles, audio workflows, Hyperframes or Revideo rendering, repurposing packages, and release…
fabricioctelles/skills
Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4.
notivn/AIEV
Pick background music from the assets/music/ library and configure auto-ducking (music dips automatically under speech) via meta.json audio.music for the Remotion assembly layer.
notivn/AIEV
Color grading video in the AI Edit Video system - delog/tonemap HDR-HLG-log footage, apply the color preset the user approved in the UI, and the visual verification workflow.
notivn/AIEV
Build a Vietnamese vertical TikTok explainer in the "MỔ XẺ PAPER AI" (AI paper dissection) format with HyperFrames (HTML/CSS/GSAP → MP4), Noti.vn style.
notivn/AIEV
The standard for writing new skills for the AI Edit Video system - file structure, frontmatter, tone of voice, and how to accumulate production lessons into skills.
notivn/AIEV
Build a Vietnamese landscape 16:9 YouTube video (1920×1080) with HyperFrames (HTML/CSS/GSAP → MP4), keeping the Noti.vn/GĐT branding inherited from noti-tiktok-vn.
notivn/AIEV
Build and iterate short-form vertical (9:16) videos in Hyperframes - TikTok/Reels/Shorts style.
Categories
Edit a Vietnamese vertical TikTok video (9:16) with HyperFrames following the Noti.vn/GĐT standard - talking-head + kinetic typography + karaoke captions + zoom/punch-in camera + timestamp-synced…. Noti Tiktok Vn is an agent skill from notivn/AIEV.vn/GĐT standard - talking-head + kinetic typography + karaoke captions + zoom/punch-in camera + timestamp-synced sound effects, rendered to MP4.
Noti Tiktok Vn fits situations like: tasks that involve Motion graphics; tasks that involve Transcription; tasks that involve Video production.
Run `npx skills add notivn/AIEV --skill noti-tiktok-vn -a claude-code`. Or copy the skill folder (.claude/skills/noti-tiktok-vn in notivn/AIEV) into .claude/skills/noti-tiktok-vn in your project. Claude Code loads it when a task matches its description.
Run `npx skills add notivn/AIEV --skill noti-tiktok-vn -a codex`. Or copy the skill folder (.claude/skills/noti-tiktok-vn in notivn/AIEV) into .agents/skills/noti-tiktok-vn in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add notivn/AIEV --skill noti-tiktok-vn -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/noti-tiktok-vn, .gemini/skills/noti-tiktok-vn, .github/skills/noti-tiktok-vn and .opencode/skills/noti-tiktok-vn in your project.
Going by SKILL.md and its folder, Noti Tiktok Vn needs the command-line tools its instructions call (npx, ffmpeg, winget, npm and pip). Our summary lists: Node.js.
SKILL.md names 1 domain. In commands or code: fonts.googleapis.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Noti Tiktok Vn is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.4k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Noti Tiktok Vn: Showtime (FavioVazquez/showtime, 220 stars), Embedded Video Captions (heygen-com/hyperframes, 60k stars), Qiaomu Cut (joeseesun/qiaomu-cut-skill, 372 stars) and Content To Video (architectds/modeldock, 117 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
notivn (a GitHub organization) maintains it in notivn/AIEV, which has 127 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 9, 2026.
Source: notivn/AIEV on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.