本文へ移動
cccskills
無料GitHub で公開

clone-ad

Clone an existing video ad for a different product or offer. Analyzes the source video's style, pacing, camera work, dialogue, and tone, then adapts and generates a new Seedance 2.0 video customized for the user's product. End-to-end workflow: input video → analysis → adapted prompt → generation → delivery. Use when someone says "clone this ad", "make this ad but for my product", "recreate this video for my brand", or provides a video ad and a product image asking for a similar video.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md21.3 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Clone ad — Seedance 2.0

Clone an existing video ad for a different product or offer. The agent analyzes the source video frame-by-frame, transcribes dialogue, extracts the visual style and beat structure, then generates a new Seedance 2.0 video adapted for the user's product.

How this differs from analyze-video:

  • analyze-video → output is a reusable markdown template saved to prompt-library/
  • clone-ad → output is a generated Seedance 2.0 video delivered to the user

Prerequisites

Before starting, verify:

which ffmpeg || echo "MISSING — run: brew install ffmpeg"
python3 -c "import whisper; print('whisper OK')" 2>/dev/null || echo "MISSING — run: pip3 install openai-whisper"

Both extract-frames.sh and whisper depend on ffmpeg. If missing, install via brew install ffmpeg before proceeding.

Workflow

Step 0: Gather inputs

Collect from the user:

InputRequiredNotes
Source videoyesThe video ad to clone. File path to .mp4, .mov, .webm
Product imagerecommendedReference photo of the user's product. Becomes referenceImages / @(img1) in the prompt. Without this, Seedance invents its own product design.
Product/offer descriptionif no imageText description of the product, its features, target audience, and key selling points. Used to rewrite dialogue and product references.
Brand voiceoptionalCheck MASTER_CONTEXT.md for brand blocks. If empty, ask the user for tone/audience preferences.

If the user only provides a video and says "clone this for my product," ask them for at least a product image or a text description before proceeding.

Step 1: Extract frames and audio

Reuse the analyze-video extraction script — do NOT duplicate it.

bash "skills/arcads-external-api/prompting/analyze-video/scripts/extract-frames.sh" \
  "<source_video_path>" "/tmp/clone-ad-analysis" <num_frames>

Frame count by duration:

Source durationFrames
Under 10s8
10–20s12
20–30s16
Over 30s20

Outputs:

  • frame_001.jpg through frame_NNN.jpg
  • audio.wav (16 kHz mono, whisper-ready)
  • metadata.txt (duration, resolution, fps, frame count)

Read metadata.txt to get the source video duration — you'll need it for step 6.

Step 2: Transcribe audio

Use whisper to get the exact dialogue. This is critical — the dialogue pattern is what gets adapted for the user's product.

import whisper
model = whisper.load_model("base")
result = model.transcribe("/tmp/clone-ad-analysis/audio.wav")

Record:

  • Full transcript text
  • Per-segment timestamps and text (result["segments"])
  • Total word count
  • Language detected

If the video is silent (no speech detected), note that and skip the dialogue adaptation in step 7. The clone will be a visual-style clone only.

Step 3: Compressed analysis

Read ALL extracted frames visually. For each frame, note:

Structure and pacing:

  • How many distinct beats/shots are there?
  • What's the narrative arc? (hook → demo → verdict? reveal → detail → CTA?)
  • How long does each beat last? (map to segment timestamps)

Camera and framing:

  • POV style: selfie/handheld, tripod, propped phone, over-the-shoulder?
  • Framing per beat: wide, medium, close-up, macro?
  • Camera movement: static, pan, dolly, handheld shake?
  • Signature framing moves (e.g., "leans into camera," "tilts product toward lens")

Edit style:

  • Transition type: jump cuts, dissolves, match cuts?
  • Visual rhythm: fast cuts vs held shots?
  • Any recurring motif (e.g., "every other beat is an extreme close-up")?

Dialogue and script structure:

  • Hook format: question, statement, exclamation, reaction?
  • Speech pattern: casual/formal, filler words, trailing thoughts, mid-sentence cuts?
  • How many spoken lines? How many silent beats?
  • CTA style: direct ("link in bio"), soft ("you need to try this"), none?

Tone and energy:

  • Emotion words that describe the speaker/mood
  • Energy arc: starts calm → builds excitement? Flat? Burst then settle?
  • Speaker's relationship to viewer: friend, expert, skeptic, fan?

Lighting and technical quality:

  • Light source: natural/artificial, direction, quality
  • Camera quality: phone/DSLR/cinema, intentional flaws?
  • Audio quality: phone mic, studio, car, outdoor?

