image-to-campaign-funnel-generator

v2026.09.24

Turn one product image into a complete German marketing funnel (landing page, 3 Instagram Reels, blog) from a single Brand Brief using Claude orchestration and Higgsfield CLI

GitHub
安装命令
npx skhub add reason-machines/image-to-campaign-funnel-generator
Markdown
SKILL.md

image-to-campaign-funnel-generator

Skill by ara.so — Marketing Skills collection.

Orchestrates the Higgsfield CLI to generate a complete, brand-consistent German marketing funnel from one product image: a scroll-driven landing page, 3 Instagram Reels (9:16), and a styled blog article — all derived from a single approved Brand Brief.

What it does

This is a brief-first orchestration skill that:

  1. Conducts a short interview about the product
  2. Writes a comprehensive Brand Brief (identity, thesis, OKLCH palette, fonts, tone, CTA, Reel angles)
  3. Shows you the brief + all asset prompts for approval before spending credits
  4. Builds landing page → 3 Reels → blog autonomously
  5. Reuses the landing page hero video (reframed to 9:16) for one Reel to save costs
  6. Runs browser QA on the landing page
  7. Delivers everything in a structured campaign folder

Prerequisites

Required:

  • Higgsfield account with credits: https://higgsfield.ai/s/mcp-arnold-oberleiter-ecZvus
  • Higgsfield CLI installed and authenticated (higgsfield auth login)
  • Browser + static server (e.g. Python) for landing page preview
  • Internet access for CDNs, fonts, and Higgsfield API

Recommended companion skills:

  • higgsfield-generate — smarter model selection
  • higgsfield-product-photoshoot — prompt enhancer
  • higgsfield-soul-id — consistent presenter across Reels

Installation

Clone into your skills directory:

# Project-level
git clone https://github.com/Arnie936/image-to-campaign .agents/skills/image-to-campaign

# User-level
git clone https://github.com/Arnie936/image-to-campaign ~/.claude/skills/image-to-campaign

Authenticate Higgsfield CLI:

higgsfield auth login

Skill Structure

image-to-campaign/
  SKILL.md                  # Main orchestrator
  references/
    brand-brief.md          # Brief derivation + asset prompts
    landing-page.md         # Landing page spec + QA
    reels.md                # 3 Reel angles + caption format
    blog.md                 # German SEO article spec
  assets/
    brief-template.md
    blog-template.html
    campaign-readme-template.md

Core Orchestration Flow

Phase 1: Bootstrap & Interview

Ask up to 2 questions to gather:

  • Product name and core benefit
  • Target audience and key differentiation
  • Optional: brand voice preference (formal/casual)

Phase 2: Brand Brief Generation

Create brief.md containing:

# Brand Brief: [Product]

## Product Identity
- Name: [...]
- Category: [...]
- Core Benefit: [...]
- Target Audience: [...]

## Visual Identity
### Color Palette (OKLCH)
- Primary: oklch(...)
- Secondary: oklch(...)
- Accent: oklch(...)

### Typography
- Headline: [Google Font]
- Body: [Google Font]

## Verbal Identity
- Thesis Line: [single compelling statement]
- Tone: [formal/casual/balanced]
- Key Messages: [3 bullets]

## Call-to-Action
- Primary CTA: [text]
- URL: [demo or real]

## Asset Specifications

### Landing Page
- Hero: [video prompt]
- Middle: [video prompt]
- Gallery: [3 image prompts]

### Instagram Reels (9:16)
1. Hook: [prompt + caption angle]
2. Showcase: [prompt + caption angle]
3. Lifestyle: [prompt + caption angle]

### Blog Article
- SEO Title: [...]
- Focus Keywords: [...]
- Structure: [H2 outline]

Phase 3: Checkpoint

Display the brief and list all asset prompts (hero video, middle video, 3 gallery images, 3 Reels, blog images). Wait for explicit user approval before proceeding.

Phase 4: Build Assets

Landing Page First

Generate folder structure:

mkdir -p kampagne-{slug}/website/assets
mkdir -p kampagne-{slug}/reels
mkdir -p kampagne-{slug}/blog/assets

Generate assets using Higgsfield CLI:

# Hero video (16:9)
higgsfield generate video \
  --prompt "[hero prompt from brief]" \
  --aspect-ratio "16:9" \
  --duration 5 \
  --output kampagne-{slug}/website/assets/hero.mp4

