The image pipeline — turning one idea into a hundred shipped assets — step 7 of 7
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: boolneeds_character_consistency: boolphotoreal_art_directed: boolsubjective_taste: boolinstruction_heavy: boolneeds_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']
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: boolneeds_character_consistency: boolphotoreal_art_directed: boolsubjective_taste: boolinstruction_heavy: boolneeds_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.