Product references:

  • How is the product physically shown? (held up, worn, applied, on a surface)
  • What specific claims or features are called out?
  • Brand mentions, labels visible, text overlays?

What makes this ad distinctive (2–3 defining traits):

  • The unique combination of elements that makes this ad recognizable
  • These are the traits that MUST transfer to the clone

Store this analysis internally — it does NOT get saved as a template file.

Step 4: Present analysis summary

Show the user a structured breakdown before proceeding:

📋 Source video analysis

Duration: Xs | Beats: N | Dialogue: Y words | Style: [style name]

Beat map:
  [00:00–00:03]  HOOK — close-up, excited expression, "opening line"
  [00:03–00:07]  SHOW — tilts product to camera, "feature call-out"
  [00:07–00:10]  DEMO — (silent) applies/uses product, close-up on texture
  [00:10–00:15]  VERDICT — back to camera, "closing line + CTA"

Defining traits:
  1. [trait 1]
  2. [trait 2]
  3. [trait 3]

What transfers to your product:
  ✅ Beat structure, pacing, camera angles, edit style, tone, energy
  ✅ Dialogue pattern (adapted for your product)
  ✅ Lighting and technical quality cues

What gets swapped:
  🔄 Product references → your product
  🔄 Specific claims → your product's features
  🔄 Brand mentions → your brand (if provided)

Proceed with adaptation? (yes / adjust)

Wait for user confirmation before continuing.

Step 5: Decide generation mode

Walk through this decision tree:

┌─ Source video ≤ 15s?
│   YES → Single-clip generation
│   NO  → Multi-clip split at natural beat boundaries
│         Each clip ≤ 15s (Seedance max)
│         Identify best split points from beat map
│         Use the CHAINED MULTI-CLIP PIPELINE below
│
├─ User provided a product IMAGE?
│   YES → Image-to-video mode (referenceImages with @(img1) in prompt)
│         For multi-clip: use i2v for clip 1 ONLY, then chain v2v for clips 2+
│   NO  → Text-only mode (describe product in prompt text only)
│         OR v2v if:
│           - Source video has NO human faces
│           - AND user wants to preserve exact visual style
│           - (v2v with faces → content checker rejection + billed)
│
├─ Source video has person SPEAKING?
│   YES → audioEnabled: true (confirm with user)
│         Dialogue confirmation gate REQUIRED (step 7)
│   NO  → audioEnabled: false (or ask user preference)
│         Skip dialogue gate
│
└─ User wants voice clone from source audio?
    YES → Upload source audio as referenceAudios
          (check audio+image regression: run sanity probe first)
    NO  → Seedance generates its own voice from text

Chained multi-clip pipeline (confirmed 2026-04-10)

When the source ad is longer than 15s, use this hybrid i2v→v2v chaining pattern for visual continuity:

Clip 1: i2v mode
  - referenceImages: [product image]  ← establishes brand fidelity
  - audioEnabled: true (if speech)
  - Generate → poll → download output

Clip 2: v2v mode
  - referenceVideos: [clip 1 output]  ← inherits hands, surface, lighting, product
  - NO referenceImages (mutually exclusive)
  - audioEnabled: true (if speech)
  - Upload clip 1 output via fresh presigned URL
  - Generate → poll → download output

Clip 3: v2v mode
  - referenceVideos: [clip 2 output]  ← chain from MOST RECENT clip, not clip 1
  - Upload clip 2 output via fresh presigned URL
  - Generate → poll → download output

...continue for clips 4+

Critical rules for chaining:

  1. Always chain from the most recent clip — do not reuse earlier uploads. Presigned URLs expire and stale uploads may fail silently.
  2. Upload each clip output fresh via POST /v1/file-upload/get-presigned-url immediately before using it as a reference. Do not reuse filePath values from previous uploads.
  3. Wait for each clip to reach generated status before uploading it as a reference for the next clip. Do not fire clips in parallel — they must be sequential.
  4. Clip 1 uses i2v for brand fidelity (product image as reference). All subsequent clips use v2v (previous clip as reference) for visual continuity.
  5. After all clips are generated, stitch with ffmpeg: ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4 (use absolute paths in the list file).

Why chaining works: Seedance v2v inherits the visual style, hands, surface, lighting, and product appearance from the reference video. By chaining clip N → clip N+1, each subsequent clip maintains continuity with the one before it. The first clip's i2v reference image establishes the product identity; v2v propagates it through the series.

