promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_promptdojo_

The image pipeline — turning one idea into a hundred shipped assets — step 7 of 7

Checkpoint

One last thing before we move on. pass this to mark the lesson done, or skip and keep moving.

Final image 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_vector: bool
  • photoreal_art_directed: bool
  • instruction_heavy: bool
  • google_premium: bool
  • needs_4k: bool (uses the 4K row for nano banana 2 / Pro)

Use the routing from lesson 01 (pick_image_model), the pricing table from lesson 03 step 06, and the PLATFORM_FORMATS table (provided) to pick output formats by channel.

Four briefs run. Expected output:

B1: model=ideogram-v4              count=  5  total=$  0.30  formats=['WEBP_1920', 'WEBP_400_thumb']
B2: model=gpt-image-2              count=  4  total=$  0.21  formats=['JPEG_1080']
B3: model=gemini-3.1-flash-image   count= 50  total=$  3.35  formats=['JPEG_1080_vertical']
B4: model=gemini-3-pro-image       count= 10  total=$  2.40  formats=['WEBP_1920', 'WEBP_400_thumb']

full-screen editor opens — close anytime to keep reading.