Skip to Content
GenerationPipeline

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 UI

Edge Functions

FunctionAuthPurpose
generateJWTSingle job
generate-batchJWTUp to 4 variants
generation-webhookSecret / signatureProvider callback
generation-processJWT + editorPoll/sync fal job
generation-reap-staleCron / service roleFail stuck jobs, refund

Credit lifecycle

  1. Reserve on submit (reserve_generation_credits)
  2. Debit on completed (finalize_generation_job)
  3. 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:sync

Local 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