Cost note: Clip 1 costs the i2v rate (~0.06/sec, 0.9 cr at 15s). Clips 2+ cost the v2v rate (~0.1/sec, 1.5 cr at 15s). A 3-clip series costs ~0.9 + 1.5 + 1.5 = ~3.9 credits total.

Important constraints to check:

  • referenceImages and referenceVideos are mutually exclusive — pick one per call
  • v2v with human-containing reference videos → content checker rejection (credits burned)
  • audioEnabled: true + referenceImages may 500 (intermittent server regression) — sanity probe first
  • referenceVideos count > 1 fails — only 1 ref video works
  • If using v2v: only use product-only/abstract/hands-only videos (no faces)
  • Hands-only clips (no face visible) pass the v2v content checker — confirmed 2026-04-10

Tell the user which mode you're using and why.

Step 6: Adapt for user's product

This is the creative core. Using the analysis from step 3:

Dialogue adaptation (if source has speech):

  • Keep the same conversational pattern: if the source uses a question hook, use a question hook. If it uses filler words ("like," "okay so"), keep filler words.
  • Keep the same number of spoken lines and same silent beat placement
  • Keep the same energy arc (excited → calm, or flat, or building)
  • Replace product-specific references with the user's product name, features, and claims
  • Match the word count of each line closely (±3 words per beat) to preserve pacing
  • Read the adapted dialogue out loud at natural pace — it must fit the target duration

Visual adaptation:

  • Keep the analyzed camera work, framing per beat, and edit style
  • Replace the product description with the user's product (physical appearance, colors, materials, label details)
  • Keep the setting, lighting, and atmosphere
  • Keep the person description (or adapt if user specifies a different persona)
  • Keep the technical flaw cues (phone quality, mic type, lighting imperfections)

Prompt composition:

  • Read seedance-2.md for platform rules before composing
  • Read the closest matching style template (e.g., seedance-2-ugc.md for UGC-style sources) for structural guidance
  • Follow the Subject + Action + Camera + Style + Constraints order
  • Stay within 100–260 words (Seedance sweet spot)
  • Include @(img1) token if user provided a product image
  • Add consistency anchors: "The product from @(img1) must remain visually unchanged in every shot"
  • Add pacing cues in the tone direction paragraph
  • Use timestamps [00:00], [00:04], etc. for multi-beat sequences
  • No forbidden words: cinematic, professional, stunning, 8k, studio, perfect

Duration selection:

  • If source ≤ 15s: match source duration (or round to nearest second in 4–15 range)
  • If source > 15s: split into clips, each ≤ 15s
  • Use dialogue word count to validate (see main SKILL.md duration table: ~2.5 words/sec)

Step 7: Dialogue confirmation gate

MANDATORY for any clone with spoken dialogue. Follow the exact format from the main SKILL.md:

📝 Dialogue script (please confirm before I generate)

  1. [HOOK]    "adapted line matching original pattern"
  2. [SHOW]    "adapted feature call-out for user's product"
  3. [DEMO]    (silent beat — physical demonstration, no dialogue)
  4. [VERDICT] "adapted closing line / CTA"

Total spoken words: ~N  |  Target duration: Xs  |  Fits at natural pace: ✅/❌

Approve this dialogue? (yes / edit / rewrite)

Rules:

  • This gate is separate from the credit cost confirmation — both must be satisfied
  • Never assume approval from earlier confirmations (tone, analysis, credit cost)
  • If user says "edit" or proposes changes, revise and re-present until approved
  • Skip ONLY if the source video is entirely silent (no speech detected in step 2)

Step 8: Audio decision

Ask the user:

  1. Enable audio output? (audioEnabled: true / false)
    • Default to true if source video has speech
    • Default to false if source video is silent
  2. Supply reference audio for voice cloning?
    • Offer to extract the source video's audio and use it as referenceAudios
    • Or user can provide their own voice clip
    • Upload via presigned URL if provided
  3. Sanity probe (if using audioEnabled: true + referenceImages):
    • This combo has a known regression that returns 500
    • Before the full call, fire a minimal test to check if the regression is still active
    • If still broken, offer fallbacks:
      • Drop audio (audioEnabled: false)
      • Drop reference image (text-only, lose brand fidelity)
      • Use v2v workaround (generate silent i2v first, then v2v with audio on top)

Step 9: Credit cost estimation

Follow the main SKILL.md's mandatory estimation flow:

  1. Check logs/arcads-api.jsonl for matching model + similar config
  2. Fall back to MASTER_CONTEXT.md rate table
  3. For multi-clip: show per-clip and total
  4. Present with source citation and estimate-only disclosure:
