Guizang Social Cards
op7418/guizang-social-card-skill
Produces social card sets for Xiaohongshu and WeChat: carousels, Live Photo motion cards and puzzle layouts, and WeChat cover pairs, rendered from single-file HTML.
Add and animate a consistent text layer on an existing NodeTool timeline.
$ npx skills add nodetool-ai/nodetool --skill caption-titles -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nodetool-ai/nodetool caption-titles --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/nodetool-ai/nodetool.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/system-skills/caption-titles .claude/skills/caption-titles && 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 "caption-titles" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titles into .claude/skills/caption-titles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caption-titles", 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/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titlesType 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 nodetool-ai/nodetool --skill caption-titles -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nodetool-ai/nodetool caption-titles --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/system-skills/caption-titles .agents/skills/caption-titles && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "caption-titles" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titles into .agents/skills/caption-titles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caption-titles", 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 nodetool-ai/nodetool --skill caption-titles -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nodetool-ai/nodetool caption-titles --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/system-skills/caption-titles .cursor/skills/caption-titles && 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 "caption-titles" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titles into .cursor/skills/caption-titles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caption-titles", 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/nodetool-ai/nodetool.git --path packages/system-skills/caption-titles--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 nodetool-ai/nodetool --skill caption-titles -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nodetool-ai/nodetool caption-titles --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/system-skills/caption-titles .gemini/skills/caption-titles && 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 "caption-titles" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titles into .gemini/skills/caption-titles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caption-titles", 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 nodetool-ai/nodetool caption-titlesInstalls 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 nodetool-ai/nodetool --skill caption-titles -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/system-skills/caption-titles .github/skills/caption-titles && 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 "caption-titles" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titles into .github/skills/caption-titles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caption-titles", 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 nodetool-ai/nodetool --skill caption-titles -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nodetool-ai/nodetool caption-titles --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/system-skills/caption-titles .opencode/skills/caption-titles && 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 "caption-titles" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/caption-titles into .opencode/skills/caption-titles/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caption-titles", 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.
caption-titlesAdd and animate a consistent text layer on an existing NodeTool timeline.
Caption Titles is an agent skill from nodetool-ai/nodetool. Add and animate a consistent text layer on an existing NodeTool timeline. Use for titles, lower-thirds, captions, callouts, end cards, number tickers, deterministic scrambles, and text on a path.
Its SKILL.md is about 1.9k 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. The repository describes itself as: Agent-first Creative Workspace. The licence is AGPL-3.0.
Read from SKILL.md and the folder at commit 58765d3. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Caption Titles loads about 1.9k tokens when it runs. Until then it costs about 53 tokens; SKILL.md has 1,102 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 nodetool-ai/nodetool at commit 58765d3, republished under its AGPL-3.0 licence (© nodetool-ai). 1,102 words, ~1,917 tokens.
.claude/skills/caption-titles/SKILL.md (or your agent's skills folder).Work directly with timeline capabilities and open-timeline tools. Do not build a workflow, fabricate a cut, or render video.
motion-graphics carries the op contract for every call named here. motion-principles gives the entry and exit durations and easing behind each tier's presets, frame-composition fixes the safe inset and where a tier sits, color-motion the scrim and contrast fixes when type does not read, and logo-reveal owns the brand mark at the head or tail.
Every board skill and every video prompting skill sends its on-screen copy here. A title card, a super, a lyric or a CTA is a text clip on the timeline, not words in a generate_video or generate_image prompt: generators letter unreliably, and copy baked into pixels cannot be corrected, translated or re-timed. When a board's shot action carries Text: …, that is the caption map's input, and the render prompt should not have asked for it.
List and read the selected timeline first. It must contain picture clips. If it is missing or empty, stop and ask for a real cut; route users to storyboard or script-to-timeline work instead. Snapshot the timeline before editing with create_timeline_version.
Read fps, width and height off get_timeline before setting a size: fontSizePx is authored against the sequence resolution, and the tiers below are fractions of height.
Resolve type family and tier weights, five size tiers as fractions of frame height, text/accent/scrim palette, safe inset and maximum width, and per-tier motion presets. Prefer a supplied brand kit, then existing text on the timeline, then a platform-safe system. Keep these tiers consistent: T1 title/end card, T2 lower-third, T3 captions, T4 callouts, T5 CTA.
The family is one NodeTool ships — Inter, Space Grotesk, Bebas Neue, Playfair Display, Lora, JetBrains Mono — or every host resolves it against its own installed fonts, the editor and the render disagree on line widths, and validate_timeline reports font_not_portable. Sizes below 2.5% of frame height report text_illegible; body copy sits at 2.5–4%. motion-direction holds the same rule for the whole piece, so when a motion language already exists, take its type family rather than picking a second one.
Motion per tier follows motion-principles: fade or slide in at 300–500ms, out at 200–300ms, role-default easing. Stagger only on a T1 or a kinetic T3 line of five words or fewer, and work out the span (durationMs + offsetMs × (words − 1)) against the clip — a span that does not fit is compressed silently and only stagger_compressed says so.
Each tier has a shipped composition. Insert it with {"op": "insert_composition", "composition_id": "<id>", ...} and override its params rather than building the rig from bare clips — the timing and motion inside it are already balanced.
| Tier | Composition id |
|---|---|
| T1 title | title-card |
| T2 lower-third | lower-third |
| T3 captions | caption-bar |
| T4 callouts | callout |
| T5 CTA / end card | cta-end-card |
A brand mark at the head or tail is logo-sting.
Every live-picture T2–T4 element gets a matching scrim unless the plate is demonstrably controlled.
Write the timed map before editing: tier, exact text, start/end, position, and scrim. Caption duration is at least max(1200ms, words × 350ms). Titles/end cards hold at least 2000ms. Lower-thirds arrive about 500ms after a person appears and hold 2500–4000ms. One text idea per frame. Unknown facts use [INPUT NEEDED: …].
For a number that changes during a text clip, store textAnimator on an
animation with kind: "ticker", from, and to. It also accepts decimals,
padTo, prefix, and suffix. Set groupSeparator to "," to show
thousands as 2,847; omitting it keeps existing tickers ungrouped. For a
deterministic decode into the clip's
authored text, use kind: "scramble" with a fixed seed and optional
charset. These operate over the animation window, so a held final frame
shows the finished value.
{"id": "count-in", "role": "in", "preset": "fade", "durationMs": 900,
"textAnimator": {"kind": "ticker", "from": 1, "to": 7,
"padTo": 2, "suffix": " / 07"}}For unit-by-unit motion, set stagger.unit to character, word, or line
and give it offsetMs. With a text stagger, styleTracks can target
glyph.color, glyph.blurPx, or glyph.trackingPx. The colour uses CSS
colour values; blur and tracking use sequence pixels. Use text.color or
text.fill.stops.0.color for a whole line. A text fill gradient also exposes
text.fill.angle and stop offsets. The target must refer to an existing
style field; text.color is hidden while a gradient fill is set.
To lay a title along a curve, set textStyle.path to an SVG path in
normalized canvas coordinates. This places the baseline on the path. It does
not make each character travel along it. Shape and mask paths can morph through
shape.d and mask.d style tracks when both paths have matching commands and
point counts. Use followPath when the whole clip should move along a path.
edit_timeline's animate_clip input accepts presets and custom numeric
curves, but does not accept textAnimator or styleTracks; those fields are
dropped from that call. To author them, read the current document and use
set_timeline_document with the animation fields in the clip. That call
validates the complete document and snapshots the previous state. Preserve
the other tracks and clips from the document. motion-graphics owns the full
tool contract.
Add separate overlay and subtitle tracks. For each map item, add scrim before text, apply the locked tier style, then animate it with that tier’s entry and exit preset. No hard cut-on. Use stagger only for tone-appropriate kinetic captions. Keep all text within safe margins and clear of faces and product moments.
Two facts about stacking decide whether the text is seen at all. The lowest track index draws on top, so the scrim's track index sits between the picture's and the text's — picture, scrim, text, in descending index. And word-level captions generated from a voiceover clip composite above every real track regardless of where that clip sits, so no title can cover them: time a T1 around the narration rather than over it.
Verify in two passes, and they answer different questions. validate_timeline reads the document: text_illegible (size, or under 3:1 contrast against the text's own background plate or a full-frame shape behind it), font_not_portable, stagger_compressed, animation_exceeds_clip, overlaps, and clips shorter than a frame. Its contrast check refuses to guess — a translucent scrim, gradient type or a plate it cannot prove is behind the text produces no finding — so a silent pass is not a pass. Then preview_timeline_frame at each item's entry midpoint, a held moment, and its exit: that is where text over a busy plate, a scrim covering a face, or a caption still finishing when its clip ends shows up. Re-read the map against the frames: timing, reading floors, scrim ordering, one CTA at the end. Stop after authoring the text layer unless rendering is requested.
© nodetool-ai, AGPL-3.0. 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 packages/system-skills/caption-titles of nodetool-ai/nodetool.
Open the folder on GitHubat commit 58765d3
Caption Titles 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 |
|---|---|---|---|---|---|---|
| Caption Titles this skillnodetool-ai/nodetool | 560 | — | ~1.9k | Automated safety check: Pass | AGPL-3.0 | |
| Guizang Social Cardsop7418/guizang-social-card-skill | 7.4k | 1 repos | ~7.8k | Automated safety check: Pass | AGPL-3.0 | |
| Weekly Changelog Videoheygen-com/hyperframes | 59k | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Anthropic Brand Stylinganthropics/skills | 180k | 30 repos | ~559 | Automated safety check: Pass | Apache-2.0 | |
| MoneyPrinterTurbo Video Generatorharry0703/MoneyPrinterTurbo | 129k | — | ~2.1k | Automated safety check: Warn | MIT | |
| Brag Slim Launch Video Makerlatent-spaces/brag | 14k | 1 repos | ~1.9k | Automated safety check: Pass | MIT |
op7418/guizang-social-card-skill
Produces social card sets for Xiaohongshu and WeChat: carousels, Live Photo motion cards and puzzle layouts, and WeChat cover pairs, rendered from single-file HTML.
heygen-com/hyperframes
Turns a weekly changelog markdown file into a branded HyperFrames video with voiceover, animated mock-UI scenes and captions, using fonts, background and scripts bundled in the skill.
anthropics/skills
Applies Anthropic's brand colors and fonts to artifacts such as PowerPoint slides, using fixed hex values for text and accents, Poppins headings and Lora body text.
harry0703/MoneyPrinterTurbo
Installs and runs MoneyPrinterTurbo to turn a topic or script into a finished short video with voice-over, subtitles, stock footage and music.
latent-spaces/brag
Builds a short, shareable launch video with music and motion from a project directory or a website URL, using only tools already on the machine.
heygen-com/hyperframes
Finds, generates and edits media for HyperFrames video projects: music, sound effects, images, icons, logos, voiceovers, captions and color grades.
nodetool-ai/nodetool
Cut a NodeTool timeline to music and shape its pacing — detect the beat grid, place cuts on phrases, pick a cut type, build speed ramps with time remap, and give the piece an arc.
nodetool-ai/nodetool
Choose and animate colour on a NodeTool timeline, including shape and text gradients, colour grades, 3D LUTs, and dither.
nodetool-ai/nodetool
Write a shootable, precisely timed commercial beat sheet and store it as a NodeTool storyboard, with a consistent entity roster behind every shot.
nodetool-ai/nodetool
Direct ElevenLabs speech, dialogue, sound effects and music — the bracketed audio tags v3 acts on and why the voice decides whether a tag lands, stability as the delivery dial, punctuation instead…
nodetool-ai/nodetool
Stage the frame on a NodeTool timeline — grids, focal placement, safe areas per aspect ratio, depth layers and parallax, camera moves, and where elements enter and leave.
nodetool-ai/nodetool
Prompt OpenAI's GPT Image 2 — the five-slot Scene/Subject/Details/Use case/Constraints template it responds to, the change-versus-preserve shape for edits, labelled multi-image compositing, and how…
Categories
Add and animate a consistent text layer on an existing NodeTool timeline. Caption Titles is an agent skill from nodetool-ai/nodetool. Add and animate a consistent text layer on an existing NodeTool timeline.
Caption Titles fits situations like: deterministic scrambles.
Run `npx skills add nodetool-ai/nodetool --skill caption-titles -a claude-code`. Or copy the skill folder (packages/system-skills/caption-titles in nodetool-ai/nodetool) into .claude/skills/caption-titles in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nodetool-ai/nodetool --skill caption-titles -a codex`. Or copy the skill folder (packages/system-skills/caption-titles in nodetool-ai/nodetool) into .agents/skills/caption-titles 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 nodetool-ai/nodetool --skill caption-titles -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/caption-titles, .gemini/skills/caption-titles, .github/skills/caption-titles and .opencode/skills/caption-titles in your project.
SKILL.md names no scripts, command-line tools or credentials: Caption Titles is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Caption Titles is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.7k 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 Caption Titles: Guizang Social Cards (op7418/guizang-social-card-skill, 7.4k stars), Weekly Changelog Video (heygen-com/hyperframes, 59k stars), Anthropic Brand Styling (anthropics/skills, 180k stars) and MoneyPrinterTurbo Video Generator (harry0703/MoneyPrinterTurbo, 129k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nodetool-ai (a GitHub organization) maintains it in nodetool-ai/nodetool, which has 560 GitHub stars. The repository holds 127 skills in this directory. The repository was last updated on October 9, 2026.
Source: nodetool-ai/nodetool on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.