REST API (routes/api.py): Three endpoints behind API key auth for
programmatic image generation via presets — list presets, queue
generation with optional overrides, and poll job status.
Shared generation logic extracted from routes/presets.py into
services/generation.py so both web UI and API use the same code path.
Fallback covers: library index pages now show a random generated image
at reduced opacity when no cover is assigned, instead of "No Image".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Presets are saved generation recipes that combine all resource types
(character, outfit, action, style, scene, detailer, look, checkpoint)
with per-field on/off/random toggles. At generation time, entities
marked "random" are picked from the DB and fields marked "random" are
randomly included or excluded.
- Preset model + sync_presets() following existing category pattern
- _resolve_preset_entity() / _resolve_preset_fields() helpers
- Full route set: index, detail, generate, edit, upload, clone, save_json, create (LLM), rescan
- 4 templates: index (gallery), detail (summary + generate), edit (3-way toggle UI), create (LLM form)
- example_01.json reference preset + preset_system.txt LLM prompt
- Presets nav link in layout.html
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>