# Middle video (16:9)
higgsfield generate video \
  --prompt "[middle prompt from brief]" \
  --aspect-ratio "16:9" \
  --duration 5 \
  --output kampagne-{slug}/website/assets/middle.mp4

# Gallery images (1:1)
higgsfield generate image \
  --prompt "[gallery-1 prompt]" \
  --aspect-ratio "1:1" \
  --output kampagne-{slug}/website/assets/g1.jpg

Build index.html:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>[Product] – [Thesis Line]</title>
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link href="https://fonts.googleapis.com/css2?family=[Headline-Font]&family=[Body-Font]&display=swap" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/ScrollTrigger.min.js"></script>
  <style>
    :root {
      --primary: [oklch from brief];
      --secondary: [oklch from brief];
      --accent: [oklch from brief];
      --headline: '[Headline Font]', sans-serif;
      --body: '[Body Font]', sans-serif;
    }
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body { font-family: var(--body); background: var(--primary); color: white; }
    
    .hero {
      height: 100vh;
      position: relative;
      overflow: hidden;
    }
    .hero video {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
    .hero-overlay {
      position: absolute;
      inset: 0;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      background: linear-gradient(transparent 40%, rgba(0,0,0,0.7));
      text-align: center;
      padding: 2rem;
    }
    .hero h1 {
      font-family: var(--headline);
      font-size: clamp(2rem, 6vw, 4rem);
      margin-bottom: 1rem;
    }
    .hero p {
      font-size: clamp(1rem, 2vw, 1.5rem);
      margin-bottom: 2rem;
      max-width: 600px;
    }
    .cta {
      background: var(--accent);
      color: white;
      padding: 1rem 2rem;
      border: none;
      border-radius: 2rem;
      font-size: 1.1rem;
      font-weight: bold;
      cursor: pointer;
      text-decoration: none;
      display: inline-block;
    }
    
    .section {
      min-height: 100vh;
      padding: 4rem 2rem;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .benefits { background: var(--secondary); }
    .showcase { background: var(--primary); }
    .gallery {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
      gap: 2rem;
      max-width: 1200px;
    }
    .gallery img {
      width: 100%;
      border-radius: 1rem;
    }
  </style>
</head>
<body>
  <section class="hero">
    <video autoplay muted loop playsinline>
      <source src="assets/hero.mp4" type="video/mp4">
    </video>
    <div class="hero-overlay">
      <h1>[Product Name]</h1>
      <p>[Thesis Line]</p>
      <a href="[CTA URL]" class="cta">[CTA Text]</a>
    </div>
  </section>

  <section class="section benefits">
    <div>
      <h2>[Key Benefit 1]</h2>
      <p>[Explanation from brief]</p>
    </div>
  </section>

  <section class="section showcase">
    <video autoplay muted loop playsinline style="max-width: 800px; width: 100%; border-radius: 1rem;">
      <source src="assets/middle.mp4" type="video/mp4">
    </video>
  </section>

  <section class="section">
    <div class="gallery">
      <img src="assets/g1.jpg" alt="[Gallery 1 alt]">
      <img src="assets/g2.jpg" alt="[Gallery 2 alt]">
      <img src="assets/g3.jpg" alt="[Gallery 3 alt]">
    </div>
  </section>

  <script>
    gsap.registerPlugin(ScrollTrigger);
    gsap.utils.toArray('.section').forEach(section => {
      gsap.from(section.children, {
        opacity: 0,
        y: 50,
        duration: 1,
        scrollTrigger: {
          trigger: section,
          start: "top 80%",
          toggleActions: "play none none reverse"
        }
      });
    });
  </script>
</body>
</html>

Browser QA

Start local server and verify:

cd kampagne-{slug}/website
python -m http.server 8000
# Open http://localhost:8000 and verify:
# - Videos load and play
# - Fonts render correctly
# - Colors match brief
# - Scroll animations work
# - CTA is clickable

Generate Reels

Reel 1 (Hook) — new generation:

higgsfield generate video \
  --prompt "[reel-1 hook prompt from brief]" \
  --aspect-ratio "9:16" \
  --duration 7 \
  --output kampagne-{slug}/reels/reel-1-hook.mp4

Reel 2 (Showcase) — reuse hero video reframed:

higgsfield reframe \
  --input kampagne-{slug}/website/assets/hero.mp4 \
  --aspect-ratio "9:16" \
  --output kampagne-{slug}/reels/reel-2-showcase.mp4

Reel 3 (Lifestyle) — new generation:

higgsfield generate video \
  --prompt "[reel-3 lifestyle prompt from brief]" \
  --aspect-ratio "9:16" \
  --duration 7 \
  --output kampagne-{slug}/reels/reel-3-lifestyle.mp4

Create captions.md:

# Instagram Reel Captions

## Reel 1: Hook
**Hook Text (first 2 sec):** "[attention-grabbing statement]"

**Caption:**
[Engaging first line with emoji]

[Core benefit explanation]

[Call to curiosity or action]

**Hashtags:** #[product] #[category] #[benefit1] #[benefit2] #[targetAudience]

**CTA:** [CTA text] → [URL]

---

## Reel 2: Showcase
[Same structure for Reel 2]

---

## Reel 3: Lifestyle
[Same structure for Reel 3]

Generate Blog

higgsfield generate image \
  --prompt "[blog hero image prompt from brief]" \
  --aspect-ratio "16:9" \
  --output kampagne-{slug}/blog/assets/hero.jpg

Create blog.html using blog-template.html:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>[SEO Title from brief]</title>
  <meta name="description" content="[Meta description with focus keywords]">
  <link href="https://fonts.googleapis.com/css2?family=[Body-Font]&display=swap" rel="stylesheet">
  <style>
    body {
      font-family: '[Body Font]', sans-serif;
      line-height: 1.7;
      max-width: 800px;
      margin: 0 auto;
      padding: 2rem;
      color: #333;
    }
    h1 { font-size: 2.5rem; margin-bottom: 1rem; }
    h2 { font-size: 1.8rem; margin-top: 2rem; margin-bottom: 1rem; color: var(--primary); }
    img { width: 100%; border-radius: 1rem; margin: 2rem 0; }
    .meta { color: #777; margin-bottom: 2rem; }
  </style>
</head>
<body>
  <article>
    <h1>[SEO Title]</h1>
    <div class="meta">Von [Brand] | [Date]</div>
    <img src="assets/hero.jpg" alt="[Alt text with keywords]">
    
    <p>[Introduction paragraph with focus keyword in first 100 words]</p>
    
    <h2>[H2 from outline]</h2>
    <p>[Content derived from brief's key messages]</p>
    
    <h2>[H2 from outline]</h2>
    <p>[Content]</p>
    
    <h2>Fazit</h2>
    <p>[Conclusion with CTA: [CTA Text] unter [URL]]</p>
  </article>
</body>
</html>

Phase 5: Deliver

Copy brief.md to campaign root and create README.md:

# Kampagne: [Product Name]

Generiert am [Date]

## Struktur

- `brief.md` – Die genehmigte Brand Brief
- `website/` – Landing Page (index.html + assets/)
- `reels/` – 3 Instagram Reels + captions.md
- `blog/` – Blog-Artikel (blog.html + assets/)

## Landing Page lokal anschauen

```bash
cd website
python -m http.server 8000
# Öffne http://localhost:8000

Reels hochladen

  1. Datei auf Handy übertragen
  2. In Instagram als Reel hochladen
  3. Caption aus reels/captions.md kopieren

Blog deployen

blog/blog.html auf deinen Webserver hochladen oder in dein CMS integrieren.


Output final summary:

✅ Kampagne erstellt: kampagne-[slug]/

📁 Inhalt:

  • Landing Page: 1 HTML + 5 Assets (2 Videos, 3 Bilder)
  • Instagram Reels: 3 Videos (9:16) + Captions
  • Blog: 1 HTML + Hero-Bild

🌐 Landing Page lokal testen: cd kampagne-[slug]/website && python -m http.server 8000

📊 Higgsfield Credits verbraucht: ~[estimate based on generations]


## Configuration & Customization

### Locked Defaults (change in SKILL.md if needed)

```markdown
## Locked defaults

- **Language:** German (de)
- **CTA default:** "Jetzt Demo anfordern" → https://example.com/demo
- **Reel duration:** 7 seconds (hook/lifestyle), 5 seconds (showcase reframe)
- **Color space:** OKLCH for perceptual uniformity
- **Landing page animations:** GSAP + ScrollTrigger from CDN

Brief Template Customization

Edit assets/brief-template.md to change:

  • Color palette structure (add tertiary, neutral colors)
  • Verbal identity fields (add brand values, tagline)
  • Asset prompt sections (add email header, social cards)

Landing Page Template

Edit the HTML structure in references/landing-page.md:

  • Add navigation bar
  • Add footer with social links
  • Change grid layout for gallery
  • Swap GSAP for Framer Motion (if building React version)

Reel Angles

Edit references/reels.md to change the 3 default angles:

  • Hook (problem/curiosity) → Feature (benefit demo) → Testimonial
  • Day-in-life → Quick tip → Product showcase
  • Before/After → Process → Result

Higgsfield CLI Commands Reference

Generate Video

higgsfield generate video \
  --prompt "Cinematic shot of [product], [scene details]" \
  --aspect-ratio "16:9" \
  --duration 5 \
  --model "runway-gen3" \
  --output path/to/output.mp4

Aspect ratios: 16:9 (landscape), 9:16 (portrait), 1:1 (square)
Duration: 5 or 10 seconds
Models: runway-gen3, kling-1.5, minimax-video-01 (auto-selected by higgsfield-generate skill)

Generate Image

higgsfield generate image \
  --prompt "Product photography of [product] on [background]" \
  --aspect-ratio "1:1" \
  --model "flux-1.1-pro" \
  --output path/to/output.jpg

Aspect ratios: 1:1, 16:9, 9:16, 4:3, 3:4
Models: flux-1.1-pro, recraft-v3, ideogram-v2

Reframe Video

higgsfield reframe \
  --input path/to/16-9-video.mp4 \
  --aspect-ratio "9:16" \
  --output path/to/9-16-video.mp4

Intelligently crops/pans to new aspect ratio while keeping subject in frame.

Check Credits

higgsfield credits

Returns remaining credits for image and video generations.

Troubleshooting

"Higgsfield CLI not found"

Install manually:

curl -sSL https://install.higgsfield.ai/install.sh | sh
higgsfield auth login

On Windows, run the installer in Git Bash or WSL.

"Generation failed: insufficient credits"

Check credits:

higgsfield credits

Top up at https://higgsfield.ai/settings/billing

Landing page fonts not loading

Ensure internet connection (fonts from Google Fonts CDN). If deploying offline, download fonts and update CSS:

@font-face {
  font-family: 'CustomHeadline';
  src: url('./fonts/headline.woff2') format('woff2');
}

Videos not playing in browser

  • Check video file exists: ls kampagne-*/website/assets/
  • Verify MIME type: server must serve .mp4 as video/mp4
  • Test in different browser (Safari sometimes needs playsinline attribute)

Reel 2 (reframe) looks cropped wrong

The reframe algorithm centers on detected subjects. If output is off:

# Regenerate instead of reframing
higgsfield generate video \
  --prompt "[same prompt as hero but vertical composition]" \
  --aspect-ratio "9:16" \
  --duration 5 \
  --output kampagne-{slug}/reels/reel-2-showcase.mp4

Brief checkpoint interrupted

Resume by pointing to existing brief:

# In orchestrator logic:
if exists("kampagne-{slug}/brief.md"):
    brief = read("kampagne-{slug}/brief.md")
    skip to Phase 4 (build assets)

Real-World Usage Patterns

Pattern 1: E-commerce Product Launch

User: "Create campaign for this sneaker image: ./sneaker.jpg"
→ Interview: target (fashion-conscious 18-30), benefit (comfort + style)
→ Brief: bold OKLCH palette, modern sans-serif, casual tone
→ Landing page: hero = product spin, middle = wear test, gallery = 3 colorways
→ Reels: 1) Unboxing hook, 2) Styling showcase, 3) Street lifestyle
→ Blog: "Die perfekten Sneaker für Stadt und Freizeit"

Pattern 2: SaaS Tool

User: "Build funnel for this dashboard screenshot: ./app.png"
→ Interview: B2B audience (marketing managers), benefit (save 10h/week)
→ Brief: professional blue palette, clean sans-serif, formal tone
→ Landing page: hero = UI walkthrough, middle = data viz animation, gallery = 3 features
→ Reels: 1) "Verbringst du zu viel Zeit mit Reports?", 2) Feature demo, 3) Customer testimonial
→ Blog: "Wie Marketing-Teams mit [Tool] Zeit sparen"

