I'm building a 48-second Christmas ad. Not in an app: the whole thing is an ICM folder, Claude Code reads it, and Higgsfield is just the tool on the end of the pipe that renders what the folder asks for.
The ad ends on the house a girl wished for, and late in the build I changed that house: out with the generated storybook cottage, in with a real home we actually build.
A late change to a foundational element usually means a rebuild. This one didn't, and three ICM principles are why.
christmas-wish-short-ad/
├── CLAUDE.md routing only, no content
├── CONTEXT.md the pipeline + status on one screen
├── _shared/
│ └── inherited.md pointers into the reference workspace. Nothing copied.
├── _templates/
└── stages/
├── 01_brief/ script + which existing asset each beat reuses
├── 02_shotplan/ every shot bound to a specific still
├── 03_boards/ the house-swap candidates, grades, and decision
├── 04_scenes/ generate the gaps, then the motion pass
└── 05_assembly/ edit, composite, watermark, submit
Configure the factory, not the product. The reference material lives in its own workspace. The ad is one product coming off it, not a copy of it.
One home per fact. The house is a single row in a single element registry. Every shot points at that row. Nothing holds a second copy that can drift.
Every output is an edit surface. The candidates, the grades, and the decision itself are plain files sitting in an output folder. Anyone can open it and see where the build stands.
The swap still cost me three shots to regenerate. The win isn't that changes are free. It's that I could price the change in about a minute, before committing, because the structure already knew which shots depend on the house.
That's the part worth stealing. The generator is swappable. The structure is the thing you own.
Let me know if there are any improvements...