HyperFrames Animation
heygen-com/hyperframes
Collects motion rules, scene blueprints, transitions and runtime adapters for HyperFrames video compositions, with GSAP as the default animation runtime.
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.
$ npx skills add notivn/AIEV --skill noti-youtube-edit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install notivn/AIEV noti-youtube-edit --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-youtube-edit .claude/skills/noti-youtube-edit && 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-youtube-edit" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-youtube-edit into .claude/skills/noti-youtube-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-youtube-edit", 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-youtube-editType 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-youtube-edit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install notivn/AIEV noti-youtube-edit --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-youtube-edit .agents/skills/noti-youtube-edit && 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-youtube-edit" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-youtube-edit into .agents/skills/noti-youtube-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-youtube-edit", 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-youtube-edit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install notivn/AIEV noti-youtube-edit --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-youtube-edit .cursor/skills/noti-youtube-edit && 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-youtube-edit" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-youtube-edit into .cursor/skills/noti-youtube-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-youtube-edit", 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-youtube-edit--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-youtube-edit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install notivn/AIEV noti-youtube-edit --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-youtube-edit .gemini/skills/noti-youtube-edit && 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-youtube-edit" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-youtube-edit into .gemini/skills/noti-youtube-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-youtube-edit", 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-youtube-editInstalls 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-youtube-edit -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-youtube-edit .github/skills/noti-youtube-edit && 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-youtube-edit" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-youtube-edit into .github/skills/noti-youtube-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-youtube-edit", 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-youtube-edit -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-youtube-edit --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-youtube-edit .opencode/skills/noti-youtube-edit && 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-youtube-edit" agent skill from https://github.com/notivn/AIEV/tree/main/.claude/skills/noti-youtube-edit into .opencode/skills/noti-youtube-edit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "noti-youtube-edit", 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-youtube-editBuild 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.
Noti Youtube Edit is an agent skill from 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. Supports 2 modes - A) talking-head + motion graphics (full-frame face, camera move to PiP, karaoke captions) and B) full-text explainer (text scenes + slides/charts, no face on screen). Includes the "camera move" technique (animate the wrapper, never the video), the fix for Vietnamese text losing diacritics, and picking sound effects itself by content…
Its SKILL.md is about 5.7k 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, Music and audio generation and Web animation and motion. It works with YouTube, HeyGen, TikTok 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.
3 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 Youtube Edit loads about 5.7k tokens when it runs. Until then it costs about 199 tokens; SKILL.md has 2,468 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,468 words, ~5,661 tokens.
.claude/skills/noti-youtube-edit/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 landscape 16:9 YouTube videos with HyperFrames (HTML/CSS/JS + GSAP → MP4).
Architecture: face cam + overlay beats + camera move/PiP; the branding is inherited from noti-tiktok-vn (Noti.vn dark fintech blue). It differs from noti-tiktok-vn only in the landscape 16:9 frame instead of vertical 9:16.
Project structure: scaffold with npx hyperframes init, then follow the layout in the video-pipeline skill (index.html + compositions/ + assets/ + renders/ + hyperframes.json + meta.json). The Noti.vn branding (colors/fonts/glass) is written out in the STYLE section below, and the SFX timestamp wiring in the SOUND EFFECT section - you do not need an example project for either.
(video-projects/sapo/ and video-projects/mcp-tiktok-2/ are example projects on the author's machine, NOT shipped with the repo - video-projects/ is gitignored.)
⚡ 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 landscape 1920×1080 MP4. Noti.vn branding.
noti-tiktok-vn style, landscape frame.)noti-tiktok-full-text logic but in a landscape layout.)Ask the user if it is unclear. Both modes SHARE: branding, font fixes, transcription, SFX (mandatory), render contract, environment.
y > 990. Put captions at bottom: ~110–150px (lower third), NOT flush with the bottom.<template> + data-composition-src), timed via data-start/data-duration/data-track-index.A master index.html (1920×1080) + N sub-compositions ("beats"), all layered on top of a single background layer (Mode A: the face video on track 0; Mode B: a dark gradient background). The overlay beats use their own track index (e.g. 4) and follow one another in time.
Master skeleton:
<div id="root" data-composition-id="yt-edit" data-start="0"
data-duration="<TOTAL>" data-width="1920" data-height="1080">
<!-- Mode A: face video background -->
<div id="face-wrapper">
<video id="face-video" data-start="0" data-duration="<TOTAL>" data-track-index="0"
src="assets/face.mp4" muted playsinline></video>
</div>
<audio id="face-audio" data-start="0" data-duration="<TOTAL>" data-track-index="2"
data-volume="1" src="assets/face.mp4"></audio>
<!-- beats: one file per scene, same track 4, back to back -->
<div id="beat-1" class="scene-layer" data-composition-id="b1"
data-composition-src="compositions/01-hook.html"
data-start="0" data-duration="4.0" data-track-index="4"
data-width="1920" data-height="1080"></div>
<!-- ... -->
</div>A "camera move" is NOT a real camera - it is GSAP animating the <div> that wraps the video (#face-wrapper).
const FULL = { x: 0, y: 0, width: 1920, height: 1080 }; // full-frame
const PIP = { x: 1380, y: 750, width: 480, height: 270 }; // 16:9 dock, bottom right
// or a side panel: const SIDE = { x: 1180, y: 0, width: 740, height: 1080 };
gsap.set("#face-wrapper", FULL);
mainTl.to("#face-wrapper",
{ ...PIP, duration: 0.6, ease: "power3.inOut",
onStart: () => document.getElementById("face-wrapper").classList.add("pip") },
12.54); // start ~0.3s EARLY relative to the spoken cue → the shrink is mid-flight at the right moment⚠️ 3 mandatory rules:
<div>, NEVER the <video>. Animating width/height/top/left directly on a <video> → frozen frame (Render Contract). The wrapper is an ordinary div, so it is free to touch; a scale transform on the video is fine.overflow:hidden; transform-origin:0 0; the video inside gets height:100%; width:auto; left:50%; transform:translateX(-50%). A 16:9 source into a 16:9 frame scales cleanly with no distortion. (If the source is vertical/square, overflow:hidden crops it back to 16:9.).pip class only turns on while shrunk, adding rounded corners + drop shadow + Noti blue glow (with NO effect on the full-frame state):#face-wrapper { position:absolute; top:0; left:0; width:1920px; height:1080px;
overflow:hidden; transform-origin:0 0; z-index:0; background:#000; }
#face-video { position:absolute; top:0; left:50%; height:100%; width:auto;
transform:translateX(-50%); display:block; filter:contrast(1.05) saturate(1.08); }
#face-wrapper.pip { z-index:10; border-radius:24px;
box-shadow: 0 30px 80px rgba(0,0,0,0.55),
0 0 0 1px rgba(255,255,255,0.06) inset,
0 0 50px rgba(0,140,255,0.30); } /* Noti BLUE glow, not orange */z-index:10 so the face window floats above the scene.When the edit prompt has a PHONG CÁCH DỰNG (video style) section, its motion spec overrides these transition/effect rules.
No hard cuts. Every beat has its own GSAP timeline (paused, registered on window.__timelines["<id>"]). Text enters and leaves via tweens:
y:40→0, opacity:0→1, scale:0.92→1, filter:blur(12px)→0, stagger 0.06–0.12, ease power3.out.to(..., {opacity:0, y:-30, blur(14px)}) then tl.set(..., {opacity:0, visibility:"hidden"}).tl.from(.bg, {opacity:0, duration:0.5}).whip-pan, cinematic-zoom) if needed.data-start is anchored to the Whisper timestamp of its keyword → the text "lands" exactly on the word being spoken.setTimeout/Date.now()/Math.random() - GSAP timeline only. Get deterministic randomness from a sin/cos hash of the index.#0A0E1A → #0F1629 (gradient) + light grain + 1–2 blue blobs (#0061ff,#00c2ff) at blur 120px drifting slowly in parallax + vignette.linear-gradient(100deg, #0061ff, #00c2ff) via background-clip:text.background: rgba(255,255,255,0.06); backdrop-filter: blur(20px); border-radius: 20px;
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).#19c8ff + scale 1.13. Place it in the lower third (bottom: ~120px), NOT flush with the bottom.#0061ff/#00c2ff/#19c8ff), NOT the Claude orange - this is the thing to fix whenever you borrow overlay code from another project.assets/brand-logos/ (see CLAUDE.md §5.5).display=block (the HyperFrames renderer fetches + caches it and injects a deterministic @font-face on its own):<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.font-family: "Be Vietnam Pro", "Inter", sans-serif;Ưu đãi độc quyền - giảm giá sốc! Đừng để vụt mất. ƯỢ Ễ Ỹ ặ ậ ềText using background-clip:text; color:transparent CLIPS TALL STACKED DIACRITICS (Ẫ Ể Ấ Ữ Ổ Ợ…) because the marks stick out above the gradient fill box. padding-top: 0.14em IS NOT ENOUGH - it must be 0.5em. Apply it to EVERY gradient heading line:
.heading-grad {
background: linear-gradient(100deg,#0061ff,#00c2ff);
-webkit-background-clip: text; background-clip: text; color: transparent;
line-height: 1.0; padding-top: 0.5em; padding-bottom: 0.14em;
}Plain white/solid-color text (no background-clip) does NOT have this bug - only gradient text needs fixing. When verifying: zoom 3× into the glyphs with stacked marks to check.
When the speech runs on with no pause: the previous line has not finished fading out when the next one fades in → they stack. Fix with PRE_ROLL = 0, the previous line going fully off exactly when the next appears:
const inAts = SEGMENTS.map(s => Math.max(s.words[0].start, 0));
// fadeInAt = inAts[i];
// fadeOutAt = (i<n-1) ? Math.max(segEnd+0.02, inAts[i+1] - FADE_OUT) : segEnd + POST_HOLD;Pull an extra frame right at the BOUNDARY between two caption lines.
Every sub-comp (data-composition-src) renders in its own context, inheriting NOTHING from the master:
<script src=".../gsap@3.14.2/dist/gsap.min.js">.<link> (inside the <template>).:root CSS vars inside a sub-comp - use literal values (hex/gradient written out).Landscape is wide → prefer horizontal layouts (unlike TikTok's vertical stack):
#FF4D2E), count-up + scale-pop.<h1>/<p>/<span>) - do NOT bake text into images. Images are background only (slide/screenshot/chart).<img> in a <div> and animate the WRAPPER (never animate width/top/left directly on the img).clip-path: inset(0 100% 0 0)→inset(0 0 0 0)).Every video gets SFX punctuating the beats (figures, reveals, scene changes/camera moves, punchlines, CTA). 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.
data-start = the exact EVENT beat (the number starting its count-up / the text starting its reveal / the scene cut frame / the PiP shrink beat), NOT the vague start of the scene.ding.mp3/ting.wav; money → ka-ching.mp3; element pop → pop.mp3; image/slide → camera-snap.wav; bad numbers → error.mp3; wow → anime-wow-1.mp3; typing → mechanical-keyboard.mp3; click → click-button.mp3.assets/sfx/ (keeps the project portable). Each SFX = its own <audio>, NO class="clip", its own track index 4 and up (narration is on tracks 0/2):<audio id="sfx-1" data-start="12.46" data-duration="2.0" data-track-index="6" data-volume="0.5" src="assets/sfx/ka-ching.mp3"></audio>data-start = the exact EVENT beat. data-duration long enough for the SFX to finish ringing (1–3s).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 + an .en English-only model → do NOT use it for Vietnamese.Vietnamese transcription - use faster-whisper (pip install faster-whisper):
import sys; sys.stdout.reconfigure(encoding="utf-8") # the Windows console cannot print diacritics
from faster_whisper import WhisperModel
# GPU first (GTX 1660: twice as fast + frees the CPU) - 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. Reread the transcript and fix the proper nouns Whisper misheard.
YouTube allows more length than TikTok, but still cut the fillers. If you need to stitch several stretches: ffmpeg filter_complex (trim+atrim+setpts/asetpts → concat) into a cleanly re-encoded face.mp4; remap the timestamps (new = orig - accumulated shift); generate captions grouped by punctuation / speech pause (gap > ~0.38s) / max 7 words. A long video can be split into chapters (timecode + title) for the YouTube description.
id, data-composition-id, data-start="0", data-width="1920", data-height="1080".class="clip" (EXCEPT <video>/<audio>) + data-start/data-duration/data-track-index. Clips on the same track must NOT overlap in time (watch out for float rounding - leave a ~0.04s margin).<video> must be muted; audio goes in its own <audio>. Do NOT animate width/height/top/left on a <video>/<img> - wrap it in a div and animate the wrapper (scale transforms are fine).paused timeline on window.__timelines["<data-composition-id>"] (the key must match exactly). Comp duration = tl.duration(). Pad the full slot: tl.set({}, {}, DUR) at the end of every timeline (Law 11 - shorter than data-duration → black frames).ffprobe, ffmpeg -ss <t> -frames:v 1) → decide Mode A/B, the duration, whether there is a face on screen.assets/sound-effects/ (prefer the hay-dung tag in library.json) → copy into assets/sfx/ → present the SFX table to the user for approval.paused GSAP timeline each, padded to the full slot.npx hyperframes lint → 0 errors (the self-selector/google-fonts/font-face/video_nested warnings are benign, ignore them).Read every PNG. Listen back that the SFX lands right and never buries the voice. Fix → render again.--quality standard.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 the camera move: extract a frame right at the FULL→PIP edge (e.g. 12.5–13.2s) and check the face shrinks smoothly, no distortion/freeze
# copy SFX: cp ../../assets/sound-effects/<file> assets/sfx/renders/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: a timeline table: scene | duration | component | content + an SFX table: timecode | event | 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-youtube-edit of notivn/AIEV.
Open the folder on GitHubat commit e40fe03
Noti Youtube Edit 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 Youtube Edit this skillnotivn/AIEV | 127 | — | ~5.7k | Automated safety check: Pass | MIT | |
| HyperFrames Animationheygen-com/hyperframes | 60k | 3 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Motion Adfabricioctelles/skills | 106 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Yuv Viral Videohoodini/ai-agents-skills | 282 | — | ~7.5k | Automated safety check: Notes | None | |
| SVG Character Animationcalesthio/OpenMontage | 66k | — | ~421 | Automated safety check: Pass | MIT | |
| Vid Sizzle ReelVarnan-Tech/opendirectory | 674 | — | ~3.9k | Automated safety check: Pass | MIT |
heygen-com/hyperframes
Collects motion rules, scene blueprints, transitions and runtime adapters for HyperFrames video compositions, with GSAP as the default animation runtime.
fabricioctelles/skills
Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4.
hoodini/ai-agents-skills
Edit any selfie or screen-share footage into a viral short-form video in YUV.AI's signature style — Apple-style liquid-glass cards (real CSS backdrop-filter), dark-mode polish, MrBeast-paced cuts…
calesthio/OpenMontage
Animate SVG character rigs with GSAP, CSS transforms, Remotion frame control, and HyperFrames-compatible browser previews.
Varnan-Tech/opendirectory
Generates a high-energy sizzle reel or hype video (MP4) from brand assets and key messages.
op7418/guizang-product-video-skill
制作代码驱动的软件产品宣传片和版本更新片(product promo、release notes video、changelog promo)。从真实功能和产品设计出发定方向,用真实组件、GSAP/Three.js 动效、原创配乐和动作音效完成影片,每支片子的视觉手法都从产品本身推导,不套模板。
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
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…
notivn/AIEV
Build and iterate short-form vertical (9:16) videos in Hyperframes - TikTok/Reels/Shorts style.
Categories
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. Noti Youtube Edit is an agent skill from notivn/AIEV.vn/GĐT branding inherited from noti-tiktok-vn.
Noti Youtube Edit fits situations like: the user brings a Vietnamese clip/transcript and wants a landscape YouTube video that keeps the dark fintech blue branding; tasks that involve Motion graphics; tasks that involve Music and audio generation.
Run `npx skills add notivn/AIEV --skill noti-youtube-edit -a claude-code`. Or copy the skill folder (.claude/skills/noti-youtube-edit in notivn/AIEV) into .claude/skills/noti-youtube-edit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add notivn/AIEV --skill noti-youtube-edit -a codex`. Or copy the skill folder (.claude/skills/noti-youtube-edit in notivn/AIEV) into .agents/skills/noti-youtube-edit 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-youtube-edit -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-youtube-edit, .gemini/skills/noti-youtube-edit, .github/skills/noti-youtube-edit and .opencode/skills/noti-youtube-edit in your project.
Going by SKILL.md and its folder, Noti Youtube Edit 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 Youtube Edit 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.7k tokens (SKILL.md is roughly 23k 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 Youtube Edit: HyperFrames Animation (heygen-com/hyperframes, 60k stars), Motion Ad (fabricioctelles/skills, 106 stars), Yuv Viral Video (hoodini/ai-agents-skills, 282 stars) and SVG Character Animation (calesthio/OpenMontage, 66k 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.