{
  "schemaVersion": "1.0",
  "item": {
    "slug": "video-ad-producer",
    "name": "Video Ad Producer — Facebook, Instagram & YouTube",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/g4dr/video-ad-producer",
    "canonicalUrl": "https://clawhub.ai/g4dr/video-ad-producer",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/video-ad-producer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=video-ad-producer",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/video-ad-producer"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/video-ad-producer",
    "agentPageUrl": "https://openagent3.xyz/skills/video-ad-producer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/video-ad-producer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/video-ad-producer/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Overview",
        "body": "This skill enables Claude to transform a text brief into a fully produced\nvideo advertisement — ready to run on Facebook Ads, Instagram Ads, or YouTube Ads —\nusing the InVideo AI platform.\n\nFrom a product description or campaign goal, Claude generates a complete ad video:\nscript, voiceover, visuals, captions, CTA, and platform-optimized export.\n\n🔗 Sign up for InVideo here: https://invideo.sjv.io/TBB"
      },
      {
        "title": "What This Skill Does",
        "body": "Generate video ads from a text brief (product, audience, goal, tone)\nProduce ads in the correct format for Facebook, Instagram, and YouTube\nWrite and optimize ad scripts with proven direct-response copywriting structures\nAdd voiceover, background music, captions, and call-to-action overlays\nExport multiple ad variations for A/B testing\nSupport multiple aspect ratios: 9:16 (Stories/Reels), 1:1 (Feed), 16:9 (YouTube)\nLocalize ads into multiple languages with different voices"
      },
      {
        "title": "Step 1 — Get Your InVideo API Access",
        "body": "Go to https://invideo.sjv.io/TBB and create an account\nChoose a plan with API access (Business plan or above)\nNavigate to Settings → API / Developer Settings\nCopy your API Key: iv_api_xxxxxxxxxxxxxxxx\nStore it as an environment variable:\nexport INVIDEO_API_KEY=iv_api_xxxxxxxxxxxxxxxx\n\nStart with the free trial at https://invideo.sjv.io/TBB to test ad generation\nbefore scaling to paid production."
      },
      {
        "title": "Step 2 — Install Dependencies",
        "body": "npm install axios fs-extra"
      },
      {
        "title": "InVideo API — Core Endpoints",
        "body": "Base URL: https://api.invideo.io/v1\n\nAll requests require:\n\nAuthorization: Bearer YOUR_INVIDEO_API_KEY\nContent-Type: application/json\n\nEndpointMethodPurpose/videos/generatePOSTStart video generation from a script or brief/videos/{id}/statusGETPoll generation progress/videos/{id}/exportGETRetrieve final download URL/scripts/generatePOSTGenerate an ad script from a brief (if supported)"
      },
      {
        "title": "Ad Script Structures (Claude Will Apply These)",
        "body": "Claude selects the right copywriting framework automatically based on the campaign goal:\n\nFrameworkBest ForStructureAIDAAwareness campaignsAttention → Interest → Desire → ActionPASPain-point productsProblem → Agitate → SolutionBABTransformation productsBefore → After → BridgeHook + Proof + CTAPerformance adsBold hook → Social proof → Offer + CTA"
      },
      {
        "title": "Generate a Facebook Ad from a Brief",
        "body": "import axios from 'axios';\n\nconst client = axios.create({\n  baseURL: 'https://api.invideo.io/v1',\n  headers: { Authorization: `Bearer ${process.env.INVIDEO_API_KEY}` }\n});\n\n// Define the ad brief\nconst brief = {\n  product: \"AI-powered meal planning app\",\n  targetAudience: \"busy professionals aged 25–40\",\n  goal: \"app installs\",\n  tone: \"energetic and relatable\",\n  keyBenefit: \"save 2 hours a week on meal prep\",\n  offer: \"Free 14-day trial, no credit card required\",\n  callToAction: \"Download free today\"\n};\n\n// Claude-generated script based on the brief (PAS framework)\nconst script = `\n  Tired of staring at the fridge every evening, clueless about dinner?\n  That mental load of planning meals every single day is exhausting.\n  Meet MealAI — the app that plans your entire week in 30 seconds.\n  Personalized to your diet, your schedule, your grocery budget.\n  Over 200,000 busy professionals already saved 2 hours a week.\n  Try it completely free for 14 days. No credit card needed.\n  Download MealAI today.\n`;\n\nconst response = await client.post('/videos/generate', {\n  script,\n  format: \"1:1\",              // Square — best for Facebook/Instagram Feed\n  duration: \"short\",          // 15–30 seconds optimal for paid ads\n  style: \"cinematic\",         // polished, professional ad look\n  voiceover: {\n    enabled: true,\n    voice: \"en-US-female-1\",\n    speed: 1.05,\n    tone: \"energetic\"\n  },\n  captions: {\n    enabled: true,\n    style: \"bold-center\",\n    highlight: true,\n    fontSize: \"large\"          // readable on mobile without sound\n  },\n  music: {\n    enabled: true,\n    mood: \"upbeat\",\n    volume: 0.2\n  },\n  cta: {\n    enabled: true,\n    text: \"Download Free Today\",\n    position: \"bottom\",\n    style: \"button\"\n  },\n  branding: {\n    watermark: false\n  }\n});\n\nconst videoId = response.data.videoId;\nconsole.log(\"Ad generation started:\", videoId);"
      },
      {
        "title": "Generate Platform-Specific Ad Variants",
        "body": "// Generate all 3 formats from the same script in parallel\n\nconst formats = [\n  { name: \"facebook_feed\",    format: \"1:1\",   platform: \"Facebook Feed\" },\n  { name: \"instagram_story\",  format: \"9:16\",  platform: \"Instagram Story/Reels\" },\n  { name: \"youtube_preroll\",  format: \"16:9\",  platform: \"YouTube Pre-roll\" }\n];\n\nconst jobs = await Promise.all(\n  formats.map(f =>\n    client.post('/videos/generate', {\n      script,\n      format: f.format,\n      duration: f.format === \"16:9\" ? \"medium\" : \"short\",\n      style: \"cinematic\",\n      voiceover: { enabled: true, voice: \"en-US-female-1\", speed: 1.05 },\n      captions: { enabled: true, style: \"bold-bottom\", highlight: true },\n      music: { enabled: true, mood: \"upbeat\", volume: 0.2 },\n      cta: { enabled: true, text: \"Try Free Today\", position: \"bottom\" }\n    }).then(res => ({ ...f, videoId: res.data.videoId }))\n  )\n);\n\nconsole.log(\"All ad variants started:\");\njobs.forEach(j => console.log(`  [${j.platform}] ID: ${j.videoId}`));"
      },
      {
        "title": "Poll All Variants Until Ready",
        "body": "async function waitForAll(jobs) {\n  const results = [];\n\n  for (const job of jobs) {\n    let exportUrl = null;\n\n    while (!exportUrl) {\n      await new Promise(r => setTimeout(r, 5000));\n      const { data } = await client.get(`/videos/${job.videoId}/status`);\n\n      console.log(`[${job.platform}] ${data.state} — ${data.progress}%`);\n\n      if (data.state === \"completed\") exportUrl = data.exportUrl;\n      if (data.state === \"failed\") throw new Error(`${job.platform} ad failed`);\n    }\n\n    results.push({ ...job, exportUrl });\n  }\n\n  return results;\n}\n\nconst completedAds = await waitForAll(jobs);\ncompletedAds.forEach(ad => {\n  console.log(`✅ ${ad.platform}: ${ad.exportUrl}`);\n});"
      },
      {
        "title": "A/B Test: Generate 3 Hook Variations",
        "body": "const hooks = [\n  \"Tired of wasting money on groceries you never eat?\",\n  \"What if you could plan a full week of meals in 30 seconds?\",\n  \"200,000 people just discovered the secret to stress-free meal prep.\"\n];\n\nconst baseScript = (hook) => `\n  ${hook}\n  MealAI plans your entire week in seconds.\n  Personalized meals. Automatic grocery list. Zero stress.\n  Try free for 14 days — no credit card required.\n  Download MealAI now.\n`;\n\nconst abJobs = await Promise.all(\n  hooks.map((hook, i) =>\n    client.post('/videos/generate', {\n      script: baseScript(hook),\n      format: \"1:1\",\n      duration: \"short\",\n      style: \"cinematic\",\n      voiceover: { enabled: true, voice: \"en-US-female-1\" },\n      captions: { enabled: true, style: \"bold-bottom\", highlight: true },\n      music: { enabled: true, mood: \"upbeat\", volume: 0.2 },\n      cta: { enabled: true, text: \"Download Free Today\" }\n    }).then(res => ({ variant: `Hook_${i + 1}`, hook, videoId: res.data.videoId }))\n  )\n);\n\nconsole.log(\"A/B variants launched:\", abJobs.map(j => j.variant));"
      },
      {
        "title": "Full Brief-to-Ad Pipeline",
        "body": "When given an ad brief, Claude will:\n\nExtract product, audience, goal, tone, benefit, offer, and CTA from the brief\nChoose the right copywriting framework (AIDA, PAS, BAB, Hook+Proof+CTA)\nWrite a platform-optimized ad script (15–30s for social, up to 60s for YouTube)\nSelect format, style, voice, music mood, and caption style per platform\nGenerate all required format variants in parallel via InVideo API\nPoll until all variants are ready\nReturn download URLs and a structured ad delivery report"
      },
      {
        "title": "Platform Ad Specifications",
        "body": "PlatformFormatDurationKey RequirementsFacebook Feed1:1 or 16:915–30sCaptions mandatory (85% watched muted)Instagram Feed1:115–30sHook in first 2s, strong visualInstagram Stories9:1615sFull screen, bold captions, fast paceInstagram Reels Ads9:1615–30sNative feel, no bordersYouTube Pre-roll16:915–30sSkip button at 5s — hook must hit beforeYouTube Bumper16:96s maxOne message, one CTA onlyTikTok Ads9:1615–60sAuthentic tone, trending audio"
      },
      {
        "title": "Normalized Ad Output Schema",
        "body": "{\n  \"campaignName\": \"MealAI — App Install Q1 2025\",\n  \"variant\": \"Hook_1\",\n  \"platform\": \"facebook_feed\",\n  \"format\": \"1:1\",\n  \"durationSeconds\": 28,\n  \"scriptFramework\": \"PAS\",\n  \"videoId\": \"iv_ad_9k2mx7\",\n  \"exportUrl\": \"https://cdn.invideo.io/exports/iv_ad_9k2mx7.mp4\",\n  \"cta\": \"Download Free Today\",\n  \"voiceover\": \"en-US-female-1\",\n  \"musicMood\": \"upbeat\",\n  \"captionsEnabled\": true,\n  \"createdAt\": \"2025-02-25T10:00:00Z\",\n  \"status\": \"completed\"\n}"
      },
      {
        "title": "Ad Copywriting Best Practices (Applied Automatically)",
        "body": "Hook in the first 2 seconds — the scroll stops here or nowhere\nLead with the problem or benefit — never with the brand name\nOne clear message per ad — don't try to say everything at once\nAlways include social proof — numbers, testimonials, or results\nEnd with a specific, urgent CTA — \"Download free today\" beats \"Learn more\"\nWrite for silent viewing — assume 85% of viewers have sound off on Facebook\nMatch the platform energy — polished for YouTube, raw and native for TikTok"
      },
      {
        "title": "Error Handling",
        "body": "try {\n  const response = await client.post('/videos/generate', payload);\n  return response.data.videoId;\n} catch (error) {\n  if (error.response?.status === 401) throw new Error(\"Invalid InVideo API key — check credentials\");\n  if (error.response?.status === 429) throw new Error(\"Rate limit hit — reduce concurrent generations\");\n  if (error.response?.status === 400) {\n    throw new Error(`Invalid request: ${error.response.data.message}`);\n  }\n  throw error;\n}"
      },
      {
        "title": "Requirements",
        "body": "An InVideo account → https://invideo.sjv.io/TBB\nA plan with API access (Business plan or above)\nA valid API Key from your InVideo settings\nNode.js 18+ and axios\nA paid ads account (Facebook Ads Manager, Google Ads) to deploy the generated videos"
      }
    ],
    "body": "Video Ad Production Skill\nOverview\n\nThis skill enables Claude to transform a text brief into a fully produced video advertisement — ready to run on Facebook Ads, Instagram Ads, or YouTube Ads — using the InVideo AI platform.\n\nFrom a product description or campaign goal, Claude generates a complete ad video: script, voiceover, visuals, captions, CTA, and platform-optimized export.\n\n🔗 Sign up for InVideo here: https://invideo.sjv.io/TBB\n\nWhat This Skill Does\nGenerate video ads from a text brief (product, audience, goal, tone)\nProduce ads in the correct format for Facebook, Instagram, and YouTube\nWrite and optimize ad scripts with proven direct-response copywriting structures\nAdd voiceover, background music, captions, and call-to-action overlays\nExport multiple ad variations for A/B testing\nSupport multiple aspect ratios: 9:16 (Stories/Reels), 1:1 (Feed), 16:9 (YouTube)\nLocalize ads into multiple languages with different voices\nStep 1 — Get Your InVideo API Access\nGo to https://invideo.sjv.io/TBB and create an account\nChoose a plan with API access (Business plan or above)\nNavigate to Settings → API / Developer Settings\nCopy your API Key: iv_api_xxxxxxxxxxxxxxxx\nStore it as an environment variable:\nexport INVIDEO_API_KEY=iv_api_xxxxxxxxxxxxxxxx\n\n\nStart with the free trial at https://invideo.sjv.io/TBB to test ad generation before scaling to paid production.\n\nStep 2 — Install Dependencies\nnpm install axios fs-extra\n\nInVideo API — Core Endpoints\n\nBase URL: https://api.invideo.io/v1\n\nAll requests require:\n\nAuthorization: Bearer YOUR_INVIDEO_API_KEY\nContent-Type: application/json\n\nEndpoint\tMethod\tPurpose\n/videos/generate\tPOST\tStart video generation from a script or brief\n/videos/{id}/status\tGET\tPoll generation progress\n/videos/{id}/export\tGET\tRetrieve final download URL\n/scripts/generate\tPOST\tGenerate an ad script from a brief (if supported)\nAd Script Structures (Claude Will Apply These)\n\nClaude selects the right copywriting framework automatically based on the campaign goal:\n\nFramework\tBest For\tStructure\nAIDA\tAwareness campaigns\tAttention → Interest → Desire → Action\nPAS\tPain-point products\tProblem → Agitate → Solution\nBAB\tTransformation products\tBefore → After → Bridge\nHook + Proof + CTA\tPerformance ads\tBold hook → Social proof → Offer + CTA\nExamples\nGenerate a Facebook Ad from a Brief\nimport axios from 'axios';\n\nconst client = axios.create({\n  baseURL: 'https://api.invideo.io/v1',\n  headers: { Authorization: `Bearer ${process.env.INVIDEO_API_KEY}` }\n});\n\n// Define the ad brief\nconst brief = {\n  product: \"AI-powered meal planning app\",\n  targetAudience: \"busy professionals aged 25–40\",\n  goal: \"app installs\",\n  tone: \"energetic and relatable\",\n  keyBenefit: \"save 2 hours a week on meal prep\",\n  offer: \"Free 14-day trial, no credit card required\",\n  callToAction: \"Download free today\"\n};\n\n// Claude-generated script based on the brief (PAS framework)\nconst script = `\n  Tired of staring at the fridge every evening, clueless about dinner?\n  That mental load of planning meals every single day is exhausting.\n  Meet MealAI — the app that plans your entire week in 30 seconds.\n  Personalized to your diet, your schedule, your grocery budget.\n  Over 200,000 busy professionals already saved 2 hours a week.\n  Try it completely free for 14 days. No credit card needed.\n  Download MealAI today.\n`;\n\nconst response = await client.post('/videos/generate', {\n  script,\n  format: \"1:1\",              // Square — best for Facebook/Instagram Feed\n  duration: \"short\",          // 15–30 seconds optimal for paid ads\n  style: \"cinematic\",         // polished, professional ad look\n  voiceover: {\n    enabled: true,\n    voice: \"en-US-female-1\",\n    speed: 1.05,\n    tone: \"energetic\"\n  },\n  captions: {\n    enabled: true,\n    style: \"bold-center\",\n    highlight: true,\n    fontSize: \"large\"          // readable on mobile without sound\n  },\n  music: {\n    enabled: true,\n    mood: \"upbeat\",\n    volume: 0.2\n  },\n  cta: {\n    enabled: true,\n    text: \"Download Free Today\",\n    position: \"bottom\",\n    style: \"button\"\n  },\n  branding: {\n    watermark: false\n  }\n});\n\nconst videoId = response.data.videoId;\nconsole.log(\"Ad generation started:\", videoId);\n\nGenerate Platform-Specific Ad Variants\n// Generate all 3 formats from the same script in parallel\n\nconst formats = [\n  { name: \"facebook_feed\",    format: \"1:1\",   platform: \"Facebook Feed\" },\n  { name: \"instagram_story\",  format: \"9:16\",  platform: \"Instagram Story/Reels\" },\n  { name: \"youtube_preroll\",  format: \"16:9\",  platform: \"YouTube Pre-roll\" }\n];\n\nconst jobs = await Promise.all(\n  formats.map(f =>\n    client.post('/videos/generate', {\n      script,\n      format: f.format,\n      duration: f.format === \"16:9\" ? \"medium\" : \"short\",\n      style: \"cinematic\",\n      voiceover: { enabled: true, voice: \"en-US-female-1\", speed: 1.05 },\n      captions: { enabled: true, style: \"bold-bottom\", highlight: true },\n      music: { enabled: true, mood: \"upbeat\", volume: 0.2 },\n      cta: { enabled: true, text: \"Try Free Today\", position: \"bottom\" }\n    }).then(res => ({ ...f, videoId: res.data.videoId }))\n  )\n);\n\nconsole.log(\"All ad variants started:\");\njobs.forEach(j => console.log(`  [${j.platform}] ID: ${j.videoId}`));\n\nPoll All Variants Until Ready\nasync function waitForAll(jobs) {\n  const results = [];\n\n  for (const job of jobs) {\n    let exportUrl = null;\n\n    while (!exportUrl) {\n      await new Promise(r => setTimeout(r, 5000));\n      const { data } = await client.get(`/videos/${job.videoId}/status`);\n\n      console.log(`[${job.platform}] ${data.state} — ${data.progress}%`);\n\n      if (data.state === \"completed\") exportUrl = data.exportUrl;\n      if (data.state === \"failed\") throw new Error(`${job.platform} ad failed`);\n    }\n\n    results.push({ ...job, exportUrl });\n  }\n\n  return results;\n}\n\nconst completedAds = await waitForAll(jobs);\ncompletedAds.forEach(ad => {\n  console.log(`✅ ${ad.platform}: ${ad.exportUrl}`);\n});\n\nA/B Test: Generate 3 Hook Variations\nconst hooks = [\n  \"Tired of wasting money on groceries you never eat?\",\n  \"What if you could plan a full week of meals in 30 seconds?\",\n  \"200,000 people just discovered the secret to stress-free meal prep.\"\n];\n\nconst baseScript = (hook) => `\n  ${hook}\n  MealAI plans your entire week in seconds.\n  Personalized meals. Automatic grocery list. Zero stress.\n  Try free for 14 days — no credit card required.\n  Download MealAI now.\n`;\n\nconst abJobs = await Promise.all(\n  hooks.map((hook, i) =>\n    client.post('/videos/generate', {\n      script: baseScript(hook),\n      format: \"1:1\",\n      duration: \"short\",\n      style: \"cinematic\",\n      voiceover: { enabled: true, voice: \"en-US-female-1\" },\n      captions: { enabled: true, style: \"bold-bottom\", highlight: true },\n      music: { enabled: true, mood: \"upbeat\", volume: 0.2 },\n      cta: { enabled: true, text: \"Download Free Today\" }\n    }).then(res => ({ variant: `Hook_${i + 1}`, hook, videoId: res.data.videoId }))\n  )\n);\n\nconsole.log(\"A/B variants launched:\", abJobs.map(j => j.variant));\n\nFull Brief-to-Ad Pipeline\n\nWhen given an ad brief, Claude will:\n\nExtract product, audience, goal, tone, benefit, offer, and CTA from the brief\nChoose the right copywriting framework (AIDA, PAS, BAB, Hook+Proof+CTA)\nWrite a platform-optimized ad script (15–30s for social, up to 60s for YouTube)\nSelect format, style, voice, music mood, and caption style per platform\nGenerate all required format variants in parallel via InVideo API\nPoll until all variants are ready\nReturn download URLs and a structured ad delivery report\nPlatform Ad Specifications\nPlatform\tFormat\tDuration\tKey Requirements\nFacebook Feed\t1:1 or 16:9\t15–30s\tCaptions mandatory (85% watched muted)\nInstagram Feed\t1:1\t15–30s\tHook in first 2s, strong visual\nInstagram Stories\t9:16\t15s\tFull screen, bold captions, fast pace\nInstagram Reels Ads\t9:16\t15–30s\tNative feel, no borders\nYouTube Pre-roll\t16:9\t15–30s\tSkip button at 5s — hook must hit before\nYouTube Bumper\t16:9\t6s max\tOne message, one CTA only\nTikTok Ads\t9:16\t15–60s\tAuthentic tone, trending audio\nNormalized Ad Output Schema\n{\n  \"campaignName\": \"MealAI — App Install Q1 2025\",\n  \"variant\": \"Hook_1\",\n  \"platform\": \"facebook_feed\",\n  \"format\": \"1:1\",\n  \"durationSeconds\": 28,\n  \"scriptFramework\": \"PAS\",\n  \"videoId\": \"iv_ad_9k2mx7\",\n  \"exportUrl\": \"https://cdn.invideo.io/exports/iv_ad_9k2mx7.mp4\",\n  \"cta\": \"Download Free Today\",\n  \"voiceover\": \"en-US-female-1\",\n  \"musicMood\": \"upbeat\",\n  \"captionsEnabled\": true,\n  \"createdAt\": \"2025-02-25T10:00:00Z\",\n  \"status\": \"completed\"\n}\n\nAd Copywriting Best Practices (Applied Automatically)\nHook in the first 2 seconds — the scroll stops here or nowhere\nLead with the problem or benefit — never with the brand name\nOne clear message per ad — don't try to say everything at once\nAlways include social proof — numbers, testimonials, or results\nEnd with a specific, urgent CTA — \"Download free today\" beats \"Learn more\"\nWrite for silent viewing — assume 85% of viewers have sound off on Facebook\nMatch the platform energy — polished for YouTube, raw and native for TikTok\nError Handling\ntry {\n  const response = await client.post('/videos/generate', payload);\n  return response.data.videoId;\n} catch (error) {\n  if (error.response?.status === 401) throw new Error(\"Invalid InVideo API key — check credentials\");\n  if (error.response?.status === 429) throw new Error(\"Rate limit hit — reduce concurrent generations\");\n  if (error.response?.status === 400) {\n    throw new Error(`Invalid request: ${error.response.data.message}`);\n  }\n  throw error;\n}\n\nRequirements\nAn InVideo account → https://invideo.sjv.io/TBB\nA plan with API access (Business plan or above)\nA valid API Key from your InVideo settings\nNode.js 18+ and axios\nA paid ads account (Facebook Ads Manager, Google Ads) to deploy the generated videos"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/g4dr/video-ad-producer",
    "publisherUrl": "https://clawhub.ai/g4dr/video-ad-producer",
    "owner": "g4dr",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/video-ad-producer",
    "downloadUrl": "https://openagent3.xyz/downloads/video-ad-producer",
    "agentUrl": "https://openagent3.xyz/skills/video-ad-producer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/video-ad-producer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/video-ad-producer/agent.md"
  }
}