@nodaro/prompts 1.42.0 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/{chunk-PHFOKGYS.js → chunk-2HJJBXGA.js} +6 -6
  2. package/dist/{chunk-PHFOKGYS.js.map → chunk-2HJJBXGA.js.map} +1 -1
  3. package/dist/{chunk-HL6PZ4A6.js → chunk-2OIKQ4WB.js} +5 -5
  4. package/dist/{chunk-HL6PZ4A6.js.map → chunk-2OIKQ4WB.js.map} +1 -1
  5. package/dist/{chunk-ZFOXGNLK.js → chunk-57PTYJJX.js} +4 -4
  6. package/dist/{chunk-ZFOXGNLK.js.map → chunk-57PTYJJX.js.map} +1 -1
  7. package/dist/{chunk-XTOSNRWT.cjs → chunk-5NIKPMLU.cjs} +2 -4
  8. package/dist/chunk-5NIKPMLU.cjs.map +1 -0
  9. package/dist/{chunk-ZGA72NCT.cjs → chunk-C4FDHCEZ.cjs} +125 -125
  10. package/dist/{chunk-ZGA72NCT.cjs.map → chunk-C4FDHCEZ.cjs.map} +1 -1
  11. package/dist/chunk-CLHIPYTC.js +10913 -0
  12. package/dist/chunk-CLHIPYTC.js.map +1 -0
  13. package/dist/{chunk-QJACEKMZ.js → chunk-CPKYIVWP.js} +3 -3
  14. package/dist/{chunk-QJACEKMZ.js.map → chunk-CPKYIVWP.js.map} +1 -1
  15. package/dist/{chunk-JDNHMVEV.cjs → chunk-FCTK7RGO.cjs} +35 -35
  16. package/dist/{chunk-JDNHMVEV.cjs.map → chunk-FCTK7RGO.cjs.map} +1 -1
  17. package/dist/{chunk-IFRFYBGE.js → chunk-IKHRZ5UQ.js} +3 -3
  18. package/dist/{chunk-IFRFYBGE.js.map → chunk-IKHRZ5UQ.js.map} +1 -1
  19. package/dist/{chunk-SB7AYE6S.cjs → chunk-JHEZJKTX.cjs} +250 -6
  20. package/dist/chunk-JHEZJKTX.cjs.map +1 -0
  21. package/dist/{chunk-GIO77YH5.js → chunk-NN4FL7SB.js} +4 -4
  22. package/dist/{chunk-GIO77YH5.js.map → chunk-NN4FL7SB.js.map} +1 -1
  23. package/dist/{chunk-I3QS7BSY.cjs → chunk-OSKABA64.cjs} +8 -8
  24. package/dist/{chunk-I3QS7BSY.cjs.map → chunk-OSKABA64.cjs.map} +1 -1
  25. package/dist/{chunk-AXQK7UH7.cjs → chunk-OY7XOPDG.cjs} +49 -49
  26. package/dist/{chunk-AXQK7UH7.cjs.map → chunk-OY7XOPDG.cjs.map} +1 -1
  27. package/dist/{chunk-ZLRB5BVT.cjs → chunk-PHR4UETI.cjs} +18 -18
  28. package/dist/{chunk-ZLRB5BVT.cjs.map → chunk-PHR4UETI.cjs.map} +1 -1
  29. package/dist/chunk-S3H4TI6N.cjs +10948 -0
  30. package/dist/chunk-S3H4TI6N.cjs.map +1 -0
  31. package/dist/{chunk-6JABZ5OC.js → chunk-SMKIVT7P.js} +4 -4
  32. package/dist/{chunk-6JABZ5OC.js.map → chunk-SMKIVT7P.js.map} +1 -1
  33. package/dist/{chunk-CYMIXKFT.js → chunk-TXHFL725.js} +247 -3
  34. package/dist/chunk-TXHFL725.js.map +1 -0
  35. package/dist/{chunk-WARNUGXT.cjs → chunk-UNR34GYU.cjs} +191 -2
  36. package/dist/chunk-UNR34GYU.cjs.map +1 -0
  37. package/dist/{chunk-4YUXR23B.cjs → chunk-VAK4RUNU.cjs} +13 -13
  38. package/dist/{chunk-4YUXR23B.cjs.map → chunk-VAK4RUNU.cjs.map} +1 -1
  39. package/dist/{chunk-QBUSJGV3.js → chunk-XMFWHTQB.js} +2 -4
  40. package/dist/chunk-XMFWHTQB.js.map +1 -0
  41. package/dist/{chunk-JCYK7NSR.js → chunk-XZXUU3YH.js} +191 -2
  42. package/dist/chunk-XZXUU3YH.js.map +1 -0
  43. package/dist/{chunk-H4JMZWOE.cjs → chunk-YCCQXX3U.cjs} +39 -39
  44. package/dist/{chunk-H4JMZWOE.cjs.map → chunk-YCCQXX3U.cjs.map} +1 -1
  45. package/dist/entries/assembly.cjs +29 -29
  46. package/dist/entries/assembly.js +6 -6
  47. package/dist/entries/doctrine.cjs +46 -46
  48. package/dist/entries/doctrine.js +1 -1
  49. package/dist/entries/picker-art.cjs +19 -19
  50. package/dist/entries/picker-art.d.cts +188 -0
  51. package/dist/entries/picker-art.d.ts +188 -0
  52. package/dist/entries/picker-art.js +1 -1
  53. package/dist/entries/picker-catalogs.cjs +57 -57
  54. package/dist/entries/picker-catalogs.js +5 -5
  55. package/dist/entries/pickers.cjs +374 -374
  56. package/dist/entries/pickers.d.cts +1 -1
  57. package/dist/entries/pickers.d.ts +1 -1
  58. package/dist/entries/pickers.js +3 -3
  59. package/dist/entries/presets.cjs +47 -31
  60. package/dist/entries/presets.d.cts +37 -1
  61. package/dist/entries/presets.d.ts +37 -1
  62. package/dist/entries/presets.js +1 -1
  63. package/dist/entries/prompt-builder.cjs +76 -76
  64. package/dist/entries/prompt-builder.js +5 -5
  65. package/dist/index.cjs +637 -621
  66. package/dist/index.d.cts +1 -1
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.js +11 -11
  69. package/package.json +2 -2
  70. package/src/__tests__/factory-preset-previews.test.ts +98 -25
  71. package/src/__tests__/factory-preset-references.test.ts +4 -0
  72. package/src/__tests__/fixtures/parameter-hint-golden.json +6 -6
  73. package/src/__tests__/preset-tiles-generated.test.ts +88 -0
  74. package/src/factory-presets/generate-image.ts +8 -0
  75. package/src/factory-presets/index.ts +10 -1
  76. package/src/factory-presets/preview-files.generated.ts +639 -1
  77. package/src/factory-presets/previews.ts +34 -2
  78. package/src/factory-presets/tiles/business-and-marketing.generated.ts +426 -0
  79. package/src/factory-presets/tiles/business.generated.ts +261 -0
  80. package/src/factory-presets/tiles/content-and-creative.generated.ts +286 -0
  81. package/src/factory-presets/tiles/family-and-events.generated.ts +222 -0
  82. package/src/factory-presets/tiles/home-and-spaces.generated.ts +231 -0
  83. package/src/factory-presets/tiles/index.generated.ts +32 -0
  84. package/src/factory-presets/tiles/layout.generated.ts +110 -0
  85. package/src/factory-presets/tiles/life-and-events.generated.ts +246 -0
  86. package/src/factory-presets/tiles/personal-photos.generated.ts +306 -0
  87. package/src/factory-presets/tiles/products-and-fashion.generated.ts +303 -0
  88. package/src/factory-presets/tiles/shorts-tiktok.generated.ts +156 -0
  89. package/src/factory-presets/tiles/social-and-ads.generated.ts +606 -0
  90. package/src/factory-presets/tiles/text.generated.ts +591 -0
  91. package/src/factory-presets/tiles/youtube.generated.ts +906 -0
  92. package/src/factory-presets/types.ts +14 -0
  93. package/src/photographer.ts +277 -0
  94. package/src/picker-art/look-preview-sets.ts +189 -0
  95. package/src/prompt-wizard-categories.ts +0 -2
  96. package/dist/chunk-CYMIXKFT.js.map +0 -1
  97. package/dist/chunk-JCYK7NSR.js.map +0 -1
  98. package/dist/chunk-LZ53F5BN.cjs +0 -5652
  99. package/dist/chunk-LZ53F5BN.cjs.map +0 -1
  100. package/dist/chunk-QBUSJGV3.js.map +0 -1
  101. package/dist/chunk-RB2F5JQF.js +0 -5621
  102. package/dist/chunk-RB2F5JQF.js.map +0 -1
  103. package/dist/chunk-SB7AYE6S.cjs.map +0 -1
  104. package/dist/chunk-WARNUGXT.cjs.map +0 -1
  105. package/dist/chunk-XTOSNRWT.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/brand-tokens.ts","../src/factory-presets/shared-image.ts","../src/factory-presets/generate-image.ts","../src/factory-presets/generate-video.ts","../src/factory-presets/music.ts","../src/factory-presets/voice.ts","../src/factory-presets/sfx.ts","../src/factory-presets/text.ts","../src/factory-presets/video-edit.ts","../src/factory-presets/switchx.ts","../src/factory-presets/motion-graphics.ts","../src/factory-presets/lottie-overlay.ts","../src/factory-presets/types.ts","../src/factory-presets/references.ts","../src/factory-presets/preview-files.generated.ts","../src/factory-presets/previews.ts","../src/factory-presets/index.ts","../src/caption-treatments.ts","../src/style-presets.ts","../src/object-asset-presets.ts","../src/factory-snippets/catalog.ts","../src/factory-snippets/types.ts","../src/factory-snippets/index.ts"],"names":["REALISM_PASS_INSTRUCTION","REALISM_FINISH","REALISM_SKIN","realismViewpoint","NEUTRAL_PERSON","realismEmptyHands","MODELS_WITH_REFERENCE_IMAGE_SUPPORT","imageReferenceLimit","getPromptFields","ownEntry","NODE_PROMPT_CANDIDATE_FIELDS","promptAffixCoreField","nodeSupportsPromptAffixes","IMAGE_TOKEN_PATTERN","T2I_TO_I2I_VARIANT","REFERENCE_RULES","SCENE_FRAME_RULE","FILM_STILL_PREFIX","CINEMATIC_LOOK_TAIL"],"mappings":"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","file":"chunk-LZ53F5BN.cjs","sourcesContent":["import type { SupportedFontName } from \"@nodaro/shared/captions\"\n\n/**\n * Brand layer (Phase 3a). A pragmatic brand-token set — palette + fonts + logo —\n * authored/selected ONCE and threaded through the shot-sequence pipeline as\n * defaults. Preset palettes are adapted from HyperFrames' Apache-2.0\n * `hyperframes-creative/frame-presets`, re-grounded on SUPPORTED_FONT_NAMES.\n */\nexport interface BrandPalette {\n /** Canvas background. */\n bg: string\n /** Secondary surface (cards/panels). Carried for forward-compat; unconsumed in 3a. */\n bgAlt?: string\n /** Primary on-bg text. */\n text: string\n /** Secondary text. Carried for forward-compat; unconsumed in 3a. */\n textMuted?: string\n /** Primary accent — the brand color. */\n accent: string\n /** Secondary accent. Carried for forward-compat; unconsumed in 3a. */\n accent2?: string\n /** Hairline/divider. Carried for forward-compat; unconsumed in 3a. */\n line?: string\n}\n\nexport type BrandCasing = \"uppercase\" | \"lowercase\" | \"none\"\n\nexport interface BrandTypeSpec {\n /** CSS font-weight. MUST be a weight loaded for the role's font (guarded in remotion). */\n weight?: number\n /** absent => inherit call-site; \"none\" => force no transform; else force that transform. */\n casing?: BrandCasing\n /** letter-spacing in em; suppressed for Arabic at render time. */\n tracking?: number\n}\n\nexport interface BrandFonts {\n heading: SupportedFontName\n body: SupportedFontName\n headingType?: BrandTypeSpec\n bodyType?: BrandTypeSpec\n}\n\nexport interface BrandLogo {\n name: string\n tagline?: string\n /** Optional logo image — an https URL on an allowlisted Nodaro-CDN host (v1: URL only; obtain from the upload tools). */\n image?: string\n /** Optional hex color for a rounded panel rendered behind the logo. */\n imageBackdrop?: string\n}\n\nexport interface BrandTokens {\n palette: BrandPalette\n fonts: BrandFonts\n logo?: BrandLogo\n}\n\nexport interface BrandPresetMeta {\n id: BrandPresetId\n label: string\n mood: string\n description: string\n}\n\nexport type BrandPresetId =\n | \"midnight-violet\"\n | \"editorial-cream\"\n | \"cobalt-corporate\"\n | \"sandstone-warm\"\n | \"poster-contrast\"\n | \"mono-slate\"\n | \"vibrant-pulse\"\n | \"pastel-calm\"\n\nexport const BRAND_PRESET_IDS: readonly BrandPresetId[] = [\n \"midnight-violet\",\n \"editorial-cream\",\n \"cobalt-corporate\",\n \"sandstone-warm\",\n \"poster-contrast\",\n \"mono-slate\",\n \"vibrant-pulse\",\n \"pastel-calm\",\n]\n\nexport const BRAND_PRESETS: Record<BrandPresetId, BrandTokens> = {\n \"midnight-violet\": {\n palette: { bg: \"#0B0B12\", bgAlt: \"#16161F\", text: \"#FFFFFF\", textMuted: \"#A1A1AA\", accent: \"#8B5CF6\", accent2: \"#22D3EE\", line: \"#2A2A38\" },\n fonts: { heading: \"Montserrat\", body: \"Inter\", headingType: { weight: 700 }, bodyType: { weight: 400 } },\n },\n \"editorial-cream\": {\n palette: { bg: \"#F7F4EF\", bgAlt: \"#EDE8E0\", text: \"#1A1A1A\", textMuted: \"#5A5A5A\", accent: \"#C2410C\", line: \"#D6CEC1\" },\n fonts: { heading: \"Playfair Display\", body: \"Lora\", headingType: { weight: 400 }, bodyType: { weight: 400 } },\n },\n \"cobalt-corporate\": {\n palette: { bg: \"#0A1929\", bgAlt: \"#12263A\", text: \"#E8EEF5\", textMuted: \"#9FB3C8\", accent: \"#3B82F6\", line: \"#1E3A52\" },\n fonts: { heading: \"Inter\", body: \"Inter\", headingType: { weight: 700 }, bodyType: { weight: 400 } },\n },\n \"sandstone-warm\": {\n palette: { bg: \"#EDE8E0\", bgAlt: \"#E2DBD1\", text: \"#1A1A1A\", textMuted: \"#5A5A5A\", accent: \"#B45309\", line: \"#C9BEAE\" },\n fonts: { heading: \"Poppins\", body: \"Nunito\", headingType: { weight: 700 }, bodyType: { weight: 400 } },\n },\n \"poster-contrast\": {\n palette: { bg: \"#111111\", bgAlt: \"#1C1C1C\", text: \"#FFFFFF\", textMuted: \"#A3A3A3\", accent: \"#FACC15\", line: \"#333333\" },\n fonts: {\n heading: \"Anton\",\n body: \"Oswald\",\n headingType: { weight: 400, casing: \"uppercase\" },\n bodyType: { weight: 700, casing: \"uppercase\", tracking: 0.06 },\n },\n },\n \"mono-slate\": {\n palette: { bg: \"#1C1C1E\", bgAlt: \"#2C2C2E\", text: \"#F5F5F7\", textMuted: \"#98989D\", accent: \"#A1A1AA\", line: \"#3A3A3C\" },\n fonts: {\n heading: \"Roboto\",\n body: \"Roboto Mono\",\n headingType: { weight: 400, casing: \"uppercase\", tracking: 0.12 },\n bodyType: { weight: 400 },\n },\n },\n \"vibrant-pulse\": {\n palette: { bg: \"#0F172A\", bgAlt: \"#1E293B\", text: \"#F8FAFC\", textMuted: \"#94A3B8\", accent: \"#EC4899\", accent2: \"#22D3EE\", line: \"#334155\" },\n fonts: { heading: \"Raleway\", body: \"Open Sans\", headingType: { weight: 900 }, bodyType: { weight: 400 } },\n },\n \"pastel-calm\": {\n palette: { bg: \"#FDF2F8\", bgAlt: \"#FCE7F3\", text: \"#4C1D95\", textMuted: \"#7C3AED\", accent: \"#A855F7\", line: \"#F0D9EA\" },\n fonts: { heading: \"Nunito\", body: \"Lato\", headingType: { weight: 700 }, bodyType: { weight: 400 } },\n },\n}\n\nexport const BRAND_PRESET_META: Record<BrandPresetId, BrandPresetMeta> = {\n \"midnight-violet\": { id: \"midnight-violet\", label: \"Midnight Violet\", mood: \"bold / dark tech\", description: \"Near-black canvas, violet accent, cyan secondary — SaaS/tech launches.\" },\n \"editorial-cream\": { id: \"editorial-cream\", label: \"Editorial Cream\", mood: \"editorial / light\", description: \"Warm paper background, burnt-orange accent, serif type — magazine/editorial.\" },\n \"cobalt-corporate\": { id: \"cobalt-corporate\", label: \"Cobalt Corporate\", mood: \"corporate blue\", description: \"Deep navy, clean blue accent, Inter throughout — B2B/enterprise.\" },\n \"sandstone-warm\": { id: \"sandstone-warm\", label: \"Sandstone Warm\", mood: \"warm neutral\", description: \"Sandstone canvas, amber accent, rounded sans — approachable/lifestyle.\" },\n \"poster-contrast\": { id: \"poster-contrast\", label: \"Poster Contrast\", mood: \"high-contrast poster\", description: \"Ink-black, yellow accent, condensed display type — punchy/bold statements.\" },\n \"mono-slate\": { id: \"mono-slate\", label: \"Mono Slate\", mood: \"muted monochrome\", description: \"Slate greys, monospace body — technical/developer tone.\" },\n \"vibrant-pulse\": { id: \"vibrant-pulse\", label: \"Vibrant Pulse\", mood: \"vibrant\", description: \"Deep slate, magenta + cyan accents — energetic consumer/creator.\" },\n \"pastel-calm\": { id: \"pastel-calm\", label: \"Pastel Calm\", mood: \"calm pastel\", description: \"Soft pink canvas, purple accent — gentle/wellness/education.\" },\n}\n\n/** Resolve a preset-name string OR an inline BrandTokens object to BrandTokens. */\nexport function resolveBrandInput(brand: string | BrandTokens): BrandTokens {\n if (typeof brand === \"string\") {\n if (!Object.prototype.hasOwnProperty.call(BRAND_PRESETS, brand)) {\n throw new Error(\n `Unknown brand preset \"${brand}\". Valid presets: ${BRAND_PRESET_IDS.join(\", \")}.`,\n )\n }\n return BRAND_PRESETS[brand as BrandPresetId]\n }\n return brand\n}\n","import type { FactoryPreset } from \"./types.js\"\nimport { REALISM_FINISH, REALISM_PASS_INSTRUCTION } from \"../realism-wording.js\"\n\n/**\n * Selective-stylization presets shared by `modify-image` (transform an input photo) and\n * `generate-image` (use a connected reference image). `modify-image` is slated for deprecation in\n * favor of `generate-image`, so the catalog lives in ONE place to prevent the two from drifting —\n * when `modify-image` is removed, just drop its key from `FACTORY_PRESETS` below. The provider is\n * set per node by {@link editProviderFor}.\n */\nconst STYLIZED_SUBJECT: ReadonlyArray<{\n readonly slug: string\n readonly name: string\n readonly description: string\n readonly data: Readonly<Record<string, unknown>>\n}> = [\n {\n slug: \"cartoon-person-real-world\",\n name: \"Cartoon Person, Real World\",\n description: \"Subject → 3D cartoon, rest stays photoreal.\",\n data: {\n promptPrefix:\n \"Restyle ONLY the person in the reference image into a polished 3D animated character — Pixar/Disney sensibility: soft subsurface skin shading, expressive oversized eyes, smoothly stylized hair, clean rounded forms. Preserve their identity, exact pose, expression, and framing. Everything else stays untouched and fully photorealistic: keep the original background, props, clothing fabric and texture, and the scene's real lighting, shadows, and color grade. Composite the stylized figure into the real plate so it sits naturally — matched light direction, contact shadows, and depth.\",\n negativePrompt:\n \"changing the background, altering the unstylized parts, restyling clothing fabric or props, relighting the scene, distorting the subject, changing identity or pose, flat 2D look, extra limbs, deformed hands, warped face\",\n },\n },\n {\n slug: \"caricature-real-photo\",\n name: \"Caricature, Real Photo\",\n description: \"Exaggerated cartoon head on a real scene.\",\n data: {\n promptPrefix:\n \"Turn ONLY the person into a playful hand-illustrated caricature: enlarge the head, exaggerate their most recognizable features, and amplify expression with bold, confident linework and clean cel-style shading — while keeping them clearly identifiable. Leave everything else exactly as shot and photorealistic: the body proportions below the neck, the clothing, the background, props, and the scene's real lighting and shadows remain unchanged. Blend the caricature head onto the real photo seamlessly with matched lighting and a believable neckline.\",\n negativePrompt:\n \"changing the background, altering the unstylized parts, restyling the body or clothing, relighting the scene, distorting the subject beyond intent, losing likeness, photorealistic head, harsh seam at the neck, deformed features\",\n },\n },\n {\n slug: \"anime-person-real-bg\",\n name: \"Anime Person, Real Background\",\n description: \"Subject → 2D anime, real environment.\",\n data: {\n promptPrefix:\n \"Restyle ONLY the person as a crisp 2D anime character — clean ink outlines, flat cel shading with sharp shadow shapes, glossy stylized hair, and expressive anime eyes — while preserving their identity, pose, expression, and framing. Keep the real-world background, environment, props, and the original photographic lighting, shadows, and color completely untouched and photorealistic. Integrate the 2D figure into the live-action plate so the light direction and contact shadows read naturally.\",\n negativePrompt:\n \"changing the background, altering the unstylized parts, restyling the environment or props, relighting the scene, distorting the subject, 3D render look, photorealistic skin on the subject, extra fingers, warped anatomy, broken outlines\",\n },\n },\n {\n slug: \"real-person-cartoon-world\",\n name: \"Real Person, Cartoon World\",\n description: \"Inverse — real subject, stylized world.\",\n data: {\n promptPrefix:\n \"Inverse stylization: keep the PERSON completely photorealistic and unchanged — real skin, hair, clothing, identity, pose, and framing all preserved exactly. Restyle ONLY the surrounding world into a vibrant, hand-crafted cartoon environment: simplified painterly shapes, bold saturated colors, soft graphic shading, and whimsical stylized props and scenery. Light the real person to match the cartoon world's color and direction so they sit convincingly inside it, with believable contact shadows.\",\n negativePrompt:\n \"stylizing or cartoonifying the person, altering the subject's skin, face, hair or clothing, distorting the subject, changing the subject's pose, photorealistic background, flat lifeless scene, harsh cut-out edges around the person\",\n },\n },\n {\n slug: \"claymation-figure-real-set\",\n name: \"Claymation Figure, Real Set\",\n description: \"Subject → clay figure, real surroundings.\",\n data: {\n promptPrefix:\n \"Restyle ONLY the person into a tactile stop-motion claymation figure — molded plasticine surface with visible fingerprints, tool marks, subtle seams, and a soft matte sheen, in the handmade spirit of Aardman puppets — while keeping their identity, pose, expression, and framing. Everything else stays exactly as shot and photorealistic: the real background, set, props, and the scene's natural lighting and shadows are unchanged. Seat the clay figure into the real plate with matched light direction and grounded contact shadows.\",\n negativePrompt:\n \"changing the background or set, altering the unstylized parts, restyling props, relighting the scene, distorting the subject, smooth plastic toy look, glossy CGI surface, melted or deformed figure, missing fingerprints, extra limbs\",\n },\n },\n]\n\n/** Build the Stylized Subject presets for a node type (id = `<nodeType>/<slug>`). */\n/**\n * Both preset families are edits of a connected photo, so they run on the platform's edit model,\n * GPT Image 2.5 Flare (decided 2026-10-08 from the image model bake-off: it kept pose, framing and\n * product design on every edit). Modify Image takes the i2i id; Generate Image takes the t2i id,\n * which the platform swaps to the same i2i model whenever a reference image is connected.\n */\nexport function editProviderFor(nodeType: string): string {\n return nodeType === \"modify-image\" ? \"gpt-image-2-5-flare-i2i\" : \"gpt-image-2-5-flare\"\n}\n\nexport function stylizedSubjectFor(nodeType: string): FactoryPreset[] {\n return STYLIZED_SUBJECT.map((p) => ({\n id: `${nodeType}/${p.slug}`,\n name: p.name,\n description: p.description,\n group: \"Stylized Subject\",\n data: { provider: editProviderFor(nodeType), ...p.data },\n // Restyles the person in the connected photo (\"the reference image\").\n minReferences: 1,\n }))\n}\n\n/**\n * Image-edit presets shared by `modify-image` and `generate-image` (with a connected reference\n * image) — common photo-edit operations where the instruction lives in the prompt. Same\n * single-source rationale as STYLIZED_SUBJECT; when modify-image is removed, generate-image keeps them.\n */\nconst IMAGE_EDITS: ReadonlyArray<{\n readonly slug: string\n readonly name: string\n readonly description: string\n readonly data: Readonly<Record<string, unknown>>\n}> = [\n {\n slug: \"background-remove\",\n name: \"Remove Background\",\n description: \"Cut out the subject on white.\",\n data: {\n promptPrefix:\n \"Cleanly cut the main subject out of the reference image and place it on a pure, solid white background. Trace a crisp, accurate edge — preserve fine detail like hair strands, fur, and translucent or wispy edges — with no leftover background pixels and no color fringing. Keep the subject itself completely unchanged: same pose, lighting, color, and full silhouette, nothing cropped.\",\n negativePrompt:\n \"fringing, color halo, cut-off subject, leftover background, jagged or rough edges, missing hair detail, semi-transparent matte, drop shadow, gray or off-white background, altering the subject\",\n },\n },\n {\n slug: \"background-replace\",\n name: \"Replace Background\",\n description: \"Swap in a new scene.\",\n data: {\n prompt:\n \"Replace the background behind the subject with {scene || a sunlit Mediterranean terrace}. Keep the subject perfectly unchanged — identity, pose, edges, and proportions intact — and composite it into the new scene so it looks truly photographed there: relight the subject's rim and ambient tones to match the new environment, cast believable contact shadows, and match perspective, depth of field, and color grade.\",\n negativePrompt:\n \"altering the subject, changing the subject's pose or proportions, fringing, halo, floating subject, missing or wrong-direction shadows, mismatched lighting, flat composite, harsh cut-out edges, perspective mismatch\",\n },\n },\n {\n slug: \"colorize\",\n name: \"Colorize B&W Photo\",\n description: \"Natural color from grayscale.\",\n data: {\n promptPrefix:\n \"Colorize this black-and-white photograph with natural, historically plausible color. Give skin realistic, even tones, and assign believable hues to clothing, foliage, sky, and materials. Preserve every original detail, grain, contrast, and the exact composition — add color only, never invent or remove content.\",\n negativePrompt:\n \"oversaturated, anachronistic colors, neon or cartoon tones, color bleeding outside edges, blotchy or uneven skin, lost detail, altered composition, added or hallucinated objects, washed-out contrast\",\n },\n },\n {\n slug: \"restore-photo\",\n name: \"Restore Old Photo\",\n description: \"Repair scratches, denoise, sharpen.\",\n data: {\n promptPrefix:\n \"Restore this old, damaged photograph: remove scratches, dust, creases, stains, and noise, repair torn or missing areas by reconstructing what is plainly there, and gently recover sharpness and tonal detail. Keep the result authentic and true to the original — preserve identity, era, natural film grain, and composition. Repair only; do not beautify, restyle, or invent new features.\",\n negativePrompt:\n \"over-smoothed, plastic skin, waxy or airbrushed look, hallucinated details, invented faces or objects, changing identity or age, removing authentic grain, modern restyling, oversharpening halos, altered composition\",\n },\n },\n {\n slug: \"relight\",\n name: \"Relight Scene\",\n description: \"New lighting, same subject.\",\n data: {\n prompt:\n \"Relight the image with {lighting style || soft golden-hour key light from the left}. Re-derive highlights, shadows, ambient fill, and color temperature consistently across the whole frame for a believable, physically plausible result. Keep the subject, pose, expression, materials, and composition completely unchanged — only the lighting changes.\",\n negativePrompt:\n \"changing the subject, pose, expression, or composition, altering materials or clothing, flat or inconsistent lighting, blown-out highlights, crushed shadows, color casts on skin, double or contradictory light directions, repositioning anything\",\n },\n },\n {\n slug: \"restyle-whole\",\n name: \"Restyle (whole image)\",\n description: \"Apply an art style to everything.\",\n data: {\n prompt:\n \"Restyle the entire image in a {art style || soft watercolor illustration} look, applying the style consistently to the subject, background, and every element. Keep the composition, subject placement, and the subject clearly recognizable — reinterpret texture, color, and rendering, not the underlying content or layout.\",\n negativePrompt:\n \"changing the composition or layout, moving or removing the subject, losing recognizability, applying the style to only part of the image, photorealistic patches, added or hallucinated objects, distorted anatomy, inconsistent style across the frame\",\n },\n },\n {\n slug: \"doodle-overlay\",\n name: \"Doodle Overlay\",\n description: \"Hand-drawn marker doodles on top — photo stays untouched.\",\n data: {\n promptPrefix:\n \"Layer playful hand-drawn doodles ON TOP of the reference photo while keeping every pixel of the underlying photograph completely unchanged — same people, same colors, same lighting, same crop. Doodle style: wobbly hand-drawn felt-tip marker lines in white with a few yellow accents, like quick sketches on a printed photo. Add: loose outline traces hugging one or two key shapes, small sparkles and stars, a hand-drawn thought cloud or speech bubble with a short witty handwritten phrase that reacts to what is actually happening in the photo, and simple arrows or underlines pointing at fun details. Outlines only — never fill shapes with color. Never cover faces or the main focal point; place doodles in empty areas like sky, walls or margins. Keep it balanced: four to seven doodle elements total, charming and confident, not cluttered. The photo is the hero — the doodles are the seasoning.\",\n negativePrompt:\n \"altered photo, restyled or recolored scene, redrawn subject, covered faces, filled color shapes, digital sticker or emoji look, vector clipart, cluttered doodles, garbled or misspelled handwriting, watermark, blurry\",\n },\n },\n {\n slug: \"doodle-overlay-expressive\",\n name: \"Doodle Overlay · Expressive\",\n description: \"Looser free-form doodles — the model improvises.\",\n data: {\n promptPrefix:\n \"Decorate the reference photo with expressive hand-drawn doodles layered on top, keeping the underlying photograph itself completely unchanged. Free, confident hand-drawn marker linework — wobbly outlines, sparkles, squiggles, little flames or hearts where they fit the mood, and a short handwritten phrase that responds cleverly to the content of the photo (never a generic cliché). Mix of white and one or two bright accent colors. Outline style only, no filled shapes. Compose the doodles around the subject — never on top of faces or the focal point — using empty areas and edges. Loose, playful, zine-like energy: it should feel like a bored genius doodled on a printed photo. Keep the original image pixels intact beneath the doodle layer.\",\n negativePrompt:\n \"altered photo, restyled or recolored scene, covered faces, filled color blocks, sticker or clipart look, cliché phrases, garbled or misspelled handwriting, cluttered composition, watermark, blurry\",\n },\n },\n {\n slug: \"add-skin-realism\",\n name: \"Add Skin Realism\",\n description: \"Brings back visible skin texture — same person, same photo.\",\n data: { provider: \"nano-banana-2-1\", aspectRatio: \"auto\", resolution: \"2K\", promptPrefix: REALISM_PASS_INSTRUCTION },\n },\n {\n slug: \"natural-photo-finish\",\n name: \"Natural Photo Finish\",\n description: \"Takes out a rendered-looking finish, keeps the photo.\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"auto\",\n resolution: \"2K\",\n promptPrefix: `Keep this photo as it is and take out only what makes it look rendered: smoothed, waxy or airbrushed skin, a glow, over-sharpened edges, hair too perfect to be real. ${REALISM_FINISH} Otherwise the same people, framing, pose and background.`,\n },\n },\n {\n slug: \"phone-camera-look\",\n name: \"Phone Camera Look\",\n description: \"Re-finishes a photo as an everyday snapshot.\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"auto\",\n resolution: \"2K\",\n promptPrefix: `Re-finish this photo, changing nothing in it: ${REALISM_FINISH} Same people, framing, pose and background.`,\n },\n },\n {\n slug: \"undo-beauty-filter\",\n name: \"Undo Beauty Filter\",\n description: \"Reverses smoothing and reshaping on a real photo.\",\n data: {\n provider: \"seedream-5-pro\",\n // \"auto\" keeps the photo's shape: this model lists no native \"auto\", so on either node the\n // run takes its listed ratio nearest the connected photo.\n aspectRatio: \"auto\",\n quality: \"high\",\n promptPrefix: \"Undo the beauty filter on this photo: bring back the person's real skin texture, the natural shape of the face, jaw, nose and eyes, and the real colour of skin and lips. Change nothing else: the same person, expression, hair, clothing, framing and background.\",\n },\n },\n]\n\n/** Build the Edits presets for a node type (id = `<nodeType>/<slug>`). */\nexport function editsFor(nodeType: string): FactoryPreset[] {\n return IMAGE_EDITS.map((p) => ({\n id: `${nodeType}/${p.slug}`,\n name: p.name,\n description: p.description,\n group: \"Edits\",\n data: { provider: editProviderFor(nodeType), ...p.data },\n // Every edit operates on the connected photo.\n minReferences: 1,\n }))\n}\n","import type { FactoryPreset } from \"./types.js\"\nimport { stylizedSubjectFor, editsFor } from \"./shared-image.js\"\nimport { NEUTRAL_PERSON, REALISM_FINISH, REALISM_SKIN, realismEmptyHands, realismViewpoint } from \"../realism-wording.js\"\n\n/** Joins the sentences of one prompt with single spaces. */\nconst sentences = (...parts: string[]): string => parts.join(\" \")\n/** The model and resolution the Realism & Authentic presets render with. */\nconst REALISM_MODEL = { provider: \"gpt-image-2\", resolution: \"2K\" } as const\n/** The model and quality the close skin studies render with (Macro Skin Study, Skin Detail Sheet). */\nconst SKIN_STUDY_MODEL = { provider: \"seedream-5-pro\", quality: \"high\" } as const\n\nexport const GENERATE_IMAGE_PRESETS: readonly FactoryPreset[] = [\n // `minReferences` marks a preset that works from connected photos its prompt\n // describes in words (\"the attached photo\"); `{image:N}` tokens count on their\n // own, so a tokenized preset declares nothing. The groups stay all-or-nothing\n // (factory-preset-references.test.ts), so a new preset copies the line along.\n // ── Reference Sheet ──────────────────────────────────────────────────────\n {\n id: \"generate-image/character-board\",\n name: \"Character Board\",\n description: \"Connect a sharp, well-lit photo → dense character sheet; reuse it as a reference for consistent shots.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed character reference sheet titled \"CHARACTER BOARD\" using the attached photo of the person as the single source of truth for face, hair, beard, eyes, skin tone and body proportions. The same person must appear in every panel — same age, same features. Outfit identical to the attached photo across all panels. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade character-design UI. The composition should feel organized but not rigidly locked: allow the main portrait, metadata, and supporting panels to shift position naturally within the board. The panel arrangement can vary from generation to generation while remaining readable, balanced, and premium. Design the board so it works cleanly in different aspect ratios without depending on a fixed left-column structure. Include: A large hero portrait or 3/4-length character image, accompanied by a detailed metadata block: NAME · AGE · HEIGHT · BUILD · HAIR · EYES · FEATURES · OUTFIT (describe the exact clothing from the attached photo) · CHARACTER · MOOD. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 full-body shots, neutral pose, identical outfit and lighting, neutral tan backdrop): FRONT · 3/4 LEFT · SIDE LEFT · BACK · 3/4 RIGHT. PANEL 02 — EXPRESSIONS (5 tight headshots, same lighting): CALM · LAUGHING · INTENSE · CONTEMPLATIVE · CONFIDENT. PANEL 03 — DETAILS (3 macros): face/eyes close-up · hand close-up (showing ring, watch or cuff) · distinctive outfit detail. PANEL 04 — OUTFIT FLAT-LAYS (5 isolated product shots on dark background): outerwear · top · bottom · footwear · main accessory. PANEL 05 — LIGHTING / MOOD (4 same-pose portraits under different lighting): SOFT WINDOW LIGHT · GOLDEN HOUR · COOL BLUE NIGHT · DRAMATIC RIM-LIGHT. PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes derived from the outfit and skin tones. Bottom caption: \"Use this character board as a visual reference for consistent depiction of the character across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent face across every single panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/pose-board\",\n name: \"Pose Board\",\n description: \"Connect a sharp photo → animation-ready pose & expression sheet; reuse it as a reference for consistent action.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed pose reference sheet titled \"POSE BOARD\" using the attached photo of the person as the single source of truth for face, hair, eyes, skin tone, body proportions and outfit. The same person must appear in every panel — same age, same features, outfit identical to the attached photo across all panels. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade animation-planning UI. The composition should feel organized but not rigidly locked: allow the hero figure, metadata, and supporting panels to shift position naturally within the board while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large full-body hero shot in a relaxed standing pose with a metadata block: NAME · AGE · BUILD · HEIGHT · OUTFIT · POSE LANGUAGE · CENTER OF GRAVITY · DOMINANT HAND · PURPOSE. Also include five content groupings — render ALL five panel headings exactly as written, never merging or omitting a panel: PANEL 01 — BASIC POSES (5 full-body shots, identical outfit and lighting, neutral tan backdrop): STANDING · SITTING · WALKING · RUNNING · JUMPING. PANEL 02 — ACTION POSES (5 dynamic full-body shots with clear silhouettes): FIGHT STANCE · THROW · DODGE · CLIMB · LAND. PANEL 03 — EXPRESSIONS (5 tight headshots, same lighting): NEUTRAL · LAUGHING · ANGRY · SAD · SURPRISED. PANEL 04 — ANGLE COVERAGE (4 chest-up portraits): FRONT · 3/4 · SIDE · BACK. PANEL 05 — COLOR PALETTE: 6 swatches with HEX codes derived from the outfit and skin tones. Bottom caption: \"Use this pose board as a visual reference for consistent posing of the character across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent identity across every single panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, inconsistent identity between panels, extra limbs, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/location-board\",\n name: \"Location Board\",\n description: \"Connect a photo → dense location sheet; reuse it as a reference for consistent scenes.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed location reference sheet titled \"LOCATION BOARD\" using the attached photo of the location as the single source of truth for its architecture, atmosphere, lighting, materials and color palette. The space must be identical across every panel — same place, same materials, same era. All on-image labels in ENGLISH. Editorial location-reference board layout with a dark near-black background, thin yellow neon accent light on the far left, faint film-grain overlay, subtle cinematic interface elements, and production-grade location-scout UI. The composition should feel structured but not rigidly fixed: allow the hero location view, metadata, environmental studies, and supporting panels to shift position naturally within the board. The arrangement may vary from generation to generation while remaining readable, balanced, and premium. Design the board so it adapts cleanly to different aspect ratios without depending on a fixed left-column layout. Include a prominent hero shot of the location, ideally a wide establishing or defining view, accompanied by a detailed metadata block: NAME · TYPE (street / interior / exterior / forest) · ERA · SCALE (intimate / vast) ARCHITECTURE: (key features) MATERIALS: (stone, brick, wood, glass, etc.) ATMOSPHERE: (busy / quiet / eerie / romantic) DEFAULT TIME · DEFAULT WEATHER · PURPOSE (e.g. chase sequence, dialogue scene). Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 same-location shots, identical lighting): WIDE · MID · TIGHT · ALT ANGLE · OVERHEAD. PANEL 02 — TIME OF DAY (4 same-angle shots): DAWN · NOON · DUSK · NIGHT. PANEL 03 — DETAILS (2 macros): material/texture close-up · distinctive architectural detail. PANEL 04 — SET DRESSING / PROPS (5 isolated prop or signage studies on dark background): 5 key props or signage elements from the location. PANEL 05 — WEATHER / MOOD (4 same-angle shots): CLEAR SUNNY · OVERCAST · RAIN-SOAKED · MISTY FOG. PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the location's dominant tones. Bottom caption: \"Use this location board as a visual reference for consistent depiction of the environment across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent location across every panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/product-board\",\n name: \"Product Board\",\n description: \"Connect a photo → dense product sheet; reuse it as a reference for consistent shots.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed product reference sheet titled \"PRODUCT BOARD\" using the attached photo of the product as the single source of truth for its shape, materials, colorway, proportions, branding and finish. The same product must appear in every panel — identical model, identical colorway and markings. All on-image labels in ENGLISH. Editorial product-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade industrial-design UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally within the board while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero product shot with a metadata block: NAME · CATEGORY · BRAND · DIMENSIONS · WEIGHT · MATERIALS · FINISH · KEY FEATURES · COLORWAY. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 studio shots on a seamless background, identical lighting): FRONT · 3/4 · SIDE · BACK · TOP. PANEL 02 — DETAILS (3 macros): material/texture close-up · seam/joint or mechanism · logo/branding detail. PANEL 03 — COLORWAYS (4 isolated shots of the same product in alternate finishes). PANEL 04 — SCALE (the product beside a common reference object, with a dimension callout). PANEL 05 — IN USE / CONTEXT (3 lifestyle shots in a real setting). PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the product's materials and finish. Bottom caption: \"Use this product board as a visual reference for consistent depiction of the product across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Studio.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent product across every panel. 8K, fine grain, studio product photography, crisp reflections.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/outfit-board\",\n name: \"Outfit Board\",\n description: \"Connect a photo → dense wardrobe sheet; reuse it as a reference for consistent looks.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed wardrobe reference sheet titled \"OUTFIT BOARD\" using the attached photo of the outfit as the single source of truth for its garments, fabrics, colorway, silhouette and styling. The same outfit must appear in every panel — identical garments, identical colors and trims. All on-image labels in ENGLISH. Editorial fashion-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade stylist UI. The composition should feel organized but not rigidly locked: allow the hero look, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a hero full-look shot with a metadata block: LOOK NAME · STYLE · SEASON · FABRICS · PALETTE · FIT · OCCASION. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — ON-BODY VIEWS (5 full-length shots, identical lighting): FRONT · 3/4 LEFT · SIDE · BACK · 3/4 RIGHT. PANEL 02 — FLAT-LAYS (5 isolated garment shots on a dark surface): top · bottom · outerwear · footwear · headwear. PANEL 03 — FABRIC & DETAIL (3 macros): weave/texture close-up · stitching or hardware · print or trim detail. PANEL 04 — ACCESSORIES (4 isolated accessory studies: bag · jewelry · belt · eyewear). PANEL 05 — COLORWAYS (3 alternate colorways of the same look). PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the garments. Bottom caption: \"Use this outfit board as a visual reference for consistent depiction of the wardrobe across all generations.\" Bottom-right tags: STYLE · Modern · Editorial · Fashion.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent outfit across every panel. 8K, fine grain, editorial fashion photography.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/scene-board\",\n name: \"Scene Board\",\n description: \"Connect a photo → set-dressing & props study; reuse it as a reference for consistent sets.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed set-dressing reference sheet titled \"SCENE BOARD\" using the attached photo of the scene as the single source of truth for its props, set dressing, materials, signage and mood. The space and its contents must be consistent across every panel — same props, same materials, same era. All on-image labels in ENGLISH. Editorial set-decoration layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade art-department UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a hero establishing shot with a metadata block: SCENE NAME · TYPE · ERA · MOOD · KEY MATERIALS · PURPOSE. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — KEY PROPS (5 isolated prop studies on a dark background). PANEL 02 — SIGNAGE / GRAPHICS (3 readable signage or printed-graphic elements from the scene). PANEL 03 — MATERIALS & TEXTURES (3 macros: surface · fabric/wood/metal · wear/patina). PANEL 04 — LAYOUT / BLOCKING (a simple top-down or wide diagram of where key elements sit). PANEL 05 — LIGHTING STATES (3 same-angle shots: day · practical-lit night · dramatic). PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the scene's dominant tones. Bottom caption: \"Use this scene board as a visual reference for consistent set dressing across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent scene across every panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/creature-board\",\n name: \"Creature Board\",\n description: \"Connect a sharp photo → dense creature sheet; reuse it as a reference for consistent shots.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed creature reference sheet titled \"CREATURE BOARD\" using the attached photo of the creature as the single source of truth for its anatomy, silhouette, coloration, textures and features. The same creature must appear in every panel — identical species, identical markings and proportions. All on-image labels in ENGLISH. Editorial creature-design layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade concept-design UI. The composition should feel organized but not rigidly locked: allow the hero render, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero full-body render with a metadata block: NAME · SPECIES · SIZE · BUILD · COLORATION · TEXTURES · TEMPERAMENT · FEATURES · MOVEMENT · VOCALIZATION. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 full-body angles, neutral pose, identical lighting): FRONT · 3/4 · SIDE · BACK · TOP-DOWN. PANEL 02 — POSES (4 dynamic full-body poses: idle · moving · alert · aggressive). PANEL 03 — DETAILS (3 macros): head/face close-up · hide/scale/fur texture · distinctive feature (claw, horn, fin). PANEL 04 — EXPRESSIONS (4 head studies showing temperament range). PANEL 05 — SCALE (the creature beside a human silhouette for size reference). PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the creature's coloration. Bottom caption: \"Use this creature board as a visual reference for consistent depiction of the creature across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent creature across every panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed faces, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/vehicle-board\",\n name: \"Vehicle Board\",\n description: \"Connect a photo → dense vehicle sheet; reuse it as a reference for consistent shots.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed vehicle reference sheet titled \"VEHICLE BOARD\" using the attached photo of the vehicle as the single source of truth for its body shape, proportions, paintwork, trim, wheels and condition. The same vehicle must appear in every panel — identical model, identical colorway, markings and wear. All on-image labels in ENGLISH. Editorial vehicle-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade transportation-design UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large three-quarter hero shot with a metadata block: NAME · TYPE · ERA · SCALE · BODY & MATERIALS · FINISH · SEATS · TOP SPEED · SIGNATURE FEATURE · ROLE. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 studio shots, identical lighting): FRONT · 3/4 · SIDE · BACK · TOP-DOWN. PANEL 02 — INTERIOR / CABIN (4 close shots): cockpit through the window · dashboard detail · seats or cargo area · driver POV. PANEL 03 — DETAIL MACROS (4): headlight or light cluster · wheel and tire · badge or panel line · paint and wear close-up. PANEL 04 — IN MOTION (4 staged frames): driving straight · cornering · parked on an incline · night with headlights on. PANEL 05 — LIGHTING / MOOD (4 same-angle hero shots): DESERT MIDDAY · GOLDEN HOUR · STORMY OVERCAST · NIGHT NEON. PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the paintwork and trim. Bottom caption: \"Use this vehicle board as a visual reference for consistent depiction of the vehicle across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent vehicle across every panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, warped body panels, distorted geometry, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/food-board\",\n name: \"Food Board\",\n description: \"Connect a photo → dense dish sheet; reuse it as a reference for consistent food shots.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed dish reference sheet titled \"FOOD BOARD\" using the attached photo of the dish as the single source of truth for its ingredients, plating, colors, textures and garnish. The same dish must appear in every panel — identical recipe, identical plating, bowl or plate, and props. All on-image labels in ENGLISH. Editorial culinary-reference layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade food-styling UI. The composition should feel organized but not rigidly locked: allow the hero shot, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large appetizing hero shot with a metadata block: DISH NAME · CUISINE · CATEGORY · KEY INGREDIENTS · TEXTURES · GARNISH · SERVED · AUDIENCE. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — PLATING ANGLES (5 beauty shots, identical styling): TOP-DOWN · 3/4 HERO · SIDE · EXTREME CLOSE-UP · IN HAND OR WITH UTENSIL. PANEL 02 — INGREDIENT BREAKDOWN (5 isolated ingredient studies on a dark background). PANEL 03 — DETAIL MACROS (4): surface texture · glaze or sauce sheen · steam or freshness cue · garnish detail. PANEL 04 — IN CONTEXT (4 staged frames): steam rising · utensil lifting a bite · sauce pour frozen mid-action · hands holding the dish. PANEL 05 — LIGHTING / MOOD (4 same-angle hero shots): WARM APPETIZING · COOL EDITORIAL · HARD COMMERCIAL · MOODY DRAMATIC. PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the dish and plating. Bottom caption: \"Use this food board as a visual reference for consistent depiction of the dish across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Commercial.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent dish across every panel. 8K, fine grain, appetizing commercial color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, unappetizing, plastic fake food, messy spills, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/mascot-board\",\n name: \"Mascot Board\",\n description: \"Connect a mascot image → brand-character sheet with brand applications; reuse it for a consistent mascot.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed mascot reference sheet titled \"MASCOT BOARD\" using the attached image of the mascot as the single source of truth for its design, proportions, colors, materials and personality. The same mascot must appear in every panel — identical design, identical colors and details — rendered in the mascot's native art style read from the attached image (illustrated, plush, costumed or 3D), never drifting between styles. All on-image labels in ENGLISH. Editorial brand-character layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade brand-design UI. The composition should feel organized but not rigidly locked: allow the hero pose, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero pose with a metadata block: MASCOT NAME · BRAND · CATEGORY · MATERIAL / STYLE · PERSONALITY · CATCHPHRASE · SIZE · USE CASES. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 full-body angles, identical lighting): FRONT · 3/4 LEFT · SIDE · BACK · 3/4 RIGHT. PANEL 02 — EXPRESSIONS (6 head studies): HAPPY · WAVING · SHOCKED · WINKING · SLEEPY · CURIOUS. PANEL 03 — DETAIL MACROS (3): face detail · material or texture close-up · signature accessory. PANEL 04 — BRAND APPLICATIONS (4 mockups): on product packaging · on a storefront sign · in a print ad · on merch. PANEL 05 — POSES (4 action poses): GREETING · CELEBRATING · PRESENTING · THUMBS-UP. PANEL 06 — BRAND COLOR PALETTE: 6 swatches with HEX codes from the mascot's colors. Bottom caption: \"Use this mascot board as a visual reference for consistent depiction of the mascot across all generations.\" Bottom-right tags: STYLE · Brand · Character · Consistent.`,\n promptSuffix: `Consistent mascot and consistent art style across every panel. 8K, fine grain, premium brand-design finish.`,\n negativePrompt:\n \"inconsistent art style between panels, design drift, off-model mascot, garbled text, misspelled labels, watermark, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/pet-board\",\n name: \"Pet Board\",\n description: \"Connect a sharp photo → dense pet sheet; reuse it as a reference for consistent shots.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n promptPrefix: `Create a single high-resolution, densely packed pet reference sheet titled \"PET BOARD\" using the attached photo of the pet as the single source of truth for its species, breed, coat colors, markings, eyes and build. The same animal must appear in every panel — identical markings, identical proportions, identical collar or accessories. All on-image labels in ENGLISH. Editorial reference-board layout with a dark near-black background, thin yellow neon accent light, faint film-grain overlay, and production-grade character-design UI. The composition should feel organized but not rigidly locked: allow the hero portrait, metadata, and supporting panels to shift position naturally while remaining readable, balanced, and premium. Design the board to adapt cleanly to different aspect ratios without depending on a fixed left-column layout. Include a large hero portrait with a metadata block: NAME · SPECIES · BREED · AGE · SIZE · COAT & MARKINGS · EYES · COLLAR / ACCESSORIES · TEMPERAMENT · SIGNATURE BEHAVIOR. Also include six content groupings — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — VIEWS (5 full-body angles, neutral stance, identical lighting): FRONT · 3/4 · SIDE · BACK · TOP-DOWN. PANEL 02 — EXPRESSIONS & MOODS (6 head studies): ALERT · CURIOUS · PLAYFUL · SLEEPY · GRUMPY · HAPPY. PANEL 03 — DETAIL MACROS (4): eye close-up · coat or fur texture · paw detail · collar tag or accessory. PANEL 04 — POSES (5 natural poses): SITTING · LYING DOWN · WALKING · PLAYING · CURLED ASLEEP. PANEL 05 — LIGHTING / MOOD (4 same-pose portraits): SOFT WINDOW LIGHT · GOLDEN HOUR · COOL BLUE NIGHT · DRAMATIC RIM-LIGHT. PANEL 06 — COLOR PALETTE: 6 swatches with HEX codes from the coat and accessories. Bottom caption: \"Use this pet board as a visual reference for consistent depiction of the pet across all generations.\" Bottom-right tags: STYLE · Modern · Realistic · Cinematic.`,\n promptSuffix: `Style: photorealistic, no illustration. Consistent animal across every single panel. 8K, fine grain, cinematic color grading.`,\n negativePrompt:\n \"illustration, cartoon, 3d render, garbled text, misspelled labels, watermark, deformed anatomy, inconsistent markings between panels, wrong breed, blurry, low resolution\",\n },\n },\n {\n id: \"generate-image/skin-detail-sheet\",\n name: \"Skin Detail Sheet\",\n description: \"Connect a sharp face photo → a six-panel skin reference.\",\n group: \"Reference Sheet\",\n minReferences: 1,\n data: {\n ...SKIN_STUDY_MODEL,\n aspectRatio: \"3:2\",\n promptPrefix: sentences(\n \"Create a single skin detail reference sheet titled \\\"SKIN DETAIL SHEET\\\" from the attached photo of the person, the single source of truth for identity, skin tone and features. The same person, the same light and the same unretouched skin in every panel. Six panels — render ALL six panel headings exactly as written, never merging or omitting a panel: PANEL 01 — FULL FACE (front, eye level) · PANEL 02 — LEFT CHEEK & NOSE · PANEL 03 — RIGHT CHEEK & JAW · PANEL 04 — FOREHEAD & HAIRLINE · PANEL 05 — EYES & BROWS · PANEL 06 — LIPS & CHIN. In every panel:\",\n REALISM_SKIN,\n \"Flat, even daylight, neutral colour, everything sharp.\",\n ),\n promptSuffix: \"Plain neutral grey background, thin white panel labels in English. Use this sheet as a visual reference for consistent skin detail of this person across generations.\",\n },\n },\n // ── Cast & Consistency (clean grids per the multi-character workflow:\n // sterile neutral-background reference grids built to be FED BACK as identity\n // anchors — unlike the editorial boards above, decoration here is noise.\n // GPT Image 2 (decided 2026-10-08 from the image model bake-off: it built the\n // best reference grid and kept both identities on the cast sheet); 4K so\n // panel faces stay sharp when reused as refs.) ──\n {\n id: \"generate-image/character-reference-grid\",\n name: \"Character Reference Grid\",\n description: \"Connect a photo → clean 4-angle identity grid (no decorations) — the strongest consistency anchor.\",\n group: \"Cast & Consistency\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n resolution: \"4K\",\n promptPrefix: `Create a clean character reference grid using the attached photo of the person as the single source of truth for face, hair, eyes, skin tone, build and outfit. Four equal panels arranged in a tidy two-by-two grid on a single seamless neutral light-grey studio background: a tight front-facing portrait close-up, a 3/4-view portrait, a full-body shot from the front in a relaxed neutral stance, and a full-body shot from the back. The SAME person in every panel — identical age, features, hairstyle and outfit from the attached photo. Identical soft, even studio lighting in all four panels with no dramatic shadows. No decorations, no background props, no text, no UI elements — a sterile, production-neutral reference sheet built to be reused as an identity reference in later generations.`,\n promptSuffix: `Photorealistic, sharp focus, accurate natural skin texture, true-to-life color.`,\n negativePrompt:\n \"stylization, illustration, decorative background, props, text, labels, UI elements, dramatic lighting, inconsistent face between panels, identity drift, changed outfit, deformed, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/cast-mega-grid\",\n name: \"Cast Mega Grid\",\n description: \"Connect 2–4 character refs → one labeled cast sheet; then reference cast members by name in scenes.\",\n group: \"Cast & Consistency\",\n // A cast sheet is two characters or more (\"Connect 2–4 character refs\").\n minReferences: 2,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n resolution: \"4K\",\n prompt: `Create a clean multi-character cast reference sheet composed as horizontal strips stacked vertically in one image — one strip per character from the attached reference images, in the order they are attached, using exactly as many strips as there are attached characters. Each strip shows that character in four aligned studio panels: tight front portrait close-up · 3/4 portrait · full body front · full body back, all in a relaxed neutral stance. Label each strip on the left edge with the character's name in clean bold lettering: {character names || ALEX · MAYA · SAM}. Every character must match their attached reference exactly — same face, hair, skin tone, build and outfit — with no identity blending between rows. Single seamless neutral light-grey studio background across the whole sheet, identical soft even lighting in every panel, consistent panel sizing and alignment. No decorations, no props, no UI elements beyond the row name labels. A sterile production casting sheet built to be reused as the single identity reference for this cast in later generations. Photorealistic, sharp focus, natural skin texture, true-to-life color.`,\n negativePrompt:\n \"blended or swapped identities between rows, inconsistent faces, missing characters, misspelled name labels, garbled text, decorative background, props, dramatic lighting, stylization, illustration, deformed, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/cast-scene\",\n name: \"Cast Scene (by name)\",\n description: \"Connect a cast grid → stage a scene naming the characters; never re-describe their looks.\",\n group: \"Cast & Consistency\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n resolution: \"2K\",\n prompt: `Using the attached character reference sheet as the single source of truth for every named character's face, hair, build and outfit, generate one photorealistic scene: {scene || ALEX and MAYA share a quiet laugh at the counter of a sunlit ramen bar while SAM studies the menu}. Refer to the characters ONLY by the names labeled on the reference sheet and keep each one perfectly consistent with their reference row — do not invent new physical traits, do not blend identities, and do not alter outfits unless the scene says so. Stage them naturally in the environment with believable eye-lines, interactions and spacing. Cinematic photography, 35mm lens look with gentle depth of field, soft motivated lighting that matches the location, cohesive filmic color grade, natural skin texture, sharp detail on every character.`,\n negativePrompt:\n \"identity drift, blended or swapped faces, re-invented outfits, reference-sheet grid visible in the result, panel borders, name labels in the scene, deformed, extra fingers, blurry, lowres, watermark, text\",\n },\n },\n // ── Edit by Name (two-step recipe) ───────────────────────────────────────\n {\n id: \"generate-image/label-elements\",\n name: \"Label Elements\",\n description: \"Step 1 · connect a photo → the same image with a numbered label on each changeable element.\",\n group: \"Edit by Name\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n quality: \"high\",\n promptPrefix: `Using the attached photo as the exact source, return the SAME image unchanged except for added annotations: overlay a small, clearly legible callout label on each distinct element a user might want to edit. Draw a thin leader line from each label to the element it names. Use short lowercase names in clear English (e.g. \"drink 1\", \"drink 2\", \"flower basket\", \"hammock\", \"table\", \"sky\", \"sand\", \"palm tree\"). Number duplicate element types (\"drink 1\", \"drink 2\"). Place labels on empty areas so they never overlap each other or hide the element they point to. Label only distinct, meaningful, editable objects — about 6 to 10 of them — and skip trivial background texture. Do NOT restyle, recolor, relight, or redraw the scene; keep every pixel of the underlying photo as close to the original as possible. The labels are an overlay on top of the otherwise-unchanged image.`,\n negativePrompt:\n \"garbled text, misspelled labels, overlapping labels, illegible text, restyled scene, recolored scene, redrawn image, cartoon, illustration, watermark, blurry\",\n },\n },\n {\n id: \"generate-image/edit-by-name\",\n name: \"Apply Named Edit\",\n description: \"Step 2 · connect the labeled sheet → type your change in the prompt (e.g. change \\\"drink 1\\\" to blue); the labels are removed from the result.\",\n group: \"Edit by Name\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n quality: \"high\",\n promptPrefix: `This image has callout labels naming its elements (made with the Label Elements preset). Use the labels ONLY to locate elements, then produce a clean edited photo with NO labels. Apply the change described next, referring to elements by their labels:`,\n promptSuffix: `REMOVE every callout label, text box and leader line so none appear in the final image. Keep everything else exactly as it is.`,\n negativePrompt:\n \"leftover callout labels, visible text labels, text boxes, leader lines, garbled text, restyled scene, recolored unrelated elements, redrawn image, cartoon, illustration, watermark, blurry\",\n },\n },\n // ── Face Privacy (connect the photo → {image:1}) ─────────────────────────\n // gpt-image-2 + aspectRatio \"auto\" so the output keeps the input photo's\n // shape. NOTE: KIE's gpt-image-2 spec forces resolution 1K when aspect is\n // \"auto\" (the config panel's fail-safe snaps any other value back), so\n // these pin 1K explicitly rather than shipping a self-contradicting 2K.\n {\n id: \"generate-image/faceless-3d-head\",\n name: \"Faceless · 3D Blank Head\",\n description: \"Persons' faces → smooth generic white 3D head shape; everything else untouched.\",\n group: \"Face Privacy\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"auto\",\n resolution: \"1K\",\n promptPrefix:\n \"make the persons in {image:1} faceless by making it 3d white generic face shape, keep everything else the same\",\n negativePrompt:\n \"visible facial features, eyes, nose, mouth, skin texture on the face, changing the background, altering clothing, hair or body, restyling the scene, relighting, changing pose or framing, cartoon look, distorted anatomy, watermark, blurry\",\n },\n },\n {\n id: \"generate-image/remove-faces\",\n name: \"Remove Faces\",\n description: \"Erase persons' faces entirely; everything else untouched.\",\n group: \"Face Privacy\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"auto\",\n resolution: \"1K\",\n promptPrefix: \"remove persons faces from {image:1}, keep everything else the same\",\n negativePrompt:\n \"visible facial features, eyes, nose, mouth, leftover face fragments, changing the background, altering clothing, hair or body, restyling the scene, relighting, changing pose or framing, horror or gore look, distorted anatomy, watermark, blurry\",\n },\n },\n {\n id: \"generate-image/transparent-faces\",\n name: \"Transparent Faces\",\n description: \"Persons' faces become transparent; everything else untouched.\",\n group: \"Face Privacy\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"auto\",\n resolution: \"1K\",\n promptPrefix: \"make faces transparent in {image:1}, keep everything else the same\",\n negativePrompt:\n \"opaque faces, visible facial features, eyes, nose, mouth, changing the background, altering clothing, hair or body, restyling the scene, relighting, changing pose or framing, distorted anatomy, watermark, blurry\",\n },\n },\n // ── Photography & Cinematic ──────────────────────────────────────────────\n {\n id: \"generate-image/cinematic-portrait\",\n name: \"Cinematic Portrait\",\n description: \"Moody, shallow-depth portrait look.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"9:16\",\n prompt:\n \"cinematic portrait of {subject || a pensive young man with stubble}, 85mm lens at f/1.8, shallow depth of field with creamy bokeh, soft key with warm rim separation against a moody low-key background, gentle film grain, filmic teal-and-amber grade, natural skin texture, tack-sharp eyes\",\n negativePrompt:\n \"flat lighting, deep focus, plastic skin, blown highlights, extra fingers, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/cinematic-still\",\n name: \"Cinematic Still\",\n description: \"Film-grade scene, dramatic lighting.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"cinematic film still of {subject || a lone detective in a rain-slicked alley at night}, anamorphic lens at 40mm and f/2, shallow depth of field with oval bokeh and subtle horizontal flares, dramatic motivated key light with deep falloff, off-center framing with negative space, tense noir mood in a moody teal-and-amber grade, fine film grain, photoreal detail\",\n negativePrompt:\n \"flat lighting, deep focus, oversaturated, washed out, video-game render, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/cinematic-widescreen\",\n name: \"Cinematic Widescreen (21:9)\",\n description: \"Epic anamorphic 2.39:1 frame.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"21:9\",\n prompt:\n \"epic ultra-wide cinematic still of {subject || a lone traveler dwarfed by towering desert canyons}, anamorphic widescreen framing, 35mm lens at f/4 with deep focus, layered atmospheric haze catching backlight, dramatic god-ray lighting, expansive scale with the subject small against the vista, awe-struck mood in a cool cinematic grade, subtle film grain, crisp distant detail\",\n negativePrompt:\n \"cropped framing, cluttered composition, flat lighting, oversaturated, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/studio-portrait\",\n name: \"Studio Portrait\",\n description: \"Soft-lit 85mm studio headshot.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"studio portrait of {subject || a confident woman with sleek dark hair}, 85mm lens at f/2.8, shallow depth of field, soft octabox key with gentle fill and a subtle hair light, clean seamless gray backdrop, tight head-and-shoulders framing, polished editorial mood with a neutral true-to-life palette, natural skin texture, catchlights and tack-sharp eyes\",\n negativePrompt:\n \"harsh shadows, plastic skin, over-retouched, blown highlights, busy background, extra fingers, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/corporate-headshot\",\n name: \"Corporate Headshot\",\n description: \"Clean professional headshot.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"professional corporate headshot of {subject || a friendly executive in a tailored navy blazer}, 85mm lens at f/4, soft even three-point lighting with a broad key and clean fill, smooth neutral gray-blue background, centered head-and-shoulders framing, approachable confident expression, crisp business mood with a clean neutral palette, sharp focus and natural skin texture\",\n negativePrompt:\n \"harsh shadows, busy background, casual snapshot, over-retouched, plastic skin, extra fingers, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/golden-hour-portrait\",\n name: \"Golden Hour Portrait\",\n description: \"Warm backlit outdoor portrait.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"2:3\",\n prompt:\n \"outdoor portrait of {subject || a smiling woman with windswept hair in a field}, 85mm lens at f/1.8, shallow depth of field with creamy bokeh, low golden-hour sun as a warm backlight with a glowing rim and gentle lens flare, off-center rule-of-thirds framing, dreamy romantic mood in a warm amber grade, soft halation, natural skin texture and sharp eyes\",\n negativePrompt:\n \"harsh midday shadows, flat lighting, overexposed sky, plastic skin, extra fingers, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/bw-portrait\",\n name: \"Black & White Portrait\",\n description: \"High-contrast editorial mono.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"black and white editorial portrait of {subject || a weathered old fisherman with a lined face}, 85mm lens at f/2, shallow depth of field, dramatic single-source chiaroscuro with deep falloff, tight off-center framing, timeless brooding mood with a rich high-contrast monochrome tonal range, deep blacks and luminous highlights, fine silver grain, sharp eyes and natural skin texture\",\n negativePrompt:\n \"color, muddy gray tones, flat lighting, low contrast, plastic skin, extra fingers, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/macro-shot\",\n name: \"Macro Close-Up\",\n description: \"Extreme detail, focus-stacked.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"1:1\",\n prompt:\n \"extreme macro photograph of {subject || a dew-covered bee on a flower petal}, 100mm macro lens at f/8, focus-stacked for razor-sharp life-size detail with a softly defocused background, soft diffused studio light with a subtle rim, centered close-up composition, intimate jewel-like mood with rich saturated color, glistening micro-textures and crisp surface detail\",\n negativePrompt:\n \"blurry, out of focus, soft detail, harsh glare, dust spots, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/food-photography\",\n name: \"Food Photography\",\n description: \"Appetizing 45° hero shot.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"appetizing hero food photograph of {dish || a rustic bowl of ramen with a soft-boiled egg}, 50mm lens at f/2.8, shallow depth of field, soft diffused window light from the side with a gentle fill, 45-degree angle on a weathered rustic surface, props and steam fading into a clean background, warm mouth-watering mood with natural color, fresh garnish, glistening textures and crisp focus on the hero\",\n negativePrompt:\n \"unappetizing, plastic look, fake glossy food, messy spills, dull colors, harsh flash, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/food-flatlay\",\n name: \"Food Flat-Lay\",\n description: \"Overhead styled food spread.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"overhead flat-lay food photograph of {dish || a colorful brunch spread with coffee and pastries}, 35mm lens at f/5.6 with even focus, perfect top-down ninety-degree angle, soft diffused daylight casting gentle natural shadows, balanced styled arrangement with breathing room and scattered ingredients, fresh vibrant editorial mood with a clean color palette on a textured surface, crisp appetizing detail\",\n negativePrompt:\n \"cluttered, overcrowded, tilted angle, harsh shadows, plastic look, dull colors, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/aerial-drone\",\n name: \"Aerial / Drone\",\n description: \"Top-down golden-hour aerial.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"16:9\",\n prompt:\n \"aerial drone photograph of {scene || a winding coastal road along turquoise cliffs}, ultra-wide 24mm lens at f/5.6 with crisp deep focus, straight-down top-down perspective from high altitude, low golden-hour sun casting long raking shadows that reveal terrain, bold graphic composition emphasizing pattern and scale, expansive serene mood with rich warm color, sharp detail across the frame\",\n negativePrompt:\n \"blurry, soft focus, flat midday light, tilted horizon, lens distortion, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/landscape-vista\",\n name: \"Landscape Vista (21:9)\",\n description: \"Ultra-wide dramatic scenery.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"21:9\",\n prompt:\n \"sweeping ultra-wide landscape photograph of {scene || a misty mountain range over a glassy alpine lake at dawn}, 16mm lens at f/11 with edge-to-edge deep focus, layered foreground, midground and distant peaks for depth, dramatic golden-hour sky with breaking light, rule-of-thirds horizon, awe-inspiring grand mood with high dynamic range and natural color, crisp detail and a sense of vast scale\",\n negativePrompt:\n \"oversaturated, hdr halos, blown sky, flat lighting, soft focus, lens distortion, lowres, deformed, watermark, text\",\n },\n },\n\n // ── Characters (incl. the character-sheet family) ────────────────────────\n {\n id: \"generate-image/character-turnaround\",\n name: \"Character Sheet · Turnaround (3-view)\",\n description: \"Front / side / back, T-pose.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"full-body character turnaround model sheet of {character description || a rugged space mercenary with a scarred jaw and worn leather armor}, three matching views in a row — front, side profile, and back — held in a clean T-pose with a neutral expression, identical proportions and costume details across all three views, flat even studio lighting with no harsh shadows so every view reads the same, evenly spaced on a plain light-grey backdrop, crisp concept-art model-sheet style, clean line work and consistent color palette across panels\",\n negativePrompt:\n \"inconsistent design between views, mismatched proportions, extra limbs, deformed anatomy, dynamic pose, dramatic shadows, busy background, watermark, text\",\n },\n },\n {\n id: \"generate-image/character-action-4\",\n name: \"Character Sheet · Action Poses ×4\",\n description: \"Four dynamic full-body poses.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"character action model sheet of {character description || a nimble rogue archer in a hooded green cloak}, four distinct full-body dynamic action poses in a row — running, leaping, attacking, landing — strictly consistent face, character design, and outfit across every pose, full-figure framing with confident gesture and clear silhouettes, even studio lighting that stays identical across all four poses, plain neutral backdrop, energetic concept-art model sheet, clean linework and matching color palette\",\n negativePrompt:\n \"inconsistent design between poses, changed outfit, deformed anatomy, extra limbs, fused figures, static stiff posture, busy background, watermark, text\",\n },\n },\n {\n id: \"generate-image/character-expressions-6\",\n name: \"Character Sheet · Expressions ×6\",\n description: \"6 emotions, 2 rows of 3.\",\n group: \"Characters\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:3\",\n prompt:\n \"character expression model sheet of {character description || a cheerful freckled teen with messy red hair}, six head-and-shoulders portraits arranged in two even rows of three, labeled emotions in order — neutral, happy, angry, surprised, sad, determined — strictly consistent face, hairstyle, and features across every panel with only the expression changing, flat even portrait lighting identical in all six panels, evenly spaced on a plain neutral backdrop, clean concept-art model sheet, natural facial detail and matching color palette\",\n negativePrompt:\n \"inconsistent face, drifting features, changed hairstyle, deformed, asymmetrical eyes, uneven lighting, busy background, watermark, garbled text\",\n },\n },\n {\n id: \"generate-image/character-expressions-16\",\n name: \"Character Sheet · Expression Grid ×16\",\n description: \"4×4 emotion grid, one face.\",\n group: \"Characters\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"1:1\",\n prompt:\n \"16-panel character expression grid of {character description || a stoic silver-haired knight with a faint scar}, evenly spaced 4x4 layout of head-and-shoulders portraits, sixteen distinct facial emotions ranging from calm to intense, strictly consistent face, hairstyle, and design across every cell with only the expression changing, flat even portrait lighting identical in all panels, plain neutral backdrop, clean concept-art model sheet, natural facial detail and matching color palette\",\n negativePrompt:\n \"inconsistent face, drifting features, changed hairstyle, deformed, asymmetrical eyes, uneven panels, uneven lighting, busy background, watermark, text\",\n },\n },\n {\n id: \"generate-image/character-outfits\",\n name: \"Character Sheet · Outfit Variations\",\n description: \"Same character, 4 outfits.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"outfit variation model sheet of {character description || a confident young woman with a sleek dark bob}, the same character shown full-body in four different complete outfits side by side — casual, formal, athletic, seasonal — strictly consistent face, body, and hairstyle across all four with only the wardrobe changing, full-figure framing in a relaxed standing pose, flat even studio lighting identical across every panel, evenly spaced on a plain neutral backdrop, clean concept-art model sheet, matching color palette and crisp fabric detail\",\n negativePrompt:\n \"inconsistent face, changed body or hairstyle, deformed, mismatched proportions, repeated identical outfit, busy background, watermark, text\",\n },\n },\n {\n id: \"generate-image/character-turnaround-labeled\",\n name: \"Character Sheet · With Text Labels\",\n description: \"Turnaround + labels + height chart.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"annotated full-body character turnaround model sheet of {character description || a seasoned bounty hunter in a weathered duster and wide-brim hat}, front, side, and back views in a row with crisp legible text labels reading FRONT, SIDE, and BACK beneath each view, a vertical height reference chart with tick marks along one edge, strictly consistent design and proportions across all three views, flat even studio lighting identical across every view, neat production-reference layout on a clean light-grey backdrop, sharp typography and tidy annotations, consistent color palette\",\n negativePrompt:\n \"misspelled labels, garbled text, inconsistent design between views, mismatched proportions, deformed, dynamic pose, dramatic shadows, busy background, watermark\",\n },\n },\n {\n id: \"generate-image/character-chibi\",\n name: \"Character Sheet · Chibi\",\n description: \"Cute super-deformed poses.\",\n group: \"Characters\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"1:1\",\n prompt:\n \"chibi character model sheet of {character description || a tiny brave knight with oversized armor}, adorable super-deformed proportions with a big head and small body, several cute mini full-body poses arranged across the sheet, strictly consistent design and color palette across every pose, soft even flat lighting identical across all poses, evenly spaced on a plain pastel backdrop, clean bold outlines and flat cel shading, charming concept-art model sheet\",\n negativePrompt:\n \"realistic proportions, inconsistent design, deformed, off-model, gritty shading, busy background, watermark, text\",\n },\n },\n {\n id: \"generate-image/character-portrait\",\n name: \"Character Portrait\",\n description: \"Single expressive hero portrait.\",\n group: \"Characters\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"2:3\",\n prompt:\n \"detailed character portrait of {character description || a battle-worn elven ranger with piercing green eyes}, painterly fantasy concept art, fine brushwork with crisp edge detail, dramatic chiaroscuro key light with a soft rim separating the subject from a moody dark background, tight three-quarter view framing the face and shoulders, expressive confident gaze, rich saturated color grade, intricate costume detail and tack-sharp eyes\",\n negativePrompt:\n \"flat lighting, lowres, deformed, extra fingers, asymmetrical eyes, plastic skin, blurry, washed-out colors, watermark, text\",\n },\n },\n {\n id: \"generate-image/character-fullbody-hero\",\n name: \"Character Full-Body Hero\",\n description: \"Dynamic full-body hero shot.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2-5-sunburst\",\n aspectRatio: \"2:3\",\n prompt:\n \"full-body hero shot of {character description || a heroic armored warrior with a flowing crimson cape}, cinematic character key art, confident dynamic power pose, dramatic rim lighting with a warm key and cool back-light carving the silhouette, low camera angle for an imposing heroic stance, softly blurred atmospheric background, bold dramatic color grade, intricately detailed costume and crisp material textures\",\n negativePrompt:\n \"flat lighting, static stiff pose, lowres, deformed, extra limbs, cropped feet, cluttered background, blurry, watermark, text\",\n },\n },\n {\n id: \"generate-image/creature-design\",\n name: \"Creature Design Sheet\",\n description: \"Concept creature, multi-angle.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"creature design model sheet of {creature description || a six-legged bioluminescent forest beast with mossy scales}, several full-body views from multiple angles plus inset anatomy and texture close-ups, strictly consistent species, markings, and proportions across every view, professional creature-concept art, flat even studio lighting identical across all views so the design reads clearly, neatly arranged on a plain neutral backdrop, detailed believable anatomy and crisp surface textures, cohesive color palette\",\n negativePrompt:\n \"inconsistent design between views, mismatched proportions, deformed anatomy, extra or missing limbs, dramatic shadows, busy background, watermark, text\",\n },\n },\n {\n id: \"generate-image/avatar-pfp\",\n name: \"Avatar / Profile Picture\",\n description: \"Centered, bold, clean bg.\",\n group: \"Characters\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"stylized avatar profile picture of {character or subject || a friendly fox with bright amber eyes}, clean modern character illustration, bold thick outlines with smooth flat shading, soft even front lighting with a gentle glow, perfectly centered head-and-shoulders composition with comfortable margins, vibrant punchy color palette on a clean solid-color background, crisp friendly and instantly readable as a small icon\",\n negativePrompt:\n \"off-center, cropped face, busy background, lowres, deformed, muddy colors, harsh shadows, watermark, text\",\n },\n },\n\n // ── Product & Commerce ───────────────────────────────────────────────────\n {\n id: \"generate-image/product-shot\",\n name: \"Product Shot (white bg)\",\n description: \"Clean e-commerce product photo on white.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"e-commerce studio product photograph of {product || a matte-black wireless headphone}, on a seamless pure-white background, 100mm lens at f/8 with deep focus, soft even high-key lighting from a large diffused softbox with gentle fill, perfectly centered with generous margins, clean catalog-ready mood with true-to-life color, crisp edges and accurate material texture\",\n negativePrompt:\n \"clutter, props, harsh shadows, blown highlights, color cast, reflections, tilted angle, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/product-lifestyle\",\n name: \"Product Lifestyle\",\n description: \"Product in-use, editorial.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"4:3\",\n prompt:\n \"lifestyle product photograph of {product || a ceramic pour-over coffee set} in {setting || a sunlit minimalist kitchen}, shown naturally in use, 50mm lens at f/2.8 with shallow depth of field, soft directional window light with a warm glow, off-center rule-of-thirds framing with the product as hero, aspirational editorial mood with a warm natural palette, tactile materials and crisp focus on the product\",\n negativePrompt:\n \"clutter, busy background, distracting props, harsh flash, dull colors, plastic look, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/product-flatlay\",\n name: \"Product Flat-Lay\",\n description: \"Overhead styled arrangement.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"overhead flat-lay product photograph of {product || a leather travel wallet} surrounded by complementary props, 35mm lens at f/5.6 with even focus, perfect top-down ninety-degree angle, soft diffused daylight casting gentle natural shadows, balanced styled arrangement with breathing room around the hero, clean modern editorial mood with a cohesive palette on a textured surface, crisp material detail\",\n negativePrompt:\n \"cluttered, overcrowded, tilted angle, harsh shadows, dull colors, plastic look, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/packaging-mockup\",\n name: \"Packaging Mockup\",\n description: \"Box / bottle / pouch render.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"photorealistic product packaging mockup of {product || an artisanal coffee brand}, presented as {format || a standing kraft pouch}, with a crisp accurately-printed label wrapping the form, 85mm lens at f/8 with deep focus, soft studio lighting with a subtle highlight and grounded contact shadow, centered hero composition on a clean seamless background, premium retail mood with true-to-life color, sharp legible label artwork and realistic material finish\",\n negativePrompt:\n \"distorted label, warped text, misspelled words, floating object, harsh shadows, clutter, lowres, deformed, watermark\",\n },\n },\n {\n id: \"generate-image/device-mockup\",\n name: \"Device / Screen Mockup\",\n description: \"Phone / laptop showing a screen.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"product mockup of {device || a modern smartphone} displaying {screen content || a clean mobile app dashboard}, crisp pixel-accurate screen with no glare obscuring the UI, 50mm lens at f/5.6 with the device tack-sharp, soft studio lighting with gentle reflections on the bezel and a subtle grounded shadow, slight three-quarter angle on a clean minimal surface, sleek premium tech mood with a neutral palette, sharp screen content and realistic device materials\",\n negativePrompt:\n \"distorted screen, warped UI, glare washout, off-model device, wrong proportions, clutter, lowres, deformed, watermark\",\n },\n },\n {\n id: \"generate-image/beauty-hero\",\n name: \"Beauty Product Hero\",\n description: \"Premium cosmetic hero shot.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"luxury beauty product hero shot of {product || a frosted-glass serum bottle with a gold dropper}, 100mm macro lens at f/8 with crisp focus, dramatic single-source key light with a soft gradient falloff and a bright specular edge, fresh water droplets beading on the surface, centered low hero angle on a premium glossy reflective surface, elegant high-end mood with a refined jewel-toned palette, immaculate detail and luminous reflections\",\n negativePrompt:\n \"cheap plastic look, fingerprints, dust, busy background, flat lighting, dull colors, lowres, deformed, watermark, text\",\n },\n },\n\n // ── Branding & Logos (text-strong providers) ─────────────────────────────\n {\n id: \"generate-image/logo-wordmark\",\n name: \"Logo · Wordmark\",\n description: \"Clean typographic brand name.\",\n group: \"Branding & Logos\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"minimalist wordmark logo for '{BRAND}', clean geometric sans-serif, balanced letter-spacing, flat vector, centered on a solid background, crisp edges, professional brand identity, legible correctly-spelled text\",\n negativePrompt:\n \"photorealistic, 3d, gradient mesh, cluttered, misspelled letters, garbled text, extra characters, watermark\",\n },\n },\n {\n id: \"generate-image/logo-emblem\",\n name: \"Logo · Emblem / Badge\",\n description: \"Circular badge emblem.\",\n group: \"Branding & Logos\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"emblem badge logo for '{BRAND}', built around {concept || a mountain peak and pine motif}, symmetrical circular composition with the brand name set cleanly along the ring, flat vector with a limited two-or-three-color palette, crisp edges and even line weights, centered on a white background, heritage brand-identity feel, legible correctly-spelled text\",\n negativePrompt:\n \"photorealistic, 3d, gradient mesh, cluttered, asymmetrical, misspelled letters, garbled text, watermark\",\n },\n },\n {\n id: \"generate-image/logo-mascot\",\n name: \"Logo · Mascot\",\n description: \"Friendly mascot character logo.\",\n group: \"Branding & Logos\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"mascot logo for '{BRAND}', a friendly {character || a plucky cartoon fox} mascot with an approachable expression and a clear readable silhouette, bold flat colors with confident thick outlines, clean vector style with the brand name set neatly below, centered on a white background, playful memorable brand-identity feel, legible correctly-spelled text\",\n negativePrompt:\n \"photorealistic, 3d, gradient mesh, cluttered, busy detail, off-model, misspelled letters, garbled text, watermark\",\n },\n },\n {\n id: \"generate-image/app-icon\",\n name: \"App Icon\",\n description: \"Rounded-square app glyph.\",\n group: \"Branding & Logos\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"modern app icon for '{APP}', rounded-square tile with a single bold simple glyph of {concept || a paper-plane}, smooth subtle gradient fill, perfectly centered with balanced padding inside the rounded square, flat clean design with crisp edges, vibrant cohesive color, instantly readable at small sizes\",\n negativePrompt:\n \"cluttered, intricate detail, photorealistic, harsh drop shadow, off-center, lettering, text, watermark\",\n },\n },\n {\n id: \"generate-image/monogram\",\n name: \"Monogram\",\n description: \"Elegant initials mark.\",\n group: \"Branding & Logos\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"elegant monogram logo gracefully interlocking the letters '{INITIALS}', refined geometric construction with balanced symmetry and even line weights, flat vector in a single sophisticated color, centered on a white background, crisp edges, timeless luxury brand-identity feel, legible correctly-spelled letters\",\n negativePrompt:\n \"cluttered, photorealistic, 3d, gradient mesh, extra letters, misspelled letters, garbled text, watermark\",\n },\n },\n\n // ── Marketing & Social ───────────────────────────────────────────────────\n {\n id: \"generate-image/youtube-thumbnail\",\n name: \"YouTube Thumbnail\",\n description: \"Bold, punchy, big text.\",\n group: \"Marketing & Social\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"16:9\",\n prompt:\n \"punchy YouTube thumbnail featuring {subject || a wide-eyed creator reacting in shock}, bold expressive close-up subject cut out against a saturated high-contrast background, dramatic off-center composition with the face large and a clear focal point, large bold sans-serif headline text '{TEXT}' in a heavy outlined style with a strong drop shadow, vivid eye-catching color grade, crisp clickable poster look, legible correctly-spelled text\",\n negativePrompt:\n \"muddy low-contrast colors, tiny unreadable text, cluttered busy layout, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/instagram-post\",\n name: \"Instagram Post (1:1)\",\n description: \"Square branded social graphic.\",\n group: \"Marketing & Social\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"square Instagram post graphic about {topic || launching a new product}, modern branded design with a clean grid layout and generous margins, a clear visual focal point paired with bold headline text '{TEXT}', confident contemporary type hierarchy, cohesive on-brand color palette, crisp flat finish, balanced centered composition, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered busy layout, tiny unreadable text, misspelled text, garbled letters, off-brand clashing colors, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/story-vertical\",\n name: \"Story / Reel (9:16)\",\n description: \"Vertical full-bleed promo.\",\n group: \"Marketing & Social\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"9:16\",\n prompt:\n \"vertical full-bleed social story graphic about {topic || a weekend flash sale}, immersive edge-to-edge background image, bold stacked headline text '{TEXT}' set high with breathing room, thumb-friendly safe margins top and bottom, modern punchy design with a vibrant cohesive palette, strong type hierarchy and a single clear focal point, crisp mobile-first finish, legible correctly-spelled text\",\n negativePrompt:\n \"letterboxed bars, cramped edges, tiny unreadable text, cluttered layout, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/ad-creative\",\n name: \"Ad Creative\",\n description: \"Headline + hero, CTA space.\",\n group: \"Marketing & Social\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n prompt:\n \"polished advertising creative for {product || a sleek wireless earbud case}, attention-grabbing hero product shot as the centerpiece, clear bold headline '{TEXT}' across the top, clean studio lighting with a soft gradient backdrop, confident brand-grade composition with deliberate negative space reserved at the bottom for a call-to-action button, premium commercial finish, vibrant on-brand color, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered busy layout, no negative space, tiny unreadable text, misspelled text, garbled letters, amateurish, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/quote-card\",\n name: \"Quote Card\",\n description: \"Typographic quote graphic.\",\n group: \"Marketing & Social\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"elegant inspirational quote card centered on the text '{QUOTE}', refined typographic design as the hero with a tasteful serif-and-sans pairing and graceful line breaks, {background style || a soft minimal gradient with subtle paper texture}, generous margins and balanced symmetrical composition, calm sophisticated color palette, crisp print-ready finish, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered layout, clashing fonts, busy distracting background, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/web-banner\",\n name: \"Web Banner / Header\",\n description: \"Wide site header with text.\",\n group: \"Marketing & Social\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"16:9\",\n prompt:\n \"wide web banner header for {brand or topic || a modern SaaS startup}, clean modern design with a horizontal layout, headline text '{TEXT}' set on the left with clear hierarchy, a complementary hero graphic on the right and deliberate clear space reserved for a logo, cohesive on-brand palette, crisp flat web-ready finish, balanced composition, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered busy layout, tiny unreadable text, no clear space, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n\n // ── Print & Posters ──────────────────────────────────────────────────────\n {\n id: \"generate-image/movie-poster\",\n name: \"Movie Poster\",\n description: \"Cinematic key art, title + tagline.\",\n group: \"Print & Posters\",\n data: {\n provider: \"gpt-image-2-5-sunburst\",\n aspectRatio: \"2:3\",\n prompt:\n \"theatrical movie poster for '{TITLE}', cinematic key art in a {genre || gritty sci-fi thriller} mood, dramatic vertical hero composition with a commanding central figure, moody atmospheric lighting with strong rim light and volumetric haze, rich filmic teal-and-amber color grade, bold title treatment along the bottom with a short tagline above it and a small billing-block strip, premium high-detail finish, legible correctly-spelled text\",\n negativePrompt:\n \"flat lighting, cluttered composition, amateurish layout, misspelled text, garbled letters, extra limbs, deformed faces, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/event-poster\",\n name: \"Event Poster\",\n description: \"Bold graphic event flyer.\",\n group: \"Print & Posters\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"3:4\",\n prompt:\n \"bold graphic event poster for '{EVENT}', with the detail line '{date and venue || Saturday Sept 14 · The Grand Hall}' set cleanly below, striking oversized display typography as the hero, dynamic eye-catching layout with strong shapes and a vivid high-energy color palette, clear type hierarchy and generous margins, crisp flat print-ready finish, balanced composition, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered busy layout, muddy colors, tiny unreadable text, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/book-cover\",\n name: \"Book Cover\",\n description: \"Genre cover, title + author.\",\n group: \"Print & Posters\",\n data: {\n provider: \"gpt-image-2-5-sunburst\",\n aspectRatio: \"2:3\",\n prompt:\n \"professional book cover for '{TITLE}' by {AUTHOR}, evocative {genre || literary thriller} mood and symbolic central imagery, vertical composition with a strong focal point, bold title typography across the top and the author name along the bottom with clear hierarchy, atmospheric lighting and a cohesive genre-appropriate color palette, refined bookstore-quality finish, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered layout, clashing fonts, generic stock look, misspelled text, garbled letters, deformed faces, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/tshirt-design\",\n name: \"T-Shirt / POD Design\",\n description: \"Print-ready isolated graphic.\",\n group: \"Print & Posters\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"print-ready t-shirt graphic of {concept || a snarling wolf in a moonlit forest}, bold centered illustration with confident clean linework, limited flat screen-print color palette, strong silhouette that reads at a glance, crisp vector-style edges, perfectly isolated on a plain flat background as artwork only with no garment and no mockup\",\n negativePrompt:\n \"t-shirt mockup, person wearing shirt, photographic background, soft gradients, photorealistic, busy clutter, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n {\n id: \"generate-image/sticker-diecut\",\n name: \"Die-Cut Sticker\",\n description: \"White-border glossy sticker.\",\n group: \"Print & Posters\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"die-cut sticker design of {subject || a smiling cartoon avocado}, thick clean white die-cut border hugging the silhouette, bold flat colors with a confident dark outline, cute kawaii style, subtle glossy vinyl sheen and a soft contact shadow, single centered subject isolated on a plain flat background\",\n negativePrompt:\n \"photographic background, scene, no white border, soft blurry edges, photorealistic, busy clutter, misspelled text, garbled letters, lowres, watermark\",\n },\n },\n {\n id: \"generate-image/album-cover\",\n name: \"Album Cover\",\n description: \"Square cover art, mood-driven.\",\n group: \"Print & Posters\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"1:1\",\n prompt:\n \"striking square album cover art for '{TITLE}', bold {genre || dreamy synthwave} aesthetic, single arresting central image as the focal point, dramatic mood-setting lighting and a distinctive cohesive color palette, the title set as clean tasteful typography that complements the artwork, refined high-detail finish, balanced composition, legible correctly-spelled text\",\n negativePrompt:\n \"cluttered busy layout, muddy colors, weak focal point, misspelled text, garbled letters, lowres, blurry, watermark\",\n },\n },\n\n // ── Illustration & Art Styles (pin the global `style` look) ───────────────\n {\n id: \"generate-image/anime-scene\",\n name: \"Anime Scene\",\n description: \"Cel-shaded anime look.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n style: \"anime\",\n prompt: \"{scene or subject || a girl watching fireworks over a summer festival}, cel-shaded with crisp linework, expressive eyes, soft gradient sky, gentle bloom\",\n negativePrompt: \"photorealistic, 3d render, muddy colors, lowres, deformed, extra fingers, watermark, text\",\n },\n },\n {\n id: \"generate-image/comic-panel\",\n name: \"Comic Panel\",\n description: \"Inked panel with action.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"4:3\",\n style: \"comic-book\",\n prompt: \"{scene || a caped hero landing on a rooftop at dusk}, dynamic comic panel composition, bold ink outlines, motion lines, clear space for a speech bubble\",\n negativePrompt: \"photorealistic, muddy colors, cluttered, lowres, deformed, extra fingers, watermark\",\n },\n },\n {\n id: \"generate-image/manga-bw\",\n name: \"Manga Panel (B&W)\",\n description: \"Screentone black-and-white.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n style: \"manga\",\n prompt: \"{scene || a swordsman bracing against the wind}, black-and-white manga panel, crisp inking, screentone shading, dramatic low angle, speed lines\",\n negativePrompt: \"color, grayscale photo, muddy tones, lowres, deformed, extra fingers, watermark\",\n },\n },\n {\n id: \"generate-image/watercolor\",\n name: \"Watercolor\",\n description: \"Soft transparent washes.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"flux\",\n aspectRatio: \"4:3\",\n style: \"watercolor\",\n prompt: \"{subject || a quiet harbor at dawn}, loose wet-on-wet washes, soft bleeding edges, paper texture showing through, gentle pastel palette\",\n negativePrompt: \"hard edges, photorealistic, heavy outlines, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/oil-painting\",\n name: \"Oil Painting\",\n description: \"Classical canvas brushwork.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"flux\",\n aspectRatio: \"4:3\",\n style: \"oil-painting\",\n prompt: \"{subject || a still life of fruit on a draped table}, thick impasto brushstrokes, visible canvas texture, warm chiaroscuro light, rich classical palette\",\n negativePrompt: \"photorealistic, flat digital, smooth airbrush, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/flat-vector-illustration\",\n name: \"Flat Vector Illustration\",\n description: \"Modern flat SaaS-style art.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"16:9\",\n style: \"flat-vector\",\n prompt: \"{subject or scene || a person working at a laptop in a cozy home office}, clean flat shapes, bold simple forms, limited modern palette, generous negative space\",\n negativePrompt: \"photorealistic, gradient mesh, heavy texture, drop shadows, lowres, watermark\",\n },\n },\n {\n id: \"generate-image/isometric-illustration\",\n name: \"Isometric Illustration\",\n description: \"3/4 axonometric scene.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n style: \"isometric\",\n prompt: \"isometric {building or scene || a cozy corner coffee shop}, true 3/4 axonometric angle, clean miniature game-art forms, soft even lighting, tidy modular detail\",\n negativePrompt: \"perspective distortion, vanishing-point view, photorealistic, lowres, watermark\",\n },\n },\n {\n id: \"generate-image/pixel-art\",\n name: \"Pixel Art Scene\",\n description: \"Retro low-res pixel grid.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n style: \"pixel-art\",\n prompt: \"{subject || a hero exploring a torch-lit dungeon}, retro 16-bit pixel art, crisp pixel grid, limited dithered palette, hard-edged sprite detail\",\n negativePrompt: \"smooth gradients, antialiasing, blur, photorealistic, vector art, watermark\",\n },\n },\n {\n id: \"generate-image/pixar-3d\",\n name: \"3D Animated (Pixar-style)\",\n description: \"Polished CG character look.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n style: \"pixar-3d\",\n prompt: \"{character or subject || a curious round-cheeked kid with big expressive eyes}, polished 3D animated render, soft subsurface skin, warm key light with gentle bounce, charming appeal\",\n negativePrompt: \"photorealistic, uncanny, flat 2d, lowres, deformed, extra fingers, watermark, text\",\n },\n },\n {\n id: \"generate-image/line-art-coloring\",\n name: \"Coloring Page (line art)\",\n description: \"Clean B&W outlines, no shading.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"black and white line-art coloring page of {subject || a friendly dinosaur in a jungle}, clean even-weight ink outlines, simple uncluttered shapes with generous open areas to fill in, pure white background, crisp vector-style edges, no shading and no color\",\n negativePrompt: \"color, shading, grayscale fill, gradients, sketchy hatching, photorealistic, busy background, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/tattoo-flash\",\n name: \"Tattoo Flash\",\n description: \"Bold linework, isolated.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2-5-sunburst\",\n aspectRatio: \"2:3\",\n prompt:\n \"tattoo flash design of {subject || a roaring tiger with peony flowers} in {tattoo style || bold American traditional} style, confident clean linework with strong outlines, limited tattoo-ink palette, solid black fills and tasteful negative space, single centered motif isolated on a plain white sheet\",\n negativePrompt: \"photographic background, scene, soft gradients, photorealistic, fine grayscale shading, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/concept-art-env\",\n name: \"Concept Art (environment)\",\n description: \"Painterly pre-production art.\",\n group: \"Illustration & Art Styles\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n style: \"concept-art\",\n prompt: \"concept art of {environment or subject || ancient ruins reclaimed by a glowing jungle}, sweeping sense of scale, atmospheric depth and haze, dramatic god-ray light\",\n negativePrompt: \"flat lighting, photo, cluttered, lowres, deformed, watermark, text\",\n },\n },\n\n // ── Handmade & Stop-Motion (tactile crafted looks — the in-prompt\n // \"NOT digital CG, NOT a 3D render\" clause is what holds the handmade feel;\n // named quality anchors (Aardman/Laika/Henson/Gondry) pin the reference bar) ──\n {\n id: \"generate-image/claymation-scene\",\n name: \"Claymation Scene\",\n description: \"Plasticine stop-motion look, thumbprints included.\",\n group: \"Handmade & Stop-Motion\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"{scene || a tiny clay fisherman rowing across a stormy plasticine sea}, tactile stop-motion claymation scene — real plasticine clay characters and set with visible thumbprints, tool marks, seam lines and a soft matte sheen, miniature studio photography with shallow depth of field and warm practical lighting, handmade Aardman-quality charm. NOT digital CG, NOT a 3D render, NOT 2D illustration — a physically sculpted miniature scene photographed on a real stop-motion stage\",\n negativePrompt:\n \"smooth plastic CGI surface, digital 3d render, 2d illustration, cartoon shading, perfect seamless surfaces, real human actors, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/needle-felt\",\n name: \"Needle-Felt\",\n description: \"Fuzzy felted-wool miniature.\",\n group: \"Handmade & Stop-Motion\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"{subject || a round little fox curled in a mossy nest}, needle-felted wool sculpture — soft wool roving with visible fluffy fibers and a halo of stray strands, glass-bead eyes with a tiny sheen, embroidered nose and stitched details, handcrafted miniature photographed in a cozy diorama with soft window light, Laika-quality handmade charm. NOT digital CG, NOT a 3D render, NOT 2D illustration — real felted wool photographed up close\",\n negativePrompt:\n \"smooth plastic surface, digital 3d render, 2d illustration, real animal fur, photorealistic animal, hard CGI edges, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/sock-puppet\",\n name: \"Sock Puppet\",\n description: \"Stitched-sock character on stage.\",\n group: \"Handmade & Stop-Motion\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"4:3\",\n prompt:\n \"{character || a cheerful sock-puppet chef holding a tiny wooden spoon}, handmade sock puppet — thick cotton knit texture, stitched felt mouth, ping-pong-ball eyes with painted pupils, yarn hair, visible seams and hot-glue details, puppet-studio photography with soft even lighting and a simple stage backdrop, Henson-style handmade charm. NOT digital CG, NOT a 3D render, NOT 2D illustration — a real fabric puppet photographed on a puppet stage\",\n negativePrompt:\n \"smooth CGI fabric, digital 3d render, 2d illustration, human face, realistic skin, plastic toy look, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/cardboard-diorama\",\n name: \"Cardboard Diorama\",\n description: \"Cut-cardboard craft set, tape & paint.\",\n group: \"Handmade & Stop-Motion\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"{scene || a rocket launching over a tiny cardboard city}, handmade cardboard-craft diorama — corrugated cardboard structures with visible cut edges, masking tape, hot-glue joints and hand-painted acrylic surfaces, hand-lettered signs, miniature set photography with warm practical lighting and gentle depth of field, Michel Gondry handmade-prop charm. NOT digital CG, NOT a 3D render, NOT 2D illustration — a real cardboard miniature set photographed in studio\",\n negativePrompt:\n \"clean vector shapes, digital 3d render, 2d illustration, smooth plastic surfaces, real buildings, photoreal city, lowres, deformed, watermark, garbled text\",\n },\n },\n {\n id: \"generate-image/embroidered-art\",\n name: \"Embroidered Art\",\n description: \"Hand-stitched thread on hooped linen.\",\n group: \"Handmade & Stop-Motion\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"{subject || a songbird on a blossoming branch} rendered as fine hand embroidery — visible individual thread stitches, satin-stitch fills and chain-stitch outlines, subtle thread sheen, slight fabric pucker around dense stitching, hooped natural linen background with a few loose thread tails, soft daylight craft photography, artisan needlework quality. NOT digital CG, NOT a 3D render, NOT 2D illustration, NOT a print — real stitched thread on real fabric\",\n negativePrompt:\n \"printed fabric, flat digital illustration, 3d render, smooth painted texture, photorealistic subject, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/faux-food-clay\",\n name: \"Faux-Food (Clay)\",\n description: \"Plasticine dish styled as a commercial.\",\n group: \"Handmade & Stop-Motion\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"{dish || a steaming bowl of ramen with a soft egg and curled noodles} sculpted entirely from plasticine modeling clay and styled as a glossy food commercial — visible sculpting tool marks, clear gloss varnish standing in for broth sheen, wool-tuft steam, clay ingredients with charming hand-modeled imperfection, miniature studio food-commercial lighting with a warm appetizing key, Aardman-quality handmade charm. NOT real food photography, NOT digital CG, NOT a 3D render, NOT 2D illustration — a physically sculpted clay dish photographed like a commercial\",\n negativePrompt:\n \"real food, photorealistic food, digital 3d render, 2d illustration, smooth plastic CGI, melted shapeless clay, unappetizing, lowres, watermark, text\",\n },\n },\n\n // ── Film & Storyboard ────────────────────────────────────────────────────\n {\n id: \"generate-image/storyboard-frame\",\n name: \"Storyboard Frame\",\n description: \"Rough B&W shot sketch.\",\n group: \"Film & Storyboard\",\n data: {\n provider: \"nano-banana\",\n aspectRatio: \"16:9\",\n prompt:\n \"rough storyboard frame of {shot description || a detective shouldering open a warehouse door}, loose black-and-white pencil sketch, {shot size || medium} shot framing with clear staging and readable blocking, gestural hatching for tone, {camera angle || slight low angle}, bold directional arrows indicating subject and camera motion, quick previsualization sketch — not a finished render\",\n negativePrompt:\n \"color, photorealistic, rendered, polished finish, fine detail, grayscale photo, lowres, watermark, garbled text\",\n },\n },\n {\n id: \"generate-image/cinematic-keyframe\",\n name: \"Cinematic Keyframe\",\n description: \"Graded film-still keyframe.\",\n group: \"Film & Storyboard\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"16:9\",\n prompt:\n \"cinematic keyframe of {scene || a weary traveler pausing at a neon-lit roadside diner}, film still, anamorphic 40mm look with shallow depth of field and gentle bokeh, {mood || tense and intimate} motivated lighting with soft key and deep falloff, off-center framing with negative space, richly color-graded teal-and-amber palette, atmospheric haze, fine film grain, photoreal detail\",\n negativePrompt:\n \"flat lighting, deep focus, oversaturated, washed out, video-game render, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/matte-painting\",\n name: \"Matte Painting (21:9)\",\n description: \"Epic environment establishing.\",\n group: \"Film & Storyboard\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"21:9\",\n prompt:\n \"epic ultra-wide matte painting of {environment || a ruined citadel half-swallowed by jungle at sunrise}, sweeping cinematic vista, painterly photoreal rendering with crisp distant detail, layered foreground, midground and background for deep atmospheric perspective, dramatic god-ray lighting breaking through haze, vast awe-inspiring scale, rich filmic color grade, fine detail\",\n negativePrompt:\n \"flat, low detail, shallow composition, cluttered foreground, oversaturated, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/moodboard-tile\",\n name: \"Mood Board Tile\",\n description: \"Single cohesive aesthetic tile.\",\n group: \"Film & Storyboard\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"single cohesive mood-board tile capturing {aesthetic or theme || warm Scandinavian minimalism}, one unified evocative image — not a collage or grid, soft natural lighting with gentle texture and tactile materials, balanced editorial composition, restrained {color palette || muted oat, sage and terracotta} grade, calm atmospheric mood, crisp tasteful detail\",\n negativePrompt:\n \"collage, grid, split panels, multiple frames, text, labels, busy clutter, watermark, lowres\",\n },\n },\n {\n id: \"generate-image/establishing-shot\",\n name: \"Establishing Shot (21:9)\",\n description: \"Wide sense-of-place opener.\",\n group: \"Film & Storyboard\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"21:9\",\n prompt:\n \"sweeping ultra-wide establishing shot of {location || a fog-wrapped fishing village at first light}, cinematic film still, wide lens with edge-to-edge deep focus, layered foreground, midground and distant background conveying a strong sense of place and scale, soft directional dawn light with atmospheric haze, expansive epic composition, evocative filmic color grade, crisp detail across the frame\",\n negativePrompt:\n \"cropped framing, cluttered composition, flat lighting, oversaturated, soft focus, lowres, watermark, text\",\n },\n },\n\n // ── Architecture & Interiors ─────────────────────────────────────────────\n {\n id: \"generate-image/exterior-render\",\n name: \"Architecture · Exterior\",\n description: \"Photoreal building, golden hour.\",\n group: \"Architecture & Interiors\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"16:9\",\n prompt:\n \"photoreal architectural exterior visualization of {building || a glass-and-timber hillside villa}, {architectural style || warm modern minimalism}, professional architecture photography with a tilt-shift lens keeping verticals perfectly straight, warm golden-hour light raking across the facade with soft long shadows, three-quarter hero angle with clean foreground landscaping, aspirational editorial mood with natural color, accurate geometry and crisp material detail\",\n negativePrompt:\n \"distorted geometry, warped perspective, bent verticals, melting structure, flat lighting, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/interior-design\",\n name: \"Architecture · Interior\",\n description: \"Magazine-quality room render.\",\n group: \"Architecture & Interiors\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"4:3\",\n prompt:\n \"photoreal interior design visualization of {room || a sunlit open-plan living room}, {style || warm contemporary Scandinavian}, soft natural light pouring through large windows with gentle ambient fill, wide-angle architectural lens with straight true verticals and corrected perspective, balanced styled composition with curated furnishings and breathing room, inviting magazine-quality mood with a cohesive natural palette, accurate geometry and crisp material texture\",\n negativePrompt:\n \"distorted geometry, warped perspective, bent verticals, fisheye bulge, cluttered, dark, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/real-estate-hero\",\n name: \"Real Estate Hero\",\n description: \"Bright, inviting listing shot.\",\n group: \"Architecture & Interiors\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"professional real estate photograph of {property || a bright open-concept living room with patio doors}, wide-angle architectural lens with straight true verticals and corrected perspective, bright airy natural daylight balanced with warm interior fill for a high-dynamic-range look, clean tasteful staging with uncluttered surfaces, welcoming aspirational mood with a fresh neutral palette, accurate geometry and crisp listing-ready detail\",\n negativePrompt:\n \"distorted geometry, warped perspective, bent verticals, fisheye bulge, dark, dingy, cluttered, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/building-tall\",\n name: \"Skyscraper / Tall Building\",\n description: \"Dramatic upward portrait view.\",\n group: \"Architecture & Interiors\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"2:3\",\n prompt:\n \"photoreal architectural photograph of {tall building || a sleek glass-and-steel skyscraper}, dramatic worm's-eye upward angle exaggerating its soaring height, wide lens with controlled converging verticals, crisp midday sun glinting off the facade against a deep blue sky with wispy clouds, bold graphic composition emphasizing repeating structure, striking modern mood with clean color, accurate geometry and sharp reflective detail\",\n negativePrompt:\n \"distorted geometry, warped perspective, melting structure, leaning collapse, overcast haze, lowres, watermark, text\",\n },\n },\n\n // ── Icons, Game Assets & Textures ────────────────────────────────────────\n {\n id: \"generate-image/game-icon\",\n name: \"Game Icon\",\n description: \"Glossy RPG inventory icon.\",\n group: \"Icons, Game Assets & Textures\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"polished RPG inventory game icon of {item || a glowing enchanted health potion in a crystal vial}, rounded glossy 3D style with smooth beveled edges and a subtle inner glow, soft studio key light with a bright specular highlight and a faint magical rim, single object perfectly centered with generous margins, isolated on a clean dark gradient background, vibrant saturated game-art palette, crisp readable silhouette at small sizes\",\n negativePrompt: \"flat, 2d, lowres, cluttered background, multiple objects, busy scene, harsh shadows, watermark, text\",\n },\n },\n {\n id: \"generate-image/seamless-texture\",\n name: \"Seamless Texture\",\n description: \"Tileable PBR-style material.\",\n group: \"Icons, Game Assets & Textures\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"seamless tileable PBR-style surface texture of {material || weathered mossy cobblestone}, perfectly repeating with no visible seams, dead-flat top-down orthographic view, even diffuse flat lighting across the whole frame with no shadows or hotspots, edges that wrap cleanly when tiled, fine high-resolution material detail, true-to-life color, crisp uniform grain\",\n negativePrompt: \"visible seams, perspective, lighting gradient, shadows, vignette, hotspots, single object, foreground subject, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/seamless-pattern\",\n name: \"Seamless Pattern\",\n description: \"Tileable decorative motif.\",\n group: \"Icons, Game Assets & Textures\",\n data: {\n provider: \"ideogram-v3\",\n aspectRatio: \"1:1\",\n prompt:\n \"seamless repeating decorative surface pattern of {motif || delicate botanical leaves and blossoms}, perfectly tileable with no visible seams where edges meet, flat clean vector colors, even balanced top-down composition with uniform motif spacing and consistent flat lighting, cohesive limited palette, crisp print-ready finish\",\n negativePrompt: \"visible seams, perspective, lighting gradient, shadows, photorealistic, 3d render, uneven spacing, single centered subject, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/emoji-set\",\n name: \"Emoji / Reaction Set\",\n description: \"Glossy 3D emoji variations.\",\n group: \"Icons, Game Assets & Textures\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"a set of glossy 3D emoji-style reaction icons of {subject || a round smiling yellow face}, several distinct expressions arranged in an even grid — happy, laughing, surprised, sad, angry, love — strictly consistent style, shading, and proportions across every icon with only the expression changing, smooth rounded inflatable forms with a candy-gloss finish, soft even studio lighting identical on each icon with a bright specular highlight, evenly spaced on a clean plain background, vibrant saturated palette, crisp and instantly readable at small sizes\",\n negativePrompt: \"inconsistent style, mismatched shading, off-model, realistic photo, flat 2d, muddy colors, cluttered background, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/pixel-sprite\",\n name: \"Pixel Sprite\",\n description: \"Game-ready pixel sprite.\",\n group: \"Icons, Game Assets & Textures\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n style: \"pixel-art\",\n prompt: \"game-ready sprite of {character or item || a plucky knight with a tiny sword}, crisp clean pixels, bold readable silhouette, limited palette, centered on a plain background\",\n negativePrompt: \"smooth, antialiased, blurry, soft gradients, 3d render, cluttered background, watermark, text\",\n },\n },\n\n // ── More Photography & Cinematic ─────────────────────────────────────────\n {\n id: \"generate-image/silhouette\",\n name: \"Silhouette\",\n description: \"Backlit subject, dramatic sky.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"dramatic silhouette of {subject || a lone figure on a hilltop with arms outstretched}, 50mm lens at f/8 with crisp deep focus, subject fully backlit against a vivid sunset sky and rendered as a clean dark shape with a glowing rim, low-angle composition with the figure off-center on the horizon, bold high-contrast mood in a fiery orange-to-purple gradient, smooth graded sky, minimal interior detail and clean recognizable outline\",\n negativePrompt:\n \"flat lighting, front lighting, visible face detail, washed-out sky, muddy tones, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/long-exposure\",\n name: \"Long Exposure\",\n description: \"Silky motion, light trails.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"seedream\",\n aspectRatio: \"16:9\",\n prompt:\n \"long-exposure photograph of {scene || a coastal lighthouse above mist-smoothed ocean waves}, 24mm lens at f/11 on a tripod with a multi-second shutter, silky smooth motion blur with streaking light trails and glassy water, razor-sharp stationary elements, balanced wide composition during the cool blue hour, tranquil ethereal mood with deep clean shadows and minimal noise, crisp fine detail where the frame is still\",\n negativePrompt:\n \"noise, harsh motion artifacts, double exposure, banding, blurry stationary objects, blown highlights, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/tilt-shift\",\n name: \"Tilt-Shift Miniature\",\n description: \"Fake-miniature selective blur.\",\n group: \"Photography & Cinematic\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"16:9\",\n prompt:\n \"tilt-shift miniature photograph of {scene || a bustling city intersection with tiny cars and crowds}, tilt-shift lens with a narrow band of sharp focus and strong blur above and below, high elevated bird's-eye angle, tiny people and vehicles reading like toys, centered subject band, playful diorama mood with punchy high saturation and crisp clean detail in the focus zone\",\n negativePrompt:\n \"uniform sharp focus, eye-level angle, flat colors, dull lighting, realistic scale, lowres, deformed, watermark, text\",\n },\n },\n\n // ── More Product & Commerce ──────────────────────────────────────────────\n {\n id: \"generate-image/knolling\",\n name: \"Knolling Flat-Lay\",\n description: \"Objects arranged at 90°.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"1:1\",\n prompt:\n \"knolling flat-lay photograph of {items || an everyday-carry kit — knife, pen, watch, wallet and keys}, every object precisely aligned at ninety-degree right angles and evenly spaced in a tidy grid, 35mm lens at f/8 with even edge-to-edge focus, perfect top-down ninety-degree angle, soft diffused overhead light with gentle even shadows, organized symmetrical composition with consistent gaps, satisfying orderly editorial mood with a clean palette on a smooth neutral surface, crisp product detail\",\n negativePrompt:\n \"cluttered, messy, overlapping objects, diagonal placement, uneven spacing, tilted angle, harsh shadows, lowres, deformed, watermark, text\",\n },\n },\n {\n id: \"generate-image/ghost-mannequin\",\n name: \"Ghost-Mannequin Apparel\",\n description: \"Invisible-mannequin clothing shot.\",\n group: \"Product & Commerce\",\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"ghost-mannequin apparel photograph of {garment || a tailored wool blazer}, invisible-mannequin hollow three-dimensional effect with the garment holding its worn shape and a visible hollow neckline and cuffs, 85mm lens at f/8 with deep focus, soft even studio lighting from large diffusers with a subtle grounding shadow, centered front-facing composition on a clean pure-white background, crisp commercial e-commerce mood with true-to-life color, accurate fabric texture and sharp seams\",\n negativePrompt:\n \"visible mannequin, body, person, neck, hands, flat lifeless shape, wrinkles, color cast, lowres, deformed, watermark, text\",\n },\n },\n\n // ── More Illustration & Art Styles ───────────────────────────────────────\n {\n id: \"generate-image/double-exposure\",\n name: \"Double Exposure\",\n description: \"Silhouette filled with a 2nd scene.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"seedream\", aspectRatio: \"2:3\", prompt: \"double-exposure portrait, the silhouette of {subject || a person's profile} cleanly filled with {secondary scene || a misty pine forest}, the second scene contained within the silhouette and fading to a clean light background at the edges, crisp high-contrast blend, fine art monochrome-to-color treatment\", negativePrompt: \"muddy overlap, low contrast, cluttered background, lowres, deformed, watermark, text\" },\n },\n {\n id: \"generate-image/vaporwave\",\n name: \"Vaporwave\",\n description: \"80s neon pastel aesthetic.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"16:9\", style: \"vaporwave\", prompt: \"{subject || a marble bust beside a glowing palm tree}, neon pink-and-cyan glow, retro grid horizon, dreamy gradient sunset, subtle VHS haze\", negativePrompt: \"muted colors, photorealistic, dull, lowres, watermark, text\" },\n },\n {\n id: \"generate-image/cyberpunk-scene\",\n name: \"Cyberpunk Scene\",\n description: \"Neon-lit dystopian night.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"16:9\", style: \"cyberpunk\", prompt: \"{scene || a crowded neon market street}, rain-slicked night with glowing reflections, holographic signage, dense atmospheric haze, moody teal-and-magenta glow\", negativePrompt: \"daylight, flat lighting, washed out, lowres, deformed, watermark, text\" },\n },\n {\n id: \"generate-image/pop-art\",\n name: \"Pop Art\",\n description: \"Bold Warhol/Lichtenstein graphic.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"1:1\", style: \"pop-art\", prompt: \"{subject || a woman in sunglasses blowing a bubble}, bold flat color blocks, thick black outlines, halftone Ben-Day dots, punchy primary palette\", negativePrompt: \"muted colors, photorealistic, soft gradients, lowres, watermark, text\" },\n },\n {\n id: \"generate-image/low-poly\",\n name: \"Low Poly\",\n description: \"Faceted geometric 3D.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"1:1\", style: \"low-poly\", prompt: \"{subject || a stylized mountain fox}, faceted triangular geometry, crisp flat-shaded polygons, clean gradient color blocking, soft studio light\", negativePrompt: \"smooth surfaces, rounded organic detail, photorealistic, lowres, watermark, text\" },\n },\n {\n id: \"generate-image/paper-cut\",\n name: \"Paper Cut\",\n description: \"Layered cut-paper craft.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"1:1\", style: \"paper-cutout\", prompt: \"{subject || a fox in a layered forest}, layered cut-paper craft, stacked depth with soft drop shadows between layers, clean torn-and-cut edges, warm tactile palette\", negativePrompt: \"photorealistic, flat single-layer, smooth gradients, lowres, watermark, text\" },\n },\n {\n id: \"generate-image/stained-glass\",\n name: \"Stained Glass\",\n description: \"Leaded colored-glass mosaic.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"gpt-image-2-5-sunburst\", aspectRatio: \"2:3\", style: \"stained-glass\", prompt: \"{subject || a phoenix rising in flames}, bold black leading lines between glowing colored glass panes, luminous backlit jewel tones, symmetrical mosaic composition\", negativePrompt: \"photorealistic, flat, muddy colors, broken composition, lowres, watermark, text\" },\n },\n\n // ── Diagrams & Infographics ──────────────────────────────────────────────\n {\n id: \"generate-image/blueprint\",\n name: \"Blueprint Schematic\",\n description: \"White-on-blue technical drawing.\",\n group: \"Diagrams & Infographics\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"4:3\", style: \"blueprint\", prompt: \"technical blueprint schematic of {subject || a vintage propeller aircraft}, crisp white line work on deep blue drafting paper, dimension lines with measurements and callout labels, legible correctly-spelled labels, tidy orthographic engineering-drawing layout\", negativePrompt: \"photorealistic, color fill, shading, misspelled labels, garbled text, sloppy lines, lowres, watermark\" },\n },\n {\n id: \"generate-image/infographic\",\n name: \"Infographic\",\n description: \"Icons + labels data layout.\",\n group: \"Diagrams & Infographics\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"4:3\", prompt: \"clean modern infographic about {topic || how renewable energy works}, structured data-visualization layout with simple flat icons, short labeled callouts and a few key stats, clear visual hierarchy with a strong title and numbered sections, generous spacing and aligned grid, cohesive limited palette, legible correctly-spelled text, crisp flat editorial finish\", negativePrompt: \"cluttered busy layout, misspelled text, gibberish labels, overlapping elements, tiny unreadable type, photorealistic, lowres, watermark\" },\n },\n {\n id: \"generate-image/ui-mockup\",\n name: \"UI / App Mockup\",\n description: \"Clean app/website screen design.\",\n group: \"Diagrams & Infographics\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"16:9\", prompt: \"modern UI design mockup of {app or website screen || a fitness tracker dashboard}, clean polished product interface with a clear navigation bar, real cards, buttons, charts and icons, consistent spacing and alignment on a tidy grid, contemporary design-system styling with a cohesive accent color, realistic legible correctly-spelled text and labels, crisp flat high-fidelity finish\", negativePrompt: \"cluttered, misspelled text, gibberish labels, garbled UI text, misaligned elements, blurry, photorealistic photo, lowres, watermark\" },\n },\n {\n id: \"generate-image/flowchart\",\n name: \"Flowchart / Diagram\",\n description: \"Boxes, arrows, labels.\",\n group: \"Diagrams & Infographics\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"16:9\", prompt: \"clean flowchart diagram of {process || a customer onboarding workflow}, clearly labeled rounded boxes connected by directional arrows, logical left-to-right flow with decision diamonds and a clear top-down hierarchy, evenly spaced nodes on a tidy grid, cohesive limited palette, legible correctly-spelled labels, crisp flat modern finish\", negativePrompt: \"cluttered, tangled crossing arrows, misspelled text, gibberish labels, overlapping boxes, tiny unreadable type, photorealistic, lowres, watermark\" },\n },\n {\n id: \"generate-image/chart-graph\",\n name: \"Chart / Graph\",\n description: \"Bar / line / pie data viz.\",\n group: \"Diagrams & Infographics\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"4:3\", prompt: \"clean data-visualization chart of {data || quarterly revenue growth}, a {bar, line or pie || bar} graph with clearly labeled axes, gridlines, value labels and a legend, balanced composition with a clear title and generous margins, cohesive limited palette with one accent color, legible correctly-spelled text, crisp flat modern finish\", negativePrompt: \"cluttered, distorted proportions, misleading scale, misspelled text, gibberish labels, overlapping elements, tiny unreadable type, photorealistic, lowres, watermark\" },\n },\n {\n id: \"generate-image/timeline\",\n name: \"Timeline\",\n description: \"Milestones along an axis.\",\n group: \"Diagrams & Infographics\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"16:9\", prompt: \"horizontal timeline infographic of {topic || the history of space exploration}, evenly spaced chronological milestones along a central axis, each marked with a date, a simple icon and a short labeled caption alternating above and below the line, clear left-to-right reading order with a strong title, cohesive limited palette, legible correctly-spelled text, crisp flat modern finish\", negativePrompt: \"cluttered, out-of-order milestones, uneven spacing, misspelled text, gibberish labels, overlapping elements, tiny unreadable type, photorealistic, lowres, watermark\" },\n },\n {\n id: \"generate-image/x-ray\",\n name: \"X-Ray / See-Through\",\n description: \"Internal-structure radiograph look.\",\n group: \"Illustration & Art Styles\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"4:3\", prompt: \"x-ray see-through render of {subject || a blooming flower}, translucent body revealing the internal structure and skeleton beneath, glowing luminous white-and-cyan lines on a deep black background, crisp radiograph aesthetic, centered specimen composition\", negativePrompt: \"opaque solid surface, full color, photorealistic skin, cluttered background, lowres, watermark, text\" },\n },\n\n // ── More Icons, Game Assets & Textures ───────────────────────────────────\n {\n id: \"generate-image/3d-icon\",\n name: \"3D Icon\",\n description: \"Glossy single 3D-rendered icon.\",\n group: \"Icons, Game Assets & Textures\",\n data: { provider: \"gpt-image-2\", aspectRatio: \"1:1\", prompt: \"a single glossy 3D rendered icon of {subject || a friendly chat bubble}, smooth rounded clay-like form with soft beveled edges, soft studio key light with a gentle gradient falloff, a bright specular highlight and a soft contact shadow, perfectly centered with generous padding, isolated on a clean plain background, vibrant cohesive palette, crisp and readable at small sizes\", negativePrompt: \"flat, 2d, multiple objects, cluttered background, harsh shadows, photographic scene, lowres, watermark, text\" },\n },\n\n // ── More Architecture & Interiors ────────────────────────────────────────\n {\n id: \"generate-image/floor-plan\",\n name: \"Floor Plan\",\n description: \"Top-down labeled layout.\",\n group: \"Architecture & Interiors\",\n data: { provider: \"ideogram-v3\", aspectRatio: \"1:1\", prompt: \"clean top-down architectural floor plan of {space || a two-bedroom apartment}, precise orthographic plan view, crisp thin black line work on a white background, clearly labeled rooms with legible correctly-spelled text, dimension lines with measurements, simple furniture symbols, a north arrow and a scale bar, tidy professional blueprint style, accurate proportions\", negativePrompt: \"perspective, 3d view, photorealistic, misspelled labels, garbled text, sloppy lines, lowres, watermark\" },\n },\n {\n id: \"generate-image/aerial-site\",\n name: \"Aerial Site View\",\n description: \"Drone view of building + context.\",\n group: \"Architecture & Interiors\",\n data: { provider: \"seedream\", aspectRatio: \"16:9\", prompt: \"photoreal aerial architectural site view of {building || a modern campus among landscaped grounds}, high top-down drone perspective revealing the building footprint, surrounding context, roads and landscaping, warm golden-hour sun casting long raking shadows that define the layout, bold graphic composition emphasizing site planning and scale, expansive serene mood with natural color, accurate geometry and crisp detail across the frame\", negativePrompt: \"distorted geometry, warped perspective, tilted horizon, lens distortion, flat midday light, lowres, watermark, text\" },\n },\n\n // ── Portrait Transformations (identity-locked, from a connected reference photo) ──\n // Like Stylized Subject, these are TRANSFORM presets: connect a clean front-facing\n // reference portrait and GPT Image 2 rebuilds it. The \"Timeless Soul\" age\n // progression renders ONE person at several ages in a single studio composite — the\n // whole effect rides on the identity-lock clause (same eyes/brow/nose/ears/bone\n // structure), so it stays one person aging rather than several different people.\n {\n id: \"generate-image/age-progression-5\",\n name: \"Five Ages (Timeless Soul)\",\n description: \"One person at 5 ages, studio line-up. Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n promptPrefix:\n \"Single photorealistic studio composite of the SAME person from the reference image at five stages of life, shoulder-to-shoulder left to right in a smooth age progression: a child around 7, a teen around 15, a young adult around 27, a mature adult around 45, and an elder around 70. Editorial portrait photography, 85mm lens at f/2.8, each figure framed chest-up, all facing camera with the same calm expression. CRITICAL identity lock — same eyes, eye color, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines and wrinkles, hairline, hair color (darker in youth, greying with age), and a slight shift in facial fullness. Age-appropriate wardrobe per stage. Even soft cinematic studio key with gentle rim separation, clean dark-grey gradient seamless backdrop, refined neutral grade, natural skin tones, tack-sharp facial detail; the five figures fill the frame.\",\n negativePrompt:\n \"different person, inconsistent face between figures, distorted features, identity drift across ages, wrong eye color, plastic skin, deformed, extra fingers, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/age-progression-3\",\n name: \"Three-Age Triptych\",\n description: \"Same person at 3 ages (~10 / 40 / 75). Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n promptPrefix:\n \"Single photorealistic studio composite of the SAME person from the reference image as a three-age triptych, shoulder-to-shoulder left to right: around age 10, around age 40, and around age 75. Editorial portrait photography, 85mm lens at f/2.8, each figure framed chest-up, facing camera with the same calm expression. CRITICAL identity lock — same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all three, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, hair color (darker in youth, greying with age), and a slight shift in facial fullness. Age-appropriate clothing per stage. Even soft cinematic studio key light with gentle rim separation, clean dark-grey gradient seamless backdrop, refined neutral grade, natural skin tones, tack-sharp facial detail; the three figures fill the frame.\",\n negativePrompt:\n \"different person, inconsistent face between figures, distorted features, identity drift across ages, wrong eye color, plastic skin, deformed, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/age-progression-bw\",\n name: \"Five Ages — B&W\",\n description: \"Monochrome age line-up. Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n promptPrefix:\n \"Single black-and-white photorealistic studio composite of the SAME person from the reference image rendered at five stages of life, shoulder-to-shoulder left to right in a smooth age progression: around 7, 15, 27, 45, and 70. Fine-art monochrome portraiture, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression. CRITICAL identity lock — same eyes, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, greying hair, and a slight shift in facial fullness. Age-appropriate clothing per stage. Even soft studio key light with gentle rim separation, clean dark-grey gradient backdrop. Deep tonal range from rich blacks to clean highlights, fine silver-gelatin film grain, tack-sharp facial detail; the five figures fill the frame.\",\n negativePrompt:\n \"color, color tint, different person, inconsistent face between figures, distorted features, identity drift across ages, plastic skin, deformed, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/decade-timeline\",\n name: \"Decade Timeline\",\n description: \"Same person across the '80s–2020s. Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n promptPrefix:\n \"Single photorealistic studio composite of the SAME person from the reference image across five decades, shoulder-to-shoulder left to right with a smooth age progression and period-accurate styling: a 1980s child, a 1990s teen, a 2000s young adult, a 2010s adult, and a 2020s mature adult. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression. CRITICAL identity lock — same eyes, eye color, brow, nose, ears, jawline and facial bone structure across every figure, unmistakably the same person; age ONLY via skin texture, fine lines, hairline, hair color, and a slight shift in facial fullness. Style each to its decade in hair and wardrobe with a subtle period-accurate film treatment per decade: 1980s bold colors and big hair, 1990s casual grunge, 2000s frosted tips, 2010s clean modern, 2020s contemporary. Even soft studio key with gentle rim separation, clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the five figures fill the frame.\",\n negativePrompt:\n \"different person, inconsistent face between figures, distorted features, identity drift across decades, anachronistic styling, plastic skin, deformed, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/four-seasons\",\n name: \"Four Seasons\",\n description: \"Same person in spring / summer / autumn / winter. Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n promptPrefix:\n \"Single photorealistic studio composite of the SAME person from the reference image in four seasonal looks, shoulder-to-shoulder left to right: spring, summer, autumn, and winter. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression, all at the SAME age as the reference — this is seasons, not aging. CRITICAL identity lock — same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all four figures, unmistakably the same person; ONLY wardrobe, hair styling and a subtle seasonal color grade change. Spring: light pastel layers, fresh airy tone. Summer: light tee, warm sunny tone. Autumn: knit sweater, golden amber tone. Winter: coat and scarf, cool crisp tone. Even soft studio key light with a gentle seasonal color cast and rim separation per figure, clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the four figures fill the frame.\",\n negativePrompt:\n \"different person, inconsistent face between figures, distorted features, aging, age differences between figures, plastic skin, deformed, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/times-of-day\",\n name: \"Times of Day\",\n description: \"Same person at dawn / midday / golden hour / night. Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"gpt-image-2\",\n aspectRatio: \"3:4\",\n promptPrefix:\n \"Single photorealistic composite of the SAME person from the reference image across four times of day, shoulder-to-shoulder left to right: dawn, midday, golden hour, and night. Editorial portrait photography, 85mm lens at f/2.8, chest-up framing, all facing camera with the same calm expression, all at the SAME age as the reference. CRITICAL identity lock — same eyes, eye color, brow, nose, ears, jawline and facial bone structure across all four figures, unmistakably the same person; ONLY the lighting and color temperature change between figures. Dawn: soft cool blue light. Midday: bright neutral daylight. Golden hour: warm amber backlight with a gentle glow. Night: moody low light with a cool rim. Consistent chest-up framing and a clean dark-grey gradient seamless backdrop, natural skin tones, tack-sharp facial detail; the four figures fill the frame.\",\n negativePrompt:\n \"different person, inconsistent face between figures, distorted features, aging, age differences between figures, blown highlights, plastic skin, deformed, blurry, lowres, watermark, text\",\n },\n },\n {\n id: \"generate-image/sports-jersey-portrait\",\n name: \"Sports Jersey Portrait\",\n description: \"You in an oversized team jersey, studio editorial. Needs a reference photo.\",\n group: \"Portrait Transformations\",\n minReferences: 1,\n data: {\n provider: \"nano-banana-2-1\",\n aspectRatio: \"4:5\",\n prompt:\n \"Premium studio editorial portrait of the SAME person from the reference image wearing an oversized modern football jersey in the colors of {team || deep crimson and gold}. Sports-fashion editorial photography, 85mm lens at f/2, shallow depth of field with the subject tack-sharp against a softly blurred background. CRITICAL identity lock — same eyes, brow, nose, ears, jawline and facial bone structure, unmistakably the same person, exact skin tone preserved. Soft directional stadium-spotlight key with natural shadow depth and a subtle rim; gradient backdrop in the jersey colors with a faint geometric pattern and soft pitch markings; gentle atmospheric haze and light film grain. Confident, relaxed three-quarter pose, rich saturated grade. Crisp fabric weave and clean jersey graphics.\",\n negativePrompt:\n \"different person, inconsistent face, distorted features, altered skin tone, distorted or garbled logo, misspelled team name, deformed, extra fingers, blurry, lowres, watermark, text artifacts\",\n },\n },\n // ── Stylized Subject + Edits (shared with the deprecating modify-image) ──\n // Transform patterns — work here when a reference image is connected\n // (GPT Image 2.5 Flare edits it while preserving untouched regions). The\n // instruction lives in the prompt, not `style`.\n ...stylizedSubjectFor(\"generate-image\"),\n ...editsFor(\"generate-image\"),\n\n // ── Realism & Authentic ──────────────────────────────────────────────────\n {\n id: \"generate-image/unretouched-portrait\",\n name: \"Unretouched Portrait\",\n description: \"Straight-on head-and-shoulders portrait, real skin, everyday finish.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"3:4\",\n prompt: sentences(\"{subject || An adult woman in her thirties with dark shoulder-length hair}, a straight-on head-and-shoulders portrait at eye level against a plain pale wall, soft daylight from one side.\", REALISM_SKIN, REALISM_FINISH),\n },\n },\n {\n id: \"generate-image/phone-selfie\",\n name: \"Phone Selfie\",\n description: \"Eye-level, arm's-length self-portrait look.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"3:4\",\n prompt: sentences(\"{subject || An adult woman in her late twenties with her hair tied back}, {setting || on a couch at home, a cushion and a lamp behind}.\", realismViewpoint(NEUTRAL_PERSON), realismEmptyHands(NEUTRAL_PERSON), REALISM_SKIN, REALISM_FINISH),\n },\n },\n {\n id: \"generate-image/candid-snapshot\",\n name: \"Candid Phone Snapshot\",\n description: \"Caught mid-moment, an everyday snapshot.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"3:4\",\n prompt: sentences(\"{subject || An adult man in his thirties} caught mid-moment, not posing, glancing away, the framing a little crooked, part of the scene cut by the edge, {setting || at a kitchen table at home}.\", REALISM_SKIN, REALISM_FINISH),\n },\n },\n {\n id: \"generate-image/mirror-selfie\",\n name: \"Mirror Selfie\",\n description: \"Mirror self-portrait, phone in hand.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"9:16\",\n prompt: sentences(\"{subject || An adult woman in her twenties} photographs their reflection in a full-length mirror {setting || in a hallway at home}, a phone held at chest height with its back toward the mirror.\", REALISM_SKIN, REALISM_FINISH),\n },\n },\n {\n id: \"generate-image/creator-at-home\",\n name: \"Creator at Home · Waist-Up\",\n description: \"A waist-up reference of the same person — wire a face photo into the references.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"9:16\",\n prompt: sentences(\"Waist-up photo of {image:1:person}, an adult, standing at home in front of a plain wall, arms relaxed, empty hands.\", REALISM_SKIN, REALISM_FINISH),\n },\n },\n {\n id: \"generate-image/video-call-frame\",\n name: \"Webcam / Video-Call Frame\",\n description: \"Chest-up video-call framing.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"16:9\",\n prompt: sentences(\"{subject || An adult man in his forties}, chest-up, a little off-centre, slightly wide, seen from a fixed point just above eye level about an arm's length away, a softly lit room behind, flat even light from the front.\", REALISM_FINISH),\n },\n },\n {\n id: \"generate-image/macro-skin-study\",\n name: \"Macro Skin Study\",\n description: \"A close study of one area of skin.\",\n group: \"Realism & Authentic\",\n data: {\n ...SKIN_STUDY_MODEL,\n aspectRatio: \"1:1\",\n prompt: sentences(\"{feature || the left cheek and the side of the nose} of {subject || an adult woman in her thirties}, filling the frame, everything sharp front to back, flat cool daylight, neutral colour, a plain study of the skin, not a glamour shot.\", REALISM_SKIN),\n },\n },\n {\n id: \"generate-image/product-in-hand\",\n name: \"Product in Hand — phone photo\",\n description: \"Wire a photo of the product into the references.\",\n group: \"Realism & Authentic\",\n data: {\n ...REALISM_MODEL,\n aspectRatio: \"3:4\",\n prompt: sentences(\"{subject || An adult woman in her thirties} holds {image:1:product} at chest height toward the viewer, label facing out, {setting || in a bright room at home}.\", REALISM_FINISH),\n },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\n// ── UGC & Creator: shared sentences, kept word for word ─────────────────\nconst UGC_TAIL = \"Keep it subtitle-free, do not generate a watermark.\"\nconst UGC_PAUSE = \"A short natural pause before the first word and after the last.\"\nconst ugcSpeech = (line: string): string =>\n `The person says, in a natural American accent, lively and conversational, quicker on connecting words and slower on numbers: \"{line || ${line}}\"`\n/** Seedance 2.5, vertical, 8 s, 720p with audio — pinned, so every surface renders and bills the same clip. */\nconst UGC_VIDEO = { provider: \"seedance-2-5\", aspectRatio: \"9:16\", duration: 8, resolution: \"720p\", generateAudio: true } as const\n/** The same clip at 5 s, for a one-line answer or a quick reaction that 8 s would leave mostly silent. */\nconst UGC_SHORT_VIDEO = { ...UGC_VIDEO, duration: 5 } as const\nconst ugcPrompt = (...parts: string[]): string => [...parts, UGC_TAIL].join(\" \")\nconst TALKING_AT_HOME =\n \"{image:1:person} talks straight to the viewer at eye level at home, face and shoulders close, the framing a little crooked, deep focus, plain colour, a faint natural sway;\"\n\nexport const GENERATE_VIDEO_PRESETS: readonly FactoryPreset[] = [\n // ── Camera Moves (composable cinematography fragments) ───────────────────\n {\n id: \"generate-video/slow-push-in\",\n name: \"Slow Push-In\",\n description: \"Gradual dolly toward the subject.\",\n group: \"Camera Moves\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"slow cinematic push-in toward {subject || a lone figure at a rain-streaked window}, gradual forward dolly on a smooth gimbal, shallow depth of field with soft bokeh, motivated low-key lighting, deliberate and steady pacing with subtle parallax, filmic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, speed changes, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/dolly-out\",\n name: \"Dolly Out (reveal)\",\n description: \"Pull back to reveal the scene.\",\n group: \"Camera Moves\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"smooth dolly-out pulling back from {subject || a lone figure standing in an empty hall}, gradually revealing the surrounding {environment || a vast cathedral interior at dusk}, wide reveal on a steadicam, expanding sense of scale and depth, soft volumetric light, deliberate and graceful pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/orbit-360\",\n name: \"360° Orbit\",\n description: \"Camera circles the subject.\",\n group: \"Camera Moves\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"camera orbits a full 360 degrees around {subject || a hero standing on a rooftop at sunset}, smooth circular tracking on a gimbal, medium shot with shallow depth of field, dynamic parallax as the background sweeps past, golden-hour rim light, continuous and even orbital pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, duplicate subject, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/arc-shot\",\n name: \"Arc Shot\",\n description: \"Sweeping lateral arc.\",\n group: \"Camera Moves\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"sweeping arc shot gliding laterally around {subject || a vintage sports car on a coastal road}, smooth curved dolly on a steadicam, medium-wide shot with subtle depth, layered parallax between foreground and background, warm directional light, fluid and continuous pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/crane-up\",\n name: \"Crane Up\",\n description: \"Rise up and over to reveal scale.\",\n group: \"Camera Moves\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"cinematic crane shot rising up and over {subject || a lone traveler on a desert dune}, craning into a high wide angle to reveal the larger {scene || an endless dune sea at golden hour}, smooth vertical boom on a crane, dramatic sense of scale, warm low-angle sun, slow and majestic pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/tracking-follow\",\n name: \"Tracking Follow\",\n description: \"Follow the subject from behind.\",\n group: \"Camera Moves\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"tracking shot following {subject || a runner sprinting down a forest trail} from behind, steady gimbal glide matching their pace, medium shot with the background streaming past, immersive sense of momentum, dappled natural light, energetic but smooth pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/slow-pan\",\n name: \"Slow Pan\",\n description: \"Horizontal sweep across the scene.\",\n group: \"Camera Moves\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"slow cinematic pan across {scene || a misty mountain valley at dawn}, smooth horizontal sweep on a locked tripod head, wide establishing shot, gradually revealing layered detail across the frame, soft atmospheric light, unhurried and graceful pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/tilt-reveal\",\n name: \"Tilt-Up Reveal\",\n description: \"Vertical reveal from base to top.\",\n group: \"Camera Moves\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"vertical tilt-up reveal of {subject || a towering skyscraper of glass and steel}, camera tilts smoothly from base to top on a locked head, low-angle wide shot, dramatic sense of scale and height, crisp directional daylight, slow and deliberate pacing, cinematic motion\",\n negativePrompt: \"jitter, camera shake, warping, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/whip-pan\",\n name: \"Whip Pan\",\n description: \"Fast energetic transition.\",\n group: \"Camera Moves\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"fast whip pan snapping across to reveal {subject || a dancer mid-pose in a neon studio}, rapid horizontal swish with directional motion blur, medium shot that lands and settles, punchy energetic transition, bold neon practical light, quick whip-then-hold pacing, cinematic motion\",\n negativePrompt: \"warping, morphing, stutter, ghosting, distorted features, extra limbs, duplicate subject, low quality, blurry mush, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/dolly-zoom\",\n name: \"Dolly Zoom (Vertigo)\",\n description: \"Background warps, subject fixed.\",\n group: \"Camera Moves\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"dolly zoom Vertigo effect on {subject || a man frozen at the end of a long corridor}, camera dollies back while zooming in so the background stretches and the subject stays the same size, medium shot locked on the subject, unsettling spatial distortion, moody low-key light, slow building dread, cinematic motion\",\n negativePrompt: \"wrong vertigo direction, reversed perspective, subject changing size, subject drift, jitter, camera shake, morphing, stutter, distorted features, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Shot Types & Angles ──────────────────────────────────────────────────\n {\n id: \"generate-video/establishing-wide\",\n name: \"Establishing Wide\",\n description: \"Vast opening shot with scale.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"sweeping establishing wide shot of {location || a snow-capped mountain range at sunrise}, slow gentle camera drift on a locked tripod, ultra-wide framing with deep focus, vast cinematic sense of place and scale, soft golden-hour light raking across the landscape, unhurried and majestic pacing with subtle atmospheric movement, filmic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, camera shake, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/medium-shot\",\n name: \"Medium Shot\",\n description: \"Balanced waist-up framing.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"medium shot of {subject || a person in conversation in a sunlit cafe}, locked steady framing on a tripod with a faint breathing handheld feel, waist-up composition with a natural 50mm look and gentle depth of field, soft motivated daylight, relaxed natural movement and subtle gestures at an even, lifelike pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/close-up\",\n name: \"Close-Up\",\n description: \"Intimate, shallow focus.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"intimate close-up of {subject || a face lit by warm window light}, slow micro push-in on a smooth gimbal, tight framing with a long lens and very shallow depth of field and creamy bokeh, soft motivated key light, delicate emotional micro-expressions and breathing at a slow, tender pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, distorted anatomy, deformed face, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/macro-detail\",\n name: \"Macro Detail\",\n description: \"Extreme close-up reveal.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"extreme macro shot of {subject || a dewdrop trembling on a leaf}, slow creeping slider move on a macro rail, ultra-close framing with a true macro lens and razor-thin depth of field, soft diffused light catching fine texture, mesmerizing slow reveal of tactile micro-detail at a hypnotic, deliberate pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, focus hunting, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/low-angle-hero\",\n name: \"Low-Angle Hero\",\n description: \"Looking up — powerful, imposing.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"dramatic low-angle hero shot of {subject || a confident figure against a stormy sky}, camera looking steeply up with a slow rising push on a steadicam, wide angle that exaggerates height and stature, powerful and imposing framing, bold backlit rim light against dark clouds, commanding presence with slow, weighty motion, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/overhead-topdown\",\n name: \"Overhead Top-Down\",\n description: \"Bird's-eye with slow rotation.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"overhead top-down shot of {scene || a beautifully plated meal on a wooden table}, perfectly flat bird's-eye perspective with a slow even rotation on an overhead rig, wide framing with deep focus across the surface, soft directional light defining shape and texture, graceful continuous turning motion at a calm, steady pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, wobble, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/fpv-drone\",\n name: \"FPV Drone Flythrough\",\n description: \"Immersive first-person flight.\",\n group: \"Shot Types & Angles\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"fast FPV drone flythrough of {location || a narrow canyon carved by a rushing river}, aggressive first-person racing-drone flight diving and banking through the space, ultra-wide action-cam lens with deep focus, immersive sense of speed and momentum, bright natural daylight streaking past, exhilarating fast yet fluid pacing, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, motion sickness wobble, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Cinematic & Specialty ────────────────────────────────────────────────\n {\n id: \"generate-video/handheld-doc\",\n name: \"Handheld Documentary\",\n description: \"Raw, realistic camera shake.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"wan-2.7-t2v\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"handheld documentary shot of {subject || a street vendor at work in a busy market}, organic handheld energy with natural micro-shake and subtle reframing, loose medium shot on a documentary lens, realistic and raw available light, candid spontaneous movement at a lively, observational pace, gritty cinema-verite motion\",\n negativePrompt: \"warping, morphing, flickering, violent jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/slow-motion\",\n name: \"Slow Motion\",\n description: \"High-frame-rate dramatic movement.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"epic high-speed slow-motion shot of {subject || a sprinter exploding off the blocks}, smooth gliding gimbal move tracking the action, medium shot with shallow depth of field, silky high-frame-rate slow motion rendering every detail, dramatic motivated light, fluid weighty movement stretched into graceful slow-mo, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, choppy frames, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/timelapse\",\n name: \"Timelapse\",\n description: \"Fast passage of time.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"timelapse of {scene || a city skyline from day into night}, locked tripod with a slow subtle creep, wide deep-focus framing, fast-moving clouds streaking overhead and light shifting across the scene, dramatic changing sky, accelerated dynamic passage of time at a smooth, steady cadence, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, strobing, flicker, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/hyperlapse\",\n name: \"Hyperlapse\",\n description: \"Moving timelapse through space.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"hyperlapse traveling through {location || a neon-lit city street at night}, stabilized moving timelapse gliding forward with the world rushing past, wide deep-focus framing, motion locked to a vanishing point for a dynamic perspective shift, vivid practical light streaking by, fast yet smooth accelerated pacing, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, strobing, flicker, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/bullet-time\",\n name: \"Bullet Time\",\n description: \"Frozen moment, camera rotates.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"bullet-time effect around {subject || a person leaping in mid-air}, the moment frozen in time while the camera sweeps in a smooth arc on a circular rig, medium shot with shallow depth of field, action suspended motionless in mid-air, dramatic rim light catching the frozen pose, only the camera moves at a continuous, gliding orbital pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, subject moving during freeze, distorted anatomy, extra limbs, duplicate subject, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/rack-focus\",\n name: \"Rack Focus\",\n description: \"Shift focus between planes.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"rack focus pulling from a foreground {subject || a hand resting on a windowsill} to a background {target || a figure approaching in the distance}, locked tripod with a deliberate focus pull between planes, medium shot on a long lens with very shallow depth of field, soft motivated light, cinematic depth as attention shifts at a slow, intentional pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, focus hunting, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Social & Reels (9:16) ────────────────────────────────────────────────\n {\n id: \"generate-video/vertical-hero\",\n name: \"Vertical Hero\",\n description: \"Punchy 9:16 hero clip.\",\n group: \"Social & Reels\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"9:16\",\n duration: 8,\n prompt: \"cinematic vertical hero shot of {subject || a confident athlete poised against a bold backdrop}, snappy push-in on a smooth gimbal, tight vertical medium framing with a punchy wide-aperture look and shallow depth of field, bold high-contrast lighting with a glowing rim, dynamic and energetic movement at a punchy, scroll-stopping pace built for social reels, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n {\n id: \"generate-video/talking-head\",\n name: \"Talking Head\",\n description: \"Vertical creator-to-camera.\",\n group: \"Social & Reels\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"9:16\",\n duration: 8,\n prompt: \"vertical talking-head shot of {subject || a friendly creator addressing the camera} speaking directly to the lens with steady eye contact, locked steady framing with a faint breathing handheld feel, vertical waist-up composition with a flattering 50mm look and gently blurred clean background, soft motivated key light on the face, natural expressive gestures and lifelike micro-expressions at an even, conversational pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, distorted anatomy, deformed face, wandering eyes, extra limbs, low quality, blurry, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n {\n id: \"generate-video/product-reveal-vertical\",\n name: \"Product Reveal (vertical)\",\n description: \"9:16 product show-off.\",\n group: \"Social & Reels\",\n data: {\n provider: \"seedance-2-fast\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"vertical product reveal of {product || a sleek matte-black smartwatch}, dynamic snap-rotation and a satisfying hero pop on a smooth turntable move, tight vertical close-up framing with crisp focus and shallow depth of field, bright punchy studio lighting with a clean glowing highlight, eye-catching energetic motion at a quick, scroll-stopping social pace, the product staying perfectly crisp and intact, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, warping, morphing, flickering, jitter, stutter, low quality, blurry, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n {\n id: \"generate-video/trend-quickcut\",\n name: \"Trend Quick-Cut\",\n description: \"Energetic vertical clip.\",\n group: \"Social & Reels\",\n data: {\n provider: \"seedance-2-fast\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"high-energy vertical clip of {subject || a dancer mid-move in a neon-lit room}, snappy quick-cut energy with fast whip moves and punchy reframes, tight vertical framing with a dynamic wide look and shallow depth of field, vibrant bold practical lighting, fast trendy movement at a rapid, beat-driven social pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, ghosting, distorted anatomy, extra limbs, low quality, blurry mush, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n {\n id: \"generate-video/pov-vertical\",\n name: \"POV Walk (vertical)\",\n description: \"Immersive first-person reel.\",\n group: \"Social & Reels\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"immersive first-person POV walking through {location || a sunlit city street market}, the camera bobbing naturally with each step as the world moves toward the viewer, vertical wide action-cam framing with deep focus, bright natural daylight, energetic yet smooth handheld momentum at a brisk, immersive walking pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, violent shake, stutter, motion sickness wobble, distorted anatomy, extra limbs, visible body or hands, low quality, blurry, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n\n // ── Product & Ads ────────────────────────────────────────────────────────\n {\n id: \"generate-video/product-hero\",\n name: \"Product Hero\",\n description: \"Filmic handheld ad close-up.\",\n group: \"Product & Ads\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"premium product hero shot of {product || a matte-black smartwatch} resting on {surface || a polished dark stone slab}, slow handheld micro push-in with a gentle organic drift, tight close-up on a macro lens with shallow depth of field and creamy bokeh, soft window key light with a warm hero glow catching the edges, subtle elegant motion at a slow, luxurious advertising pace, the product staying perfectly crisp and undistorted, soft filmic grade, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/product-spin\",\n name: \"Product 360 Spin\",\n description: \"Clean rotating studio loop.\",\n group: \"Product & Ads\",\n data: {\n provider: \"seedance-2-fast\",\n aspectRatio: \"1:1\",\n duration: 5,\n prompt: \"{product || a sleek glass perfume bottle} rotating a smooth full turn on a clean studio turntable, locked centered framing with crisp focus and a softly blurred seamless backdrop, even diffused studio lighting with a clean glowing highlight, continuous silky turntable motion at a steady, even spin that loops seamlessly with no visible seam, the product staying perfectly crisp and undistorted, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, visible seam, jump cut, warping, morphing, flickering, jitter, stutter, wobble, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/liquid-splash\",\n name: \"Liquid Splash\",\n description: \"Slow-mo commercial splash.\",\n group: \"Product & Ads\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"dramatic slow-motion liquid splash erupting around {product || a frosted beverage can}, smooth locked-off framing on a macro lens with shallow depth of field, crisp studio lighting catching every droplet, dynamic crowns and ribbons of liquid suspended in silky high-frame-rate slow motion at a graceful, weighty pace, premium commercial look with the product staying perfectly crisp and undistorted, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, warping, morphing, flickering, jitter, stutter, choppy frames, smeared droplets, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/unboxing\",\n name: \"Unboxing\",\n description: \"Cinematic reveal of the package.\",\n group: \"Product & Ads\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"cinematic unboxing of {product || a premium pair of wireless headphones}, hands lifting the lid and easing the product from its packaging, slow handheld push-in on a smooth gimbal, tight close-up on a 50mm lens with shallow depth of field, soft warm window light with a gentle hero glow, deliberate motion building a sense of anticipation at a slow, premium reveal pace, the product staying perfectly crisp and undistorted, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, warping, morphing, flickering, jitter, stutter, distorted anatomy, deformed hands, extra fingers, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/lifestyle-ad\",\n name: \"Lifestyle Ad\",\n description: \"Aspirational product-in-use.\",\n group: \"Product & Ads\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"9:16\",\n duration: 8,\n prompt: \"vertical lifestyle ad clip of {subject || a smiling young woman} naturally using {product || a sleek stainless-steel water bottle} in {setting || a bright sunlit kitchen}, gentle handheld follow on a smooth gimbal, vertical medium framing with a warm wide-aperture look and shallow depth of field, soft natural window light, relaxed authentic movement at an easy, aspirational pace, the product staying perfectly crisp and undistorted, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, warping, morphing, flickering, jitter, stutter, distorted anatomy, deformed hands, extra limbs, low quality, blurry, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n\n // ── Motion Graphics & Logo ───────────────────────────────────────────────\n {\n id: \"generate-video/logo-sting\",\n name: \"Logo Sting\",\n description: \"Short punchy brand reveal.\",\n group: \"Motion Graphics & Logo\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"premium animated logo sting for {BRAND || a modern minimalist brand}, the crisp logo mark assembling and animating in cleanly with sweeping light streaks and a polished glint, centered hero composition on a solid background with subtle depth, sleek motivated studio light, short and punchy with a confident snap-into-place reveal, the logo staying crisp, legible and correctly proportioned, premium motion-graphics polish, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, low quality, blurry, artifacts, watermark, misspelled text, garbled letters, jumbled type, distorted logo, deformed mark, extra elements\",\n },\n },\n {\n id: \"generate-video/title-reveal\",\n name: \"Title Reveal\",\n description: \"Cinematic text reveal.\",\n group: \"Motion Graphics & Logo\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"cinematic title reveal of the text '{TITLE}', the letters resolving into focus with a dynamic animated title build, slow push-in on a smooth virtual camera, centered hero framing with shallow depth and soft bokeh, dramatic motivated key light with drifting particles and atmospheric haze, deliberate and majestic pacing that settles into a clean hold, the title staying legible, correctly-spelled and crisp with sharp typography, premium motion-graphics polish, cinematic motion\",\n negativePrompt: \"misspelled text, garbled letters, jumbled type, gibberish characters, warping, morphing, flickering, jitter, stutter, low quality, blurry, artifacts, watermark, distorted text, deformed letters\",\n },\n },\n {\n id: \"generate-video/particle-bg\",\n name: \"Particle Background\",\n description: \"Abstract drifting overlay.\",\n group: \"Motion Graphics & Logo\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"abstract flowing particle background in a {color || deep indigo and teal} gradient, soft glowing motes and fine bokeh particles drifting gently across the frame, full-frame ambient field with layered depth and a soft falloff, dreamy diffused light with a gentle glow, slow hypnotic drifting motion at a calm, even pace, seamless loop with no visible seam, ideal for overlays and backgrounds, premium motion-graphics polish, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, warping, morphing, flickering, jitter, stutter, low quality, blurry, artifacts, watermark, text, harsh strobing, banding\",\n },\n },\n {\n id: \"generate-video/loop-background\",\n name: \"Loop Background\",\n description: \"Seamless looping motion bg.\",\n group: \"Motion Graphics & Logo\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"seamless looping abstract background of smooth flowing {color || violet and magenta} gradient waves, soft liquid ribbons undulating gently across the full frame with layered depth, dreamy diffused light with a subtle inner glow, slow hypnotic motion that drifts and returns smoothly to the start, seamless loop with no visible seam, ideal as a motion backdrop, premium motion-graphics polish, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, warping, morphing, flickering, jitter, stutter, low quality, blurry, artifacts, watermark, text, harsh strobing, banding\",\n },\n },\n\n // ── B-Roll & Nature ──────────────────────────────────────────────────────\n {\n id: \"generate-video/clouds-timelapse\",\n name: \"Clouds Timelapse\",\n description: \"Dramatic rolling sky.\",\n group: \"B-Roll & Nature\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"dramatic timelapse of billowing clouds rolling and churning over {landscape || a rugged mountain ridgeline}, locked tripod with a slow subtle creep, wide deep-focus establishing framing, towering cloud banks streaking across a vast dynamic sky as golden light rakes the terrain, accelerated yet smooth passage of time at a steady cadence, serene cinematic b-roll, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, strobing, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/water-slowmo\",\n name: \"Water Slow-Mo\",\n description: \"Glistening water in slow motion.\",\n group: \"B-Roll & Nature\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"slow-motion close-up of {water || a clear mountain stream cascading over rocks}, smooth locked-off framing on a macro lens with shallow depth of field, glistening droplets and silvery ribbons of water suspended in silky high-frame-rate slow motion, soft natural light catching every bead, serene and mesmerizing flow at a graceful, weighty pace, serene cinematic b-roll, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, choppy frames, smeared droplets, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/forest-drift\",\n name: \"Forest Drift\",\n description: \"Peaceful sunlit drift.\",\n group: \"B-Roll & Nature\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"gentle forward drift through a lush sunlit forest, slow steadicam glide weaving between mossy trunks, wide framing with soft depth and natural bokeh, golden light rays streaming through the canopy in drifting volumetric beams with floating dust motes, calm and unhurried movement at a peaceful, meditative pace, serene cinematic b-roll, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, camera shake, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/aerial-landscape\",\n name: \"Aerial Landscape\",\n description: \"Sweeping drone vista.\",\n group: \"B-Roll & Nature\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"sweeping aerial drone shot soaring over {landscape || a snow-capped mountain range at sunrise}, smooth high-altitude glide on a stabilized gimbal, ultra-wide framing with deep focus and layered atmospheric haze, vast cinematic vista with a powerful sense of scale, warm golden-hour light raking across the terrain, graceful and majestic forward motion at an unhurried pace, serene cinematic b-roll, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, camera shake, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/ocean-loop\",\n name: \"Ocean Loop\",\n description: \"Calm seamless waves.\",\n group: \"B-Roll & Nature\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"calm ocean waves rolling gently toward a quiet shore, locked-off wide framing with deep focus across the water, soft natural light glinting off the swell with gentle foam and ripples, slow soothing rhythmic motion at a serene, even pace that returns smoothly to the start, seamless loop with no visible seam, serene ambient cinematic b-roll, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Animation & Style ────────────────────────────────────────────────────\n {\n id: \"generate-video/anime-motion\",\n name: \"Anime Motion\",\n description: \"Cel-shaded animated scene.\",\n group: \"Animation & Style\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"2D anime cel-animation scene of {subject || a determined young hero on a windswept rooftop}, hand-drawn anime style with bold cel-shading, clean ink linework and flat vibrant color, smooth dynamic anime motion with expressive action and speed lines, medium shot with a gentle camera push and subtle parallax, dramatic anime lighting with crisp highlights and saturated skies, lively energetic pacing true to the animated look\",\n negativePrompt: \"photorealistic, live-action, 3D render, off-model, inconsistent style, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/cartoon-3d\",\n name: \"3D Cartoon\",\n description: \"Playful Pixar-like motion.\",\n group: \"Animation & Style\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"polished 3D-cartoon animated scene of {subject || a cheerful round-faced character on a colorful adventure}, glossy Pixar-style rendering with soft subsurface skin, big expressive eyes and squash-and-stretch appeal, smooth bouncy character animation with playful exaggerated motion, medium shot with a gentle dynamic camera move, warm cinematic 3D lighting with soft shadows and a bright color palette, lively upbeat pacing true to a feature-animation look\",\n negativePrompt: \"photorealistic, live-action, 2D flat, off-model, inconsistent style, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/claymation-move\",\n name: \"Claymation\",\n description: \"Tactile stop-motion feel.\",\n group: \"Animation & Style\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"claymation stop-motion animation of {subject || a quirky little clay character in a handmade diorama}, sculpted modeling-clay with visible fingerprints, seams and tactile matte texture, charming handcrafted stop-motion movement with a slightly stepped frame-by-frame cadence, medium shot with a gentle deliberate camera move, warm soft studio lighting on a miniature set, cozy whimsical pacing true to a tactile stop-motion look\",\n negativePrompt: \"photorealistic, live-action, smooth CG, off-model, inconsistent style, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/watercolor-motion\",\n name: \"Living Watercolor\",\n description: \"Flowing painterly motion.\",\n group: \"Animation & Style\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"living watercolor painting of {scene || a misty riverside village in spring}, flowing hand-painted watercolor style with visible paper texture and soft feathered edges, pigments blooming and bleeding gently as wet washes drift and diffuse, slow graceful camera drift across the artwork, luminous translucent layers with soft natural light, calm dreamlike pacing true to a flowing watercolor look\",\n negativePrompt: \"photorealistic, live-action, 3D render, hard digital edges, off-model, inconsistent style, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Looping & Backgrounds ────────────────────────────────────────────────\n {\n id: \"generate-video/subtle-motion\",\n name: \"Subtle Motion\",\n description: \"Gentle, natural movement (great for animating a still).\",\n group: \"Looping & Backgrounds\",\n data: {\n provider: \"seedance-2-fast\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"subtle natural ambient motion bringing a still image to life, gentle slow camera drift on a smooth gimbal with delicate parallax, soft micro-movement in the scene that stays understated and lifelike, soft motivated light, calm unhurried pacing, seamless loop with no visible seam, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, flicker, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/living-wallpaper\",\n name: \"Living Wallpaper\",\n description: \"Ambient looping scene.\",\n group: \"Looping & Backgrounds\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"living wallpaper of {scene || a tranquil moonlit lake beneath drifting clouds}, soft ambient motion gently animating the scene with delicate parallax and layered depth, slow hypnotic camera drift, dreamy diffused light with a calm glow, soothing meditative pacing that returns smoothly to the start, seamless loop with no visible seam, ideal as an ambient motion backdrop, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, flicker, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/parallax\",\n name: \"Parallax (2.5D)\",\n description: \"Depth move over a still.\",\n group: \"Looping & Backgrounds\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"2.5D parallax camera move over {scene || a foggy forest valley at dawn}, foreground, midground and background separated into layered planes that slide at different speeds for true depth, smooth slow dolly on a virtual gimbal bringing the still image to life, soft atmospheric light with gentle haze between the layers, calm deliberate pacing, seamless loop with no visible seam, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, flicker, flat single plane, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/cinemagraph\",\n name: \"Cinemagraph\",\n description: \"Mostly still, one moving element.\",\n group: \"Looping & Backgrounds\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"cinemagraph of {scene || a quiet cafe table by a rainy window}, the entire frame held perfectly still and frozen except for one single element in gentle, subtle motion ({moving element || rain trickling down the glass}), locked-off framing with no camera movement, soft natural light, hypnotic minimal motion at a calm, even pace, seamless loop with no visible seam, cinematic\",\n negativePrompt: \"visible seam, jump cut, pop, flicker, whole scene moving, multiple moving elements, camera movement, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/fire-smoke-loop\",\n name: \"Fire & Smoke FX\",\n description: \"Looping embers and smoke.\",\n group: \"Looping & Backgrounds\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"looping fire and smoke FX over a deep black background, glowing embers drifting upward and slow rolling volumetric smoke curling through the frame, locked-off framing with fine particle detail and soft depth, warm fiery glow against the darkness, hypnotic slow drifting motion at a steady pace that returns smoothly to the start, seamless loop with no visible seam, ideal as an FX overlay, cinematic motion\",\n negativePrompt: \"visible seam, jump cut, pop, flicker, warping, morphing, flickering, jitter, stutter, harsh strobing, low quality, blurry, artifacts, watermark, text\",\n },\n },\n // additional Camera Moves / Cinematic / Social / Product / Motion-graphics / B-roll\n {\n id: \"generate-video/crash-zoom\",\n name: \"Crash Zoom\",\n description: \"Sudden energetic punch-in.\",\n group: \"Camera Moves\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"rapid crash zoom punching in toward {subject || a startled face reacting to bad news}, sudden aggressive snap-zoom from wide to tight close-up, directional motion blur on the push, high-impact dramatic emphasis, hard contrasty light, explosive quick-in then hold pacing, cinematic motion\",\n negativePrompt: \"warping, morphing, stutter, ghosting, distorted features, extra limbs, duplicate subject, low quality, blurry mush, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/slowmo-reveal\",\n name: \"Slow-Mo Reveal\",\n description: \"Speed-ramped hero slowdown.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"dramatic hero reveal of {subject || a warrior turning to face the camera}, smooth push-in on a gimbal that speed-ramps from real-time into silky slow motion at the moment of reveal, medium shot with shallow depth of field, bold dramatic rim light, the action stretches into majestic slow-mo at the peak beat, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, abrupt speed jump, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/match-cut\",\n name: \"Match Cut / Morph\",\n description: \"Object A morphs into B.\",\n group: \"Cinematic & Specialty\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"seamless match cut morphing {subject A || a blooming flower} into {subject B || a spinning galaxy}, matched framing and motion so the first subject flows directly into the second, medium shot with shallow depth of field, soft even light through the transition, one continuous fluid transformation at a smooth, hypnotic pace, cinematic motion\",\n negativePrompt: \"warping, morphing artifacts, flickering, jitter, stutter, abrupt jump cut, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/before-after\",\n name: \"Before / After Reveal\",\n description: \"Wipe between two states.\",\n group: \"Product & Ads\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"before and after reveal of {subject || a freshly renovated living room}, a smooth wipe sweeping across the frame to transition cleanly from the 'before' state to the polished 'after' state, locked steady framing with crisp focus and matched composition on both sides, even flattering lighting, one continuous fluid wipe-reveal at a satisfying, deliberate pace, the subject staying crisp and undistorted through the transition, cinematic motion\",\n negativePrompt: \"distorted product, melting edges, warped logo, deformed packaging, misaligned wipe, double exposure, ghosting, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/kinetic-typography\",\n name: \"Kinetic Typography\",\n description: \"Words animate in with rhythm.\",\n group: \"Motion Graphics & Logo\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt: \"kinetic typography animation of the words '{TEXT}', the words flying and snapping into place in time with a driving rhythm, words scaling and sliding through layered 3D depth with a virtual camera weaving between them, centered dynamic composition on a clean background with soft shadows, punchy motivated light, energetic beat-synced pacing with confident accents, the words staying legible, correctly-spelled and crisp with sharp typography, premium motion-graphics polish, cinematic motion\",\n negativePrompt: \"misspelled text, garbled letters, jumbled type, gibberish characters, warping, morphing, flickering, jitter, stutter, low quality, blurry, artifacts, watermark, distorted text, deformed letters\",\n },\n },\n {\n id: \"generate-video/fashion-walk\",\n name: \"Fashion Walk\",\n description: \"Runway stride, fabric in motion.\",\n group: \"Social & Reels\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"vertical fashion runway walk, {model || a striking high-fashion model in a flowing couture gown} striding confidently toward the camera with a poised runway strut, slow tracking pull-back on a smooth gimbal, vertical full-body framing with an editorial wide-aperture look and shallow depth of field, dramatic editorial lighting with a crisp rim, fabric billowing and rippling in motion at a steady, commanding catwalk pace, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, stutter, distorted anatomy, deformed face, extra limbs, mangled fabric, low quality, blurry, artifacts, watermark, text, letterboxing, horizontal bars\",\n },\n },\n {\n id: \"generate-video/weather-atmosphere\",\n name: \"Weather Atmosphere\",\n description: \"Rain / snow / fog rolling in.\",\n group: \"B-Roll & Nature\",\n data: {\n provider: \"runway-kie\",\n aspectRatio: \"16:9\",\n duration: 5,\n prompt: \"atmospheric weather rolling into {scene || a quiet forest clearing at dusk}: {weather || e.g. drifting fog, soft rain, or falling snow} sweeping across the frame, slow gentle camera drift on a locked head, wide deep-focus framing, moody motivated light filtering through the atmosphere with rich depth and haze, calm and immersive movement at an unhurried, brooding pace, serene cinematic b-roll, cinematic motion\",\n negativePrompt: \"warping, morphing, flickering, jitter, camera shake, stutter, strobing, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Viral & Effects (transformation / POV effects — best with an input image) ──\n {\n id: \"generate-video/frozen-in-ice\",\n name: \"Frozen in Ice\",\n description: \"Subject freezes into solid ice.\",\n group: \"Viral & Effects\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"9:16\",\n duration: 8,\n prompt: \"{subject || a standing person} slowly freezes into solid ice — frost spreads across the skin, crystals form, then a final shimmer as the figure becomes a glassy ice sculpture; cold blue light, drifting frost, cinematic\",\n negativePrompt: \"identity change, distorted face, deformed features, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/superhero-transformation\",\n name: \"Superhero Transformation\",\n description: \"Ordinary subject → superhero reveal.\",\n group: \"Viral & Effects\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"{subject || an ordinary person} transforms into a superhero — a swirl of energy spirals around them, a cape and suit form, then a confident heroic reveal; dynamic light streaks, dramatic, cinematic\",\n negativePrompt: \"identity change, distorted face, deformed features, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/elevator-doors-reveal\",\n name: \"Elevator Doors Reveal\",\n description: \"Doors open, objects cascade out.\",\n group: \"Viral & Effects\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"locked static camera: {subject || a stylish person} stands perfectly still inside a luxury mirrored elevator; the doors slowly slide open and {objects, e.g. roses, balloons, butterflies || roses, balloons, butterflies} cascade out and fill the space, soft cinematic light, the subject stays completely frozen, editorial\",\n negativePrompt: \"subject moving, identity change, distorted face, deformed features, camera movement, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/pov-skydive\",\n name: \"POV Skydive\",\n description: \"First-person freefall over a place.\",\n group: \"Viral & Effects\",\n data: {\n provider: \"kling-3.0\",\n aspectRatio: \"9:16\",\n duration: 5,\n prompt: \"first-person POV skydiving freefall over {location || a sweeping tropical coastline}, the ground far below rushing closer, clouds and wind streaking past, wide action-cam lens, exhilarating\",\n negativePrompt: \"warping, morphing, flickering, jitter, violent shake, stutter, motion sickness wobble, visible body or hands, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n {\n id: \"generate-video/underwater-pov\",\n name: \"Underwater POV\",\n description: \"First-person dive, sunbeams + bubbles.\",\n group: \"Viral & Effects\",\n data: {\n provider: \"veo3.1\",\n aspectRatio: \"9:16\",\n duration: 8,\n prompt: \"first-person POV diving underwater toward {subject || a sunken coral reef teeming with fish}, shafts of sunlight piercing the deep blue, drifting bubbles and gentle currents, serene and immersive\",\n negativePrompt: \"warping, morphing, flickering, jitter, violent shake, stutter, motion sickness wobble, visible body or hands, murky muddy water, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, text\",\n },\n },\n\n // ── Scene Recipes (board-driven Step-2 scenes; ports of the viral guide\n // workflows). Step 1 lives in generate-image (Reference Sheet boards /\n // Cast & Consistency grids); these stage beat-scripted scenes on seedance-2\n // — native audio, quoted-line lip-sync, up to 9 reference images. The\n // source guides' \"avoid…\" tail lives in negativePrompt, where the\n // reveal-timing line (\"noticing … before impact\") is load-bearing. Quoted\n // {line} placeholders are spoken, lip-synced dialogue. Cartoon recipes hold\n // the look with an in-prompt \"NOT photorealistic\" clause (the mirror of the\n // image catalog's \"NOT digital CG\" guard). ──\n {\n id: \"generate-video/viral-meteor-scene\",\n name: \"Viral Meteor Scene\",\n description: \"Step 2 · connect two Character Boards → the argument-meteor-tsunami-embrace short.\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 15,\n prompt:\n `Beat-scripted prestige drama using the attached character boards as the single source of truth for both characters' faces, hair and outfits. Wide cinematic shot of {location || a stormy rocky northern Atlantic coast} — gray sky, dark waves crashing, wind-whipped grass, salt mist, howling wind and distant ocean roar, mournful strings underneath. The two characters stand in profile facing each other in a heated argument, faces inches apart, shouting, eyes blazing. The first: \"{line 1 || You never listened to me.}\" The second: \"{line 2 || I gave you everything I had.}\" Slow handheld push-in. camera switch. The argument escalates, neither looks away. The first: \"{line 3 || Then why does it feel like nothing?}\" The second, voice cracking: \"{line 4 || Because you stopped looking at me.}\" Behind them unnoticed, a bright streak of fire tears across the sky — a massive flaming meteor with a long burning tail of white fire and black smoke, a faint screaming whistle, slamming into the far horizon with a blinding white-orange flash, a deafening sub-bass boom and an erupting mushroom fireball. Only at the shockwave do both flinch and freeze mid-shout, expressions snapping to shock; they slowly turn together toward the ocean, backs to camera. Wide pull-back as shockwave rings spread across the water and a colossal tsunami wall rises from the glowing crater, hellish red-orange glow crowning its top, apocalyptic and unstoppable, low rumble. camera switch. His arm comes around her shoulder, she leans into him, both silhouetted against the impossibly tall wave, embers drifting. The camera circles to a tight close-up as they turn to each other — anger gone, tender resigned love, faint tears; tragic string crescendo. camera switch. Tight close-up profile — a deep passionate kiss, hands clutching each other's coats, the colossal wave curling overhead in slow majestic motion, then crashing down with explosive force, sweeping figures and camera into a violent torrent of foam, spray and darkness — a thunderous water crash, the frame shakes hard and cuts to black mid-impact, sudden silence. Hyper-realistic premium feature-film look, cold desaturated slate-gray and steel-blue palette, anamorphic widescreen letterbox feel, shallow depth of field on close-ups, fine film grain, dramatic backlit storm rim lighting, IMAX-scale water and meteor VFX, clear lip-sync on every spoken line.`,\n negativePrompt:\n \"characters noticing the meteor before impact, meteor appearing too early, multiple meteors, comet flying upward, sunny weather, peaceful ending, slow fade out, cartoon style, on-screen text, subtitles, identity drift from the reference boards, distorted faces, out-of-sync lips, extra fingers, morphing limbs, shaky cam during dialogue, oversaturated colors, cheap CGI water, warping, flickering, stutter, low quality, blurry, artifacts, watermark\",\n },\n },\n {\n id: \"generate-video/cartoon-short-opening\",\n name: \"Cartoon Short · Opening\",\n description: \"Step 2 · connect Character + Location Boards → beat-scripted comedy setup (covet → notice → launch).\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"9:16\",\n duration: 6,\n prompt:\n `Hyper-cute premium 3D cartoon animation, NOT photorealistic — strong silhouettes, enormous expressive eyes, clean simplified shading, vivid family-friendly color. Use the attached character and location boards as the single source of truth for every character's design and the set. Opening scene of a comedy short in {location || a bright modern family kitchen with warm morning sunlight}: Beat 1 (0-1.5s) — {character 1 || the dad} holds {the prize || a glorious gourmet burger} reverently, eyes half-closed in bliss, leaning in for the first bite with a stylized sparkle. Beat 2 (1.5-3s) — quick pan to {character 2 || the lazy house cat}: one eye opens slowly, focuses on the prize, narrows in mild interest, closes again with a tiny comedic snore. Beat 3 (3-4.5s) — the camera pulls back to reveal {character 3 || the toddler} peeking around the counter, eyes scanning, then LOCKING onto the prize with an audible target-acquisition ping, eyes widening with the prize reflected in each pupil. Beat 4 (4.5-6s) — close-up of grim tactical determination, then a sudden launch into a high-speed crawl; {character 1 || the dad} glances down, sees them coming, eyes widening to enormous saucers in slow-motion silent horror; cut to black on a single dramatic comedic horn-sting. Snappy classic-animation pause-and-reaction comedy timing, exaggerated expressions, dramatic golden hero-light on the prize. Audio: cheerful warm morning score with light strings and piano, soft ambient room tone, a contented hum, a tactical music shift on a single violin pizzicato, the bright ping, the horn-sting at the cut.`,\n negativePrompt:\n \"photorealistic rendering, live-action look, realistic skin, identity drift from the reference boards, off-model characters, dull muted colors, scary or sinister tone, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, on-screen text, subtitles\",\n },\n },\n {\n id: \"generate-video/cartoon-short-chase\",\n name: \"Cartoon Short · Chase\",\n description: \"Step 2 · connect boards → the centerpiece chase (torch-run, vault, pet-explosion, slow-mo flight).\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"9:16\",\n duration: 8,\n prompt:\n `Hyper-cute premium 3D cartoon animation, NOT photorealistic — strong silhouettes, enormous expressive eyes, clean simplified shading, vivid family-friendly color, maximum comedic chase chaos. Use the attached character and location boards as the single source of truth for every character and the set. Chase scene through {location || an open-plan family home with warm side-window light}: Beat 1 (0-2s) — wide tracking shot: {character 1 || the dad} sprints holding {the prize || the burger} high overhead like a sacred torch; {character 2 || the toddler} pursues at impossibly fast comedic crawl speed and shoots UNDERNEATH {an obstacle || the dining table} without slowing, gaining ground. Beat 2 (2-4s) — a desperate one-handed vault over {a set piece || the sofa}, a throw pillow puffing feathers — revealing {character 3 || the sleeping cat} directly in the landing path; eyes widen — too late. Beat 3 (4-6s) — IMPACT: the startled {character 3 || cat} EXPLODES upward in pure panic — legs splayed, fur puffed to triple size, a silent screaming yowl, comedic exclamation marks — then scrambles onto the runner's head and face; the runner goes cross-eyed, the prize wobbles, feathers float in slow motion. Beat 4 (6-8s) — a slip into a slow-motion fall, the prize flying from his hand in a stylized spinning arc trailing golden light; all three faces track it as it lands perfectly in {character 2 || the toddler}'s reaching starfish-hands — the grim tactical face FINALLY breaking into pure joy. Cut to black on a comedic timing-pause. Classic cartoon sight-gag timing — hold the animal-explosion beat long enough to land. Audio: urgent building chase score with strings and percussion, panicked grunts, rapid pitter-patter, a dramatic vault swoosh, a pillow-puff, one comically loud yowl, a single shimmering chime as the prize flies in slow motion, a soft landing thump.`,\n negativePrompt:\n \"photorealistic rendering, live-action look, realistic skin, identity drift from the reference boards, off-model characters, missing chase beats, characters teleporting, real violence or injury, dull muted colors, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, on-screen text, subtitles\",\n },\n },\n {\n id: \"generate-video/cartoon-short-resolution\",\n name: \"Cartoon Short · Resolution\",\n description: \"Step 2 · connect boards → the heartwarming share-the-prize finale with FIN card.\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"9:16\",\n duration: 6,\n prompt:\n `Hyper-cute premium 3D cartoon animation with warm soft lighting, NOT photorealistic — the heartwarming finale of a comedy short, vivid family-friendly color, slower tender timing. Use the attached character and location boards as the single source of truth for every character and the set. Resolution scene in {location || the living-room floor in warm golden morning light, a few feathers still drifting down}: Beat 1 (0-2s) — wide warm establishing shot: the three characters sit in a perfect triangle around {the prize || the burger}, now divided into three fair portions on a plate between them; {character 2 || the toddler} is mid-bite with comically bulging cheeks, {character 3 || the cat} regards its own portion with regal approval. Beat 2 (2-4s) — slow push-in on {character 1 || the dad}: he looks at one happy face, then the other, and a slow tender realization-smile spreads — it was never about the prize; he picks a stray crumb from his chin and offers it to {character 3 || the cat}, who accepts with a regal head-tilt. Beat 3 (4-6s) — final warm hero shot: all three eat together in synchronized contentment — a blissful closed-eye first bite, another enormous cheek-stuffing bite, a delicate paw-assisted nibble — feathers drifting in slow motion, the warm light brightening around them like a hug; final hold, then a tiny stylized FIN title card in warm gold lettering. Gentle classic-animation resolution timing; the triangle composition is the visual key; every character equally important in the final frame. Audio: warm gentle piano-and-strings score, three distinct contented eating sounds, a happy baby-sigh, a soft purring trill, a warm chuckle, a final musical sting on the FIN card.`,\n negativePrompt:\n \"photorealistic rendering, live-action look, realistic skin, identity drift from the reference boards, off-model characters, frantic pacing, sad or bitter tone, dull muted colors, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, subtitles, misspelled FIN card text\",\n },\n },\n {\n id: \"generate-video/two-character-dialogue\",\n name: \"Two-Character Dialogue\",\n description: \"Step 2 · connect Character Boards → a charged two-line exchange with lip-sync and a held beat.\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 10,\n prompt:\n `Board-driven dialogue scene using the attached character boards as the single source of truth for every speaker's face, hair and outfit. Two characters in {location || a dim late-night kitchen with one practical light on} play a charged exchange: the framing opens on a balanced two-shot with a slow handheld push-in as tension builds. The first speaks: \"{line 1 || I wasn't going to tell you like this.}\" camera switch to a clean single on the second, who answers: \"{line 2 || Then you should have said nothing at all.}\" camera switch back to a tighter two-shot for the silent beat after — held eye contact, a breath, an unresolved ending on held tension. Naturalistic performances with subtle facial micro-expressions, clear lip-sync on every spoken line, motivated practical lighting with soft falloff, shallow depth of field, fine film grain, restrained cinematic color grade, intimate drama blocking with believable eye-lines. Audio: quiet room tone, a low sparse score entering under the second line, the spoken dialogue clean and intelligible.`,\n negativePrompt:\n \"out-of-sync lips, garbled speech, identity drift from the reference boards, swapped speakers, distorted faces, cartoon style, on-screen text, subtitles, jump cuts during lines, shaky cam during dialogue, warping, morphing, flickering, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark\",\n },\n },\n {\n id: \"generate-video/disaster-reveal\",\n name: \"Disaster Reveal\",\n description: \"Step 2 · connect boards → unnoticed background catastrophe, shockwave, the slow turn.\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 10,\n prompt:\n `Board-driven spectacle scene using the attached character boards (and location board if attached) as the single source of truth. Characters in the foreground of {location || a windswept clifftop overlook} are absorbed in {foreground action || an animated argument}, NOT noticing the background. Behind them, {the event || a colossal meteor streaks down and detonates on the horizon} — staged in three beats: first a subtle distant cue only the audience catches; then the full event erupting with a blinding flash and a rolling shockwave; only when the shockwave arrives do the characters flinch, freeze, and slowly turn together toward it, backs to camera, dwarfed by the aftermath as {the aftermath || a glowing dust wall climbs the sky}. Wide cinematic staging with deep layered depth, the characters small against the spectacle, dramatic scale contrast, motivated environmental lighting that shifts when the event hits, fine film grain, premium feature-film VFX look. Audio: ambient location sound, a faint early whistle or rumble the characters miss, a deafening impact with sub-bass, then stunned near-silence under wind.`,\n negativePrompt:\n \"characters noticing the event before the shockwave, event happening too early, characters reacting instantly, multiple simultaneous events, cartoon style, identity drift from the reference boards, distorted faces, on-screen text, subtitles, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark, cheap CGI\",\n },\n },\n {\n id: \"generate-video/chase-scene\",\n name: \"Chase Scene\",\n description: \"Step 2 · connect boards → three-beat pursuit with an obstacle gag and a near-catch.\",\n group: \"Scene Recipes\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n prompt:\n `Board-driven chase scene using the attached character boards as the single source of truth for every character. {pursued || A breathless courier clutching a satchel} flees through {location || a crowded night market}, pursued by {pursuer || two relentless figures in dark coats}. Three-beat choreography: Beat 1 — a fast tracking shot weaving with the pursued through obstacles, the pursuers gaining. Beat 2 — an obstacle beat at {set piece || a fruit stall}: the pursued slides under it cleanly while the pursuers crash through in a burst of debris. Beat 3 — a near-catch lunge, fingertips brushing the satchel, then the pursued breaks away around a corner and the camera skids to a halt on the empty turn, the pursuers arriving a beat too late. Dynamic handheld energy with motivated whip-pans between beats, kinetic but readable action with clear screen direction, practical motivated lighting, shallow focus pulls between pursued and pursuers, fine film grain, gritty cinematic grade. Audio: a driving percussive chase score, layered footfalls and crowd reactions, the debris crash, hard breathing close to camera, the score cutting to a tense pulse on the empty corner.`,\n negativePrompt:\n \"identity drift from the reference boards, swapped pursuer and pursued, characters teleporting, unreadable screen direction, motion-sickness shake, cartoon style, on-screen text, subtitles, warping, morphing, flickering, jitter, stutter, distorted anatomy, extra limbs, low quality, blurry, artifacts, watermark\",\n },\n },\n // ── Seedance Director (official Seedance 2.0 doctrine — BytePlus prompt guide).\n // No negativePrompt by design: Seedance has no native negative param, so the\n // fallback would append \"Avoid: …\" to the prompt — constraints live in-prompt\n // instead. Audio is cued with the official symbols: (music), <sfx>, \"dialogue\".\n {\n id: \"generate-video/seedance-calm-scene\",\n name: \"Calm Scene Close-Up\",\n description: \"Hyper-real quiet moment with layered ambient audio.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"Extreme close-up of {subject || a young woman in a thick knitted wool sweater holding a steaming ceramic mug}, 85mm portrait lens, fixed camera with a slow imperceptible push-in, shallow depth of field. {environment || A dark wooden coffee shop interior at golden hour}, soft window light mixed with cool side light, subtle volumetric dust in the air. She slowly lifts the mug, eyes softening, the corners of her mouth rising faintly. Hyper-realistic skin and fabric texture, film grain, cinematic color grading. (soft muffled jazz piano playing far away)<steady rain tapping on the window glass, slow gentle breathing> HD, rich details, cinematic texture, natural colors, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-multi-shot-story\",\n name: \"Multi-Shot Mini Story\",\n description: \"Three-shot storyboard with dialogue and per-shot audio.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 12,\n generateAudio: true,\n prompt:\n \"{subject || A young courier} in {environment || a rainy neon-lit city street at night}. Shot 1: wide establishing shot, slow push-in; the courier weaves through the crowd, shoulders hunched against the rain. <city traffic, rain on umbrellas> Shot 2: medium tracking shot from the side; they stop under a doorway, check a small parcel, slightly lower their head. (low tense synth pulse building) Shot 3: close-up; they look up, the corners of the mouth rising into a relieved smile, and say \\\"It's finally here\\\". The camera slowly pulls back and freezes. Warm-against-cold color contrast, cinematic documentary style. HD, rich details, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-continuous-take\",\n name: \"One Continuous Take\",\n description: \"Single unbroken FPV shot along a chronological route.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 10,\n generateAudio: true,\n prompt:\n \"ONE CONTINUOUS UNINTERRUPTED TAKE, single unbroken shot, no cuts. FPV camera flying smoothly: it starts {route_start || diving from a glass rooftop}, glides {route_mid || through an open window into a sunlit empty office where loose papers swirl in the draft}, and exits {route_end || through the far doorway into a dark stairwell}. The environment unfolds as one chronological route; dynamic lighting shifts from bright exterior sun to cold interior shadow; one fluid camera path at steady speed. <howling wind, papers rustling, a deep echo as the space closes in> Cinematic motion, photorealistic render. HD, rich details, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-action-beat\",\n name: \"Action Beat (Chase)\",\n description: \"Two-shot parkour beat — body-specific action, one move per shot.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"{subject || A parkour runner in a worn gray hoodie} sprints down {environment || a narrow brick alley at dusk}. Shot 1: low tracking shot from behind; he pushes hard off the ground and vaults a low barrier, arms swinging with momentum. Shot 2: handheld side shot with motion blur; he lands, knees bending to absorb the impact, and keeps running without breaking stride. <pounding footsteps, sharp breathing, fabric rustling>(fast percussive beat)High-contrast dusk light, gritty cinematic style. HD, rich details, stable picture, accurate anatomy, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-food-macro\",\n name: \"Food Macro Commercial\",\n description: \"Sizzling macro food shot with foley-rich native audio.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"Extreme macro shot of {dish || a gourmet smash burger on a charred rustic wooden board}. The camera glides slowly across the surface and tilts up toward the top. {action || A thick strand of glossy melted cheddar slowly falls over the hot patty}, dense steam rising, glistening highlights on the juicy surface. Harsh warm backlight to catch the steam, soft fill light, brutal shallow depth of field. <loud crisp sizzling, soft bubbling, one heavy juicy drip> Commercial food styling, photorealistic textures. HD, rich macro details, cinematic texture, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-film-noir\",\n name: \"Film Noir Scene\",\n description: \"Chiaroscuro single-source lighting, oppressive mood.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"{subject || A detective in a long trench coat} stands in {environment || a dead-end alley at midnight}. Extreme low-key chiaroscuro lighting: a single flickering tungsten street lamp directly above carves a harsh cone of light, the rest of the frame sinks into deep black shadow. Fixed camera, slow imperceptible push-in. His face stays half-hidden under the hat brim; he slowly raises his head into the light. Film noir, heavy film grain, deep blacks, moody oppressive atmosphere. <hissing wind, the low broken electrical hum of the lamp, distant thunder>(sparse lonely saxophone, very quiet)HD, cinematic contrast, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-asmr-foley\",\n name: \"ASMR Foley Close-Up\",\n description: \"First-person trigger sounds, no music — pure foley.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2-fast\",\n aspectRatio: \"9:16\",\n duration: 10,\n generateAudio: true,\n prompt:\n \"Immersive first-person hand ASMR video. Close-up shot under warm, soft lighting, fixed camera. A pair of slender hands gently triggers {objects || frosted glass, plush fabric, an acrylic board, bubble wrap and a wooden comb} in sequence: light scratching, slow rubbing, gentle tapping, soft pinching. Finger movements are slow, gentle and continuous. <pure natural trigger sounds only: scratching, rubbing, tapping, popping> No background music. Relaxing, healing visual atmosphere. HD, rich details, natural colors, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-silhouette-crowd\",\n name: \"Epic Silhouette Crowd\",\n description: \"Backlit crowd at scale — silhouettes hide face complexity.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"{crowd || A massive army} marching over {terrain || a hill ridge} at sunset, backlit by a blazing low sun so the crowd reads as dark epic silhouettes against the burning orange sky. 24mm wide-angle establishing shot, slow lateral pan, waist-high dust haze drifting through the ranks. One {foreground_figure || banner-bearer} in the near foreground in sharp focus, the masses soft behind. (slow war drums building)<rhythmic marching feet, wind sweeping over the ridge> Epic cinematic scale, volumetric light. HD, rich details, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-speed-ramp-duel\",\n name: \"Speed-Ramp Duel\",\n description: \"Wuxia clash with ultra-slow-motion ramp (official showcase).\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 10,\n generateAudio: true,\n prompt:\n \"A wuxia duel in {environment || a rain-soaked bamboo forest}. Shot 1: the camera slowly pushes in between {fighter_a || a white-clad swordsman} and {fighter_b || a straw-caped blademaster}, focus shifting between falling raindrops and sword hilts; the air is oppressive and only rain is heard. <heavy rain, a low rumble of thunder> Shot 2: both charge at once; a fast side tracking shot catches mud splashing under their steps. At the exact moment the weapons clash, the footage switches to ultra slow motion, showing ring-shaped shockwaves of rainwater blasted away by the blades, then normal speed resumes as they land back-to-back. (one sharp orchestral hit on the clash, then silence)Cinematic wuxia style, high contrast. HD, rich details, stable picture, accurate anatomy, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-vertical-dance-reel\",\n name: \"Vertical Dance Reel\",\n description: \"9:16 music-driven dance edit with whip-pan energy.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2-fast\",\n aspectRatio: \"9:16\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"Vertical reel of {subject || a street dancer in a neon-lit underpass}. Shot 1: full-body fixed low-angle shot; she hits sharp isolations, arms snapping in time with the beat. Shot 2: quick whip pan into a closer medium shot; footwork detail, sneakers splashing a shallow neon puddle. Shot 3: high-angle overhead shot for the final frozen pose. Movement speed and cut rhythm follow the music. (aggressive bass-heavy phonk beat driving the edit)<sneaker squeaks, water splashes> Neon magenta and cyan rim light, cinematic motion. HD, rich details, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n {\n id: \"generate-video/seedance-creature-feature\",\n name: \"Creature Feature\",\n description: \"Mythic creature anchored to real-animal anatomy.\",\n group: \"Seedance Director\",\n data: {\n provider: \"seedance-2\",\n aspectRatio: \"16:9\",\n duration: 8,\n generateAudio: true,\n prompt:\n \"{creature || A monstrous yeti with the physique and bone structure of a giant silverback gorilla}, {texture || thick matted white fur with snow crusted on the shoulders}, charges forward and smashes both fists into the ground. Low-angle ground shot looking up to emphasize its scale, heavy camera shake on impact, snow and debris bursting toward the lens. Overcast mountain light, volumetric breath mist around its muzzle. <deep guttural roar, the crunch of impact, debris scattering>(low ominous brass drone)Biologically accurate anatomy, epic cinematic scale. HD, sharp micro-details, stable picture, keep it subtitle-free, do not generate a watermark.\",\n },\n },\n // ── Video Editing ─────────────────────────────────────────────────────────\n // Seedance 2.5 EDITS a wired reference clip when the prompt reads as an edit\n // instruction. Edit mode takes the source clip's own ratio and length, so the\n // preset ships the exact shape the provider requires — Adaptive + Auto\n // (duration -1) — and the run goes through on the first submit. The user's\n // own sentence is the whole prompt: the preset only supplies the pre & post\n // text, with the clip bound as {video:1} (wire it into Video Refs).\n {\n id: \"generate-video/edit-video\",\n name: \"Edit Video\",\n description: \"Change a wired clip by instruction — keeps its length, ratio and everything you don't mention.\",\n group: \"Video Editing\",\n data: {\n provider: \"seedance-2-5\",\n aspectRatio: \"adaptive\",\n duration: -1,\n generateAudio: true,\n promptPrefix: \"edit {video:1} as follows:\\n\",\n promptSuffix:\n \"Keep everything else in the clip unchanged: the same people, motion, framing and timing. Keep it subtitle-free, do not generate a watermark.\",\n },\n },\n\n // ── UGC & Creator (everyday talking-to-camera clips) ──────────────────────\n {\n id: \"generate-video/ugc-talking-head\",\n name: \"UGC Talking Head\",\n description: \"Talks to the viewer at home — type the line to be spoken; write numbers as words.\",\n group: \"UGC & Creator\",\n data: { ...UGC_VIDEO, prompt: ugcPrompt(`${TALKING_AT_HOME} hands move naturally while talking and hold nothing.`, ugcSpeech(\"I cut my weekly reporting from three hours to twenty minutes.\"), UGC_PAUSE) },\n },\n {\n id: \"generate-video/ugc-product-closer\",\n name: \"UGC Product Closer\",\n description: \"Holds your product up while talking — wire a face photo and a product photo; type the line, numbers as words.\",\n group: \"UGC & Creator\",\n data: { ...UGC_VIDEO, prompt: ugcPrompt(`${TALKING_AT_HOME} hands move naturally while talking and hold nothing until the first word.`, \"In the pause before the first word, they glance down for a moment as one hand reaches for the product; their eyes are back on the viewer as they say the first word and the hand lifts {image:2:product} into view and holds it up beside their face, turned to the viewer as it is in its photo, while they talk; the other hand keeps moving naturally.\", ugcSpeech(\"Honestly, this is the one I keep coming back to.\"), UGC_PAUSE, \"After the last word, they keep it up beside their face and tilt it slowly toward the viewer.\", \"Then they lower it with a small smile.\") },\n },\n {\n id: \"generate-video/handheld-unboxing\",\n name: \"Handheld Unboxing\",\n description: \"Opens a box with their own hands and reveals your product — wire a face photo and a product photo.\",\n group: \"UGC & Creator\",\n data: { ...UGC_VIDEO, prompt: ugcPrompt(\n \"Close on a table at home, seen the whole time through the eyes of {image:1:person} as they look down at it.\",\n \"From the first moment their own two hands are on the lid of a plain box, both forearms coming up from the bottom of the frame.\",\n \"One adult's left and right hand, no one else's; only their hands and forearms are seen.\",\n \"They open the box at once and lift out {image:2:product} with both hands, clear of the box by the middle of the clip.\",\n \"Until the end they hold it up in front of them, the whole of it in frame, tilting it slowly in the light with the same side toward them.\",\n \"Daylight, deep focus from their hands to the background, plain colour, the framing a little crooked, a faint natural sway.\",\n ) },\n },\n {\n id: \"generate-video/get-ready-with-me\",\n name: \"Get Ready With Me\",\n description: \"Gets ready at a mirror while chatting — type the line, numbers as words.\",\n group: \"UGC & Creator\",\n data: { ...UGC_VIDEO, prompt: ugcPrompt(\"{image:1:person} at a bathroom mirror applies a little makeup while chatting to the viewer, everyday light, deep focus, plain colour.\", ugcSpeech(\"Two minutes and I'm ready to go.\"), UGC_PAUSE) },\n },\n {\n id: \"generate-video/street-qa\",\n name: \"Street-Style Q&A\",\n description: \"A staged street-interview look — cast it yourself; type a short answer, numbers as words.\",\n group: \"UGC & Creator\",\n data: { ...UGC_SHORT_VIDEO, prompt: ugcPrompt(\"A staged street-interview look: {image:1:person} stands on a sidewalk answering an interviewer who stays out of frame, beside the viewer; only the interviewer's hand is seen, holding a plain microphone out toward them from a lower corner of the frame, passers-by soft in the background.\", \"Their eyes stay on the interviewer the whole time, off to the side the microphone comes from.\", \"The answer starts at once, with no wait before the first word.\", ugcSpeech(\"I'd say about twenty minutes a day, tops.\"), \"After the last word, a small laugh and a shrug, eyes still on the interviewer.\") },\n },\n {\n id: \"generate-video/reaction-shot\",\n name: \"Reaction Shot\",\n description: \"A quick reaction to something out of frame.\",\n group: \"UGC & Creator\",\n data: { ...UGC_SHORT_VIDEO, prompt: ugcPrompt(\"{image:1:person} sits on a couch at home, a cushion and a lamp behind them, looking off to one side at something just out of frame; at eye level, the framing a little crooked, deep focus, plain colour, a faint natural sway.\", \"Almost at once, what they see catches them by surprise: their eyes go wide, a hand flies to their mouth and they break into a laugh, their shoulders shaking.\", \"Still laughing, they glance briefly at the viewer, then look back off to the side, shaking their head.\", \"A short exclamation at most.\") },\n },\n {\n id: \"generate-video/acts-on-phone\",\n name: \"Acts on Phone, Screen Hidden\",\n description: \"Taps a phone whose screen faces away — type the line, numbers as words.\",\n group: \"UGC & Creator\",\n data: { ...UGC_VIDEO, prompt: ugcPrompt(`${TALKING_AT_HOME} hands move naturally while talking and hold nothing until the last seconds.`, ugcSpeech(\"That's the whole setup, and it took me five minutes.\"), UGC_PAUSE, \"In the last seconds the person glances down, picks up a phone and looks into its screen while typing on it for a moment, then looks back up at the viewer; the screen faces away from the camera.\") },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\nexport const GENERATE_MUSIC_PRESETS: readonly FactoryPreset[] = [\n // ── By Use-Case ──────────────────────────────────────────────────────────\n {\n id: \"generate-music/lofi-study\",\n name: \"Lo-fi Study Beat\",\n description: \"Mellow focus beat.\",\n group: \"By Use-Case\",\n data: {\n genre: \"lofi\",\n mood: \"chill, relaxed, nostalgic\",\n instrumental: true,\n duration: 30,\n prompt: \"lo-fi hip-hop study beat, mellow Rhodes piano, vinyl crackle, soft boom-bap drums, around 75 BPM\",\n },\n },\n {\n id: \"generate-music/podcast-intro\",\n name: \"Podcast Intro\",\n description: \"Short energetic opener.\",\n group: \"By Use-Case\",\n data: {\n genre: \"electronic\",\n mood: \"upbeat, confident\",\n instrumental: true,\n duration: 15,\n prompt: \"short energetic podcast intro, modern and catchy synth hook, clean punchy beat\",\n },\n },\n {\n id: \"generate-music/cinematic-trailer\",\n name: \"Cinematic Trailer\",\n description: \"Epic orchestral build.\",\n group: \"By Use-Case\",\n data: {\n genre: \"cinematic\",\n mood: \"epic, dramatic, intense\",\n instrumental: true,\n duration: 30,\n prompt: \"epic cinematic trailer cue, full orchestra, taiko drums, brass swells, rising tension into a powerful hit\",\n },\n },\n {\n id: \"generate-music/corporate-upbeat\",\n name: \"Corporate Upbeat\",\n description: \"Bright, motivational bed.\",\n group: \"By Use-Case\",\n data: {\n genre: \"pop\",\n mood: \"uplifting, optimistic, motivational\",\n instrumental: true,\n duration: 30,\n prompt: \"upbeat corporate background music, bright piano, claps, positive and clean, around 120 BPM\",\n },\n },\n {\n id: \"generate-music/vlog-background\",\n name: \"Vlog Background\",\n description: \"Feel-good, unobtrusive.\",\n group: \"By Use-Case\",\n data: {\n genre: \"pop\",\n mood: \"happy, light, breezy\",\n instrumental: true,\n duration: 30,\n prompt: \"light feel-good vlog background, acoustic guitar, claps, warm and unobtrusive\",\n },\n },\n {\n id: \"generate-music/ambient-loop\",\n name: \"Ambient Loop\",\n description: \"Calm evolving soundscape.\",\n group: \"By Use-Case\",\n data: {\n genre: \"ambient-genre\",\n mood: \"calm, peaceful, serene\",\n instrumental: true,\n duration: 30,\n prompt: \"ambient soundscape, soft evolving synth pads, gentle textures, meditative and seamless\",\n },\n },\n {\n id: \"generate-music/edm-drop\",\n name: \"EDM Drop\",\n description: \"Festival build and drop.\",\n group: \"By Use-Case\",\n data: {\n genre: \"electronic\",\n mood: \"euphoric, energetic\",\n instrumental: true,\n duration: 30,\n prompt: \"festival EDM, big synth leads, sidechain bass, build-up and a powerful drop, around 128 BPM\",\n },\n },\n {\n id: \"generate-music/game-loop\",\n name: \"Game Loop\",\n description: \"Catchy adventurous loop.\",\n group: \"By Use-Case\",\n data: {\n genre: \"video-game\",\n mood: \"playful, adventurous\",\n instrumental: true,\n duration: 30,\n prompt: \"looping video game background music, chiptune-inspired, catchy melody, energetic\",\n },\n },\n\n // ── By Mood / Score (instrumental scoring beds) ──────────────────────────\n {\n id: \"generate-music/score-uplifting\",\n name: \"Uplifting\",\n description: \"Hopeful, building score.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"cinematic\",\n mood: \"uplifting, hopeful, inspiring\",\n instrumental: true,\n duration: 30,\n prompt: \"uplifting inspirational orchestral score, building piano and strings, hopeful crescendo\",\n },\n },\n {\n id: \"generate-music/score-emotional\",\n name: \"Emotional\",\n description: \"Tender, moving piano.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"cinematic\",\n mood: \"emotional, melancholic, tender\",\n instrumental: true,\n duration: 30,\n prompt: \"emotional piano score, soft strings, intimate and moving, slow tempo\",\n },\n },\n {\n id: \"generate-music/score-tense\",\n name: \"Tense / Suspense\",\n description: \"Pulsing underscore.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"cinematic\",\n mood: \"tense, suspenseful, dark\",\n instrumental: true,\n duration: 30,\n prompt: \"suspenseful underscore, pulsing low strings, ticking tension, ominous and building\",\n },\n },\n {\n id: \"generate-music/score-epic\",\n name: \"Epic / Heroic\",\n description: \"Triumphant, powerful.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"cinematic\",\n mood: \"epic, heroic, powerful\",\n instrumental: true,\n duration: 30,\n prompt: \"epic heroic orchestral score, soaring brass, pounding drums, triumphant\",\n },\n },\n {\n id: \"generate-music/score-happy\",\n name: \"Happy / Playful\",\n description: \"Cheerful and light.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"pop\",\n mood: \"happy, playful, quirky\",\n instrumental: true,\n duration: 30,\n prompt: \"happy playful tune, ukulele, whistling, claps, cheerful and bouncy\",\n },\n },\n {\n id: \"generate-music/score-dark\",\n name: \"Dark / Brooding\",\n description: \"Ominous atmosphere.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"electronic\",\n mood: \"dark, brooding, ominous\",\n instrumental: true,\n duration: 30,\n prompt: \"dark brooding atmosphere, deep drones, distant percussion, cinematic dread\",\n },\n },\n {\n id: \"generate-music/score-romantic\",\n name: \"Romantic\",\n description: \"Warm, heartfelt.\",\n group: \"By Mood / Score\",\n data: {\n genre: \"classical\",\n mood: \"romantic, warm, tender\",\n instrumental: true,\n duration: 30,\n prompt: \"romantic score, warm strings and piano, gentle and heartfelt\",\n },\n },\n\n // ── By Genre (starting points) ───────────────────────────────────────────\n {\n id: \"generate-music/ambient-cinematic\",\n name: \"Ambient Cinematic\",\n description: \"Atmospheric instrumental bed.\",\n group: \"By Genre\",\n data: {\n genre: \"cinematic\",\n mood: \"atmospheric\",\n instrumental: true,\n duration: 30,\n prompt: \"atmospheric cinematic ambient bed, evolving pads, subtle swells\",\n },\n },\n {\n id: \"generate-music/genre-lofi\",\n name: \"Lo-fi Hip-Hop\",\n description: \"Laid-back jazzy beat.\",\n group: \"By Genre\",\n data: {\n genre: \"lofi\",\n mood: \"chill, mellow\",\n instrumental: true,\n duration: 30,\n prompt: \"lo-fi hip-hop, jazzy chords, vinyl warmth, laid-back groove\",\n },\n },\n {\n id: \"generate-music/genre-edm\",\n name: \"EDM / House\",\n description: \"Club-energy four-on-the-floor.\",\n group: \"By Genre\",\n data: {\n genre: \"electronic\",\n mood: \"energetic, euphoric\",\n instrumental: true,\n duration: 30,\n prompt: \"house / EDM, four-on-the-floor beat, catchy plucky synths, club energy\",\n },\n },\n {\n id: \"generate-music/genre-rock\",\n name: \"Rock\",\n description: \"Driving electric guitars.\",\n group: \"By Genre\",\n data: {\n genre: \"rock\",\n mood: \"energetic, driving\",\n instrumental: true,\n duration: 30,\n prompt: \"energetic rock instrumental, distorted electric guitars, driving drums, powerful\",\n },\n },\n {\n id: \"generate-music/genre-jazz\",\n name: \"Smooth Jazz\",\n description: \"Late-night sax and brushes.\",\n group: \"By Genre\",\n data: {\n genre: \"jazz\",\n mood: \"smooth, relaxed, sophisticated\",\n instrumental: true,\n duration: 30,\n prompt: \"smooth jazz, warm saxophone, brushed drums, walking bass, late-night mood\",\n },\n },\n {\n id: \"generate-music/genre-orchestral\",\n name: \"Orchestral\",\n description: \"Grand cinematic ensemble.\",\n group: \"By Genre\",\n data: {\n genre: \"classical\",\n mood: \"grand, cinematic\",\n instrumental: true,\n duration: 30,\n prompt: \"full orchestral piece, sweeping strings, brass and woodwinds, dramatic and rich\",\n },\n },\n {\n id: \"generate-music/genre-synthwave\",\n name: \"Synthwave / Retro\",\n description: \"80s neon nostalgia.\",\n group: \"By Genre\",\n data: {\n genre: \"electronic\",\n mood: \"nostalgic, retro, cool\",\n instrumental: true,\n duration: 30,\n prompt: \"80s synthwave, retro analog synths, pulsing bass, neon nostalgia, around 110 BPM\",\n },\n },\n {\n id: \"generate-music/genre-funk\",\n name: \"Funk / Soul\",\n description: \"Groovy, danceable.\",\n group: \"By Genre\",\n data: {\n genre: \"funk\",\n mood: \"groovy, fun\",\n instrumental: true,\n duration: 30,\n prompt: \"funky groove, slap bass, wah guitar, tight horns, danceable\",\n },\n },\n // ── More By Use-Case ─────────────────────────────────────────────────────\n {\n id: \"generate-music/trailer-riser\",\n name: \"Trailer Riser / Braam\",\n description: \"Pure rising tension hit.\",\n group: \"By Use-Case\",\n data: { genre: \"cinematic\", mood: \"tense, building\", instrumental: true, duration: 15, prompt: \"cinematic trailer riser and braam hit, rising tension whoosh into a deep impact, no melody\" },\n },\n {\n id: \"generate-music/calm-corporate\",\n name: \"Calm Corporate / Tech\",\n description: \"Soft, professional bed.\",\n group: \"By Use-Case\",\n data: { genre: \"electronic\", mood: \"calm, professional\", instrumental: true, duration: 30, prompt: \"calm corporate tech bed, soft synth pads, gentle pulse, steady and unobtrusive\" },\n },\n {\n id: \"generate-music/holiday\",\n name: \"Holiday / Festive\",\n description: \"Warm seasonal cheer.\",\n group: \"By Use-Case\",\n data: { genre: \"holiday\", mood: \"festive, warm, cheerful\", instrumental: true, duration: 30, prompt: \"festive holiday music, sleigh bells, warm orchestration, cheerful and cozy\" },\n },\n {\n id: \"generate-music/kids\",\n name: \"Kids / Children's\",\n description: \"Playful and simple.\",\n group: \"By Use-Case\",\n data: { genre: \"children\", mood: \"playful, happy\", instrumental: true, duration: 30, prompt: \"playful children's music, simple cheerful melody, xylophone and ukulele, bouncy and friendly\" },\n },\n {\n id: \"generate-music/meditation-spa\",\n name: \"Meditation / Spa\",\n description: \"Healing singing bowls.\",\n group: \"By Use-Case\",\n data: { genre: \"ambient-genre\", mood: \"serene, healing\", instrumental: true, duration: 30, prompt: \"meditation and spa music, singing bowls, soft drones, gentle and calming, very slow\" },\n },\n {\n id: \"generate-music/workout\",\n name: \"Workout / Gym\",\n description: \"High-energy motivation.\",\n group: \"By Use-Case\",\n data: { genre: \"electronic\", mood: \"energetic, motivational\", instrumental: true, duration: 30, prompt: \"high-energy workout music, driving beat, motivational synths, around 140 BPM\" },\n },\n // ── More By Genre ────────────────────────────────────────────────────────\n {\n id: \"generate-music/trap\",\n name: \"Trap Beat\",\n description: \"Booming 808s, dark.\",\n group: \"By Genre\",\n data: { genre: \"hip-hop\", mood: \"dark, hard\", instrumental: true, duration: 30, prompt: \"trap beat, booming 808s, crisp rapid hi-hats, dark and moody\" },\n },\n {\n id: \"generate-music/dnb\",\n name: \"Drum & Bass\",\n description: \"Fast breakbeats, deep bass.\",\n group: \"By Genre\",\n data: { genre: \"electronic\", mood: \"fast, energetic\", instrumental: true, duration: 30, prompt: \"drum and bass, fast breakbeats, deep rolling bassline, energetic, around 174 BPM\" },\n },\n {\n id: \"generate-music/afrobeats\",\n name: \"Afrobeats\",\n description: \"Warm syncopated groove.\",\n group: \"By Genre\",\n data: { genre: \"afrobeats\", mood: \"groovy, warm\", instrumental: true, duration: 30, prompt: \"afrobeats, syncopated percussion, warm bass groove, bright melodies, danceable\" },\n },\n {\n id: \"generate-music/country\",\n name: \"Country / Americana\",\n description: \"Acoustic, heartfelt.\",\n group: \"By Genre\",\n data: { genre: \"country\", mood: \"warm, heartfelt\", instrumental: true, duration: 30, prompt: \"country americana, acoustic and slide guitar, warm storytelling feel\" },\n },\n {\n id: \"generate-music/phonk\",\n name: \"Phonk\",\n description: \"Dark drift-phonk for reels.\",\n group: \"By Genre\",\n data: { genre: \"hip-hop\", mood: \"dark, aggressive\", instrumental: true, duration: 30, prompt: \"drift phonk, distorted 808 cowbell, dark menacing beat, lo-fi grit\" },\n },\n {\n id: \"generate-music/reggae\",\n name: \"Reggae / Dub\",\n description: \"Laid-back island groove.\",\n group: \"By Genre\",\n data: { genre: \"reggae\", mood: \"laid-back, sunny\", instrumental: true, duration: 30, prompt: \"reggae dub, off-beat skank guitar, deep dub bassline, relaxed island groove\" },\n },\n]\n\nexport const SUNO_GENERATE_PRESETS: readonly FactoryPreset[] = [\n // ── By Use-Case ──────────────────────────────────────────────────────────\n {\n id: \"suno-generate/lofi-study\",\n name: \"Lo-fi Study\",\n description: \"Mellow focus beat.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"lo-fi hip-hop, chill and mellow, jazzy Rhodes chords, vinyl crackle, soft boom-bap drums, Andante 80 BPM, instrumental\",\n },\n },\n {\n id: \"suno-generate/podcast-intro\",\n name: \"Podcast Intro\",\n description: \"Short confident opener.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"modern podcast intro, upbeat and confident, catchy synth hook, punchy beat, Allegro, instrumental\",\n },\n },\n {\n id: \"suno-generate/cinematic-trailer\",\n name: \"Cinematic Trailer\",\n description: \"Epic orchestral build.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"epic cinematic trailer, dramatic and intense, full orchestra, taiko drums, brass swells, crescendo into a powerful hit, instrumental\",\n },\n },\n {\n id: \"suno-generate/corporate-upbeat\",\n name: \"Corporate Upbeat\",\n description: \"Bright, motivational.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"upbeat corporate, optimistic and motivational, bright piano, claps, clean electronic beat, Allegro 120 BPM, instrumental\",\n },\n },\n {\n id: \"suno-generate/vlog-background\",\n name: \"Vlog Background\",\n description: \"Feel-good acoustic bed.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"feel-good vlog background, light and breezy, acoustic guitar, claps, warm and unobtrusive, Andante, instrumental\",\n },\n },\n {\n id: \"suno-generate/ambient-loop\",\n name: \"Ambient Loop\",\n description: \"Calm meditative pads.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"ambient soundscape, calm and meditative, soft evolving synth pads, gentle textures, reverb-heavy, Adagio, instrumental\",\n },\n },\n {\n id: \"suno-generate/edm-drop\",\n name: \"EDM Drop\",\n description: \"Festival build and drop.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"festival EDM, euphoric and energetic, big supersaw leads, sidechain bass, build-up and powerful drop, Allegro 128 BPM, instrumental\",\n },\n },\n {\n id: \"suno-generate/game-chiptune\",\n name: \"Game Chiptune\",\n description: \"Playful 8-bit loop.\",\n group: \"By Use-Case\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"video game chiptune, playful and adventurous, 8-bit synths, catchy melody, energetic, instrumental\",\n },\n },\n\n // ── By Genre ─────────────────────────────────────────────────────────────\n {\n id: \"suno-generate/genre-lofi\",\n name: \"Lo-fi Hip-Hop\",\n description: \"Dusty laid-back groove.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"lo-fi hip-hop, jazzy and mellow, dusty Rhodes chords, vinyl warmth, laid-back boom-bap groove, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-house\",\n name: \"EDM / House\",\n description: \"Club-energy four-on-the-floor.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"house EDM, energetic and euphoric, four-on-the-floor beat, catchy plucky synths, club energy, Allegro 124 BPM, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-rock\",\n name: \"Rock\",\n description: \"Driving anthemic guitars.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"rock anthem, energetic and driving, distorted electric guitars, pounding drums, anthemic, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-jazz\",\n name: \"Smooth Jazz\",\n description: \"Late-night sophistication.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"smooth jazz, relaxed and sophisticated, warm saxophone, brushed drums, walking bass, late-night, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-ambient\",\n name: \"Ambient\",\n description: \"Spacious and serene.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"ambient, serene and spacious, lush synth pads, field-recording textures, slow and meditative, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-orchestral\",\n name: \"Orchestral\",\n description: \"Grand cinematic ensemble.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"epic orchestral, grand and cinematic, sweeping strings, brass, woodwinds, timpani, dramatic, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-synthwave\",\n name: \"Synthwave / Retro\",\n description: \"80s neon nostalgia.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"80s synthwave, nostalgic and cool, retro analog synths, pulsing bass, gated drums, neon, Andante 110 BPM, instrumental\",\n },\n },\n {\n id: \"suno-generate/genre-funk\",\n name: \"Funk / Soul\",\n description: \"Groovy and danceable.\",\n group: \"By Genre\",\n data: {\n model: \"V6\",\n instrumental: true,\n style: \"funk and soul, groovy and fun, slap bass, wah guitar, tight horn section, danceable, instrumental\",\n },\n },\n\n // ── Vocals & Songs (add your lyrics) ─────────────────────────────────────\n {\n id: \"suno-generate/song-pop\",\n name: \"Pop Song\",\n description: \"Catchy vocal pop — add lyrics.\",\n group: \"Vocals & Songs\",\n data: {\n model: \"V6\",\n instrumental: false,\n style: \"upbeat pop, catchy and bright, shimmering synths, four-on-the-floor, female vocals, Allegro 120 BPM, verse-chorus-verse with bridge\",\n },\n },\n {\n id: \"suno-generate/song-rap\",\n name: \"Rap / Hip-Hop\",\n description: \"Hard-hitting verses — add bars.\",\n group: \"Vocals & Songs\",\n data: {\n model: \"V6\",\n instrumental: false,\n style: \"modern hip-hop, confident, hard-hitting 808s, trap hi-hats, male rap vocals, verse-hook-verse\",\n },\n },\n {\n id: \"suno-generate/song-ballad\",\n name: \"Emotional Ballad\",\n description: \"Heartfelt vocals — add lyrics.\",\n group: \"Vocals & Songs\",\n data: {\n model: \"V6\",\n instrumental: false,\n style: \"emotional ballad, tender and heartfelt, piano and strings, soulful vocals, Adagio, verse-chorus with a big bridge\",\n },\n },\n {\n id: \"suno-generate/song-rock\",\n name: \"Rock Anthem (vocal)\",\n description: \"Soaring chorus — add lyrics.\",\n group: \"Vocals & Songs\",\n data: {\n model: \"V6\",\n instrumental: false,\n style: \"anthemic rock, powerful, driving guitars, big drums, male vocals, soaring chorus, verse-pre-chorus-chorus\",\n },\n },\n {\n id: \"suno-generate/song-acoustic\",\n name: \"Acoustic Singer-Songwriter\",\n description: \"Warm and intimate — add lyrics.\",\n group: \"Vocals & Songs\",\n data: {\n model: \"V6\",\n instrumental: false,\n style: \"acoustic singer-songwriter, warm and intimate, fingerpicked guitar, soft vocals, Andante, verse-chorus\",\n },\n },\n // ── More By Use-Case ─────────────────────────────────────────────────────\n {\n id: \"suno-generate/trailer-riser\",\n name: \"Trailer Riser / Braam\",\n description: \"Pure rising tension hit.\",\n group: \"By Use-Case\",\n data: { model: \"V6\", instrumental: true, style: \"cinematic trailer riser and braam, tense and building, rising whoosh into a deep brass impact, no melody, instrumental\" },\n },\n {\n id: \"suno-generate/calm-corporate\",\n name: \"Calm Corporate / Tech\",\n description: \"Soft, professional bed.\",\n group: \"By Use-Case\",\n data: { model: \"V6\", instrumental: true, style: \"calm corporate tech, professional and clean, soft synth pads, gentle pulse, Andante, instrumental\" },\n },\n {\n id: \"suno-generate/holiday\",\n name: \"Holiday / Festive\",\n description: \"Warm seasonal cheer.\",\n group: \"By Use-Case\",\n data: { model: \"V6\", instrumental: true, style: \"festive holiday music, warm and cheerful, sleigh bells, warm orchestration, cozy, instrumental\" },\n },\n {\n id: \"suno-generate/kids\",\n name: \"Kids / Children's\",\n description: \"Playful and simple.\",\n group: \"By Use-Case\",\n data: { model: \"V6\", instrumental: true, style: \"children's music, playful and happy, simple cheerful melody, xylophone and ukulele, bouncy, instrumental\" },\n },\n {\n id: \"suno-generate/meditation-spa\",\n name: \"Meditation / Spa\",\n description: \"Healing singing bowls.\",\n group: \"By Use-Case\",\n data: { model: \"V6\", instrumental: true, style: \"meditation and spa, serene and healing, singing bowls, soft drones, Adagio, reverb-heavy, instrumental\" },\n },\n {\n id: \"suno-generate/workout\",\n name: \"Workout / Gym\",\n description: \"High-energy motivation.\",\n group: \"By Use-Case\",\n data: { model: \"V6\", instrumental: true, style: \"high-energy workout, motivational and driving, pumping electronic beat, big synths, Allegro 140 BPM, instrumental\" },\n },\n // ── More By Genre ────────────────────────────────────────────────────────\n {\n id: \"suno-generate/trap\",\n name: \"Trap Beat\",\n description: \"Booming 808s, dark.\",\n group: \"By Genre\",\n data: { model: \"V6\", instrumental: true, style: \"trap beat, dark and hard, booming 808s, crisp rapid hi-hats, moody, instrumental\" },\n },\n {\n id: \"suno-generate/dnb\",\n name: \"Drum & Bass\",\n description: \"Fast breakbeats, deep bass.\",\n group: \"By Genre\",\n data: { model: \"V6\", instrumental: true, style: \"drum and bass, fast and energetic, breakbeats, deep rolling bassline, Presto 174 BPM, instrumental\" },\n },\n {\n id: \"suno-generate/afrobeats\",\n name: \"Afrobeats\",\n description: \"Warm syncopated groove.\",\n group: \"By Genre\",\n data: { model: \"V6\", instrumental: true, style: \"afrobeats, groovy and warm, syncopated percussion, warm bass, bright melodies, danceable, instrumental\" },\n },\n {\n id: \"suno-generate/country\",\n name: \"Country / Americana\",\n description: \"Acoustic, heartfelt.\",\n group: \"By Genre\",\n data: { model: \"V6\", instrumental: true, style: \"country americana, warm and heartfelt, acoustic and slide guitar, storytelling feel, instrumental\" },\n },\n {\n id: \"suno-generate/phonk\",\n name: \"Phonk\",\n description: \"Dark drift-phonk for reels.\",\n group: \"By Genre\",\n data: { model: \"V6\", instrumental: true, style: \"drift phonk, dark and aggressive, distorted 808 cowbell, menacing beat, lo-fi grit, instrumental\" },\n },\n {\n id: \"suno-generate/reggae\",\n name: \"Reggae / Dub\",\n description: \"Laid-back island groove.\",\n group: \"By Genre\",\n data: { model: \"V6\", instrumental: true, style: \"reggae dub, laid-back and sunny, off-beat skank guitar, deep dub bassline, relaxed island groove, instrumental\" },\n },\n // ── More Vocals & Songs ──────────────────────────────────────────────────\n {\n id: \"suno-generate/song-rnb\",\n name: \"R&B / Soul (vocal)\",\n description: \"Smooth soulful vocals — add lyrics.\",\n group: \"Vocals & Songs\",\n data: { model: \"V6\", instrumental: false, style: \"smooth R&B soul, sensual and warm, lush chords, soft drums, soulful vocals, Andante, verse-chorus with ad-libs\" },\n },\n {\n id: \"suno-generate/song-kpop\",\n name: \"K-Pop (vocal)\",\n description: \"Polished hook — add lyrics.\",\n group: \"Vocals & Songs\",\n data: { model: \"V6\", instrumental: false, style: \"K-pop, polished and energetic, bright synths, punchy drums, layered vocals, Allegro 120 BPM, verse-pre-chorus-chorus\" },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\nexport const TEXT_TO_SPEECH_PRESETS: readonly FactoryPreset[] = [\n // ── Narration ────────────────────────────────────────────────────────────\n {\n id: \"text-to-speech/narrator-calm\",\n name: \"Calm Narrator\",\n description: \"Even, measured narration.\",\n group: \"Narration\",\n data: { speed: 1, stability: 0.6, similarityBoost: 0.75, style: 0 },\n },\n {\n id: \"text-to-speech/audiobook\",\n name: \"Audiobook\",\n description: \"Warm, steady, slightly slower.\",\n group: \"Narration\",\n data: { speed: 0.95, stability: 0.75, similarityBoost: 0.8, style: 0.1 },\n },\n {\n id: \"text-to-speech/documentary\",\n name: \"Documentary\",\n description: \"Measured delivery with gravitas.\",\n group: \"Narration\",\n data: { speed: 0.95, stability: 0.78, similarityBoost: 0.85, style: 0.25 },\n },\n {\n id: \"text-to-speech/news-anchor\",\n name: \"News Anchor\",\n description: \"Neutral, authoritative, even pace.\",\n group: \"Narration\",\n data: { speed: 1, stability: 0.7, similarityBoost: 0.8, style: 0.2 },\n },\n {\n id: \"text-to-speech/explainer\",\n name: \"Explainer / Tutorial\",\n description: \"Clear, friendly, mid-pace.\",\n group: \"Narration\",\n data: { speed: 1, stability: 0.55, similarityBoost: 0.75, style: 0.3 },\n },\n\n // ── Advertising & Hype ───────────────────────────────────────────────────\n {\n id: \"text-to-speech/commercial\",\n name: \"Commercial Read\",\n description: \"Energetic, persuasive, punchy.\",\n group: \"Advertising & Hype\",\n data: { speed: 1.05, stability: 0.48, similarityBoost: 0.75, style: 0.6 },\n },\n {\n id: \"text-to-speech/hype\",\n name: \"Hype / High-Energy\",\n description: \"Fast, excited, dynamic.\",\n group: \"Advertising & Hype\",\n data: { speed: 1.15, stability: 0.25, similarityBoost: 0.7, style: 0.8 },\n },\n\n // ── Conversational & Calm ────────────────────────────────────────────────\n {\n id: \"text-to-speech/podcast-host\",\n name: \"Podcast Host\",\n description: \"Natural, casual, conversational.\",\n group: \"Conversational & Calm\",\n data: { speed: 1.05, stability: 0.45, similarityBoost: 0.75, style: 0.4 },\n },\n {\n id: \"text-to-speech/character\",\n name: \"Character / Storyteller\",\n description: \"Expressive, dramatic range.\",\n group: \"Conversational & Calm\",\n data: { speed: 1, stability: 0.3, similarityBoost: 0.7, style: 0.7 },\n },\n {\n id: \"text-to-speech/meditation\",\n name: \"Meditation / ASMR\",\n description: \"Very slow, soft, soothing.\",\n group: \"Conversational & Calm\",\n data: { speed: 0.8, stability: 0.85, similarityBoost: 0.75, style: 0 },\n },\n]\n\nexport const VOICE_DESIGN_PRESETS: readonly FactoryPreset[] = [\n // ── Narration & Character ────────────────────────────────────────────────\n {\n id: \"voice-design/trailer-narrator\",\n name: \"Movie-Trailer Narrator\",\n description: \"Deep, dramatic, commanding.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"A deep, powerful male movie-trailer narrator with dramatic gravitas and a slow, commanding delivery.\" },\n },\n {\n id: \"voice-design/audiobook-female\",\n name: \"Warm Female Audiobook\",\n description: \"Soothing, clear, intimate.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"A warm, soothing female audiobook narrator with clear articulation and a gentle, intimate tone.\" },\n },\n {\n id: \"voice-design/old-wizard\",\n name: \"Old Wizard\",\n description: \"Gravelly, wise, theatrical.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"A gravelly, wise old wizard with a deep raspy voice and a slow, theatrical cadence.\" },\n },\n {\n id: \"voice-design/noir-detective\",\n name: \"Noir Detective\",\n description: \"Raspy, smoky, brooding.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"A raspy, world-weary noir detective with a low, smoky, brooding voice.\" },\n },\n {\n id: \"voice-design/meditation-guide\",\n name: \"Meditation Guide\",\n description: \"Calm, soft, breathy.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"A calm, soft-spoken meditation guide with a slow, breathy, reassuring delivery.\" },\n },\n {\n id: \"voice-design/casual-creator-female\",\n name: \"Casual Creator (female)\",\n description: \"Relaxed, warm, everyday.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"An adult woman in her late twenties talking casually to the viewer as if telling a friend about something she tried: relaxed, warm and upbeat, a natural conversational pace with small pauses, a light neutral American accent, recorded close and dry in a quiet room, never polished or announcer-like.\" },\n },\n {\n id: \"voice-design/casual-creator-male\",\n name: \"Casual Creator (male)\",\n description: \"Relaxed, warm, everyday.\",\n group: \"Narration & Character\",\n data: { voiceDescription: \"An adult man in his late twenties talking casually to the viewer as if telling a friend about something he tried: relaxed, warm and upbeat, a natural conversational pace with small pauses, a light neutral American accent, recorded close and dry in a quiet room, never polished or announcer-like.\" },\n },\n\n // ── Professional & Assistant ─────────────────────────────────────────────\n {\n id: \"voice-design/hype-announcer\",\n name: \"Energetic Hype\",\n description: \"Fast, excited, punchy.\",\n group: \"Professional & Assistant\",\n data: { voiceDescription: \"An energetic young hype announcer: fast-paced, excited and punchy.\" },\n },\n {\n id: \"voice-design/friendly-assistant\",\n name: \"Friendly Assistant\",\n description: \"Bright, clear, approachable.\",\n group: \"Professional & Assistant\",\n data: { voiceDescription: \"A bright, friendly, professional virtual-assistant voice, clear and approachable.\" },\n },\n {\n id: \"voice-design/corporate-ivr\",\n name: \"Corporate IVR\",\n description: \"Neutral, articulate, pro.\",\n group: \"Professional & Assistant\",\n data: { voiceDescription: \"A neutral, clear corporate phone-system voice, articulate and professional.\" },\n },\n]\n\nexport const VOICE_CHANGER_PRESETS: readonly FactoryPreset[] = [\n {\n id: \"voice-changer/faithful\",\n name: \"Faithful (Natural)\",\n description: \"Preserves original delivery.\",\n group: \"Revoice Styles\",\n data: { stability: 0.4, similarityBoost: 0.85, style: 0, removeBackgroundNoise: false },\n },\n {\n id: \"voice-changer/clean-stable\",\n name: \"Clean & Stable\",\n description: \"Smooth, consistent, denoised.\",\n group: \"Revoice Styles\",\n data: { stability: 0.8, similarityBoost: 0.8, style: 0, removeBackgroundNoise: true },\n },\n {\n id: \"voice-changer/expressive\",\n name: \"Expressive\",\n description: \"Amplifies the delivery.\",\n group: \"Revoice Styles\",\n data: { stability: 0.3, similarityBoost: 0.7, style: 0.45, removeBackgroundNoise: false },\n },\n {\n id: \"voice-changer/studio-clean\",\n name: \"Studio Clean\",\n description: \"Broadcast-ready, denoised.\",\n group: \"Revoice Styles\",\n data: { stability: 0.65, similarityBoost: 0.85, style: 0, removeBackgroundNoise: true },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\nexport const TEXT_TO_AUDIO_PRESETS: readonly FactoryPreset[] = [\n // ── Transitions & Impacts ────────────────────────────────────────────────\n {\n id: \"text-to-audio/whoosh\",\n name: \"Whoosh Transition\",\n description: \"Fast clean swoosh.\",\n group: \"Transitions & Impacts\",\n data: { provider: \"elevenlabs-sfx\", duration: 1, promptInfluence: 0.7, prompt: \"fast clean whoosh transition swoosh, smooth air movement\" },\n },\n {\n id: \"text-to-audio/impact-boom\",\n name: \"Impact / Boom\",\n description: \"Deep cinematic hit.\",\n group: \"Transitions & Impacts\",\n data: { provider: \"elevenlabs-sfx\", duration: 2, promptInfluence: 0.7, prompt: \"deep cinematic impact boom, powerful sub hit with tail\" },\n },\n {\n id: \"text-to-audio/riser\",\n name: \"Riser / Build-Up\",\n description: \"Rising tension sweep.\",\n group: \"Transitions & Impacts\",\n data: { provider: \"elevenlabs-sfx\", duration: 4, promptInfluence: 0.6, prompt: \"tension riser build-up sweep rising to a peak\" },\n },\n\n // ── Ambiences (loopable) ─────────────────────────────────────────────────\n {\n id: \"text-to-audio/rain-ambience\",\n name: \"Rain Ambience\",\n description: \"Steady gentle rain.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.4, prompt: \"steady gentle rain ambience with distant soft thunder\" },\n },\n {\n id: \"text-to-audio/forest-ambience\",\n name: \"Forest Ambience\",\n description: \"Birds and rustling leaves.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.4, prompt: \"calm forest ambience, birdsong, gentle wind through leaves\" },\n },\n {\n id: \"text-to-audio/fire-crackle\",\n name: \"Fire Crackle\",\n description: \"Cozy fireplace loop.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.4, prompt: \"cozy fireplace crackling, warm popping embers\" },\n },\n {\n id: \"text-to-audio/scifi-drone\",\n name: \"Sci-Fi Drone\",\n description: \"Ominous ambient hum.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.5, prompt: \"low sci-fi ambient drone, ominous spaceship hum\" },\n },\n {\n id: \"text-to-audio/living-room-tone\",\n name: \"Living Room Tone\",\n description: \"Quiet, lived-in room.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.4, prompt: \"quiet living room room tone, faint air and a soft distant household hum, steady and even, an empty room at rest\" },\n },\n {\n id: \"text-to-audio/kitchen-hum\",\n name: \"Kitchen Hum\",\n description: \"Fridge hum in a still kitchen.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.4, prompt: \"home kitchen room tone, a low steady refrigerator hum with faint air, calm and continuous, an empty kitchen at rest\" },\n },\n {\n id: \"text-to-audio/cafe-murmur\",\n name: \"Café Murmur\",\n description: \"Soft, indistinct café chatter.\",\n group: \"Ambiences (loopable)\",\n data: { provider: \"elevenlabs-sfx\", duration: 22, loop: true, promptInfluence: 0.4, prompt: \"café background ambience, a soft indistinct murmur of distant conversation and the occasional faint cup clink, steady and even, no clear words\" },\n },\n\n // ── UI & Stingers ────────────────────────────────────────────────────────\n {\n id: \"text-to-audio/ui-click\",\n name: \"UI Click / Pop\",\n description: \"Crisp interface tap.\",\n group: \"UI & Stingers\",\n data: { provider: \"elevenlabs-sfx\", duration: 1, promptInfluence: 0.8, prompt: \"crisp UI click pop, clean modern interface tap\" },\n },\n {\n id: \"text-to-audio/notification\",\n name: \"Notification Chime\",\n description: \"Bright pleasant alert.\",\n group: \"UI & Stingers\",\n data: { provider: \"elevenlabs-sfx\", duration: 2, promptInfluence: 0.8, prompt: \"pleasant bright notification chime, short and clean\" },\n },\n {\n id: \"text-to-audio/applause\",\n name: \"Applause / Crowd\",\n description: \"Enthusiastic cheering.\",\n group: \"UI & Stingers\",\n data: { provider: \"elevenlabs-sfx\", duration: 5, promptInfluence: 0.6, prompt: \"enthusiastic crowd applause and cheering\" },\n },\n // ── Foley & Action ───────────────────────────────────────────────────────\n {\n id: \"text-to-audio/footsteps\",\n name: \"Footsteps\",\n description: \"Walking on a hard floor.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 4, promptInfluence: 0.6, prompt: \"footsteps walking on a hard wooden floor, steady pace\" },\n },\n {\n id: \"text-to-audio/door\",\n name: \"Door Open / Close\",\n description: \"Creak then shut.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 3, promptInfluence: 0.7, prompt: \"wooden door slowly creaking open then closing with a soft latch\" },\n },\n {\n id: \"text-to-audio/glass-break\",\n name: \"Glass Break\",\n description: \"Sharp shatter.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 2, promptInfluence: 0.8, prompt: \"glass shattering, sharp break with falling shards\" },\n },\n {\n id: \"text-to-audio/keyboard-typing\",\n name: \"Keyboard Typing\",\n description: \"Mechanical key clicks.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 5, promptInfluence: 0.6, prompt: \"fast mechanical keyboard typing, crisp key clicks\" },\n },\n {\n id: \"text-to-audio/explosion\",\n name: \"Explosion\",\n description: \"Deep boom + debris.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 3, promptInfluence: 0.7, prompt: \"large explosion, deep boom with rumbling debris and tail\" },\n },\n {\n id: \"text-to-audio/magic-sparkle\",\n name: \"Magic Sparkle\",\n description: \"Shimmering chime FX.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 2, promptInfluence: 0.7, prompt: \"magical sparkle shimmer, twinkling fairy-dust chimes\" },\n },\n {\n id: \"text-to-audio/camera-shutter\",\n name: \"Camera Shutter\",\n description: \"DSLR click.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 1, promptInfluence: 0.8, prompt: \"DSLR camera shutter click, single crisp photo snap\" },\n },\n {\n id: \"text-to-audio/error-buzzer\",\n name: \"Error Buzzer\",\n description: \"Wrong / fail tone.\",\n group: \"Foley & Action\",\n data: { provider: \"elevenlabs-sfx\", duration: 1, promptInfluence: 0.8, prompt: \"short error buzzer, negative fail tone\" },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\nexport const LLM_CHAT_PRESETS: readonly FactoryPreset[] = [\n // ── Assistants ───────────────────────────────────────────────────────────\n {\n id: \"llm-chat/concise-assistant\",\n name: \"Concise Assistant\",\n description: \"Short, direct answers.\",\n group: \"Assistants\",\n data: {\n systemPrompt: \"You are a concise assistant. Answer in 1-3 sentences. No preamble.\",\n temperature: 0.3,\n },\n },\n {\n id: \"llm-chat/brainstorm\",\n name: \"Brainstorm / Ideas\",\n description: \"10 diverse ideas, high variety.\",\n group: \"Assistants\",\n data: {\n systemPrompt:\n \"You are a creative brainstorming partner. Given a topic, return a numbered list of 10 diverse, original ideas. No preamble, no explanations.\",\n temperature: 1,\n },\n },\n\n // ── Writing & Marketing ──────────────────────────────────────────────────\n {\n id: \"llm-chat/copywriter\",\n name: \"Copywriter / Headlines\",\n description: \"Punchy marketing copy.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"You are an expert direct-response copywriter. Write punchy, persuasive, benefit-led copy. When asked for headlines, return 5 distinct options as a list.\",\n temperature: 0.8,\n },\n },\n {\n id: \"llm-chat/social-caption\",\n name: \"Social Caption + Hashtags\",\n description: \"Caption then hashtags.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"Write one engaging social-media caption for the user's topic, then on a new line add 8-12 relevant hashtags. Match a modern, friendly tone.\",\n temperature: 0.8,\n },\n },\n {\n id: \"llm-chat/seo-metadata\",\n name: \"SEO Metadata\",\n description: \"Title, meta, keywords.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"Generate SEO metadata for the user's topic: a title (<=60 chars), a meta description (<=155 chars), and 8 keywords. Label each section.\",\n temperature: 0.4,\n },\n },\n {\n id: \"llm-chat/rewrite-tone\",\n name: \"Rewrite / Tone Shifter\",\n description: \"Restyle text, keep meaning.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"Rewrite the user's text in the requested tone (e.g. formal, casual, friendly, confident). Preserve the meaning. Return only the rewrite.\",\n temperature: 0.5,\n },\n },\n {\n id: \"llm-chat/script-writer\",\n name: \"Script / Storyboard Writer\",\n description: \"Shot-by-shot video script.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"You are a short-form video scriptwriter. Turn the user's idea into a shot-by-shot script. For each shot give: Scene, Visual, Voiceover. Keep it tight and production-ready.\",\n temperature: 0.7,\n },\n },\n {\n id: \"llm-chat/hook-generator\",\n name: \"Hook Generator\",\n description: \"10 opening lines for a talking-to-camera video.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"You write opening lines for short vertical videos in which one person talks straight to the camera about a product, a site or an idea. Given the user's topic, write 10 different opening lines.\\n\\n\" +\n \"Every line:\\n\" +\n \"- is one short spoken clause of at most 8 words;\\n\" +\n \"- leads with the payload the viewer can check: a number, a price, a time saved, a before and after, a contrast with the usual way, or a named result;\\n\" +\n \"- opens on the claim itself — no greeting, no filler word, no introduction of the product before the claim;\\n\" +\n \"- sounds said, not written: plain words, contractions welcome, no hashtags, no emoji, no stage directions;\\n\" +\n \"- spells the product or brand exactly as the user gives it and writes numbers as digits.\\n\\n\" +\n \"Vary the angle across the 10: a surprising number, a price, time saved, a mistake to avoid, a before and after, a contrast, a named result, a direct question. Write in the language the user writes in. Return only the numbered list, one line each.\",\n temperature: 0.9,\n },\n },\n {\n id: \"llm-chat/ugc-monologue-writer\",\n name: \"UGC Monologue Writer\",\n description: \"A talking-to-camera script as JSON: hook, beats, closer.\",\n group: \"Writing & Marketing\",\n data: {\n systemPrompt:\n \"You write the script of a short vertical video in which one person talks straight to the camera about a product, a site or an idea. Return it as JSON with three parts.\\n\\n\" +\n \"hook — the first line: one short spoken clause of at most 8 words. It leads with the payload the viewer can check (a number, a price, a time saved, a before and after, a named result) and opens on the claim itself — no greeting, no filler, no introduction first.\\n\\n\" +\n \"beats — one beat per point the video makes, in order. When the user lists screenshots, write one beat per screenshot, in the same order. The first beat names the product. Every beat is one short spoken sentence a person says in one easy breath; nothing is crammed in.\\n\\n\" +\n \"closer — the last line. It ends on one simple physical action the speaker can do on camera.\\n\\n\" +\n \"Leave room for a short pause at the start and the end of each clip. Sound said, not written: contractions, one connecting word, sentences of mixed length, and one live, imperfect moment such as a small self-correction or an aside. Carry emphasis with word choice and repetition, never with capitals or stage directions. Write only what is spoken: no speaker names, brackets, emoji or sound effects.\\n\\n\" +\n \"Spell the brand exactly as the user gives it, every time. Write numbers as digits, except inside the brand's own name. Use only figures the user supplies. Write in the language the user writes in.\\n\\n\" +\n \"When the script is in Hebrew: write spoken Israeli Hebrew, the way a person talks to their phone, not ad copy. Every first-person verb and adjective agrees with the speaker's gender, and never switches. Speak to the viewer in the plural (\\\"תנסו\\\"), so the viewer is not given a gender. Keep sentences short. Write numbers and prices as digits (\\\"3\\\", \\\"₪49\\\", \\\"20%\\\"). Keep the brand exactly as given, usually in Latin letters; when a Hebrew prefix joins it, use a hyphen (\\\"ב-Planwell\\\"). Leave out vowel points. The hook is at most 8 words, as in English, a word with a joined prefix counting as one word, and opens on the result, the number or the contrast — never on a greeting or a filler word.\\n\\n\" +\n \"Return only this JSON, no code fences, no commentary:\\n{\\\"hook\\\": \\\"…\\\", \\\"beats\\\": [\\\"…\\\", \\\"…\\\"], \\\"closer\\\": \\\"…\\\"}\",\n llmModel: \"claude-opus-5.5\",\n reasoningEffort: \"high\",\n temperature: 0.8,\n maxTokens: 2048,\n },\n },\n\n // ── Utility ──────────────────────────────────────────────────────────────\n {\n id: \"llm-chat/prompt-enhancer\",\n name: \"Prompt Enhancer\",\n description: \"Idea → rich image prompt.\",\n group: \"Utility\",\n data: {\n systemPrompt:\n \"Expand the user's short idea into a single rich, vivid image-generation prompt covering subject, setting, lighting, composition, lens and style. Return only the prompt, no preamble.\",\n temperature: 0.8,\n },\n },\n {\n id: \"llm-chat/translator\",\n name: \"Translator\",\n description: \"Translate, preserve tone.\",\n group: \"Utility\",\n data: {\n systemPrompt:\n \"Translate the user's text into the requested target language, preserving tone and meaning. Return only the translation.\",\n temperature: 0.2,\n },\n },\n {\n id: \"llm-chat/summarizer\",\n name: \"Summarizer (TL;DR)\",\n description: \"3-5 bullet summary.\",\n group: \"Utility\",\n data: {\n systemPrompt: \"Summarize the user's text into 3-5 concise bullet points capturing the key takeaways. No preamble.\",\n temperature: 0.2,\n },\n },\n {\n id: \"llm-chat/qa-context\",\n name: \"Q&A over Context\",\n description: \"Grounded answers only.\",\n group: \"Utility\",\n data: {\n systemPrompt:\n \"Answer the user's question using ONLY the provided context. If the answer is not in the context, say you don't know rather than guessing.\",\n temperature: 0.1,\n },\n },\n\n // ── Structured Output ────────────────────────────────────────────────────\n {\n id: \"llm-chat/json-extractor\",\n name: \"JSON Extractor\",\n description: \"Returns strict JSON only.\",\n group: \"Structured Output\",\n data: {\n systemPrompt:\n \"Extract the requested fields and return ONLY valid minified JSON. No prose, no code fences.\",\n temperature: 0,\n },\n },\n {\n id: \"llm-chat/classifier\",\n name: \"Classifier / Sentiment\",\n description: \"Returns one label.\",\n group: \"Structured Output\",\n data: {\n systemPrompt:\n \"Classify the user's input. Return ONLY a single label from the allowed set (default: positive / neutral / negative). No explanation.\",\n temperature: 0,\n },\n },\n]\n\nexport const GENERATE_SCRIPT_PRESETS: readonly FactoryPreset[] = [\n // ── By Format ────────────────────────────────────────────────────────────\n {\n id: \"generate-script/yt-short\",\n name: \"YouTube Short / Hook\",\n description: \"Punchy, hook-first, ~30s.\",\n group: \"By Format\",\n data: { tone: \"energetic, punchy, hook-first\", sceneCount: 5, targetLength: 30 },\n },\n {\n id: \"generate-script/explainer\",\n name: \"Explainer (how-to)\",\n description: \"Clear 8-step walkthrough.\",\n group: \"By Format\",\n data: {\n tone: \"clear, friendly, educational\",\n sceneCount: 8,\n targetLength: 90,\n styleGuide:\n \"A how-to walkthrough in eight steps, one step per scene, in the order the viewer does them. Open on what the viewer will be able to do by the end; in each scene name the step, then show it; close on the finished result.\",\n },\n },\n {\n id: \"generate-script/ad-spot\",\n name: \"Ad / Commercial Spot\",\n description: \"Persuasive 30s spot.\",\n group: \"By Format\",\n data: { tone: \"persuasive, upbeat, benefit-led\", sceneCount: 4, targetLength: 30 },\n },\n {\n id: \"generate-script/product-demo\",\n name: \"Product Demo VO\",\n description: \"Confident feature walkthrough.\",\n group: \"By Format\",\n data: { tone: \"confident, informative\", sceneCount: 6, targetLength: 60 },\n },\n {\n id: \"generate-script/listicle\",\n name: \"Listicle (Top 5)\",\n description: \"Snappy countdown.\",\n group: \"By Format\",\n data: { tone: \"engaging, energetic\", sceneCount: 6, targetLength: 60 },\n },\n {\n id: \"generate-script/ugc-ad\",\n name: \"UGC Ad (Hook–Show–Proof–Opinion)\",\n description: \"Selfie-style product testimonial.\",\n group: \"By Format\",\n data: {\n tone: \"casual, authentic, conversational\",\n sceneCount: 4,\n targetLength: 30,\n llmModel: \"claude-opus-5.5\",\n reasoningEffort: \"high\",\n styleGuide:\n \"Selfie-style UGC testimonial for {product}. Open on the payload: the first spoken line is a short claim the viewer can check — a number, a price, a time saved, a before and after — never a greeting or an introduction. Then Show (the product in real use) → Proof (a concrete result or detail) → Opinion (a genuine personal take). Sound said, not written: contractions, sentences of mixed length, one small aside; carry emphasis with word choice, never capitals or stage directions. Spell the brand exactly as given and write numbers as digits. Use only figures the user supplies, in what is said and what is shown, and take the Proof from the topic. Short spoken sentences for clean lip-sync; no salesy voiceover.\",\n },\n },\n\n // ── Long-Form & Narrative ────────────────────────────────────────────────\n {\n id: \"generate-script/podcast-outline\",\n name: \"Podcast Outline\",\n description: \"Conversational episode beats.\",\n group: \"Long-Form & Narrative\",\n data: { tone: \"conversational, curious\", sceneCount: 10, targetLength: 600 },\n },\n {\n id: \"generate-script/trailer-narration\",\n name: \"Trailer Narration\",\n description: \"Dramatic voiceover beats.\",\n group: \"Long-Form & Narrative\",\n data: { tone: \"dramatic, epic\", sceneCount: 6, targetLength: 60 },\n },\n {\n id: \"generate-script/story-beats\",\n name: \"Story Beats\",\n description: \"Emotional narrative arc.\",\n group: \"Long-Form & Narrative\",\n data: {\n tone: \"narrative, emotional\",\n sceneCount: 8,\n targetLength: 120,\n styleGuide:\n \"An eight-beat story arc, one beat per scene: the world as it is, the moment that changes it, the first attempt, a complication, the low point, the turn, the climax, and the world changed.\",\n },\n },\n]\n\nexport const IMAGE_TO_TEXT_PRESETS: readonly FactoryPreset[] = [\n // ── Accessibility & SEO ──────────────────────────────────────────────────\n {\n id: \"image-to-text/alt-text\",\n name: \"Alt Text\",\n description: \"Accessible, ≤125 chars.\",\n group: \"Accessibility & SEO\",\n data: { detailLevel: \"brief\", customPrompt: \"Write concise alt text for this image for accessibility, under 125 characters. Describe only what is essential.\" },\n },\n {\n id: \"image-to-text/seo-caption\",\n name: \"SEO Caption\",\n description: \"Caption + keywords.\",\n group: \"Accessibility & SEO\",\n data: { detailLevel: \"detailed\", customPrompt: \"Write an SEO-friendly caption for this image, then list 8 relevant keywords.\" },\n },\n {\n id: \"image-to-text/social-caption\",\n name: \"Social Caption\",\n description: \"Caption + hashtags.\",\n group: \"Accessibility & SEO\",\n data: { detailLevel: \"detailed\", customPrompt: \"Write an engaging social-media caption for this image, then 8-12 relevant hashtags.\" },\n },\n\n // ── Extraction ───────────────────────────────────────────────────────────\n {\n id: \"image-to-text/ocr\",\n name: \"Extract Text (OCR)\",\n description: \"Return only visible text.\",\n group: \"Extraction\",\n data: { detailLevel: \"structured\", customPrompt: \"Extract and return ONLY the text visible in this image, preserving line breaks. No commentary.\" },\n },\n {\n id: \"image-to-text/tags\",\n name: \"Tags / Keywords\",\n description: \"Comma-separated tags.\",\n group: \"Extraction\",\n data: { detailLevel: \"brief\", customPrompt: \"List 10-15 descriptive tags for this image, comma-separated. No sentences.\" },\n },\n {\n id: \"image-to-text/product-desc\",\n name: \"Product Description\",\n description: \"E-commerce copy from a photo.\",\n group: \"Extraction\",\n data: { detailLevel: \"detailed\", customPrompt: \"Write a compelling e-commerce product description based on this product image.\" },\n },\n {\n id: \"image-to-text/site-screenshot-summary\",\n name: \"Site Screenshot Summary\",\n description: \"Section, headings and figures from a web page.\",\n group: \"Extraction\",\n data: {\n detailLevel: \"structured\",\n customPrompt:\n \"Describe this website screenshot as five labelled lines. Section: which part of the site it is (for example the top of the home page, a feature, how it works, reviews, pricing, sign-up, navigation or footer). Headings: every heading exactly as written. Figures: every number, price, rating and date exactly as written, each with what it refers to. Brand: the product or company name exactly as spelled. First look: what a viewer notices first, in one sentence. Write \\\"none\\\" on a line with nothing to report.\",\n },\n },\n\n // ── Creative ─────────────────────────────────────────────────────────────\n {\n id: \"image-to-text/scene-description\",\n name: \"Detailed Description\",\n description: \"Vivid prose description.\",\n group: \"Creative\",\n data: { detailLevel: \"detailed\", customPrompt: \"Provide a vivid, comprehensive description of this image: subjects, setting, lighting, mood and composition, in flowing prose.\" },\n },\n {\n id: \"image-to-text/reverse-prompt\",\n name: \"Reverse Prompt\",\n description: \"Image → text-to-image prompt.\",\n group: \"Creative\",\n data: { detailLevel: \"detailed\", customPrompt: \"Describe this image as a detailed text-to-image generation prompt: subject, style, lighting, composition and lens. Return only the prompt.\" },\n },\n {\n id: \"image-to-text/realism-audit\",\n name: \"Realism Audit\",\n description: \"Lists the signs an image was generated, with a count.\",\n group: \"Creative\",\n data: {\n detailLevel: \"structured\",\n customPrompt:\n \"Check this image for signs that it was generated rather than photographed. Answer each question yes or no, with a few words why. 1. Is the skin smooth, waxy or airbrushed, with no visible pores? 2. Is the face unusually symmetrical, or are the teeth unnaturally even and white? 3. Are any hands or fingers malformed, merged or the wrong count? 4. Is any text, logo or sign garbled? 5. Is the background blurred far more than an everyday snapshot would be? 6. Are the catchlights in the eyes perfect rings, or identical in both eyes? 7. Is the hair uniformly perfect, with no flyaways? 8. Do edges look over-sharpened or haloed? 9. Is there a glow or bloom on the skin? 10. Do shadows or reflections disagree with the light? Finish with one line: \\\"Tells found: N of 10\\\".\",\n },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\nimport { REALISM_FINISH } from \"../realism-wording.js\"\n\nexport const VIDEO_TO_VIDEO_PRESETS: readonly FactoryPreset[] = [\n {\n id: \"video-to-video/anime\",\n name: \"Anime Restyle\",\n description: \"2D cel-shaded anime look.\",\n group: \"Restyle Looks\",\n data: { provider: \"wan\", promptPrefix: \"Restyle this video as a 2D cel-shaded anime: vibrant colors, clean linework, expressive cel shading. Preserve the original motion, composition, and timing.\", negativePrompt: \"photorealistic, blurry, distorted, flickering\" },\n },\n {\n id: \"video-to-video/claymation\",\n name: \"Claymation\",\n description: \"Tactile stop-motion clay.\",\n group: \"Restyle Looks\",\n data: { provider: \"wan\", promptPrefix: \"Restyle as tactile stop-motion claymation with plasticine textures and subtle fingerprints. Keep the original motion and framing.\", negativePrompt: \"photorealistic, smooth, flickering\" },\n },\n {\n id: \"video-to-video/cyberpunk-neon\",\n name: \"Cyberpunk Neon\",\n description: \"Rain-slicked neon city look.\",\n group: \"Restyle Looks\",\n data: { provider: \"wan\", promptPrefix: \"Restyle with a neon cyberpunk aesthetic: rain-slicked surfaces, glowing magenta and cyan lighting, moody atmosphere. Preserve the original motion.\", negativePrompt: \"daylight, flat lighting, blurry, distorted\" },\n },\n {\n id: \"video-to-video/oil-painting\",\n name: \"Oil Painting\",\n description: \"Moving painterly brushwork.\",\n group: \"Restyle Looks\",\n data: { provider: \"wan\", promptPrefix: \"Restyle as a moving oil painting with visible brushstrokes, rich impasto texture, and painterly color. Keep the original motion and composition.\", negativePrompt: \"photorealistic, flat, blurry, flickering\" },\n },\n {\n id: \"video-to-video/pixar-3d\",\n name: \"3D Animated\",\n description: \"Polished CG film look.\",\n group: \"Restyle Looks\",\n data: { provider: \"wan\", promptPrefix: \"Restyle as a polished 3D animated film: soft global illumination, expressive characters, clean stylized surfaces. Preserve the original motion and timing.\", negativePrompt: \"photorealistic, lowres, distorted, flickering\" },\n },\n {\n id: \"video-to-video/watercolor\",\n name: \"Watercolor\",\n description: \"Flowing washes on paper.\",\n group: \"Restyle Looks\",\n data: { provider: \"wan\", promptPrefix: \"Restyle as a flowing watercolor animation with soft washes, bleeding edges, and visible paper texture. Keep the original motion and composition.\", negativePrompt: \"photorealistic, harsh edges, blurry, flickering\" },\n },\n {\n id: \"video-to-video/phone-footage-look\",\n name: \"Phone Footage Look\",\n description: \"Everyday handheld look for b-roll — it re-renders faces, so not for talking clips.\",\n group: \"Restyle Looks\",\n data: {\n provider: \"wan-videoedit\",\n v2vResolution: \"720p\",\n videoEditDuration: \"0\",\n audioSetting: \"origin\",\n promptExtend: false,\n promptPrefix: `Keep everything in this clip as it is — the same people, objects, colours and light — and only make it look like everyday handheld digital video, left unedited. ${REALISM_FINISH} The edges of the frame keep the light they have in the clip, and each moment keeps the brightness it has in the clip, from the first frame to the last. Preserve the original motion, composition and timing.`,\n negativePrompt: \"cinematic grade, shallow depth of field, glow, skin smoothing, flickering, light leaks, flare, coloured bands at the edges of the frame, colour cast, shifted colours, oversaturated colours, vintage film look, overexposure, pulsing brightness, heavy grain\",\n },\n },\n]\n\nexport const ADD_CAPTIONS_PRESETS: readonly FactoryPreset[] = [\n {\n id: \"add-captions/clean-subtitles\",\n name: \"Clean Subtitles\",\n description: \"Classic bottom subtitles.\",\n group: \"Caption Styles\",\n data: { style: \"subtitle\", position: \"bottom\", fontSize: 32, color: \"#FFFFFF\", autoTranscribe: true },\n },\n {\n id: \"add-captions/tiktok-bold\",\n name: \"TikTok Bold\",\n description: \"Big centered word-by-word.\",\n group: \"Caption Styles\",\n data: { style: \"tiktok-words\", position: \"center\", fontSize: 72, color: \"#FFFFFF\", autoTranscribe: true },\n },\n {\n id: \"add-captions/karaoke\",\n name: \"Karaoke Highlight\",\n description: \"Words fill as spoken.\",\n group: \"Caption Styles\",\n data: { style: \"karaoke\", position: \"bottom\", fontSize: 56, color: \"#FFFFFF\", autoTranscribe: true },\n },\n {\n id: \"add-captions/word-pop\",\n name: \"Word Pop\",\n description: \"Each word pops in.\",\n group: \"Caption Styles\",\n data: { style: \"word-pop\", position: \"center\", fontSize: 64, color: \"#FFE600\", autoTranscribe: true },\n },\n {\n id: \"add-captions/bouncy\",\n name: \"Bouncy Captions\",\n description: \"Energetic bouncing words.\",\n group: \"Caption Styles\",\n data: { style: \"bouncy\", position: \"bottom\", fontSize: 64, color: \"#FFFFFF\", autoTranscribe: true },\n },\n {\n id: \"add-captions/word-highlight\",\n name: \"Word Highlight\",\n description: \"Active word highlighted.\",\n group: \"Caption Styles\",\n data: { style: \"word-highlight\", position: \"bottom\", fontSize: 48, color: \"#00E5FF\", autoTranscribe: true },\n },\n {\n id: \"add-captions/top-banner\",\n name: \"Top Banner\",\n description: \"Subtitles along the top.\",\n group: \"Caption Styles\",\n data: { style: \"subtitle\", position: \"top\", fontSize: 36, color: \"#FFFFFF\", autoTranscribe: true },\n },\n {\n id: \"add-captions/hook-plate\",\n name: \"Hook Plate\",\n description: \"Your opening line as a bold plate near the top.\",\n group: \"Caption Styles\",\n data: { style: \"subtitle\", look: \"clean\", position: \"top\", positionY: 20, fontSize: 32, fontWeight: 800, maxWordsPerLine: 4, color: \"#111111\", backgroundColor: \"#FFFFFF\", autoTranscribe: false },\n },\n {\n id: \"add-captions/body-captions\",\n name: \"Body Captions\",\n description: \"Word-by-word captions under the face.\",\n group: \"Caption Styles\",\n data: { style: \"word-highlight\", look: \"outline\", position: \"bottom\", positionY: 72, fontSize: 32, maxWordsPerLine: 3, color: \"#FFFFFF\", autoTranscribe: true },\n },\n]\n\nexport const COMBINE_VIDEOS_PRESETS: readonly FactoryPreset[] = [\n {\n id: \"combine-videos/seamless-join\",\n name: \"Seamless Join (One-Shot)\",\n description: \"Jump-free join for scene-extension / start-end-frame clips.\",\n group: \"Joins & Transitions\",\n data: { transition: \"cut\", transitionDuration: 0.5, audioMode: \"crossfade\", audioCrossfadeCurve: \"equal-power\", trimEndFrames: 4, trimStartFrames: 3 },\n },\n {\n id: \"combine-videos/hard-cut\",\n name: \"Hard Cut\",\n description: \"Instant switch, no blend. Fastest.\",\n group: \"Joins & Transitions\",\n data: { transition: \"cut\", audioMode: \"keep\", trimStartFrames: 0, trimEndFrames: 0 },\n },\n {\n id: \"combine-videos/crossfade\",\n name: \"Crossfade\",\n description: \"Smooth alpha cross-fade between clips.\",\n group: \"Joins & Transitions\",\n data: { transition: \"fade\", transitionDuration: 0.7, audioMode: \"crossfade\", audioCrossfadeCurve: \"equal-power\" },\n },\n {\n id: \"combine-videos/dissolve\",\n name: \"Dissolve\",\n description: \"Grainy organic blend for memory beats.\",\n group: \"Joins & Transitions\",\n data: { transition: \"dissolve\", transitionDuration: 1, audioMode: \"crossfade\", audioCrossfadeCurve: \"equal-power\" },\n },\n {\n id: \"combine-videos/fade-through-black\",\n name: \"Fade Through Black\",\n description: \"Dip to black between scenes.\",\n group: \"Joins & Transitions\",\n data: { transition: \"dip-to-black\", transitionDuration: 1, audioMode: \"crossfade\", audioCrossfadeCurve: \"equal-power\" },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\n// SwitchX (Beeble) relight & composite starting points — one per common job,\n// so users get a tuned prompt + the right alpha mode instead of a blank node.\n// Presets set alphaMode + a starter promptPrefix (and keyframe for select); they\n// deliberately leave resolution alone so they don't override the user's choice.\n// A connected reference image is the biggest quality lever for all of these.\nexport const SWITCHX_PRESETS: readonly FactoryPreset[] = [\n {\n id: \"switchx/relight-subject\",\n name: \"Relight Subject\",\n description: \"Auto-mask the subject and relight it to match a reference.\",\n group: \"Relight & Composite\",\n data: {\n alphaMode: \"auto\",\n promptPrefix:\n \"Relight the subject to match the reference: match its colour temperature, key-light direction and intensity, and add matching contact shadows. Keep the subject's motion, pose and identity unchanged.\",\n },\n },\n {\n id: \"switchx/swap-background\",\n name: \"Swap Background\",\n description: \"Keep the subject, replace the background, relight to fit.\",\n group: \"Relight & Composite\",\n data: {\n alphaMode: \"auto\",\n promptPrefix:\n \"Keep the foreground subject and replace the background with the environment from the reference. Relight the subject so it sits naturally in the new scene — match light direction, colour and shadows.\",\n },\n },\n {\n id: \"switchx/restyle-scene\",\n name: \"Restyle Whole Scene\",\n description: \"No mask — restyle the entire frame from a reference/prompt.\",\n group: \"Relight & Composite\",\n data: {\n alphaMode: \"fill\",\n promptPrefix:\n \"Restyle the entire frame to match the reference look — colour grade, lighting and mood — while preserving the original motion, composition and timing.\",\n },\n },\n {\n id: \"switchx/masked-composite\",\n name: \"Masked Composite\",\n description: \"Precise control via a one-frame mask (wire a Generate Mask node).\",\n group: \"Relight & Composite\",\n data: {\n alphaMode: \"select\",\n alphaKeyframeIndex: 0,\n promptPrefix:\n \"Composite the masked region against the reference and relight it to match. Leave everything outside the mask untouched.\",\n },\n },\n {\n id: \"switchx/frame-accurate-matte\",\n name: \"Frame-Accurate Matte\",\n description: \"Exact per-frame control via a supplied alpha matte video.\",\n group: \"Relight & Composite\",\n data: {\n alphaMode: \"custom\",\n promptPrefix:\n \"Composite using the supplied per-frame matte and relight the kept region to match the reference. Preserve the original motion.\",\n },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\n/**\n * Factory presets for the `motion-graphics` node — all targeting the Lottie\n * engine (`engine: \"lottie\"`), which has an LLM author a complete, valid Lottie\n * (Bodymovin) JSON document with named editable slots.\n *\n * Each preset's `data` sets every portable configurable field (engine,\n * motionPrompt, aspectRatio, durationSeconds, backgroundColor) so switching\n * presets never leaves stale canvas settings. `fps` (node default 30) and\n * `llmModel` (the user's tier choice) are deliberately NOT set. `label` is NOT\n * carried either — factory `data` is capture-shaped (the FactoryPreset.data\n * contract excludes label/fieldMappings/runtime keys, pinned by the\n * `extractPresetData(data).toEqual(data)` round-trip test); the dropdown already\n * surfaces the active preset's `name` in its trigger. No preset carries\n * `motionPlan` — generated-plan staleness is solved generically via\n * PRESET_APPLY_CLEAR_KEYS (see node-preset-extract.ts), not per-preset.\n *\n * The prompts are written to work WITH the engine's contract (see\n * backend/src/prompts/lottie-graphic-system.ts): group-wrapped shapes, 0–1\n * colors, a root `slots` map with `{\"sid\"}` refs, raw-string text slots, the\n * 20-font safelist, vector-only output, ≤50 layers, and seamless-loop or\n * exit-before-`op` discipline. Every prompt ends with\n * `Expose slots: <sids>.` using stable lowerCamelCase sids so slot edits\n * survive regeneration and published-app field exposure is dependable.\n *\n * fps is 30, so frame counts below map to seconds as frames = seconds × 30\n * (a 5s preset = 150 frames; \"20 frames before the end\" = 0.67s before `op`).\n */\nexport const MOTION_GRAPHICS_PRESETS: readonly FactoryPreset[] = [\n // ── Titles & Text ─────────────────────────────────────────────────────────\n {\n id: \"motion-graphics/lower-third\",\n name: \"Lower Third\",\n description: \"Animated lower third with editable name, role and accent color.\",\n group: \"Titles & Text\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 5,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"Lower third for a name and role, anchored in the lower-left title-safe area (x ≈ 8% of width, baseline ≈ 84% of height). A slim accent bar (the brand color) slides in from the left with a slight overshoot and settles over about 14 frames; the name in bold white rises and fades in above the role in lighter gray, staggered 6–8 frames after the bar, each easing out. Hold steady through the middle, then everything exits with a clean fade and a small slide-left completing 20 frames before the end — nothing cuts mid-motion. Palette: one saturated brand accent plus white and a neutral gray, restrained and broadcast-clean. Transparent background — this overlays footage, so add no full-frame backdrop. One-shot, not looped: the entrance plays once and the exit finishes before the out point. Use the placeholder name \\\"Jane Doe\\\" and role \\\"Product Designer\\\" so users retype their own. Expose slots: primaryColor, nameText, roleText.\",\n },\n },\n {\n id: \"motion-graphics/title-card\",\n name: \"Title Card\",\n description: \"Centered title and subtitle with a confident scale-up entrance.\",\n group: \"Titles & Text\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 4,\n backgroundColor: \"#0b0b12\",\n motionPrompt:\n \"A centered title card with a clear type hierarchy: a large bold headline above a smaller subtitle, generously spaced and optically centered. The headline scales up from about 92% with a touch of overshoot and fades in over 16 frames; the subtitle follows 8 frames later, rising a few pixels as it fades. A thin decorative accent rule draws in beneath the title using a trim-path reveal. Hold the composition still in the middle, then let everything fade out together completing 20 frames before the end. Easing: ease-out on the hero scale, gentle ease on supporting elements. Palette: white and light-gray type with a single accent-colored rule, set against the dark opaque background. One-shot, not looped — the exit completes before the out point. Use the placeholder title \\\"Your Title Here\\\" and subtitle \\\"A short supporting line\\\". Expose slots: primaryColor, titleText, subtitleText.\",\n },\n },\n {\n id: \"motion-graphics/kinetic-typography\",\n name: \"Kinetic Typography\",\n description: \"Three words cascade in with punchy staggered motion.\",\n group: \"Titles & Text\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 5,\n backgroundColor: \"#0a0a0a\",\n motionPrompt:\n \"Punchy kinetic typography: three bold words stacked or marching across the center, each its own text layer, entering in a staggered cascade 7–9 frames apart. Vary the rhythm — the first word slides up from below with overshoot, the second snaps in from the left, the third scales up from 85% and settles — so the motion feels choreographed, not uniform. Use a heavy display family from the safelist (Anton, Bebas Neue or Oswald). One word is rendered in the accent color for emphasis; the rest are white. Hold the full phrase briefly, then exit each word on a quick staggered fade completing 20 frames before the end. Dark opaque background, no full-frame rectangle beyond the stated bg. One-shot, not looped. Use placeholder words \\\"MAKE\\\", \\\"IT\\\", \\\"MOVE\\\" so users retype their own copy. Expose slots: accentColor, wordOne, wordTwo, wordThree.\",\n },\n },\n {\n id: \"motion-graphics/quote-card\",\n name: \"Quote Card\",\n description: \"Elegant pull-quote with attribution and a draw-on accent mark.\",\n group: \"Titles & Text\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 6,\n backgroundColor: \"#11131a\",\n motionPrompt:\n \"An elegant pull-quote card. A large accent-colored quotation mark draws on first via a trim-path reveal over about 18 frames, then the quote text fades and rises into the center set in a refined serif from the safelist (Playfair Display or Lora). The attribution line fades in 10 frames later, smaller and in lighter gray, beneath a short accent rule that wipes in from the left. Let it breathe in the middle of the timeline, then fade the whole group out together completing 24 frames before the end. Easing is soft and unhurried throughout — ease-out, no overshoot — to match the editorial tone. Palette: warm white type, a muted gray attribution, and one accent color on the quote mark and rule, over the dark opaque background. One-shot, not looped. Use the placeholder quote \\\"Design is intelligence made visible.\\\" and attribution \\\"— Alina Wheeler\\\". Expose slots: accentColor, quoteText, attributionText.\",\n },\n },\n {\n id: \"motion-graphics/end-card-cta\",\n name: \"End Card (CTA)\",\n description: \"Outro card with a headline and a pulsing call-to-action button.\",\n group: \"Titles & Text\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 5,\n backgroundColor: \"#0b0b12\",\n motionPrompt:\n \"An outro end card that drives action. A bold white headline scales up from 90% with a hint of overshoot and fades in over 16 frames, centered in the upper-middle. Below it, a rounded call-to-action button (filled with the primary color, label in white) springs in from slightly below 10 frames later with an anticipation-and-overshoot settle. Once settled, the button breathes with a subtle scale pulse (about 100%→104%→100%) on a gentle loop to draw the eye. Keep the headline static after it lands. Exit is optional and soft — if present, fade only, completing 20 frames before the end. Palette: white headline, one saturated primary on the button, dark opaque background. The headline is one-shot; the button's pulse loops seamlessly. Use the placeholder headline \\\"Thanks for watching\\\" and CTA label \\\"SUBSCRIBE\\\". Expose slots: primaryColor, headlineText, ctaText.\",\n },\n },\n\n // ── Intros & Logos ────────────────────────────────────────────────────────\n {\n id: \"motion-graphics/logo-sting\",\n name: \"Logo Sting\",\n description: \"Punchy brand reveal with anticipation and overshoot.\",\n group: \"Intros & Logos\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 4,\n backgroundColor: \"#000000\",\n motionPrompt:\n \"A tight, punchy logo sting built from vector shapes. A simple geometric brand mark (in the brand color) performs the hero move with real anticipation and overshoot: it scales down slightly and counter-rotates a few degrees over the first 8 frames, then snaps up to full size, overshooting to about 108% before settling back over the next 12 frames. As the mark lands, the brand name wordmark wipes or fades in beside or beneath it, 6 frames behind, easing out. Hold the locked-up logo still through the middle. Exit on a clean fade (and optional slight scale-down) completing 20 frames before the end — never cut to black mid-motion. Keep total action under two seconds. Palette: the brand color plus white, restrained. Opaque black background. One-shot, not looped. Use the placeholder brand name \\\"ACME\\\". Expose slots: brandColor, brandName.\",\n },\n },\n {\n id: \"motion-graphics/channel-intro\",\n name: \"Channel Intro\",\n description: \"Energetic channel open with name, tagline and accent shapes.\",\n group: \"Intros & Logos\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 5,\n backgroundColor: \"#0a0a14\",\n motionPrompt:\n \"An energetic channel intro. Two or three accent-colored geometric shapes (a bar, a circle, a triangle) sweep in from opposite edges with overshoot and converge toward center over the first 18 frames, establishing rhythm. The channel name then scales up from 88% with overshoot and fades in, set in a bold family from the safelist (Montserrat or Poppins); the tagline fades in 8 frames later beneath it in lighter gray. The accent shapes settle into a tidy lockup behind or beside the type. Hold briefly, then exit everything together with a fade and a small slide completing 20 frames before the end. Easing: snappy overshoot on the shapes and the name, ease-out on the tagline. Palette: one or two accent colors plus white over the dark opaque background. One-shot, not looped. Use the placeholder channel name \\\"My Channel\\\" and tagline \\\"new videos every week\\\". Expose slots: primaryColor, channelName, taglineText.\",\n },\n },\n {\n id: \"motion-graphics/countdown\",\n name: \"Countdown\",\n description: \"5-second ring countdown from 5 to 1 with a sweeping arc.\",\n group: \"Intros & Logos\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 6,\n backgroundColor: \"#000000\",\n motionPrompt:\n \"A centered countdown from 5 down to 1. A circular ring (stroked in the ring color) sits in the center; a second arc in the same color sweeps around it once per second via an animated trim path, completing one full revolution every 30 frames as a steady visual metronome. Inside the ring, a SINGLE text layer shows the current number in a large bold face (number color), keyframed once per second so the displayed digit steps 5 → 4 → 3 → 2 → 1 across the timeline — the digits are deliberately baked into the keyframes, NOT slotted. On each step, give the number a quick scale-pop (about 120%→100%) and a fast cross-fade so the change reads crisply. After \\\"1\\\", let the ring and number fade out together completing 20 frames before the end so nothing cuts abruptly. Palette: a single accent ring color and a white-ish number color over the opaque black background. One-shot, not looped. Expose slots: ringColor, numberColor.\",\n },\n },\n\n // ── Social & CTA ──────────────────────────────────────────────────────────\n {\n id: \"motion-graphics/subscribe-reminder\",\n name: \"Subscribe Reminder\",\n description: \"Overlay subscribe button that pops in and pulses.\",\n group: \"Social & CTA\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 4,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"An overlay subscribe button for the lower-third area (lower-center or lower-left, inside the title-safe margin). A rounded pill filled with the button color springs in from slightly below with anticipation and overshoot, settling over about 12 frames; the button label in bold white fades in 4 frames behind it. A small play-triangle or bell glyph (white, vector) sits to the left of the label and gives a quick wiggle-free nod — a single tilt and return — as the button lands. Once settled, the whole button breathes with a gentle scale pulse (100%→104%→100%) on a seamless loop to attract attention, then fades out cleanly completing 16 frames before the end. Palette: one saturated button color plus white. Transparent background — this overlays footage, so add no backdrop. The entrance is one-shot; the pulse loops seamlessly. Use the placeholder label \\\"SUBSCRIBE\\\". Expose slots: buttonColor, buttonText.\",\n },\n },\n {\n id: \"motion-graphics/like-follow-bug\",\n name: \"Like + Follow Bug\",\n description: \"Corner bug with a heart pop and editable handle.\",\n group: \"Social & CTA\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 3,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A compact corner bug for the lower-left, sized small so it never blocks the shot. A heart icon built from a vector path (filled with the accent color) pops in with anticipation and overshoot — scaling from 0 with a slight squash-and-stretch over about 10 frames — and emits two or three small accent particles that fan out and fade as it lands. Beside the heart, a handle label in bold white slides in from the left 4 frames behind, easing out. Hold the lockup briefly, then exit with a quick fade and slight slide-down completing 12 frames before the end. Keep it lively but short — under three seconds total. Palette: one accent color on the heart and particles plus white text. Transparent background — overlays footage, no backdrop. One-shot, not looped. Use the placeholder handle \\\"@yourhandle\\\". Expose slots: accentColor, handleText.\",\n },\n },\n {\n id: \"motion-graphics/sale-badge\",\n name: \"Sale Badge\",\n description: \"Square promo badge that stamps in with a starburst.\",\n group: \"Social & CTA\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"1:1\",\n durationSeconds: 3,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A bold square promo badge centered in frame. A starburst or rounded medallion (filled with the badge color, built as a star/polygon or circle group) stamps in with strong anticipation and overshoot — counter-scaling down then snapping up past 100% to about 110% and settling over 12 frames, with a small counter-rotation for energy. The headline sale text scales up inside it in heavy white type from the safelist (Anton or Bebas Neue) 4 frames behind, and a smaller detail line fades in below 6 frames after that. Add a subtle continuous slow rotation (a few degrees back and forth) to keep the badge alive. Exit on a quick scale-down and fade completing 14 frames before the end. Palette: one vivid badge color plus white text. Transparent background — overlays a product shot or post, no backdrop. One-shot entrance; the gentle rotation loops seamlessly. Use the placeholder sale text \\\"50% OFF\\\" and detail \\\"this weekend only\\\". Expose slots: badgeColor, saleText, detailText.\",\n },\n },\n {\n id: \"motion-graphics/story-highlight\",\n name: \"Story Highlight\",\n description: \"Vertical story title card with headline and subtext.\",\n group: \"Social & CTA\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"9:16\",\n durationSeconds: 5,\n backgroundColor: \"#10101a\",\n motionPrompt:\n \"A vertical (portrait) story highlight title card composed for the upper-middle of a tall phone frame, clear of phone UI at top and bottom. A short accent bar wipes in from the left, then a punchy headline scales up from 90% with overshoot and fades in beneath it in bold white (Poppins or Montserrat from the safelist); a subtext line fades in 8 frames later in lighter gray. A couple of small accent dots or a thin underline animate in to add rhythm. Hold the layout still through the middle, then fade everything out together completing 20 frames before the end. Easing: overshoot on the headline, ease-out on supporting elements. Palette: white and gray type with one accent color, over the dark opaque background. One-shot, not looped. Use the placeholder headline \\\"BEHIND THE SCENES\\\" and subtext \\\"swipe up to watch\\\". Expose slots: primaryColor, headlineText, subText.\",\n },\n },\n\n // ── UI & Icons ────────────────────────────────────────────────────────────\n {\n id: \"motion-graphics/loader-spinner\",\n name: \"Loader / Spinner\",\n description: \"Seamless dot-trail loading spinner for UI overlays.\",\n group: \"UI & Icons\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"1:1\",\n durationSeconds: 3,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A clean, seamless loading spinner centered in frame, built for UI overlays. Arrange a ring of small dots (about 8–12, group-wrapped ellipses) around a circle; rotate the whole group continuously and smoothly so it completes an exact whole number of revolutions across the timeline and the last frame matches the first — a perfect seamless loop with no visible seam or stutter. Drive a chasing fade around the ring so each dot brightens then dims in sequence (a trailing comet effect): the lead dots use the dot color at full opacity and the tail fades toward the trail color. Use linear, constant-speed rotation (mechanical, not eased) so it spins forever evenly. Keep it under the layer budget by reusing a repeater or a tight set of dot groups. Transparent background — overlays a UI, no backdrop. Seamless loop — every animated property's last keyframe repeats its first. Expose slots: dotColor, trailColor.\",\n },\n },\n {\n id: \"motion-graphics/success-check\",\n name: \"Success Check\",\n description: \"Checkmark that draws on inside a popping ring.\",\n group: \"UI & Icons\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"1:1\",\n durationSeconds: 2,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A satisfying success confirmation centered in frame. A circular ring (stroked in the ring color) scales in from about 0 with a crisp overshoot and settles over the first 12 frames. The moment it lands, a checkmark drawn as a single stroked path (in the stroke color) draws on left-to-right via an animated trim path from 0% to 100% over about 10 frames, with a slight ease-out so the tick snaps confidently at the end. Add a single soft pulse on the ring as the check completes (a brief scale to ~105% and back). Hold the finished mark, then fade the whole group out completing 8 frames before the end so it doesn't pop off. Easing: overshoot on the ring, ease-out on the trim. Palette: a positive accent on both the ring and the check. Transparent background — overlays a UI, no backdrop. One-shot, not looped. Expose slots: strokeColor, ringColor.\",\n },\n },\n {\n id: \"motion-graphics/error-cross\",\n name: \"Error Cross\",\n description: \"Error X that draws on inside a shaking ring.\",\n group: \"UI & Icons\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"1:1\",\n durationSeconds: 2,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A clear error indicator centered in frame. A circular ring (stroked in the ring color) scales in with overshoot over the first 12 frames. Then an X drawn as two stroked paths (in the stroke color) draws on in quick succession via animated trim paths — the first stroke over about 6 frames, the second starting 3 frames later — each easing out so they land decisively. As the X completes, give the whole group a short, sharp horizontal shake (a damped left-right wobble over ~8 frames) to signal failure, then settle. Hold the finished mark, then fade out completing 8 frames before the end. Easing: overshoot on the ring, ease-out on the strokes, a quick damped shake on the lockup. Palette: an alert accent on both the ring and the cross. Transparent background — overlays a UI, no backdrop. One-shot, not looped. Expose slots: strokeColor, ringColor.\",\n },\n },\n {\n id: \"motion-graphics/progress-bar\",\n name: \"Progress Bar\",\n description: \"Horizontal progress bar that fills with an editable label.\",\n group: \"UI & Icons\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 4,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A horizontal progress bar centered in frame. A rounded track (filled with the track color) fades in first; then a fill bar (the bar color) grows from left to right inside it — animate the fill rectangle's width (or use a left-anchored scale on x) from 0 to full over about 60 frames with an ease-in-out so it accelerates then eases to completion. A short label sits above or beside the track in bold white and fades in as the fill starts. Optionally let a soft highlight sweep along the fill as it grows. When the bar reaches full, give it a small confirming pulse, hold, then fade the whole group out completing 16 frames before the end. Easing: ease-in-out on the fill, ease-out on the label. Palette: a muted track color and one saturated bar color, plus white text. Transparent background — overlays a UI, no backdrop. One-shot, not looped. Use the placeholder label \\\"Loading…\\\". Expose slots: barColor, trackColor, labelText.\",\n },\n },\n {\n id: \"motion-graphics/notification-pop\",\n name: \"Notification Pop\",\n description: \"Toast notification card that slides in with title and body.\",\n group: \"UI & Icons\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 3,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A toast notification card that slides into the top-right corner. A rounded rectangle card (filled with the card color) springs in from above-right with anticipation and overshoot, settling over about 12 frames. A small accent dot or icon pops in on the left of the card, then the title text fades and slides in 4 frames behind in bold white, with the body line following 6 frames later in lighter gray. Keep the card crisp and clean — a subtle drop of opacity from the bg color is fine, but no heavy effects. Hold the toast for the middle of the timeline, then slide it back out up-and-right with a fade completing 14 frames before the end. Easing: overshoot on the card entrance, ease-out on the text. Palette: a card color, white title, gray body, and one small accent. Transparent background — overlays a UI, no backdrop. One-shot, not looped. Use the placeholder title \\\"New message\\\" and body \\\"You have 1 unread notification\\\". Expose slots: cardColor, titleText, bodyText.\",\n },\n },\n\n // ── FX Overlays ───────────────────────────────────────────────────────────\n {\n id: \"motion-graphics/confetti-burst\",\n name: \"Confetti Burst\",\n description: \"Celebratory confetti burst overlay in four colors.\",\n group: \"FX Overlays\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 4,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A celebratory confetti burst that overlays footage. Small vector confetti pieces erupt from a point near the lower-center, fountaining up and outward then drifting down under a gentle gravity-like ease, tumbling slowly and fading out as they fall so the frame clears by the end. Build it compactly: author ONE small group-wrapped rectangle or ellipse per color — colorA, colorB, colorC, colorD — and multiply each with a repeater (8–14 copies, with per-copy position/rotation offsets in the repeater's own transform so the copies fan out instead of stacking). Stagger the four groups' launch a few frames apart for an organic burst — never author individual confetti pieces. KEEP THE JSON COMPACT: at most 4 shape layers and 3–4 keyframes per animated property. Linear-ish motion on launch easing into a soft fall. Transparent background — overlays footage, so add no backdrop. One-shot, not looped: the burst plays once and fully clears before the out point. Expose slots: colorA, colorB, colorC, colorD.\",\n },\n },\n {\n id: \"motion-graphics/sparkle-shimmer\",\n name: \"Sparkle Shimmer\",\n description: \"Looping sparkle twinkles for a magical overlay.\",\n group: \"FX Overlays\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 4,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A gentle, looping sparkle shimmer that overlays footage. Scatter a dozen or so four-point star sparkles (vector star/polygon paths or thin crossed strokes, group-wrapped) across the frame at varied sizes. Each sparkle twinkles by scaling up from 0 and back down while its opacity rises and falls, on its own offset cycle so the field shimmers continuously rather than pulsing in unison — stagger their phase across the timeline. Add a slow, subtle rotation to a few for life. Keep every sparkle the sparkle color (let opacity and scale carry the variation). Use a repeater or a compact set of groups to stay under the layer budget. Soft ease-in-out on each twinkle. Transparent background — overlays footage, so add no backdrop. Seamless loop — every sparkle's last keyframe returns exactly to its first so the shimmer repeats without a seam. Expose slots: sparkleColor.\",\n },\n },\n {\n id: \"motion-graphics/speed-lines\",\n name: \"Speed Lines\",\n description: \"Anime-style speed lines whooshing across the frame.\",\n group: \"FX Overlays\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 2,\n backgroundColor: \"#00000000\",\n motionPrompt:\n \"A short, high-energy burst of anime-style speed lines that overlays footage. Author a set of thin horizontal streaks (narrow tapered rectangles or stroked paths, group-wrapped) at varied vertical positions and lengths; whoosh them across the frame left-to-right (or converging toward center) with a fast linear motion, staggered 1–2 frames apart over the first 10 frames so they read as a rushing swarm. Each line fades in as it enters and fades out as it exits so none lingers. Keep them all the line color and lean on length, position and timing for variety; use a repeater to multiply streaks and stay well under the layer budget. Fast, mechanical linear motion — no easing — for impact. Transparent background — overlays footage, so add no backdrop. One-shot, not looped: the whoosh fires once and clears before the out point. Expose slots: lineColor.\",\n },\n },\n\n // ── Backgrounds ───────────────────────────────────────────────────────────\n {\n id: \"motion-graphics/gradient-blob-loop\",\n name: \"Gradient Blob Loop\",\n description: \"Slow morphing gradient blobs for a looping backdrop.\",\n group: \"Backgrounds\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 8,\n backgroundColor: \"#0a0a12\",\n motionPrompt:\n \"A calm, full-frame animated backdrop of slow-morphing gradient blobs, designed to loop forever behind other content. Place two or three large soft organic blobs (big group-wrapped ellipses or gradient-filled paths) using colorA and colorB, drifting slowly across the frame on gentle looping paths and breathing in scale, so the color softly shifts and overlaps over the full eight seconds. Keep the motion unhurried and continuous with smooth ease-in-out, never sharp. Because this is a standalone backdrop, fill the frame edge-to-edge with the dark opaque base and let the blobs float over it — this preset is allowed a full-frame background. Seamless loop — every blob's position, scale and any gradient stop returns exactly to its starting value on the last frame so the eight-second cycle repeats with no visible seam. Palette: two accent colors blending over the dark base. Expose slots: colorA, colorB.\",\n },\n },\n {\n id: \"motion-graphics/geometric-pattern-loop\",\n name: \"Geometric Pattern Loop\",\n description: \"Tiling geometric shapes animating in a seamless loop.\",\n group: \"Backgrounds\",\n data: {\n engine: \"lottie\",\n aspectRatio: \"16:9\",\n durationSeconds: 8,\n backgroundColor: \"#0b0b0b\",\n motionPrompt:\n \"A full-frame geometric pattern backdrop that loops forever behind other content. Tile a grid of simple shapes (circles, triangles or diamonds — group-wrapped) in the shape color across the dark backdrop color, and animate the field with a traveling wave: each shape scales, rotates or fades on an offset tied to its grid position so a smooth ripple moves diagonally across the frame and wraps continuously. Use a repeater or a compact grid of groups to build the tiling while staying under the 50-layer budget — do not author every cell as its own layer. Keep the motion calm and hypnotic with ease-in-out. Because this is a standalone backdrop, fill the frame with the opaque backdrop color — this preset is allowed a full-frame background. Seamless loop — the wave's phase returns exactly to its start on the last frame so the eight-second cycle repeats with no seam or jump. Palette: one shape color over the dark backdrop color. Expose slots: shapeColor, backdropColor.\",\n },\n },\n]\n","import type { FactoryPreset } from \"./types.js\"\n\n/**\n * Factory presets for the `lottie-overlay` node — placement/timing briefs the\n * overlay planner LLM (see backend/src/prompts/lottie-overlay-system.ts) turns\n * into a timed LottieOverlayPlan over the source video.\n *\n * Each preset's `data` carries ONLY `overlayPrompt`. Deliberately NOT set:\n * `durationSeconds` (the plan timeline must track the SOURCE VIDEO — a baked\n * preset duration would silently truncate the plan on longer footage), `fps`\n * (node default 30), `llmModel` (the user's tier choice), and `overlayPlan`\n * (generated state — cleared generically via PRESET_APPLY_CLEAR_KEYS).\n *\n * Every prompt uses the Nodaro `{variable || default}` reference syntax\n * (node-refs.ts, shipped in PR #3250): run unedited and the default applies;\n * type a value over the token; or wire an upstream node whose label matches\n * the variable name and its output fills the slot at execution time. Both DAG\n * engines resolve the tokens for this node's typed prompt, and the planner's\n * system prompt reads any token that survives unresolved (direct API/MCP\n * calls) as \"<variable> = <default>\" — so the braces never leak into a plan.\n *\n * The \"Connected Graphic\" folder targets the asset wired into the node's\n * `lottie` input (e.g. a Motion Graphics node's authored Lottie); each of\n * those prompts ends with the exclusivity clause \"only the connected graphic\"\n * so the planner never substitutes catalog animations. The other folders name\n * their built-in catalog assets explicitly (LOTTIE_OVERLAY_CATALOG slugs).\n */\nexport const LOTTIE_OVERLAY_PRESETS: readonly FactoryPreset[] = [\n // ── Connected Graphic ─────────────────────────────────────────────────────\n {\n id: \"lottie-overlay/connected-custom\",\n name: \"Overlay Connected Graphic\",\n description: \"Place the wired graphic — position, start time, size and play mode are variables.\",\n group: \"Connected Graphic\",\n data: {\n overlayPrompt:\n \"Overlay the connected graphic {position || centered} over the video, starting at {start time || 1 second}. Play it {play mode || once at its natural duration, then remove it}. Size it {size || to about half the frame width}, keeping its aspect ratio. Use only the connected graphic — no built-in animations.\",\n },\n },\n {\n id: \"lottie-overlay/connected-full-canvas\",\n name: \"Full-Canvas Graphic\",\n description: \"Stretch the wired graphic across the whole frame — for lower thirds, titles and other full-canvas overlays.\",\n group: \"Connected Graphic\",\n data: {\n overlayPrompt:\n \"Stretch the connected graphic across the entire frame (x 0, y 0, width 100, height 100) — it was authored on a full transparent canvas (a lower third, title or badge), so its own internal layout decides where content sits. Start it at {start time || 1 second} and play it {play mode || once at its natural duration}. Full opacity. Use only the connected graphic — no built-in animations.\",\n },\n },\n {\n id: \"lottie-overlay/connected-intro\",\n name: \"Intro Sting\",\n description: \"Open the video with the wired graphic, full-frame, then get out of the way.\",\n group: \"Connected Graphic\",\n data: {\n overlayPrompt:\n \"Open the video with the connected graphic as an intro sting: full-frame from the very first frame, playing once at its natural duration (no loop), then gone for the rest of the video. {treatment || Full opacity, no other effects.} Use only the connected graphic — no built-in animations.\",\n },\n },\n {\n id: \"lottie-overlay/connected-outro\",\n name: \"Outro Sting\",\n description: \"Close the video with the wired graphic, timed to end on the last frame.\",\n group: \"Connected Graphic\",\n data: {\n overlayPrompt:\n \"Close the video with the connected graphic: show it full-frame over the final {outro window || 4 seconds}, timed so it ends exactly on the video's last frame. If its natural duration is shorter than the window, start it later so it still finishes on the last frame; if it is a looping animation, loop it through the window. Use only the connected graphic — no built-in animations.\",\n },\n },\n {\n id: \"lottie-overlay/connected-corner-bug\",\n name: \"Corner Bug (Loop)\",\n description: \"The wired graphic as a small looping watermark in a corner.\",\n group: \"Connected Graphic\",\n data: {\n overlayPrompt:\n \"Pin the connected graphic as a small corner bug in the {corner || bottom-right} corner, about {size || 14}% of the frame width, at {opacity || 80}% opacity, looping from the first frame to the last. Keep a small margin (about 3%) from the edges so it never clips. Use only the connected graphic — no built-in animations.\",\n },\n },\n {\n id: \"lottie-overlay/connected-reaction-pop\",\n name: \"Reaction Pop\",\n description: \"Pop the wired graphic in at a moment, sized like a reaction sticker.\",\n group: \"Connected Graphic\",\n data: {\n overlayPrompt:\n \"Pop the connected graphic in at {moment || 2 seconds}, {position || in the lower-right area}, sized like a reaction sticker ({size || about 22}% of the frame width). Play it {play mode || once at its natural duration} and remove it. Use only the connected graphic — no built-in animations.\",\n },\n },\n\n // ── Celebration & FX ──────────────────────────────────────────────────────\n {\n id: \"lottie-overlay/celebration-moment\",\n name: \"Celebration Moment\",\n description: \"Confetti burst at a key moment with a short sparkle tail.\",\n group: \"Celebration & FX\",\n data: {\n overlayPrompt:\n \"Fire a confetti burst at {moment || 3 seconds} covering most of the frame, one-shot. As it lands, add twinkling star sparkles over the {sparkle area || upper third} for {sparkle window || 3 seconds}, then clear the frame. Use the built-in confetti-burst and stars-sparkle assets.\",\n },\n },\n {\n id: \"lottie-overlay/grand-finale\",\n name: \"Grand Finale\",\n description: \"Fireworks and confetti building over the video's final seconds.\",\n group: \"Celebration & FX\",\n data: {\n overlayPrompt:\n \"Build a finale across the last {finale window || 4 seconds} of the video: fireworks bursting over the upper half of the frame, plus a confetti burst as the window opens, both timed to end on the video's last frame. One-shot energy — nothing keeps looping past the end. Use the built-in fireworks and confetti-burst assets.\",\n },\n },\n {\n id: \"lottie-overlay/ambient-particles\",\n name: \"Ambient Particles\",\n description: \"Soft full-frame particles for the whole video; the footage stays the hero.\",\n group: \"Celebration & FX\",\n data: {\n overlayPrompt:\n \"Lay the built-in floating-particles asset over the whole video: full-frame, looping from the first frame to the last, at {opacity || 40}% opacity so the footage stays the hero. Calm and ambient — add nothing else.\",\n },\n },\n\n // ── Reactions & Social ────────────────────────────────────────────────────\n {\n id: \"lottie-overlay/heart-reaction\",\n name: \"Heart Reaction\",\n description: \"Pulsing heart near a corner at a moment.\",\n group: \"Reactions & Social\",\n data: {\n overlayPrompt:\n \"Show the built-in heart-pulse near the {corner || bottom-right} corner, starting at {moment || 2 seconds} and looping for {window || 3 seconds}, about {size || 18}% of the frame width, then remove it.\",\n },\n },\n {\n id: \"lottie-overlay/hype-combo\",\n name: \"Hype Combo\",\n description: \"Thumbs-up pop plus fire emoji at a key beat.\",\n group: \"Reactions & Social\",\n data: {\n overlayPrompt:\n \"At {moment || 2 seconds}, pop the built-in thumbs-up near the {corner || bottom-right} corner (one-shot) and the fire-flame emoji right beside it, looping for {window || 3 seconds}. Medium reaction size (15-20% of the frame width each), staggered a few frames apart so they land with rhythm.\",\n },\n },\n\n // ── Emphasis & UI ─────────────────────────────────────────────────────────\n {\n id: \"lottie-overlay/point-it-out\",\n name: \"Point It Out\",\n description: \"Animated arrow aimed at a spot for a few seconds.\",\n group: \"Emphasis & UI\",\n data: {\n overlayPrompt:\n \"Aim the built-in arrow-pointer at {target || the center of the frame} from {start time || 1 second} for {window || 2.5 seconds}, small (about 12-15% of the frame width), looping while visible, positioned beside the target so it points clearly without covering it.\",\n },\n },\n {\n id: \"lottie-overlay/success-beat\",\n name: \"Success Beat\",\n description: \"Checkmark pop to mark a win or completed step.\",\n group: \"Emphasis & UI\",\n data: {\n overlayPrompt:\n \"Mark a success beat: pop the built-in checkmark-success {position || centered} at {moment || 2 seconds}, about {size || 20}% of the frame width, playing once and then gone. Crisp and quick — no lingering.\",\n },\n },\n]\n","export interface FactoryPreset {\n /** Stable slug \"<nodeType>/<kebab-name>\" — used as a React key and in exports. */\n readonly id: string\n readonly name: string\n readonly description?: string\n /** Optional folder/section label this preset is grouped under in the picker.\n * Presets sharing a `group` render together; \"variants of one idea\" (e.g. the\n * character-sheet family) are simply siblings in the same group. */\n readonly group?: string\n /** How the group renders: a collapsible \"folder\" (default) or a flat \"section\"\n * label. Taken from the first preset that opens the group. */\n readonly groupKind?: \"folder\" | \"section\"\n /** Capture-shaped config (no label / fieldMappings / runtime keys). */\n readonly data: Readonly<Record<string, unknown>>\n /**\n * How many connected reference images the preset works from, stated for a\n * preset whose prompt refers to \"the attached photo\" in words (Reference\n * Sheet, Portrait Transformations, Stylized Subject, Edits, …). Leave it out\n * otherwise: `{image:N}` tokens in the prompt are counted on their own, and\n * the count a client sees is the larger of the two (`presetMinReferences`).\n */\n readonly minReferences?: number\n}\n\n/** A render-ready bucket of factory presets sharing one `group` (or the leading\n * ungrouped bucket, `group: null`). Produced by {@link groupFactoryPresets}. */\nexport interface FactoryPresetGroup<T> {\n /** Stable key for React + collapse state (\"__root__\" for the ungrouped bucket). */\n readonly key: string\n /** Group label, or null for the ungrouped bucket. */\n readonly group: string | null\n readonly groupKind: \"folder\" | \"section\"\n readonly presets: T[]\n}\n\n/**\n * Bucket an ordered list of presets by their `group` field for rendering. Groups\n * appear in first-appearance order; presets keep their array order within a\n * group; ungrouped presets collect into a single leading `null` bucket. Pure and\n * UI-agnostic (operates on anything carrying `group`/`groupKind`) so the config\n * panel dropdown reuses it and it stays unit-testable.\n */\nexport function groupFactoryPresets<\n T extends { group?: string; groupKind?: \"folder\" | \"section\" },\n>(presets: readonly T[]): FactoryPresetGroup<T>[] {\n const buckets: FactoryPresetGroup<T>[] = []\n const byKey = new Map<string, FactoryPresetGroup<T>>()\n for (const p of presets) {\n const key = p.group ?? \"__root__\"\n let bucket = byKey.get(key)\n if (!bucket) {\n bucket = { key, group: p.group ?? null, groupKind: p.groupKind ?? \"folder\", presets: [] }\n byKey.set(key, bucket)\n buckets.push(bucket)\n }\n bucket.presets.push(p)\n }\n return buckets\n}\n","import { IMAGE_TOKEN_PATTERN } from \"../image-token-pattern.js\"\nimport { getPromptFields, nodeSupportsPromptAffixes, promptAffixCoreField } from \"../node-prompt-fields.js\"\nimport { NODE_PROMPT_CANDIDATE_FIELDS } from \"../resolve-prompt.js\"\nimport { ownEntry } from \"../own-entry.js\"\nimport { MODELS_WITH_REFERENCE_IMAGE_SUPPORT, imageReferenceLimit } from \"@nodaro/shared/models\"\n\n/**\n * The most reference images any image model takes. A preset can never need\n * more than some model could be sent, so a count is clamped to it — a typo\n * like `{image:99999}` must not tell a client to ask for 99,999 photos.\n */\nexport const MAX_PRESET_REFERENCES: number = Math.max(\n 1,\n ...[...MODELS_WITH_REFERENCE_IMAGE_SUPPORT].map((provider) => imageReferenceLimit(provider)),\n)\n\n/**\n * The data fields of `nodeType` a reference token can sit in — every field the\n * run reads its prompt from: the candidate fields `computeNodePrompt` joins\n * (`NODE_PROMPT_CANDIDATE_FIELDS` — how a preset's prompt is resolved when it\n * runs, on the canvas and through `presetId` alike), the prompt-field\n * registry's own prompt and negative fields, the field the run wraps with\n * pre/post text, and the pre/post text itself where the node takes it. A node\n * whose prompt lives elsewhere (`llm-chat` → `userInput`) is read where its\n * prompt really is; a type with no prompt (an app namespace) has none.\n */\nfunction promptFieldsOf(nodeType: string): string[] {\n const spec = getPromptFields(nodeType)\n const candidates = ownEntry(NODE_PROMPT_CANDIDATE_FIELDS, nodeType) ?? []\n if (!spec && candidates.length === 0) return []\n const fields = new Set<string>(candidates)\n if (spec) {\n fields.add(spec.prompt)\n if (spec.negative) fields.add(spec.negative)\n }\n const core = promptAffixCoreField(nodeType)\n if (core) fields.add(core)\n if (nodeSupportsPromptAffixes(nodeType)) {\n fields.add(\"promptPrefix\")\n fields.add(\"promptSuffix\")\n }\n return [...fields]\n}\n\n/** The highest `{image:N}` / `{image:N:label}` position in `text`, or 0. */\nfunction highestImageToken(text: string): number {\n let highest = 0\n for (const match of text.matchAll(IMAGE_TOKEN_PATTERN)) {\n const n = Number.parseInt(match[1] ?? \"\", 10)\n if (Number.isInteger(n) && n > highest) highest = n\n }\n return highest\n}\n\n/**\n * How many connected reference images a preset works from — 0 for a preset\n * that needs none. A client shows a preset with a non-zero count as \"needs a\n * photo\" (`needsImage`) and asks for that many before running it.\n *\n * Two sources, and the larger wins:\n * - the `{image:N}` / `{image:N:label}` tokens in the preset's prompt fields\n * (the highest N): a template that names its references always reports them;\n * - `declared` — the factory preset's own `minReferences`, for presets whose\n * prompt refers to \"the attached photo\" in words, which no data field marks.\n * A user preset has no declaration, so its count comes from its tokens.\n *\n * Pure; never throws. A declaration that is not a positive whole number is\n * ignored, and the result is at most {@link MAX_PRESET_REFERENCES}.\n */\nexport function presetMinReferences(\n nodeType: string,\n data: Readonly<Record<string, unknown>>,\n declared?: number,\n): number {\n let count = typeof declared === \"number\" && Number.isInteger(declared) && declared > 0 ? declared : 0\n for (const field of promptFieldsOf(nodeType)) {\n const value = data[field]\n if (typeof value === \"string\") count = Math.max(count, highestImageToken(value))\n }\n return Math.min(count, MAX_PRESET_REFERENCES)\n}\n","// GENERATED by tools/preset-previews/build.mts — do not edit. Factory preset id →\n// content-hashed file under frontend/public/preset-previews/ (`<nodeType>/<slug>.<hash8>.webp`).\nexport const FACTORY_PRESET_PREVIEW_FILES: Readonly<Record<string, string>> = {\n}\n","import { FACTORY_PRESET_PREVIEW_FILES } from \"./preview-files.generated.js\"\n\nexport { FACTORY_PRESET_PREVIEW_FILES }\n\n/**\n * Where the factory preset previews live, relative to the app's origin:\n * `frontend/public/preset-previews/` is served at `/preset-previews/` in every\n * edition. Each name carries its content hash (`<slug>.<hash8>.webp`), so the\n * server caches them as immutable and a regenerated picture is a new URL.\n */\nexport const PRESET_PREVIEW_PATH = \"/preset-previews/\"\n\nfunction originOf(baseUrl: string): string | undefined {\n try {\n const url = new URL(baseUrl)\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\") return undefined\n return url.origin + url.pathname.replace(/\\/+$/, \"\")\n } catch {\n return undefined\n }\n}\n\n/**\n * The absolute URL of a factory preset's example picture on the installation\n * at `baseUrl` (its public origin, e.g. \"https://app.nodaro.ai\"), or null when\n * the preset has none. Only a preset whose file is in the committed map gets a\n * URL, so it never points at a file that does not exist.\n *\n * @param files the preset id → file map; defaults to the committed one\n */\nexport function factoryPresetPreviewUrl(\n presetId: string,\n baseUrl: string,\n files: Readonly<Record<string, string>> = FACTORY_PRESET_PREVIEW_FILES,\n): string | null {\n const file = Object.prototype.hasOwnProperty.call(files, presetId) ? files[presetId] : undefined\n if (!file) return null\n const origin = originOf(baseUrl)\n return origin ? `${origin}${PRESET_PREVIEW_PATH}${file}` : null\n}\n","import { T2I_TO_I2I_VARIANT } from \"@nodaro/shared/models\"\nimport { ownEntry } from \"../own-entry.js\"\nimport type { FactoryPreset } from \"./types.js\"\nimport { stylizedSubjectFor, editsFor } from \"./shared-image.js\"\nimport { GENERATE_IMAGE_PRESETS } from \"./generate-image.js\"\nimport { GENERATE_VIDEO_PRESETS } from \"./generate-video.js\"\nimport { GENERATE_MUSIC_PRESETS, SUNO_GENERATE_PRESETS } from \"./music.js\"\nimport { TEXT_TO_SPEECH_PRESETS, VOICE_DESIGN_PRESETS, VOICE_CHANGER_PRESETS } from \"./voice.js\"\nimport { TEXT_TO_AUDIO_PRESETS } from \"./sfx.js\"\nimport { LLM_CHAT_PRESETS, GENERATE_SCRIPT_PRESETS, IMAGE_TO_TEXT_PRESETS } from \"./text.js\"\nimport { VIDEO_TO_VIDEO_PRESETS, ADD_CAPTIONS_PRESETS, COMBINE_VIDEOS_PRESETS } from \"./video-edit.js\"\nimport { SWITCHX_PRESETS } from \"./switchx.js\"\nimport { MOTION_GRAPHICS_PRESETS } from \"./motion-graphics.js\"\nimport { LOTTIE_OVERLAY_PRESETS } from \"./lottie-overlay.js\"\n\nexport type { FactoryPreset, FactoryPresetGroup } from \"./types.js\"\nexport { groupFactoryPresets } from \"./types.js\"\nexport { MAX_PRESET_REFERENCES, presetMinReferences } from \"./references.js\"\nexport { FACTORY_PRESET_PREVIEW_FILES, PRESET_PREVIEW_PATH, factoryPresetPreviewUrl } from \"./previews.js\"\n\n/**\n * A shared preset as Modify Image takes it. Modify Image always works from a source photo, so its\n * provider list names a model's image-to-image id where the model has a separate one\n * (`seedream-5-pro` → `seedream-5-pro-i2i`). The shared catalogs may carry the text-to-image id\n * Generate Image takes — its route switches to that same image-to-image model once a photo is\n * connected. Providers with no separate image-to-image id are left as they are.\n */\nfunction forModifyImage(p: FactoryPreset): FactoryPreset {\n const provider = p.data.provider\n const imageToImage = typeof provider === \"string\" ? T2I_TO_I2I_VARIANT[provider] : undefined\n return imageToImage ? { ...p, data: { ...p.data, provider: imageToImage } } : p\n}\n\n/** System/factory presets shipped with the app. Assembled here in the original\n * single-file key order; each value lives in its per-domain module. */\nexport const FACTORY_PRESETS: Readonly<Record<string, readonly FactoryPreset[]>> = {\n \"generate-image\": GENERATE_IMAGE_PRESETS,\n\n // modify-image shares the Stylized Subject + Edits catalogs with generate-image\n // (single source of truth in STYLIZED_SUBJECT / IMAGE_EDITS). modify-image is\n // slated for deprecation in favor of generate-image — when removed, drop this key.\n \"modify-image\": [...stylizedSubjectFor(\"modify-image\"), ...editsFor(\"modify-image\")].map(forModifyImage),\n \"generate-video\": GENERATE_VIDEO_PRESETS,\n \"text-to-speech\": TEXT_TO_SPEECH_PRESETS,\n \"text-to-audio\": TEXT_TO_AUDIO_PRESETS,\n \"generate-music\": GENERATE_MUSIC_PRESETS,\n \"suno-generate\": SUNO_GENERATE_PRESETS,\n \"llm-chat\": LLM_CHAT_PRESETS,\n \"generate-script\": GENERATE_SCRIPT_PRESETS,\n \"image-to-text\": IMAGE_TO_TEXT_PRESETS,\n \"voice-design\": VOICE_DESIGN_PRESETS,\n \"video-to-video\": VIDEO_TO_VIDEO_PRESETS,\n \"switchx\": SWITCHX_PRESETS,\n \"voice-changer\": VOICE_CHANGER_PRESETS,\n \"add-captions\": ADD_CAPTIONS_PRESETS,\n \"combine-videos\": COMBINE_VIDEOS_PRESETS,\n \"motion-graphics\": MOTION_GRAPHICS_PRESETS,\n \"lottie-overlay\": LOTTIE_OVERLAY_PRESETS,\n}\n\n/** The catalog for `nodeType`, or an empty one — also for a name that is an\n * Object.prototype member (`constructor`), which is no catalog of ours. */\nexport function getFactoryPresets(nodeType: string): readonly FactoryPreset[] {\n return ownEntry(FACTORY_PRESETS, nodeType) ?? []\n}\n","// packages/prompts/src/caption-treatments.ts\nimport type { CaptionPlan, SupportedFontName } from \"@nodaro/shared/captions\"\nimport { ADD_CAPTIONS_PRESETS } from \"./factory-presets/video-edit.js\"\n\nexport const HOOK_PLATE_PRESET_ID = \"add-captions/hook-plate\"\nexport const BODY_CAPTIONS_PRESET_ID = \"add-captions/body-captions\"\n\n/** Levers a spoken language needs on every caption segment; a language with no entry adds none. */\nexport interface CaptionLanguageLevers {\n readonly fontFamily?: SupportedFontName\n readonly uppercase?: boolean\n}\n\n/**\n * Keyed by primary language tag. Hebrew: one face that carries Hebrew and Latin, so a Latin\n * brand inside a Hebrew line is drawn in the same face, and no upper-casing, so the brand keeps\n * its spelling.\n */\nexport const CAPTION_LEVERS_BY_LANGUAGE: Readonly<Record<string, CaptionLanguageLevers>> = {\n he: { fontFamily: \"Rubik\", uppercase: false },\n}\n\n/** The add-captions segment keys a lever set may carry: the segment schema minus times and words. */\nexport const CAPTION_SEGMENT_LEVER_KEYS: readonly string[] = [\n \"style\", \"position\", \"fontSize\", \"color\", \"backgroundColor\", \"look\", \"fontFamily\", \"fontWeight\",\n \"strokeColor\", \"strokeWidth\", \"highlightColor\", \"uppercase\", \"positionY\", \"animate\", \"maxWordsPerLine\",\n]\n\nexport type CaptionSegmentRole = \"hook\" | \"body\"\n\nexport interface HookPlateSegmentsOptions {\n /** The body's levers; default = the Body Captions preset. Keys outside CAPTION_SEGMENT_LEVER_KEYS are ignored. */\n readonly bodyLevers?: Readonly<Record<string, unknown>>\n}\n\nexport interface HookPlateSegmentsResult {\n /** Route-shaped (camelCase) `segments`. Empty means \"no captions\". */\n readonly segments: Record<string, unknown>[]\n /** Segments left out, in order hook, body. */\n readonly dropped: CaptionSegmentRole[]\n}\n\nconst LEVER_KEYS: ReadonlySet<string> = new Set(CAPTION_SEGMENT_LEVER_KEYS)\n\n/** A lever set: segment lever keys only, without null or undefined values. */\nfunction pickLevers(source: Readonly<Record<string, unknown>> | undefined): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n if (!source) return out\n for (const [k, v] of Object.entries(source)) if (LEVER_KEYS.has(k) && v !== undefined && v !== null) out[k] = v\n return out\n}\n\nfunction presetLevers(id: string): Record<string, unknown> {\n const preset = ADD_CAPTIONS_PRESETS.find((p) => p.id === id)\n if (!preset) throw new Error(`The ${id} caption preset is missing from the catalog.`)\n return pickLevers(preset.data)\n}\n\nconst PLATE_LEVERS = presetLevers(HOOK_PLATE_PRESET_ID)\nconst BODY_LEVERS = presetLevers(BODY_CAPTIONS_PRESET_ID)\n\nfunction languageLevers(tag: string | undefined): CaptionLanguageLevers {\n if (typeof tag !== \"string\") return {}\n const primary = tag.trim().split(/[-_]/)[0]!.toLowerCase()\n return Object.hasOwn(CAPTION_LEVERS_BY_LANGUAGE, primary) ? CAPTION_LEVERS_BY_LANGUAGE[primary]! : {}\n}\n\nconst isTime = (n: unknown): n is number => typeof n === \"number\" && Number.isFinite(n)\n\n/**\n * One caption plan → the `segments` of one add-captions request: the opening line as the Hook\n * Plate, then the body's words in the Body Captions style (or the caller's own body levers).\n * The styling is read from the two presets, never restated here. Pure: no I/O.\n */\nexport function hookPlateCaptionSegments(plan: CaptionPlan, opts: HookPlateSegmentsOptions = {}): HookPlateSegmentsResult {\n const hookEnd = plan.hookEndMs\n if (!isTime(hookEnd) || hookEnd < 0) return { segments: [], dropped: [\"hook\", \"body\"] }\n const language = languageLevers(plan.language)\n const limit = typeof plan.videoDurationMs === \"number\" ? plan.videoDurationMs : Number.POSITIVE_INFINITY\n const segments: Record<string, unknown>[] = []\n const dropped: CaptionSegmentRole[] = []\n\n const plateEnd = Math.min(hookEnd, limit)\n if (plateEnd > 0 && typeof plan.hookText === \"string\" && /\\S/.test(plan.hookText)) {\n segments.push({ startMs: 0, endMs: plateEnd, text: plan.hookText, ...PLATE_LEVERS, ...language })\n } else {\n dropped.push(\"hook\")\n }\n\n // The body starts where the opening line ends, even when no plate is shown, so it never\n // draws over the opening line.\n const bodyEnd = Math.min(plan.bodyEndMs, limit)\n const words = Array.isArray(plan.captions) ? plan.captions : []\n const chosen = pickLevers(opts.bodyLevers)\n const bodyLevers = Object.keys(chosen).length > 0 ? chosen : BODY_LEVERS\n if (bodyEnd > hookEnd && words.length > 0) {\n segments.push({\n startMs: hookEnd,\n endMs: bodyEnd,\n captions: words.map((w) => ({ text: w.text, startMs: w.startMs, endMs: w.endMs })),\n ...bodyLevers,\n ...language,\n })\n } else {\n dropped.push(\"body\")\n }\n\n return { segments, dropped }\n}\n","import type { StyleDirectives } from \"@nodaro/shared/pipeline\"\n\n/**\n * Style Gallery presets.\n *\n * Each preset is a named \"look\" the user picks at Start. Picking one sets the\n * pipeline's `style_directives`, which the Showrunner folds into the plan's\n * `global_style` — and from there it propagates into every entity reference\n * sheet, scene keyframe, and shot prompt, plus the image/location critics. So\n * the whole film stays visually consistent in the chosen style.\n *\n * The catalog is intentionally style/genre-agnostic (not just \"cinematic\"):\n * films, explainers, animated ads, kids' content, education. A per-shot style\n * override lives in the Focus composer (follow-up).\n *\n * `swatch` is a CSS gradient used as a lightweight thumbnail until real sample\n * images ship — it gives each look a recognizable visual without bundling\n * assets.\n */\nexport interface StylePreset {\n /** Stable id stored on the pipeline (do not rename — breaks recall). */\n id: string\n label: string\n /** One-line description shown under the label. */\n description: string\n /** CSS `background` value for the card's thumbnail swatch. */\n swatch: string\n /** Conditioning fed to the Showrunner → plan.global_style → all generation. */\n directives: StyleDirectives\n}\n\nexport const STYLE_PRESETS: readonly StylePreset[] = [\n {\n id: \"cinematic\",\n label: \"Cinematic Photography\",\n description: \"Photoreal film look, shallow depth, filmic grade.\",\n swatch: \"linear-gradient(135deg,#1b2a4a,#c97b4a)\",\n directives: {\n visualStyle:\n \"photorealistic cinematic film still, 35mm anamorphic, shallow depth of field, subtle film grain\",\n colorPalette: \"rich natural tones with a teal-and-orange grade\",\n lighting: \"dramatic motivated lighting, soft key with rim light\",\n cameraLanguage: \"cinematic composition, smooth dolly and crane moves\",\n avoid: \"cartoon, illustration, flat shading, low detail\",\n },\n },\n {\n id: \"flat2d\",\n label: \"Modern Flat 2D\",\n description: \"Bold flat vector shapes, clean outlines.\",\n swatch: \"linear-gradient(135deg,#ff6b6b,#ffd93d)\",\n directives: {\n visualStyle:\n \"modern flat 2D vector illustration, bold geometric shapes, clean outlines\",\n colorPalette: \"bright saturated flat colors\",\n lighting: \"even flat lighting, no gradients\",\n cameraLanguage: \"straight-on framing, simple pans and cuts\",\n avoid: \"photorealism, 3D render, gradients, texture noise\",\n },\n },\n {\n id: \"clay3d\",\n label: \"Soft 3D Clay\",\n description: \"Rounded claymation forms, matte texture.\",\n swatch: \"linear-gradient(135deg,#f5b5c8,#a8d8c0)\",\n directives: {\n visualStyle:\n \"soft 3D claymation look, rounded forms, matte clay texture, fingerprint detail\",\n colorPalette: \"warm pastel palette\",\n lighting: \"soft studio lighting with gentle shadows\",\n cameraLanguage: \"playful slow orbits and push-ins\",\n avoid: \"photorealism, harsh shadows, flat 2D\",\n },\n },\n {\n id: \"lineart\",\n label: \"Minimal Line-Art\",\n description: \"Single-weight black strokes, one accent.\",\n swatch: \"linear-gradient(135deg,#ffffff,#111111)\",\n directives: {\n visualStyle: \"minimal black line-art on white, single-weight strokes\",\n colorPalette: \"monochrome with a single accent color\",\n lighting: \"no rendered lighting, line only\",\n cameraLanguage: \"static, centered compositions\",\n avoid: \"color fills, shading, photorealism, 3D\",\n },\n },\n {\n id: \"papercut\",\n label: \"Paper-Cut\",\n description: \"Layered construction-paper collage.\",\n swatch: \"linear-gradient(135deg,#e8a87c,#85cdca)\",\n directives: {\n visualStyle:\n \"layered paper-cut collage, stacked construction-paper layers with soft drop shadows\",\n colorPalette: \"warm crafted paper tones\",\n lighting: \"soft layered shadows between paper planes\",\n cameraLanguage: \"gentle parallax between paper layers\",\n avoid: \"photorealism, smooth gradients, 3D render\",\n },\n },\n {\n id: \"isometric\",\n label: \"Isometric\",\n description: \"Clean 2:1 axonometric diorama.\",\n swatch: \"linear-gradient(135deg,#6a82fb,#a6c1ee)\",\n directives: {\n visualStyle: \"clean isometric 3D, 2:1 axonometric, miniature diorama\",\n colorPalette: \"soft uniform palette\",\n lighting: \"even ambient occlusion, no harsh shadows\",\n cameraLanguage: \"fixed isometric angle with smooth pans\",\n avoid: \"perspective distortion, photorealism, hand-drawn lines\",\n },\n },\n {\n id: \"tiltshift\",\n label: \"Tilt-Shift Miniature\",\n description: \"Toy-scale hyperreal, shifted focus.\",\n swatch: \"linear-gradient(135deg,#43cea2,#185a9d)\",\n directives: {\n visualStyle: \"tilt-shift miniature photography, hyperreal toy-like scale\",\n colorPalette: \"vivid high-saturation\",\n lighting: \"bright midday daylight\",\n cameraLanguage: \"top-down tilt-shift angle, slow push-ins\",\n avoid: \"flat illustration, low saturation, line-art\",\n },\n },\n {\n id: \"anime\",\n label: \"Anime / Cel\",\n description: \"Cel-shaded, crisp lines, expressive.\",\n swatch: \"linear-gradient(135deg,#ff9a9e,#fad0c4)\",\n directives: {\n visualStyle:\n \"anime cel-shaded illustration, crisp linework, expressive characters\",\n colorPalette: \"vibrant cel colors\",\n lighting: \"stylized cel shading with bold highlights\",\n cameraLanguage: \"dynamic anime framing with occasional speed lines\",\n avoid: \"photorealism, 3D render, muted colors\",\n },\n },\n {\n id: \"watercolor\",\n label: \"Watercolor Storybook\",\n description: \"Soft washes, paper texture, bleeding edges.\",\n swatch: \"linear-gradient(135deg,#cfd9df,#e2ebf0)\",\n directives: {\n visualStyle:\n \"soft watercolor storybook painting, visible paper texture, bleeding edges\",\n colorPalette: \"muted pastel washes\",\n lighting: \"soft diffuse light\",\n cameraLanguage: \"gentle, slow movements\",\n avoid: \"hard edges, photorealism, 3D render\",\n },\n },\n] as const\n\n/** Resolve a preset by id. Returns undefined for the \"Auto\" / unknown case. */\nexport function getStylePreset(id: string | undefined): StylePreset | undefined {\n if (!id) return undefined\n return STYLE_PRESETS.find((s) => s.id === id)\n}\n","// Object Studio asset presets — SINGLE SOURCE OF TRUTH for the Angles /\n// Materials / Variations preset chips AND their generation prompt fragments.\n//\n// Both the frontend tab wrappers (`object-studio/{angles,materials,variations}-tab.tsx`)\n// and the backend route (`generate-object-asset.ts` — VARIANTS validation +\n// buildVariantPrompt) import from here, so the preset list can never drift\n// between client and server.\n//\n// Why this file exists: the frontend shipped 9 / 13 / 11 presets while the\n// backend enum only accepted 5 / 6 / 5, so ~17 chips 400'd with a silent\n// failure (the route rejects any variant not in VARIANTS, and the studio sent\n// them as assetType:\"angles|materials|variations\", NOT \"custom\"). Deriving both\n// sides from one constant is the drift-proof fix.\n//\n// To add a preset: add ONE entry to the matching prompt map below. The key list\n// and the backend validation update automatically.\n\n/** Angle preset → prompt fragment (slotted into \"<name>, <fragment>. <base>\"). */\nexport const OBJECT_ANGLE_PROMPTS: Record<string, string> = {\n front: \"front view, facing camera directly\",\n side: \"side profile view\",\n top: \"top-down view, bird's eye perspective\",\n back: \"back view, rear perspective\",\n \"three-quarter\": \"three-quarter angle view, dynamic perspective\",\n detail: \"extreme close-up detail shot, macro view of the surface and craftsmanship\",\n \"in-context\": \"shown in its natural environment and use context, real-world setting\",\n exploded: \"exploded technical view, components separated and floating apart\",\n perspective: \"dramatic low-angle perspective view, strong sense of depth\",\n}\n\n/** Material preset → prompt fragment. */\nexport const OBJECT_MATERIAL_PROMPTS: Record<string, string> = {\n wood: \"made of polished wood, wood grain texture visible\",\n metal: \"made of brushed metal, metallic surface with subtle reflections\",\n glass: \"made of transparent glass, see-through with subtle reflections\",\n plastic: \"made of smooth plastic, matte finish\",\n fabric: \"covered in soft fabric texture, textile material\",\n stone: \"carved from stone, rough granite or marble texture\",\n ceramic: \"made of glazed ceramic, smooth glossy fired-clay surface\",\n leather: \"wrapped in tanned leather, natural grain and visible stitching\",\n paper: \"made of folded paper and cardboard, matte fibrous texture\",\n gold: \"made of polished gold, warm reflective precious-metal sheen\",\n silver: \"made of polished silver, cool bright reflective metal\",\n copper: \"made of copper, warm reddish metal with a subtle patina\",\n marble: \"carved from marble, smooth polished stone with natural veining\",\n}\n\n/** Variation preset → prompt fragment. */\nexport const OBJECT_VARIATION_PROMPTS: Record<string, string> = {\n clean: \"brand new pristine condition, perfect and clean\",\n weathered: \"slightly weathered and aged, with wear marks\",\n damaged: \"battle-damaged with scratches and dents\",\n ornate: \"ornately decorated with intricate details and patterns\",\n minimal: \"minimalist design, clean simple lines\",\n broken: \"broken and cracked, shattered with missing pieces\",\n antique: \"antique vintage version, aged patina and period detailing\",\n futuristic: \"sleek futuristic sci-fi redesign, advanced materials with a subtle glow\",\n holographic: \"iridescent holographic finish, rainbow refractive sheen\",\n dirty: \"dirty and grimy, covered in dust, mud and stains\",\n polished: \"immaculately polished, mirror-bright showroom finish\",\n}\n\nexport const OBJECT_ANGLE_PRESETS: readonly string[] = Object.keys(OBJECT_ANGLE_PROMPTS)\nexport const OBJECT_MATERIAL_PRESETS: readonly string[] = Object.keys(OBJECT_MATERIAL_PROMPTS)\nexport const OBJECT_VARIATION_PRESETS: readonly string[] = Object.keys(OBJECT_VARIATION_PROMPTS)\n\nexport type ObjectPresetAssetType = \"angles\" | \"materials\" | \"variations\"\n\n/** Preset key lists per asset type — backend VARIANTS validation reads this. */\nexport const OBJECT_ASSET_PRESETS: Record<ObjectPresetAssetType, readonly string[]> = {\n angles: OBJECT_ANGLE_PRESETS,\n materials: OBJECT_MATERIAL_PRESETS,\n variations: OBJECT_VARIATION_PRESETS,\n}\n\n/** Prompt-fragment maps per asset type — backend buildVariantPrompt reads this. */\nexport const OBJECT_ASSET_PROMPTS: Record<ObjectPresetAssetType, Record<string, string>> = {\n angles: OBJECT_ANGLE_PROMPTS,\n materials: OBJECT_MATERIAL_PROMPTS,\n variations: OBJECT_VARIATION_PROMPTS,\n}\n","/** Factory snippet catalog (v1: image + video; audio/text follow later).\n * Order within a category = menu order = pill quick-cycle order. */\nimport type { FactorySnippet } from \"./types.js\"\nimport { REFERENCE_RULES, SCENE_FRAME_RULE, FILM_STILL_PREFIX, CINEMATIC_LOOK_TAIL } from \"../reference-rules.js\"\n\nconst B = [\"image\", \"video\"] as const\nconst I = [\"image\"] as const\nconst V = [\"video\"] as const\n\nexport const FACTORY_SNIPPETS: readonly FactorySnippet[] = [\n // ── Identity & Consistency (prompt) ──\n { id: \"identity-lock\", name: \"Identity Lock\", description: \"Hard-preserve the person's identity vs the reference\", text: \"preserve the exact same face, facial features, eye color, age, and expression as the reference image — do not alter identity\", target: \"prompt\", media: B, category: \"Identity & Consistency\" },\n { id: \"same-person-as-reference\", name: \"Same Person as Reference\", description: \"Bind generation to the reference human\", text: \"the same person as in the reference image: identical face, hairstyle, build, and skin tone\", target: \"prompt\", media: B, category: \"Identity & Consistency\" },\n { id: \"edit-only-the-request\", name: \"Edit Only the Request\", description: \"Change one thing, freeze everything else (Kontext/gpt-image edit pattern)\", text: \"change only the requested element; keep the face, pose, lighting, framing, and everything else exactly the same\", target: \"prompt\", media: I, category: \"Identity & Consistency\" },\n { id: \"wardrobe-lock\", name: \"Wardrobe Lock\", description: \"Outfit continuity across shots and edits\", text: \"wearing exactly the same outfit as the reference — same garments, colors, fabrics, and accessories, unchanged\", target: \"prompt\", media: B, category: \"Identity & Consistency\" },\n { id: \"no-beautify\", name: \"No Beautify\", description: \"Stop the model 'improving' a face\", text: \"preserve natural skin texture, age lines, and asymmetries; do not beautify, smooth, slim, or rejuvenate the face\", target: \"prompt\", media: I, category: \"Identity & Consistency\" },\n\n // ── Reference locks (prompt) — insert at the START of a reference prompt ──\n // Text comes from the shared constant, not a hand-written twin. This entry used\n // to carry its own wording — no face rules, likeness phrased as a passive —\n // which scored 0/4 on moving a garment between references where the merged\n // block scored 4/4 (see reference-rules.ts). A snippet is copied into the\n // prompt at INSERT time, so changing it here only affects future insertions.\n { id: \"reference-lock\", name: \"Reference Lock\", description: \"Default-deny + preserve likeness + compose into one image (full scenes)\", text: REFERENCE_RULES, target: \"prompt\", media: I, category: \"Reference locks\" },\n // The eyeline suppressor, kept OUT of Reference Lock on purpose: a portrait\n // or a piece to camera wants the eyeline. 4/4 on a brief where the lock alone\n // was 0/4, at no measured cost to identity or wardrobe.\n { id: \"scene-frame\", name: \"Scene Frame\", description: \"Reads as a frame from a film, not a posed photo — nobody faces the lens\", text: SCENE_FRAME_RULE, target: \"prompt\", media: I, category: \"Reference locks\" },\n // A PREFIX, not a sentence — it swallows the scene that follows it, which is\n // exactly why it costs nothing. The same idea written as a standalone claim\n // (\"This image is a scene start frame of a video.\") lost the lead's identity\n // in 3 of 3 draws. Goes at the very TOP, above the scene.\n { id: \"film-still-of\", name: \"Film Still Of\", description: \"Put at the very top, before the scene — lead with the shot size, e.g. \\\"Medium wide…\\\"\", text: `Medium wide ${FILM_STILL_PREFIX.charAt(0).toLowerCase()}${FILM_STILL_PREFIX.slice(1)}`, target: \"prompt\", media: I, category: \"Reference locks\" },\n // Goes at the very END. An example to edit — a different film wants a\n // different stock; what generalises is that the look comes LAST.\n { id: \"cinematic-look\", name: \"Cinematic Look (16mm)\", description: \"Append at the END — film stock, lens, light and palette\", text: CINEMATIC_LOOK_TAIL, target: \"prompt\", media: I, category: \"Reference locks\" },\n { id: \"reference-extract\", name: \"Reference Extract\", description: \"Isolate only the specified elements — no scene, no figure\", text: \"Take only what is specified from the reference images. Do not take anything else.\", target: \"prompt\", media: I, category: \"Reference locks\" },\n { id: \"ghost-mannequin\", name: \"Ghost Mannequin\", description: \"Show worn garments without a wearer (product shot)\", text: \"Ghost-mannequin product shot: the garment in its natural worn shape, with no person, body, face, or mannequin visible.\", target: \"prompt\", media: I, category: \"Reference locks\" },\n\n // ── Quality (prompt) ──\n { id: \"cinematic-quality\", name: \"Cinematic Quality\", description: \"Concrete film language that works on all modern models\", text: \"cinematic still, shallow depth of field, filmic color grade, soft motivated lighting, subtle film grain\", target: \"prompt\", media: B, category: \"Quality\" },\n { id: \"editorial-photo\", name: \"Editorial Photo\", description: \"Magazine-grade photographic quality\", text: \"professional editorial photography, sharp focus, balanced natural exposure, magazine-quality composition\", target: \"prompt\", media: I, category: \"Quality\" },\n { id: \"photoreal-anchor\", name: \"Photoreal Anchor\", description: \"Realism via camera language instead of 'realistic'\", text: \"photorealistic, shot on a full-frame camera, 50mm lens, natural color science, realistic skin tones\", target: \"prompt\", media: I, category: \"Quality\" },\n { id: \"crisp-detail\", name: \"Crisp Detail\", description: \"Detail booster that survives on modern models\", text: \"intricate fine detail, crisp micro-textures, tack-sharp focus on the subject\", target: \"prompt\", media: B, category: \"Quality\" },\n { id: \"polished-3d-render\", name: \"Polished 3D Render\", description: \"Quality language for CGI / product looks\", text: \"physically based rendering, ray-traced global illumination, studio HDRI reflections\", target: \"prompt\", media: I, category: \"Quality\" },\n\n // ── Lighting (prompt) ──\n { id: \"golden-hour\", name: \"Golden Hour\", description: \"Warm low sun\", text: \"bathed in warm golden-hour sunlight, long soft shadows, gentle lens flare\", target: \"prompt\", media: B, category: \"Lighting\" },\n { id: \"blue-hour\", name: \"Blue Hour\", description: \"Cool twilight mood\", text: \"cool blue-hour twilight, soft ambient dusk glow, practical lights just switching on\", target: \"prompt\", media: B, category: \"Lighting\" },\n { id: \"rembrandt-portrait\", name: \"Rembrandt Portrait\", description: \"Classic dramatic portrait key light\", text: \"Rembrandt lighting, single key at 45 degrees, triangle of light on the shadowed cheek, dark backdrop\", target: \"prompt\", media: I, category: \"Lighting\" },\n { id: \"studio-softbox\", name: \"Studio Softbox\", description: \"Clean commercial / product light\", text: \"clean studio lighting, large softbox key with gentle fill, seamless background, no harsh shadows\", target: \"prompt\", media: B, category: \"Lighting\" },\n { id: \"neon-noir\", name: \"Neon Noir\", description: \"Cyberpunk night palette\", text: \"neon signs reflecting on wet pavement, cyan and magenta rim light, moody cinematic glow\", target: \"prompt\", media: B, category: \"Lighting\" },\n { id: \"volumetric-rays\", name: \"Volumetric Rays\", description: \"Visible god-rays / atmosphere\", text: \"volumetric light rays cutting through haze, god rays, visible atmospheric dust\", target: \"prompt\", media: B, category: \"Lighting\" },\n { id: \"candlelit\", name: \"Candlelit\", description: \"Single warm practical source\", text: \"lit only by warm flickering candlelight, deep chiaroscuro shadows, intimate atmosphere\", target: \"prompt\", media: B, category: \"Lighting\" },\n { id: \"rim-backlight\", name: \"Rim Backlight\", description: \"Subject separation from the background\", text: \"strong backlight rim separating the subject from the background, glowing hair light\", target: \"prompt\", media: B, category: \"Lighting\" },\n\n // ── Camera & Lens (prompt) ──\n { id: \"85mm-portrait\", name: \"85mm Portrait\", description: \"Flattering portrait compression\", text: \"85mm portrait lens at f/1.8, creamy bokeh, flattering compression, tack-sharp eyes\", target: \"prompt\", media: I, category: \"Camera & Lens\" },\n { id: \"35mm-documentary\", name: \"35mm Documentary\", description: \"Natural reportage perspective\", text: \"35mm lens, documentary photography feel, natural perspective, candid framing\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n { id: \"wide-angle-24mm\", name: \"Wide Angle 24mm\", description: \"Sweeping environment / scale\", text: \"24mm wide-angle lens, expansive perspective, dramatic foreground-to-background depth\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n { id: \"macro-detail\", name: \"Macro Detail\", description: \"Extreme close texture work\", text: \"extreme macro close-up, 100mm macro lens, razor-thin focus plane, fine surface detail\", target: \"prompt\", media: I, category: \"Camera & Lens\" },\n { id: \"shallow-depth-of-field\", name: \"Shallow Depth of Field\", description: \"Bokeh subject isolation\", text: \"shallow depth of field at f/1.8, subject in crisp focus, background melting into soft bokeh\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n { id: \"deep-focus\", name: \"Deep Focus\", description: \"Everything sharp, landscape / architecture\", text: \"deep depth of field at f/11, sharp focus from foreground to horizon\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n { id: \"kodak-portra-look\", name: \"Kodak Portra Look\", description: \"Beloved warm-skin film stock\", text: \"shot on Kodak Portra 400, warm natural skin tones, gentle contrast, fine film grain\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n { id: \"cinestill-night-look\", name: \"CineStill Night Look\", description: \"Tungsten night-film aesthetic\", text: \"shot on CineStill 800T, tungsten white balance, teal shadows, halation glow around lights\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n { id: \"anamorphic-widescreen\", name: \"Anamorphic Widescreen\", description: \"Cinema lens character\", text: \"anamorphic widescreen, oval bokeh, subtle horizontal lens flares\", target: \"prompt\", media: B, category: \"Camera & Lens\" },\n\n // ── Composition (prompt) ──\n { id: \"rule-of-thirds\", name: \"Rule of Thirds\", description: \"Off-center balance\", text: \"composed on the rule of thirds, subject off-center, generous negative space\", target: \"prompt\", media: B, category: \"Composition\" },\n { id: \"extreme-close-up\", name: \"Extreme Close-Up\", description: \"Detail / emotion framing\", text: \"extreme close-up tightly framing the face, eyes as the focal point\", target: \"prompt\", media: B, category: \"Composition\" },\n { id: \"full-body-in-frame\", name: \"Full Body in Frame\", description: \"Forces head-to-toe (fights auto-cropping)\", text: \"full-body shot, entire figure visible head to toe, feet in frame\", target: \"prompt\", media: B, category: \"Composition\" },\n { id: \"overhead-flat-lay\", name: \"Overhead Flat Lay\", description: \"Top-down product / food\", text: \"top-down overhead shot, flat-lay composition, items neatly arranged on a clean surface\", target: \"prompt\", media: I, category: \"Composition\" },\n { id: \"low-angle-hero\", name: \"Low-Angle Hero\", description: \"Power / scale from below\", text: \"dramatic low-angle shot looking up at the subject, towering heroic perspective\", target: \"prompt\", media: B, category: \"Composition\" },\n { id: \"centered-symmetry\", name: \"Centered Symmetry\", description: \"Wes Anderson one-point look\", text: \"perfectly centered symmetrical composition, one-point perspective, meticulous balance\", target: \"prompt\", media: B, category: \"Composition\" },\n\n // ── Realism (prompt) ──\n { id: \"real-skin-texture\", name: \"Real Skin Texture\", description: \"The no-plastic-skin anchor\", text: \"natural skin texture with visible pores, fine lines, and subtle imperfections — no airbrushing\", target: \"prompt\", media: B, category: \"Realism\" },\n { id: \"candid-phone-photo\", name: \"Candid Phone Photo\", description: \"Amateurism reads as real\", text: \"candid unstaged smartphone photo, slightly imperfect framing, natural ambient light, casual realism\", target: \"prompt\", media: I, category: \"Realism\" },\n { id: \"film-grain\", name: \"Film Grain\", description: \"Grain breaks the synthetic-clean look\", text: \"subtle 35mm film grain, faint halation, natural sensor noise\", target: \"prompt\", media: B, category: \"Realism\" },\n { id: \"muted-true-color\", name: \"Muted True Color\", description: \"Kills the oversaturated AI grade\", text: \"muted naturalistic color palette, accurate white balance, restrained saturation\", target: \"prompt\", media: B, category: \"Realism\" },\n { id: \"lived-in-detail\", name: \"Lived-In Detail\", description: \"Anti-sterile environments\", text: \"lived-in scene with natural clutter, wear and tear, scuffed surfaces and dust\", target: \"prompt\", media: B, category: \"Realism\" },\n\n // ── Text Rendering (prompt) ──\n { id: \"legible-sign-text\", name: \"Legible Sign Text\", description: \"Verbatim text via quotes — replace YOUR TEXT\", text: 'a sign that reads \"YOUR TEXT\" in clear, legible, correctly spelled lettering, high contrast against the background', target: \"prompt\", media: I, category: \"Text Rendering\" },\n { id: \"clean-typography\", name: \"Clean Typography\", description: \"Poster / headline typography control\", text: \"bold sans-serif headline, accurate spelling rendered verbatim, professional kerning, clear negative space around the text\", target: \"prompt\", media: I, category: \"Text Rendering\" },\n\n // ── Camera Motion (prompt, video) ──\n { id: \"slow-dolly-in\", name: \"Slow Dolly-In\", description: \"The most reliable AI camera move\", text: \"slow steady dolly-in toward the subject, gradual and smooth\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n { id: \"orbit-shot\", name: \"Orbit Shot\", description: \"Arc around the subject\", text: \"camera orbits smoothly around the subject at constant speed\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n { id: \"tracking-shot\", name: \"Tracking Shot\", description: \"Follow movement from the side\", text: \"smooth tracking shot following the subject from the side\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n { id: \"handheld-energy\", name: \"Handheld Energy\", description: \"Documentary realism\", text: \"handheld camera with subtle natural shake, documentary energy\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n { id: \"crane-reveal\", name: \"Crane Reveal\", description: \"Vertical reveal\", text: \"crane shot rising slowly to reveal the full scene below\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n { id: \"locked-tripod\", name: \"Locked Tripod\", description: \"Stops unwanted camera drift\", text: \"static locked-off tripod shot, fixed framing, no camera movement\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n { id: \"fpv-fly-through\", name: \"FPV Fly-Through\", description: \"Drone racing energy\", text: \"FPV drone shot flying forward through the scene, fast and fluid\", target: \"prompt\", media: V, category: \"Camera Motion\" },\n\n // ── Motion Quality (prompt, video) ──\n { id: \"natural-physics\", name: \"Natural Physics\", description: \"Sora/Veo-era physics anchor\", text: \"natural realistic physics, accurate weight and momentum, grounded believable movement\", target: \"prompt\", media: V, category: \"Motion Quality\" },\n { id: \"cinematic-slow-motion\", name: \"Cinematic Slow Motion\", description: \"Graceful slo-mo\", text: \"smooth cinematic slow motion, graceful deliberate movement, fine detail visible\", target: \"prompt\", media: V, category: \"Motion Quality\" },\n { id: \"subtle-ambient-motion\", name: \"Subtle Ambient Motion\", description: \"i2v 'living photo' — prevents overshoot\", text: \"subtle natural motion only: gentle breathing, hair moving in the breeze, soft ambient movement\", target: \"prompt\", media: V, category: \"Motion Quality\" },\n { id: \"single-action-beat\", name: \"Single Action Beat\", description: \"One action + endpoint prevents loop failures\", text: \"performs one single continuous action, then settles naturally back into place\", target: \"prompt\", media: V, category: \"Motion Quality\" },\n { id: \"i2v-fidelity-lock\", name: \"I2V Fidelity Lock\", description: \"Animate without redrawing the input image\", text: \"keep the exact appearance, outfit, colors, and background from the input image; animate only the described motion\", target: \"prompt\", media: V, category: \"Motion Quality\" },\n { id: \"stable-scene-lock\", name: \"Stable Scene Lock\", description: \"Anti scene-mutation across the clip\", text: \"consistent lighting and stable framing throughout, the environment stays unchanged, no scene transitions\", target: \"prompt\", media: V, category: \"Motion Quality\" },\n\n // ── Audio & Dialogue (prompt, video) ──\n { id: \"ambient-sound-bed\", name: \"Ambient Sound Bed\", description: \"Audio: label syntax for audio-capable video models\", text: \"Audio: ambient environmental sound matching the scene, quiet room tone, no music\", target: \"prompt\", media: V, category: \"Audio & Dialogue\" },\n { id: \"no-subtitles\", name: \"No Subtitles\", description: \"The #1 Veo community staple (inline — these models have no negative field)\", text: \"(no subtitles, no on-screen text, no captions)\", target: \"prompt\", media: V, category: \"Audio & Dialogue\" },\n { id: \"silence-lock\", name: \"Silence Lock\", description: \"Stops AI gibberish-speech when no dialogue is wanted\", text: \"no dialogue, mouth closed, ambient sound only\", target: \"prompt\", media: V, category: \"Audio & Dialogue\" },\n\n // ── Negative — Image (negative) ──\n { id: \"anatomy-cleanup\", name: \"Anatomy Cleanup\", description: \"The classic hands/limbs scrub\", text: \"deformed hands, extra fingers, fused fingers, bad anatomy, extra limbs, distorted face\", target: \"negative\", media: I, category: \"Negative — Image\" },\n { id: \"watermark-scrub\", name: \"Watermark Scrub\", description: \"Stock-photo residue removal\", text: \"watermark, signature, text overlay, logo, username, jpeg artifacts\", target: \"negative\", media: I, category: \"Negative — Image\" },\n { id: \"low-quality-scrub\", name: \"Low-Quality Scrub\", description: \"Legacy quality negative (SD-era models)\", text: \"worst quality, low quality, lowres, blurry, out of focus, pixelated\", target: \"negative\", media: I, category: \"Negative — Image\" },\n { id: \"stray-text-scrub\", name: \"Stray Text Scrub\", description: \"Kills the gibberish-text habit\", text: \"text, captions, lettering, watermarks, logos\", target: \"negative\", media: B, category: \"Negative — Image\" },\n { id: \"ai-look-scrub\", name: \"AI-Look Scrub\", description: \"Kills plastic skin + HDR glow\", text: \"airbrushed, plastic skin, waxy smooth, overexposed HDR glow, oversaturated colors, beauty filter\", target: \"negative\", media: B, category: \"Negative — Image\" },\n { id: \"clutter-scrub\", name: \"Clutter Scrub\", description: \"Composition clarity\", text: \"cluttered composition, busy background, distracting elements\", target: \"negative\", media: I, category: \"Negative — Image\" },\n { id: \"garbled-text-scrub\", name: \"Garbled Text Scrub\", description: \"Text-rendering quality\", text: \"misspelled text, garbled letters, gibberish writing\", target: \"negative\", media: I, category: \"Negative — Image\" },\n\n // ── Negative — Video (negative) ──\n { id: \"artifact-scrub\", name: \"Artifact Scrub\", description: \"The big-three video failure modes\", text: \"morphing, warping, flickering, jitter, frame strobing, melting background\", target: \"negative\", media: V, category: \"Negative — Video\" },\n { id: \"body-stability\", name: \"Body Stability\", description: \"Anatomy over time\", text: \"extra limbs, duplicate limbs, face distortion, body deformation, floating objects\", target: \"negative\", media: V, category: \"Negative — Video\" },\n { id: \"camera-discipline\", name: \"Camera Discipline\", description: \"For locked shots — pairs with Locked Tripod\", text: \"camera drift, sudden zooms, handheld shake, unintended scene cuts\", target: \"negative\", media: V, category: \"Negative — Video\" },\n { id: \"identity-drift-scrub\", name: \"Identity Drift Scrub\", description: \"Video face stability (Kling/Wan)\", text: \"changing facial features, face morphing, identity drift, face distortion\", target: \"negative\", media: V, category: \"Negative — Video\" },\n]\n","/** Which prompt field a snippet belongs to. Negative-target snippets only\n * surface in negative-prompt fields, and are bare comma lists by convention\n * (per Google's Veo guidance, a negative FIELD must name the unwanted thing,\n * never \"no X\"). */\nexport type SnippetTarget = \"prompt\" | \"negative\"\n\n/** Node modality a snippet applies to. A node declares its modality once in\n * the frontend's NODE_PROMPT_FIELDS; the menu shows snippets whose `media`\n * contains it. */\nexport type SnippetMedia = \"image\" | \"video\" | \"audio\" | \"text\"\n\nexport const SNIPPET_MEDIA_VALUES: readonly SnippetMedia[] = [\n \"image\",\n \"video\",\n \"audio\",\n \"text\",\n]\n\nexport interface FactorySnippet {\n /** Stable kebab slug, e.g. \"identity-lock\". Unique across the catalog. */\n readonly id: string\n readonly name: string\n /** One-liner shown in the menu and matched by search. */\n readonly description?: string\n /** The exact fragment inserted into the prompt. Single line; never contains\n * `{`, `}`, or `@` (guard-tested) so it can never form a mention/variable\n * token in the editor. */\n readonly text: string\n readonly target: SnippetTarget\n readonly media: readonly SnippetMedia[]\n /** Menu group AND the pill-swap sibling pool (swap lists same-category). */\n readonly category: string\n}\n","import { FACTORY_SNIPPETS } from \"./catalog.js\"\nimport type { SnippetMedia, SnippetTarget, FactorySnippet } from \"./types.js\"\n\nexport type { SnippetTarget, SnippetMedia, FactorySnippet } from \"./types.js\"\nexport { SNIPPET_MEDIA_VALUES } from \"./types.js\"\nexport { FACTORY_SNIPPETS } from \"./catalog.js\"\n\n/** Factory snippets for one field: target match + media membership. */\nexport function getFactorySnippets(\n target: SnippetTarget,\n media: SnippetMedia,\n): readonly FactorySnippet[] {\n return FACTORY_SNIPPETS.filter(\n (s) => s.target === target && s.media.includes(media),\n )\n}\n"]}