Estimated credit cost:
  Seedance 2.0 (15s i2v) × 1 clip × 1 variation = ~0.9 credits
    (from logs/arcads-api.jsonl 2026-04-09)
  ─────────────────────────────────────
  Estimated total: ~0.9 credits

  ⚠️ Estimate only — confirm exact cost in the Arcads platform.
  Proceed? (yes/no)

Do NOT generate until the user confirms.

Step 10: Session setup and upload

Follow the main SKILL.md session folder checklist:

  1. GET /v1/products → resolve productId (default from MASTER_CONTEXT.md)
  2. Check for existing "Arcads API - YYYY-MM-DD" folder → create if missing
  3. Create project inside the folder → store projectId
  4. Upload references via POST /v1/file-upload/get-presigned-url:
    • Product image → fileType: "image/jpeg" → auto-upscale if longest side < 1024px
    • Source video (if v2v mode) → fileType: "video/mp4"
    • Reference audio (if voice clone) → fileType: "audio/mpeg" or appropriate type
  5. Store all filePath values for the generation payload

Step 11: Generate

  1. Compose the CreateVideoDto JSON:

    • model: "seedance-2.0"
    • productId, projectId
    • prompt (from step 6)
    • aspectRatio: match source video (9:16 or 16:9)
    • duration: from step 6
    • resolution: 720p (default)
    • audioEnabled: from step 8
    • referenceImages: product image filePath (if i2v mode)
    • referenceVideos: source video filePath (if v2v mode, product-only, no faces)
    • referenceAudios: voice clip filePath (if voice clone)
  2. Ask generation count (how many variations? default 1)

  3. Single-clip: Fire N parallel POST /v2/videos/generate calls. Multi-clip (chained): Fire clips sequentially per the chaining pipeline in step 5. Each clip depends on the previous clip's output — do not fire in parallel.

  4. Log immediately to logs/arcads-api.jsonl:

    {
      "timestamp": "...",
      "endpoint": "POST /v2/videos/generate",
      "model": "seedance-2.0",
      "assetId": "...",
      "request": { "duration": ..., "resolution": ..., ... },
      "response": { "status": "pending", "creditsCharged": ... },
      "session": { "folderName": "Arcads API - YYYY-MM-DD", "notes": "clone-ad: ..." }
    }
    
  5. Poll GET /v1/assets/{id} until generated or failed

    • Single-clip: poll all variation IDs concurrently
    • Multi-clip: poll each clip individually, wait for generated before proceeding to the next
    • Update log entry with final status, creditsCharged, generationTimeSec, URLs
  6. For multi-clip: upload each completed clip as a fresh presigned URL reference for the next clip (see chaining pipeline in step 5)

Step 12: Present results

  1. Assign all assets to session project via POST /v1/assets/add-to-project
  2. Save all videos to outputs/clone-ad-tests/ (or a descriptive subfolder)
  3. Open the output folder on the user's machine so they can immediately review:
    open "outputs/clone-ad-tests/"   # macOS
    
  4. Present watch/download URLs
  5. For multiple variations: numbered list for comparison
  6. For multi-clip:
    • Present each clip separately
    • Stitch with ffmpeg using absolute paths:
      printf "file '%s'\n" "$(pwd)/clip1.mp4" "$(pwd)/clip2.mp4" "$(pwd)/clip3.mp4" > /tmp/stitch-list.txt
      ffmpeg -y -f concat -safe 0 -i /tmp/stitch-list.txt -c copy stitched-output.mp4
      
    • Provide both stitched file and individual clips
  7. Show credit summary (total creditsCharged across all clips/variations)

Seedance 2.0 constraints (quick reference)

Check reference.md for full details. These are the ones most likely to bite during clone-ad:

ConstraintImpact
referenceVideos + referenceImages mutually exclusiveCannot combine in same request (500)
v2v with human faces in reference videoContent checker rejects, credits still charged
audioEnabled: true + referenceImages regressionMay return 500 — sanity probe first
referenceVideos count > 1 failsOnly 1 reference video accepted despite docs saying 3
Content check bills before checkingCredits charged at create time, not refunded on rejection
endFrame non-functional on Seedance 2.0Do not use
Prompt length100–260 words (Seedance sweet spot)
Duration4–15 seconds (continuous integer)
Aspect ratio9:16 or 16:9 only (no 1:1)
Forbidden wordscinematic, professional, stunning, 8k, studio, perfect

Error recovery

