Automated summary
This skill enforces placing and verifying Remotion overlays by reading their coordinates from a labelled grid instead of estimating them visually.
Strengths
- Provides concrete commands for rendering a still at scale 1, extracting a video frame with ffmpeg, and generating zoomed region grids.
- Normalises labels to composition pixels so measured coordinates can be entered directly into code.
- Handles both footage-aligned graphics and inspection of the overlay's own renders for text bounds, margins, centring and collisions.
- Uses documented real misses to demonstrate why visual estimation is unreliable.
Limitations
- Relies on the `grid.py` script being present at `.claude/skills/overlay-coordinate-grid/scripts/` and on Python 3 with Pillow.
- The default 1920x1080 normalisation may need an explicit size override for compositions with different dimensions.
- Verification is based on still images and does not check placement across multiple frames or animated motion.
Use it whenever a Remotion overlay must line up with footage or its text bounds, margins and collisions need measured proof from a gridded render.
Avoid it for purely conceptual layout discussions or when no usable Remotion render or source image exists to verify precise placement.
Security analysis
CautionThe skill describes a legitimate visual-measurement workflow and contains no destructive, exfiltration, obfuscated, or safety-disabling instructions. Risk is limited to running local scripts and media tooling, plus filesystem metadata lookup via mdfind, so it is best rated caution rather than safe.
- •Instructs shell execution of local Python scripts, `npx remotion`, and bundled `ffmpeg`; these are legitimate for the stated Remotion workflow but are powerful execution paths.
- •Uses `mdfind` to locate files by pixel dimensions, which queries local Spotlight metadata and may search the user's filesystem.
- •No allowed-tools are declared even though the skill requires Bash-level commands, so the execution scope is not explicitly constrained.
- •Instructs shell execution (npx remotion still/ffmpeg, python3 scripts/grid.py, mdfind) but only for local rendering, frame extraction and image measurement — no destructive, network-exfiltrating or obfuscated operations.
- •Uses `mdfind` with Spotlight metadata queries to locate user screenshots by pixel dimensions, which searches the local filesystem broadly; benign but worth noting as a mild privacy surface.
- •Invokes `npx remotion ...`, which could pull/execute npm packages from the network if Remotion is not already installed locally — standard toolchain behaviour, not a red flag.
- •No declared allowed-tools despite requiring Bash/Python 3 + Pillow; the skill may fail or be blocked under a restrictive tool policy (operational, not security).
Examples
Render frame 90 of IdentityShell at scale=1, grid it, and tell me the exact x-bounds of the RUNNER text so I can move the crack origin to match.Extract a frame from this clip, grid the source frame, and give me the coordinates for an arrow overlay pointing at the product in shot.Grid the UnattachedGate render and verify whether the gate swing arc collides with the JOY label; report exact coordinates and margins.name: overlay-coordinate-grid description: Place and verify every overlay by reading exact coordinates off a labelled coordinate grid instead of estimating positions. Grid the real footage frame when graphics must line up with something in shot, and grid the overlay's own renders to measure where things actually landed — text bounds, collisions, margins, centring. Use for every overlay composition, whether or not it's tied to footage. metadata: tags: remotion, overlay, layout, measurement, compositing, verification
When to use
Every overlay. Estimating positions is the most common way these compositions go wrong, and a grid replaces the estimate with a measurement. That covers two situations, which often come up in the same build:
- Graphics that must line up with something in the footage — a hat on a head, a prop in a hand, an arrow at an object, a label on a product. Grid the footage frame.
- Any overlay at all, including ones with no footage — grid your own renders to
see where elements really are. Font metrics,
letterSpacing,textAnchor, stroke widths and rotations all move things away from where the code suggests.
Real misses from this project that a grid catches immediately:
IdentityShell— the word was assumed to start at x≈460. Gridded,RUNNERspans x 330–1597, so the crack origin and bounds were 125px short and the first letter never cracked.UnattachedGate— a gate swing arc drawn from assumed geometry ran straight through theJOYlabel.
Pair with remotion-house-style for brand, export settings, folders and naming, and
for its propose-first rule. This skill covers where things go and proving it.
The rule
Never estimate a position. Read it off a grid, then prove it on a grid. Images shown in chat are downscaled, and code-level geometry isn't where the pixels end up, so "looks about right" is routinely 50–150px out. Don't report a layout or placement you haven't seen on a gridded render.
Run everything from the Remotion project directory and keep review files in
out/checks/<composition>/ (gitignored). Scripts need Python 3 with Pillow.
1. Get a reference image
- Your own render (always available): render in composition pixels —
npx remotion still <CompositionId> out/checks/<name>/still-<frame>.png --frame=<frame> --scale=1--scale=1matters: the project renders at 2x by default, which would put every coordinate at double. - A pasted screenshot of footage. The attachment note gives its original size
(e.g.
original 2158x1208); find the file by exact dimensions:macOS screenshots usually land on the Desktop.mdfind "kMDItemPixelWidth == 2158 && kMDItemPixelHeight == 1208" - A clip. No system
ffmpeghere, but Remotion bundles one:
It prints a version-mismatch banner first; that's noise, go by the exit code.npx remotion ffmpeg -y -ss <seconds> -i <clip.mp4> -frames:v 1 out/checks/<name>/source.png - Footage needed but not available — ask for it. Don't place off the chat image.
2. Grid it
# Whole frame, labelled every 100px:
python3 .claude/skills/overlay-coordinate-grid/scripts/grid.py <image> out/checks/<name>/grid.png
# Zoomed, finer grids on the areas that need precision:
python3 .claude/skills/overlay-coordinate-grid/scripts/grid.py <image> out/checks/<name>/grid.png \
--region head=720,0,1240,330,25,2 --region hands=420,840,1520,1080,50,1 \
--save-normalised out/checks/<name>/frame.png
- Every label is in composition pixels (the image is normalised to
--size, default 1920x1080), so numbers go straight into code. - A region is
NAME=x0,y0,x1,y1[,step[,zoom]]. Grid the whole frame first to find the area, then tighten the box and raise the zoom. - Transparent renders are flattened onto
--background(darkby default; uselightwhen checking dark elements). --save-normalisedkeeps a resized copy of a footage frame to composite onto later.- It warns when the source aspect ratio is more than 1% off target. For a screenshot that almost always means player chrome or letterboxing — crop it out first or every coordinate is skewed.
What to write down:
- Bounds of text and shapes — the real left/right/top/bottom, not the
x/yyou passed in. - Anchor points for footage — where a graphic makes contact: crown of the hair, hairline, palm centres, thumb tips, an object's corner.
- Tilt from a rigid feature pair. For a head, use the eyes, never the eyebrows — a raised brow reads as a 13° tilt on a head tilted 4°.
- Scale from a known span: head width, distance between hands, an element's width.
- Clearances between elements that mustn't touch, and to the frame edges.
3. Build with measured numbers
- Put measured values in named constants at the top of
Main.tsx, with a comment saying where they were measured ("calibrated from a render: glyphs span x 335–1590"). Re-fitting to a new shot or a copy change should be a constants edit. - Draw each object in its own local coordinates (centred on 0,0, lying along +x)
and place it with
translate(x y) rotate(angle) scale(s). Geometry stays independent of placement, and entrance animation composes onto the same transform. - Rotate about the point of contact, not the object's centre — the bottom of a cap's band, the hand holding a prop — or tilting lifts it off what it rests on.
- Hand-held props sit over the thumb or palm. An overlay can't go behind a finger, so pick angles where covering the thumb reads as gripping.
- Say whose left and right. A person facing camera has their left hand on the right of the screen. Describing a screenshot, default to screen sides, say so, and make swapping a one-line change.
- Check rotated extents stay inside the frame.
4. Verify on a grid, then iterate
Re-render the key phases and lay them out gridded:
# Onto footage:
python3 .claude/skills/overlay-coordinate-grid/scripts/composite.py out/checks/<name>/review.png \
out/checks/<name>/still-20.png out/checks/<name>/still-100.png \
--base out/checks/<name>/frame.png --grid 100 --detail x0,y0,x1,y1
# No footage — over dark and light fields:
python3 .claude/skills/overlay-coordinate-grid/scripts/composite.py out/checks/<name>/review.png \
out/checks/<name>/still-100.png --fields --grid 100
--gridlabels tiles and detail crops in composition pixels, so a correction is read straight off the sheet rather than guessed again.--detailappends full-resolution crops of the last composite, one per critical area — where you see whether a cap rests on the hair or floats, or whether a line clears a label by 4px or overlaps it.--fieldsis also the check for white-on-transparent elements, which are invisible against a white preview.
Adjust constants from the measurements and repeat until every critical area is right.
5. For footage-anchored overlays, flag the limitation
Placement is static: it lines up only while the subject stays near the measured pose, and people move — hands most. Say so every time and offer:
- One overlay per anchor (head, each hand) so each can be motion-tracked independently in the edit.
- Keyframed anchors — extract frames across the clip, grid each, interpolate the constants over time.
Worked examples
src/remotion/GraduationLesson/Main.tsx— footage-anchored: a mortarboard placed from a gridded screenshot, tilted from the eye line, rotating about the band's contact point.src/remotion/IdentityShell/Main.tsx— no footage: the crack field's bounding box and impact corner are measured from a gridded render of the word, not from its font size.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/coordinate-grid-for-remotion-overlays-mvda8745/download' --output '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md.part' && mv '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md.part' '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md' && test -s '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/overlay-coordinate-grid' && cp -R '.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745' '.claude/skills/overlay-coordinate-grid'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745'openskills read 'coordinate-grid-for-remotion-overlays-mvda8745'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/coordinate-grid-for-remotion-overlays-mvda8745/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.