{
 "version": "ad_classifier_v1 (2026-10-22)",
 "system_prompt": "You are a performance-creative analyst for DTC e-commerce brands. You classify ONE paid-social ad at a time from the evidence supplied (ad copy fields, transcript, on-screen text/OCR, keyframe images or the video itself, landing-page title/price if supplied). You never invent evidence: if something is not visible or audible, say so via empty strings, 0, 'none' or 'unclear'.\n\nDEFINITIONS (keep these layers separate):\n- ANGLE = the argument for buying (why). One argument aimed at one belief. Judged over the whole ad by the share of runtime devoted to it.\n- HOOK = the execution of the first 1-3 seconds (what stops the scroll). Judged ONLY on the first 3 seconds.\n- FORMAT = the production structure (who is on camera, how it is shot/assembled). Independent of angle.\n- OFFER MECHANICS = the commercial terms shown (discount, bundle, guarantee...). Record them even if the angle is not offer-led.\n\nANGLE TAXONOMY (id: definition. CUES):\n- problem_agitate_solve: Opens on a named pain, amplifies it, then presents the product as relief. CUES: 'tired of / struggling with / stop doing X'; pain shown before product; most of the first 10 s is about the problem.\n- new_mechanism: Reframes the CAUSE of the problem and explains the unique way the product works. CUES: 'the real reason X happens is'; named ingredient/technology; mechanism animation; 'unlike X, this targets Y'.\n- failed_solution_reframe: Acknowledges what the viewer already tried and why it failed; this product fixes the real gap. CUES: 'I tried everything'; list of discarded alternatives; 'it's not your fault'.\n- before_after_transformation: The argument IS the visible change from state A to state B. CUES: split screen; 'day 1 vs day 30'; time-lapse; 'results' overlay; measured outcome.\n- demo_education: Shows how it works or how to use it; teaches something. CUES: hands-on usage, step-by-step, 'here's how', explainer voiceover, screen recording.\n- social_proof_testimonial: A customer's own account of the outcome (UGC review, story arc). CUES: first-person 'I'; selfie framing; review screenshots; star ratings; 'I was skeptical'.\n- social_proof_volume: Stacked quantitative/press proof: customer counts, sold-out, press logos. CUES: '50,000 sold'; logo wall 'as seen in'; '#1 best seller'; 'sold out 3 times'.\n- authority_clinical: An expert, professional or study carries the argument. CUES: doctor/derm/vet/trainer on camera; credentials on screen; 'clinically proven'; 'studies show'; percentages with sample sizes.\n- founder_story: Founder-to-camera explains why the brand/product exists. CUES: 'I started this because'; founder name/title; workshop/factory footage; mission language.\n- us_vs_them: Explicit comparison against a competitor or the 'old way'. CUES: side-by-side; 'vs'; check/X table; 'traditional X' vs 'ours'; 'ditch your'.\n- identity_aspiration: Sells who you become or belong to; lifestyle, taste, status; no explicit problem. CUES: aesthetic b-roll; 'for people who'; tribe/luxury cues; no pain statement.\n- fear_warning: Stakes of NOT acting: hidden dangers, health/safety/financial loss, warning signs. CUES: 'warning'; '5 signs you'; 'most people don't know'; 'toxic/dangerous'; ominous tone.\n- curiosity_pattern_interrupt: Withholds the answer/product to earn attention; the argument is 'you need to see this'. CUES: 'wait for it'; odd visual; product absent in first 3 s; 'nobody talks about this'.\n- gift_occasion: Frames the product as a gift or ties it to a calendar moment. CUES: 'gift for'; Mother's Day/Christmas/Valentine's; gift wrap; 'they'll love it'.\n- offer_value_bundle: The deal is the argument: bundle, free gift, price anchoring, savings. CUES: price on screen; strikethrough; 'buy 2 get 1'; 'under $X'; 'worth $Y'.\n- scarcity_urgency: Limited time or stock drives the decision. CUES: 'only X left'; 'ends tonight'; countdown; 'last chance'; 'back in stock'.\n- humor_skit: Comedy/parody carries the message; entertainment first. CUES: staged dialogue; punchline; characters; exaggerated acting; meme structure.\n- sensory_asmr_satisfying: Texture, sound or visual satisfaction sells it (ASMR, oddly satisfying, unboxing). CUES: no voiceover; macro close-ups; tapping/crinkle audio; slow motion.\n- trend_native_viral: 'Everyone is buying this' framed through platform-native trends. CUES: 'TikTok made me buy it'; trending sound; POV text; duet/stitch; comment-reply layout.\n- ai_avatar_synthetic: An AI presenter or AI-generated scenes carry the pitch (also record as format). CUES: uncanny lip-sync; synthetic voice cadence; impossible scenes; AI disclosure label.\n- feature_benefit_rational: Neutral feature/benefit or reasons-why listing; specs over story. CUES: callouts/arrows; '5 features'; '3 reasons why'; spec list; no emotional framing.\n\nHOOK TYPES: question, bold_claim, callout_if_you_have_x, pov_relatable_scenario, text_on_screen_statement, shocking_stat, warning_negative, confession_story_open, direct_address_stop_scrolling, visual_only_pattern_interrupt, price_offer_first, trend_sound_meme, none.\nFORMATS: ugc_selfie_talking_head, founder_to_camera, expert_explainer, static_image, carousel, product_demo, before_after_split_screen, podcast_clip, mashup_compilation, skit_scripted, screen_recording_text_notes, street_interview, greenscreen_reaction, unboxing_asmr, ai_generated_avatar.\nOFFER MECHANICS: percent_discount, dollar_discount, bundle, buy_x_get_y, free_gift, free_shipping, subscription_save, money_back_guarantee, free_trial, financing_bnpl, limited_time, limited_stock, price_anchor_strikethrough, none.\nEMOTIONAL DRIVERS: relief, hope, fear, belonging, status, pride, curiosity, delight, guilt, love_care, control, nostalgia, trust.\n\nCATEGORY TAXONOMY (category_l1 -> allowed category_l2 values):\n- beauty_skincare: skincare_topicals, skincare_devices, hair_tools, hair_care_growth, makeup, oral_care_whitening, body_care_hair_removal, nails, mens_grooming, fragrance\n- health_supplements: supplements_vitamins, greens_protein_powders, gut_digestive, sleep_stress, weight_management, hormonal_womens_health, energy_nootropics, functional_beverages, at_home_tests, sexual_wellness\n- wellness_devices: massage_devices, red_light_therapy, posture_back_relief, sleep_devices, pain_relief_tens, sauna_cold_therapy, air_water_purifiers, wearables_trackers\n- fitness_sports: home_gym_strength, cardio_walking_pads, portable_resistance_gear, recovery_mobility, golf, cycling, racquet_pickleball, activewear, sports_nutrition\n- pet: pet_supplements_health, pet_food_treats, grooming_tools, toys_enrichment, beds_furniture, training_behavior_devices, carriers_travel, litter_waste, pet_trackers_tech\n- home_living: cleaning_gadgets_vacuums, organization_storage, bedding_pillows, decor_lighting, bathroom_shower, laundry, furniture, smart_home_security\n- kitchen_food: cookware_knives, small_appliances, coffee_tea, hydration_bottles, food_prep_storage, specialty_food_snacks, bar_drinks\n- fashion_jewelry: jewelry, watches, bags_wallets, footwear, shapewear_underwear, apparel, eyewear, outerwear, hats_accessories\n- tech_gadgets: phone_accessories, audio_earbuds_headphones, charging_power, novelty_gadgets, photo_video_lighting, car_electronics, computer_tablet_accessories, drones_rc\n- baby_kids: baby_sleep_soothing, feeding_nursing, strollers_carriers, monitors_safety, learning_toys, kids_apparel_shoes, maternity_postpartum\n- outdoors_garden_travel: camping_hiking, garden_tools_planters, patio_grills_firepits, pest_control, luggage_travel_gear, edc_flashlights_knives, pool_water\n- hobbies_crafts_toys_gifts: crafting_3d_printing, musical_instruments, games_puzzles_collectibles, personalized_gifts, books_stationery, art_supplies, adult_novelty\n- vehicles_auto: car_accessories_organizers, detailing_cleaning, vehicle_lighting, ebikes_scooters, motorcycle_gear, tools_garage\n- other: services_digital, apps_software, unclear\n\nRULES:\n1. Fill `evidence` FIRST (hook_first_3s verbatim, on_screen_text, transcript_summary, rationale), then the labels. Labels must be supported by the evidence you wrote.\n2. primary_angle: the single argument that occupies the most runtime. secondary_angle only if a second argument occupies at least about a quarter of the ad, else 'none'. Offer/scarcity are the primary angle only when the deal itself is the main argument.\n3. hook_type is decided from the first 3 seconds only. If the ad is a static image, judge the headline/largest text as the hook.\n4. format: pick the dominant production structure; a UGC testimonial that is cut into a compilation is 'mashup_compilation'.\n5. category_l2 must belong to the chosen category_l1. If nothing fits, use the closest l1 and its most general l2, lower confidence.category and set needs_review=true.\n6. price_seen: only a price actually shown (on screen, in copy, or in supplied landing-page text). Never estimate. 0 and 'none' when absent.\n7. claims_made: list every concrete claim (efficacy, numbers, studies, comparisons, guarantees). Quote numbers exactly as shown.\n8. Non-product ads (apps, services, lead-gen, brand awareness without a product): is_physical_product_ad=false, category_l1='other', needs_review=true.\n9. Non-English creative: classify if you can, set confidence.overall <= 0.6 and note the language in rationale.\n10. confidence.overall below 0.7 whenever the product, category or angle is ambiguous or evidence is partial (no transcript, fewer than 3 frames, missing copy).\n\nFEW-SHOT EXAMPLES: {{FEW_SHOT_BLOCK}}  (insert 3-5 hand-labelled ads here as 'INPUT ... -> OUTPUT <json>'; keep this block byte-stable so it stays in the prompt cache)\n\nReturn ONLY the JSON object required by the schema.",
 "user_message_template": "AD_ID: {{ad_id}}\nSOURCE: {{meta|tiktok|google}}   PAGE/BRAND: {{page_name}}   FIRST_SEEN: {{ad_delivery_start_time}}   ACTIVE_DAYS: {{days}}   ADS_FROM_THIS_PAGE: {{n}}\nAD_COPY: primary_text={{ad_creative_bodies}} | headline={{ad_creative_link_titles}} | description={{ad_creative_link_descriptions}} | cta={{ad_creative_link_captions}}\nLANDING_PAGE: title={{lp_title}} | price_text={{lp_price_text}} | url={{landing_url}}\nTRANSCRIPT (ASR, may be empty): {{transcript}}\nOCR / ON-SCREEN TEXT (may be empty): {{ocr_text}}\n[then: 'Frame 1 (t=0.0s):' <image> ... 'Frame N (t=..s):' <image>, or the video file for Gemini]\nClassify this ad.",
 "json_schema": {
  "type": "object",
  "properties": {
   "evidence": {
    "type": "object",
    "properties": {
     "hook_first_3s": {
      "type": "string",
      "description": "Verbatim spoken words and/or on-screen text from the first 3 seconds. Empty string if none."
     },
     "on_screen_text": {
      "type": "array",
      "items": {
       "type": "string"
      },
      "description": "Distinct text overlays / captions seen in the creative, in order."
     },
     "transcript_summary": {
      "type": "string",
      "description": "At most 2 sentences summarising what is said."
     },
     "rationale": {
      "type": "string",
      "description": "At most 2 sentences naming the detection cues that drove primary_angle, hook_type and format."
     }
    },
    "required": [
     "hook_first_3s",
     "on_screen_text",
     "transcript_summary",
     "rationale"
    ],
    "additionalProperties": false
   },
   "is_physical_product_ad": {
    "type": "boolean",
    "description": "true only if a physical product is sold; false for apps, services, lead-gen, brand-only."
   },
   "product_name": {
    "type": "string",
    "description": "Product name as shown on packaging, ad copy or landing page. Empty string if unknown."
   },
   "product_description": {
    "type": "string",
    "description": "One sentence: what the product is and what it does."
   },
   "category_l1": {
    "type": "string",
    "enum": [
     "beauty_skincare",
     "health_supplements",
     "wellness_devices",
     "fitness_sports",
     "pet",
     "home_living",
     "kitchen_food",
     "fashion_jewelry",
     "tech_gadgets",
     "baby_kids",
     "outdoors_garden_travel",
     "hobbies_crafts_toys_gifts",
     "vehicles_auto",
     "other"
    ]
   },
   "category_l2": {
    "type": "string",
    "enum": [
     "activewear",
     "adult_novelty",
     "air_water_purifiers",
     "apparel",
     "apps_software",
     "art_supplies",
     "at_home_tests",
     "audio_earbuds_headphones",
     "baby_sleep_soothing",
     "bags_wallets",
     "bar_drinks",
     "bathroom_shower",
     "bedding_pillows",
     "beds_furniture",
     "body_care_hair_removal",
     "books_stationery",
     "camping_hiking",
     "car_accessories_organizers",
     "car_electronics",
     "cardio_walking_pads",
     "carriers_travel",
     "charging_power",
     "cleaning_gadgets_vacuums",
     "coffee_tea",
     "computer_tablet_accessories",
     "cookware_knives",
     "crafting_3d_printing",
     "cycling",
     "decor_lighting",
     "detailing_cleaning",
     "drones_rc",
     "ebikes_scooters",
     "edc_flashlights_knives",
     "energy_nootropics",
     "eyewear",
     "feeding_nursing",
     "food_prep_storage",
     "footwear",
     "fragrance",
     "functional_beverages",
     "furniture",
     "games_puzzles_collectibles",
     "garden_tools_planters",
     "golf",
     "greens_protein_powders",
     "grooming_tools",
     "gut_digestive",
     "hair_care_growth",
     "hair_tools",
     "hats_accessories",
     "home_gym_strength",
     "hormonal_womens_health",
     "hydration_bottles",
     "jewelry",
     "kids_apparel_shoes",
     "laundry",
     "learning_toys",
     "litter_waste",
     "luggage_travel_gear",
     "makeup",
     "massage_devices",
     "maternity_postpartum",
     "mens_grooming",
     "monitors_safety",
     "motorcycle_gear",
     "musical_instruments",
     "nails",
     "novelty_gadgets",
     "oral_care_whitening",
     "organization_storage",
     "outerwear",
     "pain_relief_tens",
     "patio_grills_firepits",
     "personalized_gifts",
     "pest_control",
     "pet_food_treats",
     "pet_supplements_health",
     "pet_trackers_tech",
     "phone_accessories",
     "photo_video_lighting",
     "pool_water",
     "portable_resistance_gear",
     "posture_back_relief",
     "racquet_pickleball",
     "recovery_mobility",
     "red_light_therapy",
     "sauna_cold_therapy",
     "services_digital",
     "sexual_wellness",
     "shapewear_underwear",
     "skincare_devices",
     "skincare_topicals",
     "sleep_devices",
     "sleep_stress",
     "small_appliances",
     "smart_home_security",
     "specialty_food_snacks",
     "sports_nutrition",
     "strollers_carriers",
     "supplements_vitamins",
     "tools_garage",
     "toys_enrichment",
     "training_behavior_devices",
     "unclear",
     "vehicle_lighting",
     "watches",
     "wearables_trackers",
     "weight_management"
    ],
    "description": "Must be one of the sub-niches listed under the chosen category_l1."
   },
   "price_seen": {
    "type": "object",
    "properties": {
     "amount": {
      "type": "number",
      "description": "Price actually visible in the creative, ad copy or supplied landing-page text. 0 if none seen. Never guess."
     },
     "currency": {
      "type": "string",
      "description": "ISO 4217 code, e.g. USD. Empty string if none."
     },
     "source": {
      "type": "string",
      "enum": [
       "on_screen",
       "ad_copy",
       "landing_page",
       "none"
      ]
     }
    },
    "required": [
     "amount",
     "currency",
     "source"
    ],
    "additionalProperties": false
   },
   "primary_angle": {
    "type": "string",
    "enum": [
     "problem_agitate_solve",
     "new_mechanism",
     "failed_solution_reframe",
     "before_after_transformation",
     "demo_education",
     "social_proof_testimonial",
     "social_proof_volume",
     "authority_clinical",
     "founder_story",
     "us_vs_them",
     "identity_aspiration",
     "fear_warning",
     "curiosity_pattern_interrupt",
     "gift_occasion",
     "offer_value_bundle",
     "scarcity_urgency",
     "humor_skit",
     "sensory_asmr_satisfying",
     "trend_native_viral",
     "ai_avatar_synthetic",
     "feature_benefit_rational"
    ]
   },
   "secondary_angle": {
    "type": "string",
    "enum": [
     "problem_agitate_solve",
     "new_mechanism",
     "failed_solution_reframe",
     "before_after_transformation",
     "demo_education",
     "social_proof_testimonial",
     "social_proof_volume",
     "authority_clinical",
     "founder_story",
     "us_vs_them",
     "identity_aspiration",
     "fear_warning",
     "curiosity_pattern_interrupt",
     "gift_occasion",
     "offer_value_bundle",
     "scarcity_urgency",
     "humor_skit",
     "sensory_asmr_satisfying",
     "trend_native_viral",
     "ai_avatar_synthetic",
     "feature_benefit_rational",
     "none"
    ],
    "description": "Only if a second argument occupies at least ~25% of the ad; else 'none'."
   },
   "hook_type": {
    "type": "string",
    "enum": [
     "question",
     "bold_claim",
     "callout_if_you_have_x",
     "pov_relatable_scenario",
     "text_on_screen_statement",
     "shocking_stat",
     "warning_negative",
     "confession_story_open",
     "direct_address_stop_scrolling",
     "visual_only_pattern_interrupt",
     "price_offer_first",
     "trend_sound_meme",
     "none"
    ]
   },
   "format": {
    "type": "string",
    "enum": [
     "ugc_selfie_talking_head",
     "founder_to_camera",
     "expert_explainer",
     "static_image",
     "carousel",
     "product_demo",
     "before_after_split_screen",
     "podcast_clip",
     "mashup_compilation",
     "skit_scripted",
     "screen_recording_text_notes",
     "street_interview",
     "greenscreen_reaction",
     "unboxing_asmr",
     "ai_generated_avatar"
    ]
   },
   "offer_mechanics": {
    "type": "array",
    "items": {
     "type": "string",
     "enum": [
      "percent_discount",
      "dollar_discount",
      "bundle",
      "buy_x_get_y",
      "free_gift",
      "free_shipping",
      "subscription_save",
      "money_back_guarantee",
      "free_trial",
      "financing_bnpl",
      "limited_time",
      "limited_stock",
      "price_anchor_strikethrough",
      "none"
     ]
    }
   },
   "target_customer": {
    "type": "object",
    "properties": {
     "persona": {
      "type": "string",
      "description": "One short phrase, e.g. 'women 35-50 with thinning hair'."
     },
     "gender": {
      "type": "string",
      "enum": [
       "women",
       "men",
       "all",
       "unclear"
      ]
     },
     "age_range": {
      "type": "string",
      "enum": [
       "18-24",
       "25-34",
       "35-44",
       "45-54",
       "55+",
       "all",
       "unclear"
      ]
     },
     "awareness_stage": {
      "type": "string",
      "enum": [
       "unaware",
       "problem_aware",
       "solution_aware",
       "product_aware",
       "most_aware"
      ]
     }
    },
    "required": [
     "persona",
     "gender",
     "age_range",
     "awareness_stage"
    ],
    "additionalProperties": false
   },
   "claims_made": {
    "type": "array",
    "items": {
     "type": "object",
     "properties": {
      "claim": {
       "type": "string"
      },
      "claim_type": {
       "type": "string",
       "enum": [
        "efficacy",
        "clinical_study",
        "comparative",
        "numeric_stat",
        "testimonial",
        "safety",
        "guarantee",
        "other"
       ]
      }
     },
     "required": [
      "claim",
      "claim_type"
     ],
     "additionalProperties": false
    }
   },
   "emotional_driver": {
    "type": "string",
    "enum": [
     "relief",
     "hope",
     "fear",
     "belonging",
     "status",
     "pride",
     "curiosity",
     "delight",
     "guilt",
     "love_care",
     "control",
     "nostalgia",
     "trust"
    ]
   },
   "confidence": {
    "type": "object",
    "properties": {
     "overall": {
      "type": "number",
      "description": "0.0-1.0. Below 0.7 when the product, category or angle is ambiguous, the creative is partly missing (no transcript/frames), or the language is not English."
     },
     "category": {
      "type": "string",
      "enum": [
       "low",
       "medium",
       "high"
      ]
     },
     "angle": {
      "type": "string",
      "enum": [
       "low",
       "medium",
       "high"
      ]
     }
    },
    "required": [
     "overall",
     "category",
     "angle"
    ],
    "additionalProperties": false
   },
   "needs_review": {
    "type": "boolean",
    "description": "true if confidence.overall < 0.7, or is_physical_product_ad is false, or category_l2 does not belong to category_l1."
   }
  },
  "required": [
   "evidence",
   "is_physical_product_ad",
   "product_name",
   "product_description",
   "category_l1",
   "category_l2",
   "price_seen",
   "primary_angle",
   "secondary_angle",
   "hook_type",
   "format",
   "offer_mechanics",
   "target_customer",
   "claims_made",
   "emotional_driver",
   "confidence",
   "needs_review"
  ],
  "additionalProperties": false
 },
 "category_taxonomy": {
  "beauty_skincare": [
   "skincare_topicals",
   "skincare_devices",
   "hair_tools",
   "hair_care_growth",
   "makeup",
   "oral_care_whitening",
   "body_care_hair_removal",
   "nails",
   "mens_grooming",
   "fragrance"
  ],
  "health_supplements": [
   "supplements_vitamins",
   "greens_protein_powders",
   "gut_digestive",
   "sleep_stress",
   "weight_management",
   "hormonal_womens_health",
   "energy_nootropics",
   "functional_beverages",
   "at_home_tests",
   "sexual_wellness"
  ],
  "wellness_devices": [
   "massage_devices",
   "red_light_therapy",
   "posture_back_relief",
   "sleep_devices",
   "pain_relief_tens",
   "sauna_cold_therapy",
   "air_water_purifiers",
   "wearables_trackers"
  ],
  "fitness_sports": [
   "home_gym_strength",
   "cardio_walking_pads",
   "portable_resistance_gear",
   "recovery_mobility",
   "golf",
   "cycling",
   "racquet_pickleball",
   "activewear",
   "sports_nutrition"
  ],
  "pet": [
   "pet_supplements_health",
   "pet_food_treats",
   "grooming_tools",
   "toys_enrichment",
   "beds_furniture",
   "training_behavior_devices",
   "carriers_travel",
   "litter_waste",
   "pet_trackers_tech"
  ],
  "home_living": [
   "cleaning_gadgets_vacuums",
   "organization_storage",
   "bedding_pillows",
   "decor_lighting",
   "bathroom_shower",
   "laundry",
   "furniture",
   "smart_home_security"
  ],
  "kitchen_food": [
   "cookware_knives",
   "small_appliances",
   "coffee_tea",
   "hydration_bottles",
   "food_prep_storage",
   "specialty_food_snacks",
   "bar_drinks"
  ],
  "fashion_jewelry": [
   "jewelry",
   "watches",
   "bags_wallets",
   "footwear",
   "shapewear_underwear",
   "apparel",
   "eyewear",
   "outerwear",
   "hats_accessories"
  ],
  "tech_gadgets": [
   "phone_accessories",
   "audio_earbuds_headphones",
   "charging_power",
   "novelty_gadgets",
   "photo_video_lighting",
   "car_electronics",
   "computer_tablet_accessories",
   "drones_rc"
  ],
  "baby_kids": [
   "baby_sleep_soothing",
   "feeding_nursing",
   "strollers_carriers",
   "monitors_safety",
   "learning_toys",
   "kids_apparel_shoes",
   "maternity_postpartum"
  ],
  "outdoors_garden_travel": [
   "camping_hiking",
   "garden_tools_planters",
   "patio_grills_firepits",
   "pest_control",
   "luggage_travel_gear",
   "edc_flashlights_knives",
   "pool_water"
  ],
  "hobbies_crafts_toys_gifts": [
   "crafting_3d_printing",
   "musical_instruments",
   "games_puzzles_collectibles",
   "personalized_gifts",
   "books_stationery",
   "art_supplies",
   "adult_novelty"
  ],
  "vehicles_auto": [
   "car_accessories_organizers",
   "detailing_cleaning",
   "vehicle_lighting",
   "ebikes_scooters",
   "motorcycle_gear",
   "tools_garage"
  ],
  "other": [
   "services_digital",
   "apps_software",
   "unclear"
  ]
 },
 "category_l1_to_shopify_vertical": {
  "beauty_skincare": "Health & Beauty",
  "health_supplements": "Health & Beauty",
  "wellness_devices": "Health & Beauty",
  "fitness_sports": "Sporting Goods",
  "pet": "Animals & Pet Supplies",
  "home_living": "Home & Garden / Furniture",
  "kitchen_food": "Home & Garden (Kitchen & Dining) / Food, Beverages & Tobacco",
  "fashion_jewelry": "Apparel & Accessories / Luggage & Bags",
  "tech_gadgets": "Electronics / Cameras & Optics",
  "baby_kids": "Baby & Toddler / Toys & Games",
  "outdoors_garden_travel": "Sporting Goods / Home & Garden / Luggage & Bags",
  "hobbies_crafts_toys_gifts": "Arts & Entertainment / Toys & Games / Office Supplies",
  "vehicles_auto": "Vehicles & Parts",
  "other": "Services / Software / Uncategorized"
 },
 "angle_taxonomy": {
  "problem_agitate_solve": "Opens on a named pain, amplifies it, then presents the product as relief. CUES: 'tired of / struggling with / stop doing X'; pain shown before product; most of the first 10 s is about the problem.",
  "new_mechanism": "Reframes the CAUSE of the problem and explains the unique way the product works. CUES: 'the real reason X happens is'; named ingredient/technology; mechanism animation; 'unlike X, this targets Y'.",
  "failed_solution_reframe": "Acknowledges what the viewer already tried and why it failed; this product fixes the real gap. CUES: 'I tried everything'; list of discarded alternatives; 'it's not your fault'.",
  "before_after_transformation": "The argument IS the visible change from state A to state B. CUES: split screen; 'day 1 vs day 30'; time-lapse; 'results' overlay; measured outcome.",
  "demo_education": "Shows how it works or how to use it; teaches something. CUES: hands-on usage, step-by-step, 'here's how', explainer voiceover, screen recording.",
  "social_proof_testimonial": "A customer's own account of the outcome (UGC review, story arc). CUES: first-person 'I'; selfie framing; review screenshots; star ratings; 'I was skeptical'.",
  "social_proof_volume": "Stacked quantitative/press proof: customer counts, sold-out, press logos. CUES: '50,000 sold'; logo wall 'as seen in'; '#1 best seller'; 'sold out 3 times'.",
  "authority_clinical": "An expert, professional or study carries the argument. CUES: doctor/derm/vet/trainer on camera; credentials on screen; 'clinically proven'; 'studies show'; percentages with sample sizes.",
  "founder_story": "Founder-to-camera explains why the brand/product exists. CUES: 'I started this because'; founder name/title; workshop/factory footage; mission language.",
  "us_vs_them": "Explicit comparison against a competitor or the 'old way'. CUES: side-by-side; 'vs'; check/X table; 'traditional X' vs 'ours'; 'ditch your'.",
  "identity_aspiration": "Sells who you become or belong to; lifestyle, taste, status; no explicit problem. CUES: aesthetic b-roll; 'for people who'; tribe/luxury cues; no pain statement.",
  "fear_warning": "Stakes of NOT acting: hidden dangers, health/safety/financial loss, warning signs. CUES: 'warning'; '5 signs you'; 'most people don't know'; 'toxic/dangerous'; ominous tone.",
  "curiosity_pattern_interrupt": "Withholds the answer/product to earn attention; the argument is 'you need to see this'. CUES: 'wait for it'; odd visual; product absent in first 3 s; 'nobody talks about this'.",
  "gift_occasion": "Frames the product as a gift or ties it to a calendar moment. CUES: 'gift for'; Mother's Day/Christmas/Valentine's; gift wrap; 'they'll love it'.",
  "offer_value_bundle": "The deal is the argument: bundle, free gift, price anchoring, savings. CUES: price on screen; strikethrough; 'buy 2 get 1'; 'under $X'; 'worth $Y'.",
  "scarcity_urgency": "Limited time or stock drives the decision. CUES: 'only X left'; 'ends tonight'; countdown; 'last chance'; 'back in stock'.",
  "humor_skit": "Comedy/parody carries the message; entertainment first. CUES: staged dialogue; punchline; characters; exaggerated acting; meme structure.",
  "sensory_asmr_satisfying": "Texture, sound or visual satisfaction sells it (ASMR, oddly satisfying, unboxing). CUES: no voiceover; macro close-ups; tapping/crinkle audio; slow motion.",
  "trend_native_viral": "'Everyone is buying this' framed through platform-native trends. CUES: 'TikTok made me buy it'; trending sound; POV text; duet/stitch; comment-reply layout.",
  "ai_avatar_synthetic": "An AI presenter or AI-generated scenes carry the pitch (also record as format). CUES: uncanny lip-sync; synthetic voice cadence; impossible scenes; AI disclosure label.",
  "feature_benefit_rational": "Neutral feature/benefit or reasons-why listing; specs over story. CUES: callouts/arrows; '5 features'; '3 reasons why'; spec list; no emotional framing."
 },
 "hook_types": [
  "question",
  "bold_claim",
  "callout_if_you_have_x",
  "pov_relatable_scenario",
  "text_on_screen_statement",
  "shocking_stat",
  "warning_negative",
  "confession_story_open",
  "direct_address_stop_scrolling",
  "visual_only_pattern_interrupt",
  "price_offer_first",
  "trend_sound_meme",
  "none"
 ],
 "formats": [
  "ugc_selfie_talking_head",
  "founder_to_camera",
  "expert_explainer",
  "static_image",
  "carousel",
  "product_demo",
  "before_after_split_screen",
  "podcast_clip",
  "mashup_compilation",
  "skit_scripted",
  "screen_recording_text_notes",
  "street_interview",
  "greenscreen_reaction",
  "unboxing_asmr",
  "ai_generated_avatar"
 ],
 "offer_mechanics": [
  "percent_discount",
  "dollar_discount",
  "bundle",
  "buy_x_get_y",
  "free_gift",
  "free_shipping",
  "subscription_save",
  "money_back_guarantee",
  "free_trial",
  "financing_bnpl",
  "limited_time",
  "limited_stock",
  "price_anchor_strikethrough",
  "none"
 ],
 "emotional_drivers": [
  "relief",
  "hope",
  "fear",
  "belonging",
  "status",
  "pride",
  "curiosity",
  "delight",
  "guilt",
  "love_care",
  "control",
  "nostalgia",
  "trust"
 ],
 "claude_request_shape": {
  "model": "<claude-haiku-4-5 | claude-haiku-5-5 | claude-sonnet-5>",
  "max_tokens": 1500,
  "system": [
   {
    "type": "text",
    "text": "<system_prompt>",
    "cache_control": {
     "type": "ephemeral"
    }
   }
  ],
  "output_config": {
   "format": {
    "type": "json_schema",
    "schema": "<json_schema>"
   },
   "effort": "low"
  },
  "messages": [
   {
    "role": "user",
    "content": [
     "<text: user_message>",
     "<image blocks: frames, each preceded by a 'Frame k (t=..s):' text block>"
    ]
   }
  ]
 }
}