Generation pipeline
Request flow
Angular → generate / generate-batch (JWT)
→ reserve_generation_credits (idempotent by job_id)
→ insert generation_jobs (queued)
→ provider.submitJob (mock | fal queue)
→ generation-webhook OR generation-process (sync)
→ persist output to Storage (prod)
→ finalize_generation_job
→ Realtime → studio UIEdge Functions
| Function | Auth | Purpose |
|---|---|---|
generate | JWT | Single job |
generate-batch | JWT | Up to 4 variants |
generation-webhook | Secret / signature | Provider callback |
generation-process | JWT + editor | Poll/sync fal job |
generation-reap-stale | Cron / service role | Fail stuck jobs, refund |
Credit lifecycle
- Reserve on submit (
reserve_generation_credits) - Debit on
completed(finalize_generation_job) - Refund on
failed/cancelled/ timeout (reaper)
Finalize is idempotent — concurrent webhook + poll cannot double-charge.
Catalog sync
Source of truth: libs/generation-core. Sync to Edge:
npm run catalog:syncLocal dev
Without FAL_API_KEY, provider falls back to mock (picsum placeholders). With fal, local may defer to generation-process (client worker) when queue webhooks are unreachable on localhost.
Last updated on