One ask, full campaign

The MCP exposes individual tools (studio_generate_image, studio_brandshot, studio_generate_video, …) and the LLM orchestrates them. Ask Claude something like “research product X and build a full brand campaign” and it will plan and fire the right sequence on its own — each call returns a hosted asset URL the next call consumes.

Claude conversation

Copy

User: Research the AirPods Pro 3 and build me a full brand campaign —
      hero shot, 3 angle variants, an in-context lifestyle image, and a 5s motion ad.

Claude (plans + fires tool calls automatically):
  1. (web_search)                            → product info + reference image URL
  2. studio_brandshot                        → hero shot
  3. studio_camera_angles × 3                → low / dutch / over-the-shoulder
  4. studio_ugc_room                         → desk-in-context lifestyle still
  5. studio_generate_video (image-to-video)  → 5s motion ad from the hero
  6. studio_video_enhance (2×)               → final delivery clip

Returned to user: 6 hosted asset URLs + creditsRemaining.

director_* pipelines (full briefs in a single call)

When you want the entire video pipeline — script, storyboard, generated shots, generated clips, master cut — in one tool call, use the director_* family. These run as background pipeline jobs and return a run_id you can poll or stream.

  • director_creative_brief_to_run — brief → production plan + run.
  • director_run_create — execute the full pipeline.
  • director_creative_batch_variations — N variations in parallel (e.g. 3 different tones).
  • director_creative_remix — reuse an existing run, re-run only the stages you specify.

json

// One call → finished 60s product launch video for an entire campaign
{
  "name": "director_creative_brief_to_run",
  "arguments": {
    "brief": "A product launch video for noise-cancelling headphones targeting remote workers, emphasizing focus and deep work.",
    "duration_target_seconds": 60,
    "platform": "youtube",
    "style": "cinematic"
  }
}

// Or 3 variations in parallel — different tones, different pacing
{
  "name": "director_creative_batch_variations",
  "arguments": {
    "base_prompt": "Premium espresso brand campaign, modernist still lifes",
    "variation_dimensions": ["tone:serious,playful", "pacing:slow,fast"],
    "max_concurrent": 3,
    "project_id": "<your-project-id>"
  }
}

Generate → refine

The bread-and-butter pipeline: prompt → image → upscale.

json

// 1. Generate
{ "name": "studio_generate_image",
  "arguments": {
    "prompt": "espresso machine on a marble counter, soft morning light",
    "model": "fal-ai/flux/dev",
    "aspect_ratio": "4:3"
  } }

// 2. Upscale the returned image URL to 4×
{ "name": "studio_upscale_image",
  "arguments": {
    "image_url": "https://v3b.fal.media/files/.../out.jpg",
    "upscale_factor": 4,
    "topaz_model": "High Fidelity V2"
  } }

Photo → angle exploration

Each call renders one shot from one explicit camera descriptor. To explore an angle set, fire the tool repeatedly with different camera values (low angle, dutch tilt, over-the-shoulder, …). Claude does this fan-out automatically when you ask for “multiple angles”.

json

{
  "name": "studio_camera_angles",
  "arguments": {
    "prompt": "intimate portrait, cinematic 35mm look",
    "camera": "low angle",
    "image_url": "https://v3b.fal.media/files/.../portrait.jpg"
  }
}

Brand → hero shot

One product reference + a brand palette → a single luxury-grade marketing composition. For a multi-panel campaign, repeat the call with different prompts and palettes — or hand the brief to director_creative_batch_variations.

json

{
  "name": "studio_brandshot",
  "arguments": {
    "prompt": "premium espresso, slow rituals, modernist still life, calm editorial mood",
    "product_image_url": "https://v3b.fal.media/files/.../packshot.jpg",
    "brand_palette": ["#3B2A20", "#F5EFE6", "#C79A52"],
    "aspect_ratio": "1:1"
  }
}

Cast a character → UGC

Cast once with studio_casting, then reuse the front portrait as a character lock for UGC variations.

json

// 1. Cast a character from a structured profile (no photo needed)
{ "name": "studio_casting",
  "arguments": {
    "character_name": "Maya",
    "prompt": "studio portrait, soft Rembrandt lighting",
    "character_profile": {
      "genderIdentity": "female",
      "hairStyle": "shoulder-length wavy",
      "hairColor": "auburn",
      "outfitStyle": "tailored beige trench coat",
      "characterArchetype": "detective"
    }
  } }

// 2. UGC scene with the product
{ "name": "studio_ugc_room",
  "arguments": {
    "prompt": "morning commute, focused-work vibes, soft city light",
    "product_image_url": "https://v3b.fal.media/files/.../headphones.jpg",
    "room_style": "minimalist home office"
  } }

Image → enhanced video

Lift a still into motion, then upscale the clip.

json

// 1. Image to video
{ "name": "studio_generate_video",
  "arguments": {
    "prompt": "slow dolly-in, golden hour reflection on the mug",
    "model": "fal-ai/kling-video/v2.5-turbo/standard/image-to-video",
    "image_url": "https://v3b.fal.media/files/.../mug.jpg",
    "duration": 5
  } }

// 2. Enhance the resulting clip
{ "name": "studio_video_enhance",
  "arguments": {
    "video_url": "https://v3b.fal.media/files/.../clip.mp4",
    "upscale_factor": 2
  } }

Image → 3D asset

Turn a packshot into a GLB suitable for AR or engine import.

json

{
  "name": "studio_convert_to_3d",
  "arguments": {
    "image_url": "https://v3b.fal.media/files/.../sneaker.jpg"
  }
}