promptdojo_
Checkpoint

One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.

Final drill. Wire all three lessons together. Write plan_shoot(brief) that takes a brief dict and returns a plan dict:

{"model": str, "count": int, "total_cost": float, "formats": list[str]}

The brief may contain:

  • channel: one of "instagram", "web", "email", "tiktok"
  • batch_count: int (default 1)
  • budget_per_image: float (default 1.0)
  • needs_text_in_image: bool
  • needs_character_consistency: bool
  • photoreal_art_directed: bool
  • subjective_taste: bool
  • instruction_heavy: bool
  • needs_4k: bool (adds upscale cost)

Use the routing from lesson 01 (pick_image_model), the pricing table from lesson 03 step 06 (extended with midjourney-v7, gpt-image-1, flux-kontext-pro), and the PLATFORM_FORMATS table (provided) to pick output formats by channel.

Four briefs run. Expected output:

B1: model=ideogram-3         count=  5  total=$  0.19  formats=['WEBP_1920', 'WEBP_400_thumb']
B2: model=midjourney-v7      count=  4  total=$  0.40  formats=['JPEG_1080']
B3: model=nano-banana        count= 50  total=$  1.95  formats=['JPEG_1080_vertical']
B4: model=flux-1.1-pro       count= 10  total=$  1.00  formats=['WEBP_1920', 'WEBP_400_thumb']

this step needs the editor

on desktop today; in the app (coming soon). save your spot and we'll bring you back here when you're ready.

open this same url on a laptop to keep going today.