@nodaro/prompts 1.0.1
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.
- package/LICENSE +105 -0
- package/README.md +27 -0
- package/dist/index.cjs +21240 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3599 -0
- package/dist/index.d.ts +3599 -0
- package/dist/index.js +20854 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
- package/src/__tests__/__snapshots__/prompt-builder-segments.test.ts.snap +65 -0
- package/src/__tests__/action-fx.test.ts +155 -0
- package/src/__tests__/apply-picker-json.test.ts +50 -0
- package/src/__tests__/assemble-image-input.test.ts +248 -0
- package/src/__tests__/assemble-suno-input.test.ts +283 -0
- package/src/__tests__/brand-tokens.test.ts +81 -0
- package/src/__tests__/build-image-prompt-element-injection.test.ts +118 -0
- package/src/__tests__/build-image-prompt-hybrid-format.test.ts +131 -0
- package/src/__tests__/build-image-prompt-mentions.test.ts +809 -0
- package/src/__tests__/build-image-prompt-reference-cap.test.ts +57 -0
- package/src/__tests__/build-image-prompt-reference-numbering.test.ts +237 -0
- package/src/__tests__/build-image-prompt-reference-order.test.ts +313 -0
- package/src/__tests__/camera-motions-from-connections.test.ts +71 -0
- package/src/__tests__/catalog-gapfill.test.ts +53 -0
- package/src/__tests__/character-convergence-image.test.ts +217 -0
- package/src/__tests__/character-default-role-image.test.ts +167 -0
- package/src/__tests__/character-default-role-video.test.ts +168 -0
- package/src/__tests__/character-default-role.test.ts +70 -0
- package/src/__tests__/character-fx.test.ts +200 -0
- package/src/__tests__/entity-prompts-location.test.ts +97 -0
- package/src/__tests__/entity-prompts.test.ts +240 -0
- package/src/__tests__/expand-extra-refs-role.test.ts +50 -0
- package/src/__tests__/factory-presets.test.ts +1045 -0
- package/src/__tests__/factory-snippets.test.ts +68 -0
- package/src/__tests__/framing-multi.test.ts +71 -0
- package/src/__tests__/framing-vantage.test.ts +39 -0
- package/src/__tests__/i18n-entry-completeness.test.ts +269 -0
- package/src/__tests__/identity-lock.test.ts +46 -0
- package/src/__tests__/instrumentation.test.ts +68 -0
- package/src/__tests__/lighting-multi.test.ts +68 -0
- package/src/__tests__/location-convergence-image.test.ts +124 -0
- package/src/__tests__/mention-lock-flag.test.ts +499 -0
- package/src/__tests__/multi-picker-spec.test.ts +71 -0
- package/src/__tests__/music-genre.test.ts +103 -0
- package/src/__tests__/music-mood.test.ts +87 -0
- package/src/__tests__/object-creature-convergence-image.test.ts +105 -0
- package/src/__tests__/parameter-prompt-hint.test.ts +270 -0
- package/src/__tests__/parameter-registry-sync.test.ts +243 -0
- package/src/__tests__/person-age.test.ts +80 -0
- package/src/__tests__/person-analyzer-invariants.test.ts +47 -0
- package/src/__tests__/person-body-axes.test.ts +67 -0
- package/src/__tests__/person-facial-geometry.test.ts +156 -0
- package/src/__tests__/person-regional-aesthetic.test.ts +161 -0
- package/src/__tests__/person-sections.test.ts +18 -0
- package/src/__tests__/picker-analyzer-registry.test.ts +108 -0
- package/src/__tests__/picker-catalogs-project.test.ts +85 -0
- package/src/__tests__/picker-catalogs.test.ts +53 -0
- package/src/__tests__/picker-limits.test.ts +20 -0
- package/src/__tests__/prompt-builder-segments.test.ts +183 -0
- package/src/__tests__/prompt-builder-structured-fields.test.ts +40 -0
- package/src/__tests__/prompt-builder.test.ts +1773 -0
- package/src/__tests__/prompt-wizard-categories.test.ts +31 -0
- package/src/__tests__/provider-prompt-doctrine.test.ts +49 -0
- package/src/__tests__/resolve-prompt-append.test.ts +58 -0
- package/src/__tests__/resolve-prompt.test.ts +44 -0
- package/src/__tests__/role-picker-shared.test.ts +208 -0
- package/src/__tests__/seedance-2-inputs.test.ts +173 -0
- package/src/__tests__/seedance-extend.test.ts +44 -0
- package/src/__tests__/sound-aggregator.test.ts +350 -0
- package/src/__tests__/style-presets.test.ts +34 -0
- package/src/__tests__/temporal-multi.test.ts +74 -0
- package/src/__tests__/transitions.test.ts +213 -0
- package/src/__tests__/video-reference-features.test.ts +41 -0
- package/src/__tests__/video-reference-leading-refs.test.ts +90 -0
- package/src/__tests__/video-reference-resolver.test.ts +233 -0
- package/src/__tests__/video-reference-roles.test.ts +96 -0
- package/src/__tests__/voice-character.test.ts +48 -0
- package/src/__tests__/voice-delivery.test.ts +41 -0
- package/src/__tests__/wardrobe.test.ts +25 -0
- package/src/action-fx.ts +255 -0
- package/src/aesthetic.ts +435 -0
- package/src/assemble-image-input.ts +236 -0
- package/src/assemble-suno-input.ts +147 -0
- package/src/atmosphere.ts +104 -0
- package/src/backdrop.ts +131 -0
- package/src/brand-tokens.ts +154 -0
- package/src/camera-format.ts +76 -0
- package/src/camera-motions.ts +615 -0
- package/src/character-fx.ts +274 -0
- package/src/color-look.ts +103 -0
- package/src/composition-effects.ts +67 -0
- package/src/entity-prompts.ts +231 -0
- package/src/era.ts +292 -0
- package/src/exposure-settings.ts +142 -0
- package/src/factory-presets/generate-image.ts +1644 -0
- package/src/factory-presets/generate-video.ts +1116 -0
- package/src/factory-presets/index.ts +46 -0
- package/src/factory-presets/lottie-overlay.ts +166 -0
- package/src/factory-presets/motion-graphics.ts +350 -0
- package/src/factory-presets/music.ts +734 -0
- package/src/factory-presets/sfx.ts +136 -0
- package/src/factory-presets/shared-image.ts +207 -0
- package/src/factory-presets/switchx.ts +65 -0
- package/src/factory-presets/text.ts +292 -0
- package/src/factory-presets/types.ts +51 -0
- package/src/factory-presets/video-edit.ts +136 -0
- package/src/factory-presets/voice.ts +172 -0
- package/src/factory-presets.ts +2 -0
- package/src/factory-snippets/catalog.ts +105 -0
- package/src/factory-snippets/index.ts +16 -0
- package/src/factory-snippets/types.ts +33 -0
- package/src/framing.ts +634 -0
- package/src/held-prop.ts +187 -0
- package/src/identity-lock.ts +213 -0
- package/src/index.ts +66 -0
- package/src/instrumentation.ts +337 -0
- package/src/lens.ts +59 -0
- package/src/lighting.ts +229 -0
- package/src/loop-subject.ts +276 -0
- package/src/materials.ts +184 -0
- package/src/mood.ts +186 -0
- package/src/music-genre.ts +662 -0
- package/src/music-mood.ts +137 -0
- package/src/object-asset-presets.ts +81 -0
- package/src/parameter-prompt-hint.ts +281 -0
- package/src/person.ts +1368 -0
- package/src/photo-genre.ts +151 -0
- package/src/photographer.ts +612 -0
- package/src/picker-analyzer-registry.ts +374 -0
- package/src/picker-catalogs.ts +858 -0
- package/src/pose.ts +246 -0
- package/src/post-process-effects.ts +94 -0
- package/src/prompt-builder-structured-fields.ts +116 -0
- package/src/prompt-builder.ts +2964 -0
- package/src/prompt-templates.ts +50 -0
- package/src/prompt-wizard-categories.ts +334 -0
- package/src/provider-prompt-doctrine.ts +85 -0
- package/src/render-quality.ts +89 -0
- package/src/resolve-prompt.ts +120 -0
- package/src/seedance-2-inputs.ts +100 -0
- package/src/setting.ts +130 -0
- package/src/sound-aggregator.ts +241 -0
- package/src/style-presets.ts +162 -0
- package/src/style.ts +99 -0
- package/src/styling.ts +585 -0
- package/src/temporal.ts +151 -0
- package/src/transitions.ts +333 -0
- package/src/video-reference-resolver.ts +823 -0
- package/src/voice-character.ts +237 -0
- package/src/voice-delivery.ts +142 -0
- package/src/wardrobe.ts +179 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/** Factory snippet catalog (v1: image + video; audio/text follow later).
|
|
2
|
+
* Order within a category = menu order = pill quick-cycle order. */
|
|
3
|
+
import type { FactorySnippet } from "./types.js"
|
|
4
|
+
|
|
5
|
+
const B = ["image", "video"] as const
|
|
6
|
+
const I = ["image"] as const
|
|
7
|
+
const V = ["video"] as const
|
|
8
|
+
|
|
9
|
+
export const FACTORY_SNIPPETS: readonly FactorySnippet[] = [
|
|
10
|
+
// ── Identity & Consistency (prompt) ──
|
|
11
|
+
{ 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" },
|
|
12
|
+
{ 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" },
|
|
13
|
+
{ 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" },
|
|
14
|
+
{ 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" },
|
|
15
|
+
{ 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" },
|
|
16
|
+
|
|
17
|
+
// ── Reference locks (prompt) — insert at the START of a reference prompt ──
|
|
18
|
+
{ id: "reference-lock", name: "Reference Lock", description: "Default-deny + preserve likeness + compose into one image (full scenes)", text: "Do not use anything from reference images unless specified explicitly. All elements taken from reference images must preserve likeness. Compose them naturally into a single image.", target: "prompt", media: I, category: "Reference locks" },
|
|
19
|
+
{ 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" },
|
|
20
|
+
{ 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" },
|
|
21
|
+
|
|
22
|
+
// ── Quality (prompt) ──
|
|
23
|
+
{ 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" },
|
|
24
|
+
{ 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" },
|
|
25
|
+
{ 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" },
|
|
26
|
+
{ 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" },
|
|
27
|
+
{ 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" },
|
|
28
|
+
|
|
29
|
+
// ── Lighting (prompt) ──
|
|
30
|
+
{ 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" },
|
|
31
|
+
{ 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" },
|
|
32
|
+
{ 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" },
|
|
33
|
+
{ 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" },
|
|
34
|
+
{ 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" },
|
|
35
|
+
{ 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" },
|
|
36
|
+
{ 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" },
|
|
37
|
+
{ 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" },
|
|
38
|
+
|
|
39
|
+
// ── Camera & Lens (prompt) ──
|
|
40
|
+
{ 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" },
|
|
41
|
+
{ 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" },
|
|
42
|
+
{ 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" },
|
|
43
|
+
{ 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" },
|
|
44
|
+
{ 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" },
|
|
45
|
+
{ 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" },
|
|
46
|
+
{ 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" },
|
|
47
|
+
{ 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" },
|
|
48
|
+
{ 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" },
|
|
49
|
+
|
|
50
|
+
// ── Composition (prompt) ──
|
|
51
|
+
{ 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" },
|
|
52
|
+
{ 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" },
|
|
53
|
+
{ 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" },
|
|
54
|
+
{ 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" },
|
|
55
|
+
{ 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" },
|
|
56
|
+
{ 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" },
|
|
57
|
+
|
|
58
|
+
// ── Realism (prompt) ──
|
|
59
|
+
{ 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" },
|
|
60
|
+
{ 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" },
|
|
61
|
+
{ 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" },
|
|
62
|
+
{ 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" },
|
|
63
|
+
{ 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" },
|
|
64
|
+
|
|
65
|
+
// ── Text Rendering (prompt) ──
|
|
66
|
+
{ 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" },
|
|
67
|
+
{ 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" },
|
|
68
|
+
|
|
69
|
+
// ── Camera Motion (prompt, video) ──
|
|
70
|
+
{ 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" },
|
|
71
|
+
{ 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" },
|
|
72
|
+
{ 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" },
|
|
73
|
+
{ 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" },
|
|
74
|
+
{ 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" },
|
|
75
|
+
{ 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" },
|
|
76
|
+
{ 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" },
|
|
77
|
+
|
|
78
|
+
// ── Motion Quality (prompt, video) ──
|
|
79
|
+
{ 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" },
|
|
80
|
+
{ 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" },
|
|
81
|
+
{ 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" },
|
|
82
|
+
{ 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" },
|
|
83
|
+
{ 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" },
|
|
84
|
+
{ 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" },
|
|
85
|
+
|
|
86
|
+
// ── Audio & Dialogue (prompt, video) ──
|
|
87
|
+
{ 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" },
|
|
88
|
+
{ 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" },
|
|
89
|
+
{ 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" },
|
|
90
|
+
|
|
91
|
+
// ── Negative — Image (negative) ──
|
|
92
|
+
{ 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" },
|
|
93
|
+
{ 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" },
|
|
94
|
+
{ 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" },
|
|
95
|
+
{ 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" },
|
|
96
|
+
{ 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" },
|
|
97
|
+
{ id: "clutter-scrub", name: "Clutter Scrub", description: "Composition clarity", text: "cluttered composition, busy background, distracting elements", target: "negative", media: I, category: "Negative — Image" },
|
|
98
|
+
{ 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" },
|
|
99
|
+
|
|
100
|
+
// ── Negative — Video (negative) ──
|
|
101
|
+
{ 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" },
|
|
102
|
+
{ 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" },
|
|
103
|
+
{ 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" },
|
|
104
|
+
{ 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" },
|
|
105
|
+
]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FACTORY_SNIPPETS } from "./catalog.js"
|
|
2
|
+
import type { SnippetMedia, SnippetTarget, FactorySnippet } from "./types.js"
|
|
3
|
+
|
|
4
|
+
export type { SnippetTarget, SnippetMedia, FactorySnippet } from "./types.js"
|
|
5
|
+
export { SNIPPET_MEDIA_VALUES } from "./types.js"
|
|
6
|
+
export { FACTORY_SNIPPETS } from "./catalog.js"
|
|
7
|
+
|
|
8
|
+
/** Factory snippets for one field: target match + media membership. */
|
|
9
|
+
export function getFactorySnippets(
|
|
10
|
+
target: SnippetTarget,
|
|
11
|
+
media: SnippetMedia,
|
|
12
|
+
): readonly FactorySnippet[] {
|
|
13
|
+
return FACTORY_SNIPPETS.filter(
|
|
14
|
+
(s) => s.target === target && s.media.includes(media),
|
|
15
|
+
)
|
|
16
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Which prompt field a snippet belongs to. Negative-target snippets only
|
|
2
|
+
* surface in negative-prompt fields, and are bare comma lists by convention
|
|
3
|
+
* (per Google's Veo guidance, a negative FIELD must name the unwanted thing,
|
|
4
|
+
* never "no X"). */
|
|
5
|
+
export type SnippetTarget = "prompt" | "negative"
|
|
6
|
+
|
|
7
|
+
/** Node modality a snippet applies to. A node declares its modality once in
|
|
8
|
+
* the frontend's NODE_PROMPT_FIELDS; the menu shows snippets whose `media`
|
|
9
|
+
* contains it. */
|
|
10
|
+
export type SnippetMedia = "image" | "video" | "audio" | "text"
|
|
11
|
+
|
|
12
|
+
export const SNIPPET_MEDIA_VALUES: readonly SnippetMedia[] = [
|
|
13
|
+
"image",
|
|
14
|
+
"video",
|
|
15
|
+
"audio",
|
|
16
|
+
"text",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
export interface FactorySnippet {
|
|
20
|
+
/** Stable kebab slug, e.g. "identity-lock". Unique across the catalog. */
|
|
21
|
+
readonly id: string
|
|
22
|
+
readonly name: string
|
|
23
|
+
/** One-liner shown in the menu and matched by search. */
|
|
24
|
+
readonly description?: string
|
|
25
|
+
/** The exact fragment inserted into the prompt. Single line; never contains
|
|
26
|
+
* `{`, `}`, or `@` (guard-tested) so it can never form a mention/variable
|
|
27
|
+
* token in the editor. */
|
|
28
|
+
readonly text: string
|
|
29
|
+
readonly target: SnippetTarget
|
|
30
|
+
readonly media: readonly SnippetMedia[]
|
|
31
|
+
/** Menu group AND the pill-swap sibling pool (swap lists same-category). */
|
|
32
|
+
readonly category: string
|
|
33
|
+
}
|