Pattern 3: Food Product

User: "Make campaign for this organic coffee bag: ./coffee.jpg"
→ Interview: health-conscious consumers, benefit (organic + fair trade)
→ Brief: earthy green/brown palette, organic serif, warm tone
→ Landing page: hero = brewing closeup, middle = farm origin, gallery = 3 serving suggestions
→ Reels: 1) Morning ritual hook, 2) Farm-to-cup story, 3) Latte art lifestyle
→ Blog: "Warum Bio-Kaffee besser schmeckt"

Integration with Other Skills

With higgsfield-product-photoshoot

Enhance product image prompts before generation:

# In brief asset prompts, add:
"Use higgsfield-product-photoshoot to enhance this prompt before generating."

The photoshoot skill adds professional lighting, composition, and material rendering guidance.

With higgsfield-soul-id

Keep the same presenter across all 3 Reels:

# Generate Reel 1 with UGC presenter
higgsfield generate video --prompt "[...] featuring a young woman with [description]" --output reel-1.mp4

# Extract Soul ID
higgsfield soul-id extract --input reel-1.mp4 --output presenter.soul

# Apply to Reel 2 and 3
higgsfield generate video --prompt "[reel-2 prompt]" --soul-id presenter.soul --output reel-2.mp4
higgsfield generate video --prompt "[reel-3 prompt]" --soul-id presenter.soul --output reel-3.mp4

