add-motion — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited add-motion (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Animates a still image into a short video clip using Kling 3.0 Pro.
This skill covers: product shots, packshots, clothing shoot outputs, styled images, or any still you want to bring to life.
This skill does not cover:
/ugc or /product-ugc for thatOutput saved to ./brands/[brand-name]/motion/[output-name]/.
Scan ./brands/ for subfolders that contain a brand-identity/visual-guidelines.md file.
/brand firstAsk: "Which image would you like to add motion to?"
If it's a previously generated image, ask them to point you to it. Suggest checking these folders:
brands/[brand-name]/product-shoot/
brands/[brand-name]/packshots/
brands/[brand-name]/styled/
brands/[brand-name]/clothing-shoot/
brands/[brand-name]/ugc/If it's an external image they want to upload, create the uploads folder and tell them where to put it:
mkdir -p brands/[brand-name]/motion/uploads"Drop your image into brands/[brand-name]/motion/uploads/ and let me know the filename."Wait for confirmation before continuing.
Ask: "Describe the motion you'd like added. Be specific — direction, speed, camera movement, subject behaviour. Examples:
When the motion is selfie-style, UGC, handheld, or POV — not a clean studio rotation or product packshot drift — read skills/references/shlabu-realism.md and apply its principles when composing the final motion_description written into the spec.
Key levers for Kling 3.0 (full reference for context):
Skip these patterns for clean studio packshot or clinical product motion — they pull the render in the wrong direction.
First time running this skill, explain before asking:
"Kling animates from a start frame to an end frame.
>
- Start frame only — Kling has full creative control over how the motion evolves. Good for natural, organic movement. - Start + end frame — you define exactly where the motion lands. Useful when you need a precise final state (e.g. a product landing in a specific position).
>
The source image you've selected will be the start frame. Do you also have an end frame you'd like to provide?"
If the user provides an end frame, ask where it's saved (same process as Step 2 — existing file or upload to motion/uploads/).
If no end frame, note it and continue.
Read the source image using the Read tool.
Determine whether the image contains a product (packshot, product-in-hand, product on a surface, product being held, etc.). If the image is clearly people-only with no product visible (e.g. someone applying cream with no product in frame), skip this step.
If a product is present:
brands/[brand-name]/brand-identity/product-images/. If the file is there, use it. If not, check brands/[brand-name]/brand-identity/products.json for the product URL, then try to scrape additional images from the product page: # Try fetching the product page directly via WebFetch
# Look for multiple product image URLs in the HTML/JSON
# Download them to brands/[brand-name]/brand-identity/product-images/"I can only find one image of this product. Do you have another angle you can add to brands/[brand-name]/brand-identity/product-images/? More angles help Kling maintain accurate product rendering throughout the animation."Wait for them to add more, or proceed with one if they can't provide another.
Ask in one message:
Duration: "How long should the clip be? (3–12 seconds)"
Audio: "Would you like Kling to generate ambient audio for the clip? Note: this is environmental/atmospheric sound — not voiceover. (+$0.056/sec)"
Derive a slug from the source image name and a short motion descriptor:
hey-bud-tint-rotateren-jacket-parallaxmutimer-hero-driftAsk the user to confirm or rename.
Create the output folder and write the spec:
brands/[brand-name]/motion/[output-name]/
add-motion-spec.jsonWith end frame and product images:
{
"output_name": "hey-bud-tint-rotate",
"brand": "[brand-name]",
"source_image": "brands/[brand-name]/product-shoot/hey-bud-tint-hand-hold/product-shot_v1.png",
"end_image": "brands/[brand-name]/motion/uploads/hey-bud-end-frame.jpg",
"motion_description": "The product rotates 90 degrees clockwise, slow and smooth, light catching the label.",
"has_product": true,
"product_name": "Hey Bud Acne Face Tint",
"product_images": [
"brands/[brand-name]/brand-identity/product-images/hey-bud-face-tint.jpg",
"brands/[brand-name]/brand-identity/product-images/hey-bud-face-tint-side.jpg"
],
"duration": 5,
"generate_audio": false,
"aspect_ratio": "9:16"
}Without end frame or product:
{
"output_name": "ren-jacket-parallax",
"brand": "[brand-name]",
"source_image": "brands/[brand-name]/clothing-shoot/ren-garage/shoot_v1.png",
"end_image": null,
"motion_description": "Slow camera pull-back with subtle parallax depth. Slight lens breathing.",
"has_product": false,
"product_name": null,
"product_images": [],
"duration": 6,
"generate_audio": true,
"aspect_ratio": "4:5"
}Aspect ratio — detect from the source image dimensions and match automatically. Default to 9:16 if unsure. Ask the user if the image is ambiguous.
Run from the project root:
python3 skills/references/generate-motion.py brands/[brand-name]/motion/[output-name]The script:
@Element references to the promptCost: duration × $0.112 (audio off) or duration × $0.168 (audio on)
Tell the user the exact path where the file was saved, e.g.: brands/[brand-name]/motion/[output-name]/[output-name]_v1.mp4
Ask: "Happy with this? Or would you like to regenerate, adjust the motion description, or add an end frame?"
To regenerate (same spec):
python3 skills/references/generate-motion.py brands/[brand-name]/motion/[output-name]To adjust motion or add an end frame: update add-motion-spec.json and re-run.
elements array gives Kling reference images for maintaining product accuracy. More angles = better fidelity through rotation and movement/model, pass brands/[brand-name]/models/[model-name]/character-sheet.png as an extra entry in product_images (rename the field mentally — Kling's element system accepts any subject reference). The 4-panel grid feeds Kling's "Bind elements to enhance consistency" feature so the face stays locked through the motion. Equivalent to what kling.ai's web UI does when you upload reference images to a bound element./ugcmotion/ subfolder — multiple brands can run independent motion workflows in the same project~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.