ErrorRecovery
Content checker rejects promptDo NOT retry same payload. Remove potentially flagged language. Tighten motion descriptions. Check for forbidden words.
500 on audioEnabled: true + referenceImagesAudio+image regression is active. Fallback options: (a) drop audio, (b) drop image and go text-only, (c) v2v workaround: generate silent i2v first, then run v2v with audio on top using the i2v output as reference video
v2v face rejectionSource video has humans — switch to i2v mode with user's product image
Prompt too long (> 260 words)Trim: cut filler from tone direction, compress setting details, shorten consistency anchors. Prioritize beat structure and dialogue.
Source video > 15sSplit into clips at natural beat boundaries. Generate each separately. Offer to stitch.
Generation fails (status: failed)Check data.error.message. If content-related, rewrite prompt. If server error, wait and retry once.

Related files

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Analyze a reference video and reverse-engineer its style into a reusable Seedance 2.0 prompting template. The output is a new skill/formula (like seedance-2-ugc.md) that captures the video's structure, pacing, camera work, edit style, and tone so it can be recreated with any product, any person, in any setting. Use this whenever someone provides a video they want to use as a style reference, says "I want to make videos like this", "deconstruct this video", "turn this into a template", "analyze this style", or drops a video file and wants to recreate that format repeatedly.

日本語の概要は準備中です。原文の説明を表示しています。

krusemediallc/arcads-claude-code1,5892026年9月23日 更新

Creates and retrieves AI video and image-related assets via the Arcads external API (Seedance 2.0, Sora 2, Veo 3.1, Kling, Grok Video, Nano Banana, b-roll, scene, script/actor flows). Loads prompts from the bundled prompting guide and model library, respects HTTP Basic auth from ARCADS_API_KEY, and polls assets/videos until ready. Use when the user mentions Arcads, external-api.arcads.ai, Seedance, Sora2, Veo, Kling, Nano Banana, b-roll, UGC scripts, or generating marketing creative through Arcads.

日本語の概要は準備中です。原文の説明を表示しています。

krusemediallc/arcads-claude-code1,5892026年9月23日 更新

Generate one or more standalone Meta image-ad creatives via ChatGPT Image 2 (gpt-image-2) through the Arcads external API. Locks the model, auto-strips platform chrome, enforces edge-safe layouts and glyph-safety inside body text. Use when the user asks for a "gpt-image-2 ad", "ChatGPT Image ad", "Image 2 ad creative", "make a static image ad with GPT", or anchors on a need for typography-heavy / dense-text / UI-mimicry ad creatives (chat threads, comparison tables, fake search results, iOS dialogs, Slack snapshots, ChatGPT-conversation ads, Apple Notes lists). Does NOT trigger on Nano Banana cues — use nano-banana-image-ad for those.

日本語の概要は準備中です。原文の説明を表示しています。

krusemediallc/arcads-claude-code1,5892026年9月23日 更新

Generate high-CTR YouTube thumbnails using Nano Banana 2 via the Arcads external API. Handles reference image upload, character likeness alignment, proven CTR-tested prompt formulas, and parallel batch generation. Use when the user asks to create a YouTube thumbnail, video thumbnail, A/B test thumbnail variations, or refers to thumbnail design with their face, brand assets, or product photos.

日本語の概要は準備中です。原文の説明を表示しています。

krusemediallc/arcads-claude-code1,5892026年9月23日 更新

Use when the user wants to reverse-engineer an existing image ad into a reusable prompt template. Validates via Arcads — picks gpt-image-2 or Nano Banana at Phase 1. Triggers on "clone this ad as a template", "reverse engineer this ad", "turn this ad into a prompt", "extract a template", "make this ad reusable", "add to my prompt library", "study this ad and make a template". Input is an EXISTING ad image; does NOT trigger for fresh generation (use chatgpt-image-ad or nano-banana-image-ad).

日本語の概要は準備中です。原文の説明を表示しています。

krusemediallc/arcads-claude-code1,5892026年9月23日 更新

Publish finished creatives as live Meta (Facebook/Instagram) ads via the Meta Marketing API, plus research and ad-copy support. Uploads an image or video, builds a multi-variant TEXT_LIQUIDITY creative, and creates a PAUSED ad in an existing ad set. Also pulls top-performing ads (ranked by ROAS) and competitor ads from the Ad Library to inform copy. Use when the user asks to deploy / publish / launch a creative as a Meta or Facebook ad, build a Meta ad, push a video or image into an ad set, pull their top ads, or research competitor ads. Not for generating creative (use the image/video skills) and not for writing AdTable/Airtable rows (use adtable-light).

日本語の概要は準備中です。原文の説明を表示しています。

krusemediallc/arcads-claude-code1,5892026年9月23日 更新

krusemediallc のスキルをすべて見る

このスキルの問題を報告する