With higgsfield-generate

Automatic model selection based on prompt:

# Instead of --model flag, let higgsfield-generate choose:
higgsfield generate video --prompt "[complex cinematic shot]"
# → selects runway-gen3 for motion quality

higgsfield generate video --prompt "[UGC style selfie video]"
# → selects kling-1.5 for speed + cost

Best Practices

  1. Always approve the brief checkpoint — once assets are generated, credits are spent.

  2. Reuse the landing page hero — the reframe to 9:16 for Reel 2 saves one full video generation.

  3. Test locally before deploying — browser QA catches font/video issues before going live.

  4. Keep prompts brief-consistent — reference the brief's visual identity in every asset prompt (colors, style, mood).

  5. Version your briefs — if iterating, save brief-v1.md, brief-v2.md to track what changed.

  6. Use environment variables for real CTAs:

export CAMPAIGN_CTA_URL="https://shop.example.com/product"
export CAMPAIGN_CTA_TEXT="Jetzt kaufen"

Then reference in brief template: [CTA URL] → ${CAMPAIGN_CTA_URL}

Output Structure

kampagne-product-name/
├── brief.md                    # Single source of truth
├── README.md                   # Usage instructions
├── website/
│   ├── index.html
│   └── assets/
│       ├── hero.mp4           # 16:9, 5s
│       ├── middle.mp4         # 16:9, 5s
│       ├── g1.jpg             # 1:1
│       ├── g2.jpg             # 1:1
│       └── g3.jpg             # 1:1
├── reels/
│   ├── reel-1-hook.mp4        # 9:16, 7s, new generation
│   ├── reel-2-showcase.mp4    # 9:16, 5s, reframed from hero
│   ├── reel-3-lifestyle.mp4   # 9:16, 7s, new generation
│   └── captions.md            # Hook, caption, hashtags, CTA per Reel
└── blog/
    ├── blog.html
    └── assets/
        └── hero.jpg           # 16:9

Total Higgsfield cost per campaign:

  • 4 video generations (2 landing, 2 reels) × ~50 credits = 200 credits
  • 1 video reframe (reel 2) × ~10 credits = 10 credits
  • 4 image generations (3 gallery + 1 blog) × ~5 credits = 20 credits
  • Total: ~230 credits

Related Skills

  • higgsfield-generate — smart model selection
  • higgsfield-product-photoshoot — prompt enhancement for product visuals
  • higgsfield-soul-id — consistent presenter identity across videos
  • higgsfield-video-editor — post-generation trimming, speed adjustments
  • german-seo-copywriter — SEO-optimized blog content expansion

Support

For Higgsfield CLI issues: https://docs.higgsfield.ai
For skill bugs/features: https://github.com/Arnie936/image-to-campaign/issues


Next steps after campaign generation:

  1. cd kampagne-{slug}/website && python -m http.server — QA landing page
  2. Transfer Reels to phone → upload to Instagram with captions from reels/captions.md
  3. Deploy blog/blog.html to your site or integrate into CMS
  4. Track conversions and iterate on brief for next campaign
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

NOASSERTION

源路径

skills/image-to-campaign-funnel-generator

默认分支

main

最新提交

97301f4

Tree SHA

5555d7f