Skip to main content
skill CX Codex

milestone-reveal — Claude Code skill: a clip of your real number

Builds a 12-second looping clip where thousands of points drift, then pull together into your actual follower, revenue or customer count.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add charlie947/motion-graphics-skills --skill milestone-reveal -a claude-code
Open on GitHub

What milestone-reveal does

The skill turns a number into a short clip: about 3,200 tiny points drift like a night sky, gather into the shape of your figure, a thin accent line draws underneath and the label rises into place. Each point stands for one follower, subscriber or customer. The tone is a product launch, not a party — no confetti, no bounce.

Before building, it asks for four things: the number exactly as it should read with commas, a screenshot or link to the dashboard that shows it, the label word for word, and the brand plus size. The figure must be real and sourced. If the source says 12,431, the clip says 12,431 — rounding up or adding a plus sign is out. No source, no clip. If brand.md and MOTION.md are missing, run brand-intake first or hand over hex codes, a font file and a logo.

Then the skill hands you a build brief for Claude: one self-contained HTML file with canvas, a fixed random seed for every position, and window.seek(seconds) that draws any exact frame from the time alone. After the build it captures frames at 0, 2, 4.5, 6.5, 7.5, 9.5, 11 and 12 seconds and checks that frame 12 matches frame 0. Export runs through HyperFrames: npx skills add heygen-com/hyperframes, then npx hyperframes render. For a Reel, the MP4 goes to reel-export, and the source of the number belongs in the caption.

What it helps with

  • make a milestone clip with a real follower count for LinkedIn
  • show revenue or customer numbers in a short video
  • produce a loop with no visible seam
  • check that the figure stays readable at feed size
  • render one exact frame by timestamp for review

Example prompts for the agent

  • make a milestone clip: 250,000 LinkedIn followers, here is the dashboard screenshot
  • animate my subscriber count into a 12-second 1080 x 1350 clip
  • build a number reveal with the label "LinkedIn followers" and my font

How to install milestone-reveal

1Skills CLI (Vercel)

npx skills add charlie947/motion-graphics-skills --skill milestone-reveal -a claude-code

2Manually: put the files in place

~/.claude/skills/milestone-reveal/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/milestone-reveal/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about milestone-reveal

How do I install milestone-reveal in Claude?

Run npx skills add charlie947/motion-graphics-skills --skill milestone-reveal -a claude-code. The skill lands in ~/.claude/skills/milestone-reveal/SKILL.md.

What does milestone-reveal do?

It builds a 12-second looping clip where points gather into your real number, a line draws underneath and the label settles in. The tone stays premium, with no confetti.

What do I need before running it?

The exact number with commas, a source for that number, the label word for word, and the brand plus size. Without brand.md and MOTION.md, run brand-intake first or supply hex codes, a font and a logo.

Source text

SKILL.md · MIT
---
name: milestone-reveal
description: Make a 12-second looping milestone clip in code with Claude Code. Thousands of tiny points drift like a night sky, pull together into your real number (followers, subscribers, revenue, customers), a line draws underneath and the label settles in. Premium, not a party. Use when someone says "milestone video", "celebrate 10k followers", "animate my subscriber count", "number reveal", "particle number animation" or wants to mark a result on LinkedIn or Instagram.
---

# Milestone reveal, built in code

Each point is one follower, one subscriber or one customer. They gather into the number, hold, then drift apart so the loop has no jump.

**Before you start:** read `brand.md` and `MOTION.md` if they exist. If not, run `brand-intake` first, or ask for hex codes, a font and a logo file. Never call a result on-brand without them.

## Step 1: Ask for four things, then wait

1. **The number, exactly as it should read,** with commas. Example: "250,000".
2. **Where it comes from.** A screenshot or link to the dashboard that shows it. No source, no clip.
3. **The label,** word for word. Example: "LinkedIn followers".
4. **Brand and size.** Background, particle and accent colours, the font file (attached), and the size. Default 1080 x 1350, 12 seconds.

The number is the user's real, sourced number. Never round it up, never add "+", never swap a target for a result. If the source shows 12,431, the clip says 12,431 or the user picks a lower round figure themselves.

