| name | tiktok-product-analysis |
| description | Parallel analysis pipeline for TikTok product campaigns. Handles image analysis, video analysis, and market synthesis using Gemini async MCP. Prepares all foundation data before script generation. Designed for batch processing multiple products simultaneously. |
| version | 1.0.0 |
| author | Claude |
| execution_agent | Gemini CLI MCP (async) |
TikTok Product Analysis Skill
PURPOSE: Prepare all analysis foundation before script generation
EXECUTOR: Gemini CLI MCP (async for parallelism)
OUTPUT: Analysis files that script generator will reference (not duplicate)
Compliance & Policy Notes (DE Market) - ENHANCED
Safety Matrix with Concrete Examples
This skill should explicitly capture policy-sensitive claims so downstream scripts stay safe.
| Risk Type | โ AVOID | โ ๏ธ USE CAREFULLY | โ
SAFE |
|---|
| Price | "nur โฌ10!", "50% Rabatt" | "~โฌ10" with disclaimer | "erschwinglich", "preiswert" |
| Waterproof | "100% wasserdicht", "ๅฎๅ
จ้ฒๆฐด" | "IP67" (only if sourced) | "spritzwassergeschรผtzt" |
| Medical | "heilt", "Schmerzfreiheit" | "Entspannung" (no guarantees) | "angenehm", "komfortabel" |
| Tech Specs | "4K Support" (ambiguous) | "4K Dekodierung" (if sourced) | "HD Qualitรคt" |
Example format for analysis files:
* **CRITICAL**: Das Produkt ist NICHT spรผlmaschinenfest. Darauf muss in Kommentaren hingewiesen werden.
**ๅ
ณ้ฎ**๏ผ่ฏฅไบงๅไธๅฏๆพๅ
ฅๆด็ขๆบใๅฟ
้กปๅจ่ฏ่ฎบไธญๆๅบใ
Add these as explicit DO/DON'T bullets with concrete examples in the generated ref_video/video_synthesis.md (section already exists in your template as "Compliance & Trust Signals").
Bilingual Output Standards | ๅ่ฏญ่พๅบๆ ๅ
MANDATORY inline Chinese translation pattern for all analysis files:
Format for key bullets:
- DE: German or English description
ZH: ไธญๆ็ฟป่ฏ
Example from gold-standard sample (image_analysis.md:93-94):
* **12-Blade Power (`product_image_6.webp`):**
* DE: Die meisten tragbaren Mixer haben nur 4 oder 6 Klingen.
ZH: ๅคงๅคๆฐไพฟๆบๅผๆฆจๆฑๆบๅชๆ4ๆ6ๅถๅ็ใ
Target metrics:
- Chinese character ratio: 15-20% of total content
- DE/ZH pairs: 30+ per analysis file
- Bilingual section headers: 10+ per file
Quality indicators:
- NOT literal word-for-word translation
- Cultural adaptation for Chinese-speaking German residents
- Natural idioms and expressions
- Maintain German brand names and technical terms
Agent Assignment
| Task | Agent | Tool | Parallelizable |
|---|
| Image Analysis | Gemini | gemini_cli_execute_async | Yes - per product |
| Video Analysis | Gemini | gemini_cli_execute_async | Yes - per video |
| Video Synthesis | Gemini | gemini_cli_execute_async | Yes - per product (after videos) |
| Script Generation | Claude | Direct writing | No - sequential quality focus |
| Campaign Summary | Claude | Direct writing | No - needs scripts first |
โ ๏ธ Concurrency Limits | ๅนถๅ้ๅถ
CRITICAL OPERATIONAL CONSTRAINT:
Gemini async MCP has a maximum safe limit of 5 concurrent tasks.
Model Policy (MANDATORY)
Use Gemini 3.0 models first:
- Primary:
gemini-3-pro-preview
- Fallback (only if capacity/quota hit):
gemini-3-flash-preview
Avoid relying on older 2.5 models unless explicitly requested.
German Market Intelligence (MANDATORY in video_synthesis.md)
Required section in synthesis output: "## German Market Fit | ๅพทๅฝๅธๅบ้้
"
Analysis files must include specific cultural context that informs creative production:
Must document:
- 5+ specific cultural behaviors/preferences observed in winning videos
- How each behavior maps to creative production choices
- Language signals Germans respond to (formal/informal, proof > emotion)
- Trust signals specific to German market (specs, numbers, precision)
Example pattern from gold-standard sample:
## German Market Fit | ๅพทๅฝๅธๅบ้้
**Cultural Triggers (ๆๅ่งฆๅๅจ):**
- Germans worry portable gadgets are "weak toys" โ Ice crush proof shot needed
- Germans value efficiency over entertainment โ Office routine angle resonates
- Germans are price-sensitive but not cheap โ Show exact ROI math (โฌ109/month vs โฌ10/month)
- Germans trust specs over claims โ LED battery display = credibility
- Germans prefer practical over aesthetic โ Function-first storyboards
Implementation requirement:
- This section must appear in
video_synthesis.md
- Must include 5+ specific cultural insights with actionable implications
- Must show how insights translate to creative decisions
The Real Bottleneck: Videos Per Product
Each product has 5 top-performing videos to analyze. This means:
| Task Type | Concurrency | Slots Used |
|---|
| 5 videos (per product) | Parallel | 5 slots โ
(FULL) |
| + Image analysis | โ BLOCKED | Would need 6 slots |
| + Synthesis | โ BLOCKED | Would need 6 slots |
Why This Matters
โ WRONG - Launching videos + images simultaneously:
for product in products:
for video in get_videos(product):
launch_video_analysis(product, video)
launch_image_analysis(product)
โ
CORRECT - Sequential pipeline per product:
for product_id in products:
video_tasks = []
for i, video in enumerate(get_videos(product_id)):
task = launch_video_analysis(product_id, i+1, video)
video_tasks.append(task)
wait_for_all(video_tasks)
image_task = launch_image_analysis(product_id)
wait_for_completion(image_task)
synthesis_task = launch_synthesis(product_id)
wait_for_completion(synthesis_task)
print(f"โ
Product {product_id} complete")
Pipeline Strategy Per Product
Within ONE product (sequential stages):
- Video Analysis Stage: 5 videos in parallel โ Wait for completion
- Image Analysis Stage: 1 task โ Wait for completion
- Synthesis Stage: 1 task โ Wait for completion
Across multiple products:
- Process products sequentially (one product pipeline at a time)
- Never try to process multiple products in parallel
Time Impact (8 Products Example)
Sequential processing (CORRECT):
- Product 1: Videos (2min) + Image (1min) + Synthesis (1min) = 4 min
- Product 2: 4 min
- ...
- Product 8: 4 min
- Total: ~32 minutes for 8 products
Trying to parallelize products (BROKEN):
- Launch all 8 products' video analyses = 40 concurrent tasks
- Result: TIMEOUT/FAILURE โ
Why sequential is still fast:
- Within each product, 5 videos analyzed in parallel (not sequential)
- If videos were sequential: 5 ร 2min = 10min per product = 80min total
- With parallel videos: 2min per product = 32min total
- Still 2.5x faster than fully sequential
Workflow Overview
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PHASE 1: SEQUENTIAL PRODUCT ANALYSIS (Gemini Async MCP) โ
โ Process products one at a time, pipeline within each โ
โ โ
โ FOR EACH PRODUCT (sequential): โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Stage 1: Video Analysis (PARALLEL) โ โ
โ โ โโ Video 1 analysis โโโ โ โ
โ โ โโ Video 2 analysis โโโค โ โ
โ โ โโ Video 3 analysis โโโผโโ Wait for all 5 complete โ โ
โ โ โโ Video 4 analysis โโโค (fills all 5 slots) โ โ
โ โ โโ Video 5 analysis โโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Stage 2: Image Analysis (1 task) โ โ
โ โ โโ Analyze all product images โ Wait for complete โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Stage 3: Video Synthesis (1 task) โ โ
โ โ โโ Synthesize market insights โ Wait for complete โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โ Repeat for next product... โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ QUALITY GATE: Verify all analysis files exist โ
โ - image_analysis.md (if images exist) โ
โ - video_N_analysis.md (for each video) โ
โ - video_synthesis.md (MANDATORY) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PHASE 2: SCRIPT GENERATION (Claude Code) โ
โ โ Uses tiktok_script_generator.md skill โ
โ โ References analysis files (does NOT duplicate content) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Phase 1: Sequential Product Analysis Pipeline
Process products one at a time, with pipeline stages within each product.
Complete Implementation
PROJECT_ROOT = "/Users/lxt/Movies/TikTok/WZ/lukas_9688"
for product_id in product_ids:
print(f"\n=== Processing Product {product_id} ===")
print(f"Stage 1: Analyzing 5 videos in parallel...")
video_tasks = []
videos = get_videos(product_id)
for i, video in enumerate(videos, 1):
task = mcp__gemini-cli-mcp-async__gemini_cli_execute_async({
"query": VIDEO_ANALYSIS_PROMPT.format(
product_id=product_id,
video_num=i,
video_path=video
),
"working_dir": PROJECT_ROOT,
"yolo": True
})
video_tasks.append(task)
for task in video_tasks:
result = check_task_completion(task)
while result.status == "running":
time.sleep(5)
result = check_task_completion(task)
print(f"โ
Stage 1 complete: 5 videos analyzed")
if has_images(product_id):
print(f"Stage 2: Analyzing product images...")
image_task = mcp__gemini-cli-mcp-async__gemini_cli_execute_async({
"query": IMAGE_ANALYSIS_PROMPT.format(product_id=product_id),
"working_dir": PROJECT_ROOT,
"yolo": True
})
result = check_task_completion(image_task)
result.status == :
time.sleep()
result = check_task_completion(image_task)
()
()
synthesis_task = mcp__gemini-cli-mcp-async__gemini_cli_execute_async({
: SYNTHESIS_PROMPT.(product_id=product_id),
: PROJECT_ROOT,
:
})
result = check_task_completion(synthesis_task)
result.status == :
time.sleep()
result = check_task_completion(synthesis_task)
()
()
()
Breakdown by Stage
Stage 1: Video Analysis (Parallel within product)
- Launch 5 video analyses simultaneously
- Uses all 5 available Gemini async slots
- Wait for all to complete before proceeding
Stage 2: Image Analysis (Single task)
- Launch 1 image analysis task
- Wait for completion before proceeding
- Skipped if product has no images
Stage 3: Video Synthesis (Single task)
- Launch 1 synthesis task
- Requires Stage 1 video analyses to exist
- Wait for completion before moving to next product
Quality Gate: Analysis Verification
Run BEFORE proceeding to script generation:
#!/bin/bash
product_id=$1
date="YYYYMMDD"
base="product_list/$date/$product_id"
status="PASS"
echo "=== Analysis Verification: $product_id ==="
if [ -d "$base/product_images" ]; then
img_count=$(find "$base/product_images" -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.webp" \) 2>/dev/null | wc -l | tr -d ' ')
if [ "$img_count" -gt 0 ]; then
if [ -f "$base/product_images/image_analysis.md" ]; then
lines=$(wc -l < "$base/product_images/image_analysis.md" | tr -d ' ')
if [ "$lines" -ge 200 ]; then
echo "โ
Image analysis: $lines lines"
else
echo "โ ๏ธ Image analysis incomplete: $lines lines (need 200+)"
status=
status=
[ -d ];
video_count=$(find - f -name 2>/dev/null | -l | -d )
[ -gt 0 ];
[ -f ];
lines=$( -l < | -d )
[ -ge 150 ];
status=
status=
analysis_count=$(find - f -name 2>/dev/null | -l | -d )
[ -f ];
python3 scripts/validate_compliance_flags.py >/dev/null 2>&1;
status=
[ = ] && 1
0
Recommended (Repo Verifier)
Prefer the repo verifier script so the gate is consistent across runs:
bash scripts/verify_gate.sh --date YYYYMMDD --csv scripts/products.csv --phase analysis
Retry / Stop Criteria (MANDATORY)
- If
image_analysis.md fails gate checks (missing / too short / meta preamble), rerun image analysis once with the strict output contract.
- If
video_synthesis.md fails gate checks (missing / too short / meta preamble), rerun synthesis once with the strict output contract.
- If it still fails after one retry: mark the product as analysis_incomplete and do not proceed to script generation for that product.
Prompt Templates
Strict Output Contract (MANDATORY)
When generating analysis files, the model must output clean Markdown only. Add these constraints to every Gemini prompt:
- Output ONLY Markdown content (no preamble like โI willโฆโ and no tool/system chatter)
- Do not claim you saved/wrote files
- Do not describe tool usage
- If uncertain, label uncertainty explicitly
Image Analysis Prompt (Bilingual)
Analyze all product images in product_list/YYYYMMDD/{product_id}/product_images/
Create a BILINGUAL product analysis for TikTok script writing.
MANDATORY: Include inline Chinese translations throughout (not just headers).
- Every key bullet should include Chinese in parentheses: `English text (ไธญๆ็ฟป่ฏ)`
**OUTPUT FILE:** Save as product_list/YYYYMMDD/{product_id}/product_images/image_analysis.md
STRICT OUTPUT:
- Output ONLY Markdown (no preamble, no meta text)
- Do NOT mention tools/filesystem, do NOT say you saved files
**FORMAT:**
- Bilingual headers: ## Section | ไธญๆๆ ้ข
- Inline Chinese translations on the same line for key bullets: `English text (ไธญๆ็ฟป่ฏ)`
- 10+ sections, 200+ lines minimum
**REQUIRED SECTIONS:**
1. Product Design & Aesthetics | ไบงๅ่ฎพ่ฎกไธ็พๅญฆ
2. Key Features | ๆ ธๅฟๅ่ฝ
3. Size & Specifications | ๅฐบๅฏธไธ่งๆ ผ
4. Text & Labels (German) | ๆๅญไธๆ ็ญพ
5. Quality Signals | ่ดจ้ไฟกๅท
6. Color/Variant Options | ้ข่ฒ/ๅไฝ้้กน
7. Key Differentiators | ๅ
ณ้ฎๅทฎๅผๅ
8. Usage Context | ไฝฟ็จๅบๆฏ
9. Packaging | ๅ
่ฃ
ๅฑ็คบ
10. Visual Hooks for Scripts | ่ๆฌ่ง่ง้ฉๅญ
**CRITICAL - Section 10 Must Include:**
- 5+ specific visual hook ideas
- Filming instructions for each
- German hook lines for scripts
- Priority ranking for script angles
Video Analysis Prompt (Per Video)
Analyze video: product_list/YYYYMMDD/{product_id}/ref_video/video_{video_num}_*.mp4
**OUTPUT FILE:** Save as product_list/YYYYMMDD/{product_id}/ref_video/video_{video_num}_analysis.md
**REQUIRED SECTIONS:**
1. Video Metadata (duration, creator, views)
2. Hook Analysis (first 3 seconds)
3. Voiceover/Dialogue Transcript (German + Chinese translation)
4. Visual Storyboard (shot-by-shot)
5. Key Selling Points (ranked)
6. Music/Audio Analysis
7. CTA Analysis
8. Target Audience Inference
9. Effectiveness Rating (1-10)
10. Replication Insights
**FORMAT:**
- Bilingual: German/English content with Chinese translations
- Specific timestamps for each section
- Actionable insights for script writers
Video Synthesis Prompt (Market Summary)
Create a COMPREHENSIVE market synthesis from all video analyses in:
product_list/YYYYMMDD/{product_id}/ref_video/video_*_analysis.md
**OUTPUT FILE:** Save as product_list/YYYYMMDD/{product_id}/ref_video/video_synthesis.md
STRICT OUTPUT:
- Output ONLY Markdown (no preamble, no meta text)
- Do NOT mention tools/filesystem, do NOT say you saved files
**REQUIRED SECTIONS (14 minimum):**
1. Executive Summary | ๆง่กๆ่ฆ
2. Common Winning Patterns | ๅ
ฑๅ่ท่ๆจกๅผ
- Hook Types (ranked by effectiveness)
- Visual Strategy
- Key Selling Points (ranked by emphasis)
3. Duration Sweet Spot | ๆถ้ฟๆไฝณ็น
4. Language & Voice Strategy | ่ฏญ่จไธๅฃฐ้ณ็ญ็ฅ
5. Target Audience Profile | ็ฎๆ ๅไผ็ปๅ
6. Creative Production Patterns | ๅๆๅถไฝๆจกๅผ
7. Seasonal Context | ๅญฃ่ๆง่ๆฏ
8. Compliance & Trust Signals | ๅ่งไธไฟกไปปไฟกๅท
- Price: avoid exact โฌ in scripts (use relative wording)
- Waterproof: only claim if IP rating sourced
- Medical: avoid therapy/healing promises
- Tech specs: avoid ambiguous claims (e.g. 4K decode vs native)
9. Competitive Differentiation | ็ซไบๅทฎๅผๅ
10. Replication Strategy | ๅคๅถ็ญ็ฅ
- 3+ specific script angles with estimated effectiveness
11. Performance Predictions | ๆๆ้ขๆต
12. Recommendations (DO's and DON'Ts) | ๅปบ่ฎฎ
13. Source Materials | ๆบๆๆ
**CRITICAL - Depth Requirements:**
Section 2 (Winning Patterns) must include:
- **Hook Library Table** with 25+ patterns:
| Pattern | German Example | When to Use | Risk Level |
(Reference sample: video_synthesis.md contains 25+ concrete hook examples)
Section 5 (Creative Production) must include:
- **German Copy Bank** with 80+ production-ready lines:
- Hooks (Problem/Attention) - 20 lines
- Features & Benefits - 20 lines
- CTAs - 20 lines
- Objection Handling - 20 lines
(Each with Chinese translation)
**Example quality benchmark from sample:**
1. Hรถr auf, รผberteuerte Smoothies zu kaufen! (Stop buying overpriced smoothies!)
2. Dein neuer bester Freund im Bรผro. (Your new best friend at the office.)
3. Das lรคppert sich, oder? (That adds up, doesn't it?)
**CRITICAL FORMAT - Bilingual Structure:**
โ ๏ธ **MANDATORY Bilingual Format:**
- **Bilingual headers:** Section | ็ซ ่
- **Key points MUST use nested DE:/ZH: format:**
```markdown
* **Key Point Name:**
* DE: Full German explanation text here.
* ZH: Full Chinese translation here.
- NEVER parenthetical: Do NOT use
German text (ไธญๆ็ฟป่ฏ) format
- Tables in Hook Library: Each cell must have
DE: ... ZH: ... format
Example CORRECT format:
- The "Chaos Reality" Hook:
- DE: Visual clutter creates tension. Filters target audience instantly.
- ZH: ่ง่งๆททไนฑๅถ้ ็ดงๅผ ๆใ็ฌ้ด็ญ้็ฎๆ ๅไผใ
Example WRONG format (DO NOT USE):
- โ Visual clutter creates tension (่ง่งๆททไนฑๅถ้ ็ดงๅผ ๆ)
- โ German text (Chinese translation in parentheses)
Minimum 150+ lines with comprehensive bilingual coverage for all key insights.
### Post-Run Validation (Quick Sanity Checks)
After writing an analysis file, do not proceed if it contains meta chatter. Examples of invalid first lines:
- "I willโฆ"
- "Loaded cached credentialsโฆ"
#### Automated Compliance Validation (RECOMMENDED)
Use the compliance validator to automatically check all generated content:
```bash
# Validate synthesis for properly flagged risks
python3 scripts/validate_compliance_flags.py product_list/YYYYMMDD/{product_id}/ref_video/video_synthesis.md
# Validate all scripts (analysis phase should flag risks, scripts should have none)
for script in product_list/YYYYMMDD/{product_id}/scripts/*.md; do
[[ "$(basename "$script")" == "Campaign_Summary.md" ]] && continue
python3 scripts/validate_compliance_flags.py "$script"
done
Manual Compliance Scans (Optional)
For targeted checks, use these ripgrep commands:
scripts_dir="product_list/YYYYMMDD/{product_id}/scripts"
rg -n "โฌ|\\bEuro\\b|ๆฌงๅ
|nur\\s+\\d|statt\\s+\\d" "$scripts_dir" --glob '!Campaign_Summary.md' || true
rg -n "100% wasserdicht|komplett wasserdicht|100%้ฒๆฐด|ๅฎๅ
จ้ฒๆฐด|genauso\\s+gut|besser\\s+als|perfekt" "$scripts_dir" --glob '!Campaign_Summary.md' || true
rg -n "Schmerz|Physio|Therapeut|Tiefengewebe|heilt|behandelt" "$scripts_dir" --glob '!Campaign_Summary.md' || true
rg -n "unbezahlbar|genial|unglaublich|bevor\\s+es|letzte\\s+Chance" "$scripts_dir" --glob '!Campaign_Summary.md' || true
Use the repo verifier to enforce analysis-output formatting consistently:
bash scripts/verify_gate.sh --date YYYYMMDD --csv scripts/products.csv --phase analysis
Batch Processing Example
For 8 products with 5 videos each:
completed_products = []
failed_products = []
for product_id in products:
print(f"\n=== Product {product_id} ===")
try:
print(f"Launching 5 video analyses...")
video_tasks = []
for i in range(1, 6):
task = launch_video_analysis(product_id, i)
video_tasks.append(task)
wait_for_all(video_tasks)
print(f"โ
Videos analyzed")
if has_images(product_id):
print(f"Analyzing images...")
image_task = launch_image_analysis(product_id)
wait_for_completion(image_task)
print(f"โ
Images analyzed")
print(f"Creating synthesis...")
synthesis_task = launch_synthesis(product_id)
wait_for_completion(synthesis_task)
print(f"โ
Synthesis complete")
verify_analysis(product_id)
completed_products.append(product_id)
except Exception e:
()
failed_products.append(product_id)
()
()
failed_products:
()
()
Handoff to Script Generator
After Phase 1 completes, the following files exist:
product_list/YYYYMMDD/{product_id}/
โโโ tabcut_data.json # Product metadata (from scraper)
โโโ product_images/
โ โโโ *.webp # Product images
โ โโโ image_analysis.md # Gemini analysis (bilingual)
โโโ ref_video/
โโโ video_1_*.mp4 # Reference videos
โโโ video_1_analysis.md # Per-video analysis
โโโ video_2_analysis.md
โโโ ...
โโโ video_synthesis.md # Market summary (CRITICAL)
Script generator (Claude Code) will:
- Read these files (not regenerate them)
- Extract key insights for scripts
- Reference files in Campaign Summary (not duplicate content)
Error Handling
If analysis fails:
- Retry once with same prompt
- If retry fails: Mark product as "analysis_incomplete"
- Continue with other products (don't block batch)
- Report failures at end for manual review
try:
result = await check_task(task_id)
if result.status == "failed":
retry_task = launch_retry(product_id, task_type)
result = await check_task(retry_task)
if result.status == "failed":
failed_products.append(product_id)
continue
except TimeoutError:
failed_products.append(product_id)
continue
if failed_products:
print(f"โ ๏ธ Failed products: {failed_products}")
print("Run manually or skip for now")
Integration with Existing Skills
This skill replaces image analysis from tiktok_script_generator.md
Workflow order:
tiktok_product_scraper.md โ Downloads product data + videos
tiktok_product_analysis.md โ Analyzes images + videos (THIS SKILL)
tiktok_script_generator.md โ Generates scripts using analysis files
Version: 1.0.0
Last Updated: 2026-01-01