HyperFrames Video Compositions
spinabot/brigade
Writes HTML compositions with a GSAP timeline that the render_video tool turns into deterministic MP4 videos from data, text or layouts.
Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4.
$ npx skills add fabricioctelles/skills --skill motion-ad -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install fabricioctelles/skills motion-ad --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/fabricioctelles/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/motion-ad .claude/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/fabricioctelles/skills/tree/main/skills/motion-ad into .claude/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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/fabricioctelles/skills/tree/main/skills/motion-adType 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 fabricioctelles/skills --skill motion-ad -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install fabricioctelles/skills motion-ad --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fabricioctelles/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/motion-ad .agents/skills/motion-ad && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "motion-ad" agent skill from https://github.com/fabricioctelles/skills/tree/main/skills/motion-ad into .agents/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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 fabricioctelles/skills --skill motion-ad -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install fabricioctelles/skills motion-ad --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fabricioctelles/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/motion-ad .cursor/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/fabricioctelles/skills/tree/main/skills/motion-ad into .cursor/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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/fabricioctelles/skills.git --path skills/motion-ad--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 fabricioctelles/skills --skill motion-ad -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install fabricioctelles/skills motion-ad --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fabricioctelles/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/motion-ad .gemini/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/fabricioctelles/skills/tree/main/skills/motion-ad into .gemini/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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 fabricioctelles/skills motion-adInstalls 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 fabricioctelles/skills --skill motion-ad -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/fabricioctelles/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/motion-ad .github/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/fabricioctelles/skills/tree/main/skills/motion-ad into .github/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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 fabricioctelles/skills --skill motion-ad -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install fabricioctelles/skills motion-ad --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fabricioctelles/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/motion-ad .opencode/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/fabricioctelles/skills/tree/main/skills/motion-ad into .opencode/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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.
motion-adProduce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4.
Motion Ad is an agent skill from fabricioctelles/skills. Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4. Researches the destination landing page so every on-screen claim matches it, pulls real product imagery off the live site, animates one paused GSAP timeline in a single HTML page, and renders it frame-accurately through Playwright and ffmpeg. Use this whenever the user wants a video ad, promo video, animated ad, "an ad for my product", Meta/TikTok/Reels creative in video form, a 9:16 or 1:1 cut of an existing…
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts, reference files and assets (for example `references/template-map.md`, `scripts/contact-sheet.py` and `scripts/package-lock.json`).
It sits in Media & Creative, covering Video production, Motion graphics and Web animation and motion. It works with FFmpeg, TikTok, GSAP and Playwright. The repository describes itself as: A collection of skills for AI agents (Kiro, Cursor, Windsurf, Claude Code, and others). Each skill is a reusable module that teaches the agent to perform complex tasks with… The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f1de632. 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.
Ships 6 files in scripts/ (JavaScript and Python), which the agent can run.
Shell commands in SKILL.md call:
nodepython3ffmpegnpmnpxffprobeFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
danny.mdcreativecommons.orgFrom 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.
Motion Ad loads about 4.1k tokens when it runs, and up to ~8.7k if it reads all its reference files. Until then it costs about 191 tokens; SKILL.md has 2,073 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); the scripts in this folder are not scanned.
The full file from fabricioctelles/skills at commit f1de632, republished under its Apache-2.0 licence (© fabricioctelles). 2,073 words, ~4,081 tokens.
.claude/skills/motion-ad/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Builds a sound-off-friendly ad as one HTML page driven by a paused GSAP timeline, then renders it frame by frame into an H.264 MP4. Every frame is produced by seeking the timeline, not by recording playback, so the output is deterministic and re-renders identically.
assets/template.html is a finished 15s 4:5 ad, not a blank scaffold: hook + phone →
before/after scan reveal → 3D wall of outputs → showcase carousel + social proof →
brand-color CTA end card. All brand and product content lives in one CONFIG object
at the top of its script. Start from that CONFIG and rewrite the beats — building a
timeline from zero is slower and produces a worse spot.
Read references/template-map.md before your first edit of index.html. It maps
every DOM id, geometry constant and CONFIG field, and carries the recipes for cutting
a beat, adding one, and re-laying out to 9:16 or 1:1. Editing the template without it is
where this workflow usually breaks.
Set S to the directory that contains this SKILL.md — the parent of assets/ and
scripts/. In this repo it is ~/GIT/skills/skills/motion-ad; a default Claude Code
install puts it at ~/.claude/skills/motion-ad. If you don't know, find it:
find ~ -maxdepth 7 -type d -name motion-ad -path '*skills*' 2>/dev/null | headThen check the toolchain once per session, and install the two npm deps (no browser download — the scripts drive the Chrome you already have):
S=~/GIT/skills/skills/motion-ad
test -f $S/assets/template.html && test -f $S/scripts/render.cjs || echo "S is wrong"
node -v && ffmpeg -version | head -1 && python3 -c 'import PIL; print("pillow ok")'
(cd $S/scripts && npm install)
google-chrome --version || (cd $S/scripts && npx playwright install chromium && echo "use --channel chromium")Done when: the toolchain line printed a version for node, ffmpeg and Pillow, and
google-chrome --version (or the chromium fallback) printed a version. If ffmpeg is
missing, stop and say so — nothing downstream works without it.
These four are the difference between an ad that ships and one that gets pulled. Each one exists because the failure is invisible in the output file — the MP4 renders fine either way.
scripts/fetch-images.cjs. Never invent customers, reviews, ratings or results.
When there is no real number for the proof row, set proof: null so the row disappears
instead of showing a placeholder claim.- [ ] Step 1: Research the product and the destination page
- [ ] Step 2: Set up the workdir and gather assets
- [ ] Step 3: Write the storyboard and copy
- [ ] Step 4: Fill CONFIG and edit the timeline
- [ ] Step 5: Render stills, review, fix
- [ ] Step 6: Render the full MP4, spot-check, deliverEstablish the product, the destination URL, the audience and the format (4:5 feed by default, 9:16 for stories and reels, 1:1 for feed squares). Ask only for what you can't infer — the destination URL is the one thing you genuinely need, everything else usually falls out of the conversation or the site.
WebFetch the destination page and the homepage or pricing page for current facts: the headline promise, prices, rating and review counts, speed claims, and what is free versus paid. Pull the brand from the site's CSS or design system — primary and accent colors, font family, logo — or ask.
Done when: you have the URL, the format, and a written list of claims that are each traceable to a specific page.
Work in a scratch directory, never inside the skill folder — you will edit index.html
and drop dozens of images, and the skill must stay clean for the next run.
S=~/GIT/skills/skills/motion-ad # wherever this skill is installed
W=<scratchpad>/video && mkdir -p $W/a && cd $W
cp $S/assets/template.html index.html
cp $S/scripts/node_modules/gsap/dist/gsap.min.js .
node $S/scripts/fetch-images.cjs --url <destination-url> # -> a/web/NN.jpg + images.json
python3 $S/scripts/contact-sheet.py images a/web # -> images.jpgRead images.jpg to pick assets. Put the logo in a/ — a light-background version, plus
a white one for the end card if it exists. Choose the hero before/after pair for the
clearest transformation; for a SaaS product that is often "messy input → finished output"
screenshots rather than photos. Portrait (≈4:5) images fill the hero and showcase cards
best, and the wall wants at least 12 distinct ones so the grid doesn't visibly repeat. Ask
the user whether they want specific images, and prefer theirs over scraped ones.
Done when: a/ holds the logo(s) and enough distinct images for the hero pair, the
wall and three showcase cards, and you have named each file you'll reference in CONFIG.
Four to five beats in 15 seconds, one short headline each. The template's beat map and
the CONFIG fields that drive it:
| Time | Beat | CONFIG fields |
|---|---|---|
| 0–2.2s | Hook headline, phone scrolls a screen capture, finger taps the input | hook, screen, screenScroll, tap |
| 2.2–5.4s | Tapped card grows into the hero; scan beam reveals before → after; benefit pills | reveal, before, after, beforeLabel, afterLabel, benefits |
| 5.5–8.7s | Hero shrinks into a tilted 3D wall of outputs | scale, scaleChip, gallery |
| 8.7–11.8s | Showcase carousel (3 cards, optional "before" inset) + proof row | proofHl, showcase, showChip, proof |
| 11.8–15s | Brand-color circle wipe → logo, CTA headline, chip, button tap | cta.headline, cta.chip, cta.button, cta.foot |
Headline budget: about 20 characters per line at 82px inside a 960px box. Lines wrap at
spaces, but each extra line grows downward from a fixed top — so an over-budget
headline collides with whatever sits below it instead of shrinking. Use \n to control
where the breaks land. If a beat doesn't fit the product, change or cut it in the timeline
rather than forcing it; a desktop-only tool should open on the hero card instead of a phone.
4:5 and 9:16 both fit the template honestly. 1:1 is the tight one — the phone is 520×1100
and won't fit a square frame, so expect to rescale it or replace the hook beat rather than
just re-spacing (references/template-map.md → Re-lay out for 1:1). Say so when the user
asks for square, and let them choose between a rescale and a different opening beat.
Done when: every beat has final copy and every claim traces to a page you read in Step 1.
brand, logo, logoOnDark, colors, and change both the Google Fonts <link>
family and the --font variable to the brand font.*word* or *several words* marks the accent color; \n forces a break.index.html (e.g. a/web/03.jpg). Crop or mirror with PIL
when an image needs different framing.tap so the finger lands on the relevant spot of screen after it has scrolled by
screenScroll — the tap point and the scroll offset are two halves of the same gesture.window.seek, window.DURATION, window.ready and the ?render autoplay guard
intact; render.cjs depends on all four.html,body,#stage to the new size, re-space the vertical
positions, and render with the matching --size. references/template-map.md lists
every constant that has to move.Done when: node $S/scripts/render.cjs --stills 0.3 produces a frame with real copy,
real images and the brand's colors — no leftover Acme, no Benefit one.
node $S/scripts/render.cjs --stills 0.3,1.9,2.7,3.8,4.9,6.6,9.8,11.5,13.6
python3 $S/scripts/contact-sheet.py stillsRead stills.jpg. A wrong image path does not fail — it silently becomes a labelled
placeholder — so look for: leftover placeholders, text overlapping the end-card orbs,
empty gaps, labels that contradict the image beside them, the same image repeated side
by side in the wall, and legibility at thumbnail size (that is the size the ad will
actually be seen at, muted, on a phone).
Done when: every still shows the intended content, nothing overlaps, and each headline is readable in the contact sheet thumbnail.
node $S/scripts/render.cjs --out ad-4x5.mp4 # ~1 min for 450 frames
ffprobe -v error -show_entries format=duration:stream=width,height,nb_frames -of csv=p=0 ad-4x5.mp4
mkdir -p ~/Downloads && mv ad-4x5.mp4 ~/Downloads/<brand>-<topic>-ad-4x5-vN.mp4Spot-check the transitions you can't see in stills — the circle wipe and the carousel
slides move fast enough that a still at the wrong moment hides a bad ease:
ffmpeg -ss <t> -i <mp4> -frames:v 1 f.png. Confirm duration and nb_frames in the
ffprobe output match what you expect; a frozen tail means the timeline is shorter than
DURATION.
Never overwrite an earlier version — bump vN. Report the file path, the beat-by-beat
copy, and every caveat: low-resolution sources, crops and mirrors, any placeholder you
left in, any copy that differs from the landing page.
Done when: the MP4 is in ~/Downloads/ under a versioned name, ffprobe reports the
expected duration and frame count, and the caveats are in your message.
Keep the workdir. A revision is a CONFIG edit plus a re-render, not a rebuild: swap the
hero pair or the hook, change cta.button or proof.text, then re-run Step 5 and Step 6
and deliver as vN+1. If the user wants a different aspect ratio, copy the workdir so the
4:5 and 9:16 spots keep their own CONFIG.
Each entry is a real failure with a cause you can check, not a general caution.
The timeline is absolute, so cutting a beat leaves a frozen gap. Every tl.*() call
passes a hard-coded second. Remove the phone beat and the next beat still starts at 2.55s,
so the video holds a still frame until then. Re-time every later at value, and update
window.DURATION to the new length — it's the single source of truth for the frame count
(and the loop-guard tl.to({}, {duration: 0.01}, 15) has to move with it).
A wrong image path renders a placeholder, not an error. setImg swaps in a labelled
SVG on onerror, so a typo, a wrong case, or a file you never downloaded produces a
perfectly valid MP4 full of gradient placeholders. Check the contact sheet every time, and
prefer the images.json filenames over guessing.
Fewer than ~12 gallery images makes the wall repeat visibly. The 7×7 grid picks cells
with a modulo over gallery, so neighbouring tiles land on the same image. Supply at
least 12 distinct outputs, or accept the repetition deliberately rather than by accident.
You cannot render 2× just by changing --size. The CSS is hard-coded to 1080×1350 and
render.cjs uses deviceScaleFactor: 1, so a larger viewport renders a smaller ad in a
larger frame. For a 2× master, scale #stage with a CSS transform: scale(2) (and keep
the viewport at 2160×2700) — then re-check the stills, because text scales too and may now
overflow.
A too-long headline doesn't shrink, it collides. Each headline sits at a fixed top and
wraps downward, so an extra line pushes into the phone (top 392), the carousel, or the
end-card stack — and the overflow is only visible on the stills you happen to render. Trim
the copy rather than shrinking the font below ~64px; muted-feed legibility is the whole
point of the format.
The finger tap and the screen scroll are one gesture. tap is a fixed stage point; if
screenScroll moves the target away from it, the tap lands on empty white. Render the
1.5s still and check that the dot sits on something meaningful.
zsh aborts the whole command on an unmatched glob. rm still-*.jpg in a clean
workdir kills the line with no matches found. Use
find . -maxdepth 1 -name 'still-*.jpg' -delete.
npm install inside scripts/ creates node_modules/. It's gitignored, but keep it
in the skill folder — the scripts resolve their own dependencies, so copying them into the
workdir breaks them with Cannot find module 'playwright-core'.
Site-hosted images are often small thumbnails. If a hero or carousel card looks soft,
say so and offer to drop higher-resolution originals into a/ under the same filenames
rather than re-rendering at a size the source can't support.
No Google Chrome on the box. render.cjs and fetch-images.cjs default to
channel: 'chrome'. Run npx playwright install chromium in scripts/ once and pass
--channel chromium to both.
references/template-map.md — anatomy of template.html: render contract, every
CONFIG field, DOM ids and CSS variables, the geometry constants to change per aspect
ratio, the timeline map, and recipes for cutting/adding beats. Read it before editing
the template.assets/template.html — the 15s 4:5 ad itself. Copy to index.html; never edit in place.scripts/render.cjs — seeks the paused timeline per frame and pipes PNGs to ffmpeg.
Flags: --stills, --out, --size, --fps, --page, --channel.scripts/fetch-images.cjs — scrolls the destination page and downloads its real imagery.
Flags: --url, --out, --min, --limit, --channel.scripts/contact-sheet.py — tiles images or stills into one labelled JPG to review in a
single Read.Created by danny.md, published under
CC BY-NC 4.0 — free to use and remix,
not to sell. Redistributed in this collection with added metadata, portable path
resolution, a preflight check and references/template-map.md.
© fabricioctelles, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (scripts, references, assets) in skills/motion-ad of fabricioctelles/skills.
Open the folder on GitHubat commit f1de632
Motion Ad 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 |
|---|---|---|---|---|---|---|
| Motion Ad this skillfabricioctelles/skills | 106 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| HyperFrames Video Compositionsspinabot/brigade | 11k | — | ~1.6k | Automated safety check: Pass | MIT | |
| ShowtimeFavioVazquez/showtime | 220 | — | ~3k | Automated safety check: Pass | MIT | |
| Whiteboard Videotrustfuture/simon-skills | 382 | — | ~1.8k | Automated safety check: Notes | MIT | |
| Noti Tiktok Full Textnotivn/AIEV | 127 | — | ~4.8k | Automated safety check: Pass | MIT | |
| Noti Tiktok Vnnotivn/AIEV | 127 | — | ~5.4k | Automated safety check: Pass | MIT |
spinabot/brigade
Writes HTML compositions with a GSAP timeline that the render_video tool turns into deterministic MP4 videos from data, text or layouts.
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…
trustfuture/simon-skills
手绘白板风"边画边讲"讲解视频出片 skill(Excalidraw 风格逐笔动画 + 火山引擎配音 + 烧录字幕 + 品牌水印与片尾卡 + 横竖两张封面 + 各平台发布文案)。当用户说"做一期白板视频 / 边画边讲 / 手绘讲解视频 / 用 excalidraw 做视频 / whiteboard video",或要在本仓库里新建一期、改场景、换贴纸或真实…
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
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 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.
fabricioctelles/skills
Audit, score, and compare repositories containing portable Agent Plugins against the official Agent Plugins specification.
fabricioctelles/skills
Design well-structured agent loops with best-practice coaching and cross-model review gates before you run them.
fabricioctelles/skills
This skill should be used when the user needs to consume the Pier Cloud (Lighthouse) API for cloud cost management — including JWT authentication, listing contexts, workspaces, workspace groups, and…
fabricioctelles/skills
Automated iterative agent runner for spec-based development in Kiro.
fabricioctelles/skills
Runs security audits on codebases — full scans, diff reviews, threat models, vulnerability triage, remediation guidance, and finding tracking.
fabricioctelles/skills
Evaluate any agent skill against a merged framework — Anthropic's Claude Code best practices plus Matt Pocock's writing-great-skills methodology — across 4 axes (Trigger, Structure, Steering…
Works with
Categories
Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4. Motion Ad is an agent skill from fabricioctelles/skills. Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4.
Motion Ad fits situations like: wants a video ad; an ad for my product; meta/TikTok/Reels creative in video form; 1:1 cut of an existing spot.
Run `npx skills add fabricioctelles/skills --skill motion-ad -a claude-code`. Or copy the skill folder (skills/motion-ad in fabricioctelles/skills) into .claude/skills/motion-ad in your project. Claude Code loads it when a task matches its description.
Run `npx skills add fabricioctelles/skills --skill motion-ad -a codex`. Or copy the skill folder (skills/motion-ad in fabricioctelles/skills) into .agents/skills/motion-ad 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 fabricioctelles/skills --skill motion-ad -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/motion-ad, .gemini/skills/motion-ad, .github/skills/motion-ad and .opencode/skills/motion-ad in your project.
Going by SKILL.md and its folder, Motion Ad needs JavaScript and Python for the scripts in its folder and the command-line tools its instructions call (node, python3, ffmpeg, npm, npx and ffprobe). Our summary lists: Python 3; Node.js.
SKILL.md names 2 domains. As links in the text: danny.md and creativecommons.org. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Motion Ad is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Motion Ad: HyperFrames Video Compositions (spinabot/brigade, 11k stars), Showtime (FavioVazquez/showtime, 220 stars), Whiteboard Video (trustfuture/simon-skills, 382 stars) and Noti Tiktok Full Text (notivn/AIEV, 127 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
fabricioctelles (a GitHub user) maintains it in fabricioctelles/skills, which has 106 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 4, 2026.
Source: fabricioctelles/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.