## Step 2: Build brief (paste into Claude Code)

```
Build one self-contained HTML file (canvas) for a 12-second seamless loop at [WIDTH] x [HEIGHT]. Tone: premium product launch, not a party. No bounce, overshoot, confetti or sparkle bursts.

Fixed text (real figure, do not alter, round or restyle): "[NUMBER]" and "[LABEL]". No other text on screen.

Brand: background [BG], particles and number [INK], accent line [ACCENT]. Font: the attached [FONT] files, embedded as base64. If the font file is missing, stop and ask me.

Particles: about 3,200 tiny points with varied opacity and a faint twinkle, like a night sky. Build the number's shape by drawing "[NUMBER]" in the bold weight on an offscreen canvas and sampling its filled pixels as targets. Give most points to the number so it reads crisply at feed size, comma included. The rest stay as dimmer drifting stars.

Timing:
1. 0-2s: points drift. Nothing else.
2. 2-6.5s: points pull into the number with a long, staggered ease, like gravity, not a snap.
3. 6.5-7.5s: a thin [ACCENT] line draws left to right under the number.
4. 7.5-8.5s: the label fades in and rises about 12px into place.
5. 8.5-10.5s: hold. The number only shimmers.
6. 10.5-12s: label and line fade, points drift back to their exact start. Frame 12 matches frame 0.

Build rules: a fixed random seed for every position. Add window.seek(seconds) that draws any exact frame from the time alone. Reduced-motion shows the held frame.

After the build: capture frames at 0, 2, 4.5, 6.5, 7.5, 9.5, 11 and 12s. Check the number reads exactly "[NUMBER]", nothing is cut off or overlapping, and frames 0 and 12 are identical. Keep each earlier version when you fix something.
```

## What I learned the hard way

- **The number looked grey at feed size.** Too few points covered each digit. The fix: about 2,700 of 3,200 points on the number, each 2.5px at near full opacity.
- **Chrome can draw the same frame two ways.** After repeated pixel reads it switches drawing mode, so a frame came out slightly different. Create the canvas context with `willReadFrequently: true` and every seek gives the same pixels.
- **Seed everything.** A `Math.random()` at render time makes every export different and breaks the loop.
- **Measure the seam, do not eyeball it.** My passing build had 0 pixels different between frame 0 and frame 12.

## Step 3: Export

HyperFrames (free, open source): `npx skills add heygen-com/hyperframes`, then `npx hyperframes render`. 1080 x 1350 for the LinkedIn feed. For a Reel, hand the MP4 to `reel-export`. Put the source of the number in the caption.

© charlie947 · MIT · charlie947/motion-graphics-skills

Similar skills

Everything for Design →

From the same set13

motion-effects Builds one of 16 motion effects in your own brand as a single 8-second looping HTML file that exports frame-exact to MP4 or GIF. CX Codex +1 1,500installs model-showdown Runs a fair motion graphics comparison across three AI models on one brief. Produces a 16:9 side-by-side or a 1080x1920 stacked reel. CX Codex +1 1,400installs newsletter-promo Turns one newsletter edition into a 12–20 second promo clip for LinkedIn, Instagram or X: a hook, three proof frames and an end card. CX Codex +1 1,400installs loop-cover Converts newsletter and blog covers into looping 896x640 GIFs across 180 frames. It animates a single chosen detail while keeping the loop jump-free. CX Codex +1 1,400installs apple-launch-film Builds an Apple-style Mac launch film entirely in code: menu bar, notch, widgets and gradient wallpapers. Useful when you need a launch video without screen recording or After Effects. CX Codex +1 1,500installs title-sequence-3d Creates cinematic 3D title sequences in code using Three.js and Claude Code. Best for scroll-stopping video intros, social hooks, or newsletter openers. CX Codex +1 1,500installs brand-intake A setup skill that interviews you and reads 3 to 5 reference frames, then writes brand.md and MOTION.md — the files every other skill in the pack pulls colours, type and timing from. CX Codex +1 1,500installs motion-brief-writer Turns a rough idea for an animated graphic into a precise build prompt for Claude. Asks for what's missing and never invents a number. CX Codex +1 1,500installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor