This repo compares two prompt formats, structured JSON and natural-language text, across multiple FAL image models while holding the semantic content as closely matched as possible.
Public demo: https://ecsplendid.github.io/prompt-format-json-vs-text/
Current prompt set: v2-semantic-match
- A generator that submits both prompt formats to each configured FAL model.
- A local/static viewer that groups results by model and shows JSON vs text side by side.
- Downloaded local image outputs under
web/generated/<model-slug>/<run-id>/. - A static manifest at
web/data/experiment.jsonthat the GitHub Pages build can serve directly.
The current rerun uses a prompt pair labeled v2-semantic-match. The earlier pilot prompts were directionally similar but not tightly mirrored, so this rerun aligns camera, composition, lighting, grading, typography, and exclusions much more closely. The format is intended to be the main variable.
fal-ai/nano-banana-2fal-ai/photafal-ai/flux/schnellfal-ai/z-image/turbofal-ai/bytedance/seedream/v4.5/text-to-imagefal-ai/ideogram/v3fal-ai/imagen4/preview
Nano Banana 2: completeFLUX Schnell: completeZ Image Turbo: completeSeedream v4.5 Text to Image: completeIdeogram V3: completeImagen 4 Preview: completePhota: partial on the fair rerun because the provider returned repeated downstream500errors for 4 natural-language variations
npm run generate
npm run devnpm run generateexpectsFAL_KEYin the environment.npm run devserves the viewer locally with a dynamic/api/experimentendpoint.- The static GitHub Pages site serves the committed snapshot from
web/data/experiment.json. - Rerunning with the same
RUN_IDresumes from files already present on disk and only submits missing variation slots.
MODELS=fal-ai/nano-banana-2,fal-ai/photaruns a subset of models.RUN_ID=2026-03-27T09-40-17-299Z MODELS=fal-ai/phota npm run generateresumes only missing outputs for a partial run.VARIATION_COUNT=15changes the number of prompt variations per model.GROUP_CONCURRENCY=5controls how many jobs each model/prompt group runs in parallel.MAX_VARIATION_ATTEMPTS=5increases retry depth for flaky providers.
- No API keys are stored in this repo.
.env*,node_modules/, local junk, and archived scratch outputs are ignored.- The public snapshot is pinned to the fair rerun
2026-03-27T09-40-17-299Z; superseded scratch reruns are kept out of the public repo. - The generator reads
FAL_KEYfrom the environment at runtime.