## 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

```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

```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

```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

```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

```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

```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

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