@nodaro/prompts 1.21.0 → 1.25.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.
- package/dist/index.cjs +191 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +362 -207
- package/dist/index.d.ts +362 -207
- package/dist/index.js +183 -46
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/assemble-video-input.test.ts +20 -12
- package/src/__tests__/camera-motion-approved.test.ts +46 -0
- package/src/__tests__/camera-motions-from-connections.test.ts +3 -2
- package/src/__tests__/catalog-packs.test.ts +13 -0
- package/src/__tests__/character-fx-timing-catalogs.test.ts +3 -2
- package/src/__tests__/factory-presets.test.ts +28 -3
- package/src/__tests__/fixtures/camera-motion-approved.json +330 -0
- package/src/__tests__/fixtures/parameter-hint-golden.json +32 -16
- package/src/__tests__/hint-join.test.ts +3 -2
- package/src/__tests__/node-prompt-fields.test.ts +2 -2
- package/src/__tests__/parameter-hint-mode.test.ts +17 -5
- package/src/__tests__/prompt-style-section.test.ts +2 -2
- package/src/__tests__/transitions-instant.test.ts +242 -0
- package/src/__tests__/transitions-scope.test.ts +160 -0
- package/src/__tests__/transitions.test.ts +9 -9
- package/src/ad-creative-analysis.ts +99 -0
- package/src/camera-motions.ts +21 -21
- package/src/catalog-packs.ts +13 -2
- package/src/direction-registry.ts +2 -2
- package/src/factory-presets/generate-video.ts +22 -0
- package/src/index.ts +3 -0
- package/src/node-prompt-fields.ts +4 -0
- package/src/picker-catalogs.ts +13 -0
- package/src/ref-binding.ts +19 -0
- package/src/transitions.ts +204 -27
- package/src/video-reference-resolver.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -164,8 +164,11 @@ function applyExtend(c, pack) {
|
|
|
164
164
|
}
|
|
165
165
|
function applyDeny(c, denyIds) {
|
|
166
166
|
const deny = new Set(denyIds);
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
return {
|
|
168
|
+
...c,
|
|
169
|
+
options: c.options?.filter((o) => !deny.has(o.id)),
|
|
170
|
+
dimensions: c.dimensions?.map((d) => ({ ...d, options: d.options.filter((o) => !deny.has(o.id)) }))
|
|
171
|
+
};
|
|
169
172
|
}
|
|
170
173
|
function composePickerCatalogs(base, activePacks) {
|
|
171
174
|
const known = new Set(base.map((c) => c.catalogId));
|
|
@@ -180,6 +183,12 @@ function composePickerCatalogs(base, activePacks) {
|
|
|
180
183
|
else if (pack.mode === "extend") out = applyExtend(out, pack);
|
|
181
184
|
else if (pack.mode === "deny") out = applyDeny(out, pack.denyIds ?? []);
|
|
182
185
|
}
|
|
186
|
+
if (activePacks.some((p) => p.catalogId === c.catalogId) && out.defaultValue) {
|
|
187
|
+
const options = [...out.options ?? [], ...(out.dimensions ?? []).flatMap((d) => d.options)];
|
|
188
|
+
if (!options.some((o) => o.id === out.defaultValue)) {
|
|
189
|
+
out = { ...out, defaultValue: out.options?.[0]?.id };
|
|
190
|
+
}
|
|
191
|
+
}
|
|
183
192
|
return out;
|
|
184
193
|
});
|
|
185
194
|
}
|
|
@@ -4274,7 +4283,7 @@ var CAMERA_MOTIONS = [
|
|
|
4274
4283
|
label: "Static",
|
|
4275
4284
|
category: "default",
|
|
4276
4285
|
description: "Fixed camera, no movement",
|
|
4277
|
-
promptHint: "locked
|
|
4286
|
+
promptHint: "The camera is locked on a solid tripod and does not move at all for the entire shot: it never travels, never rotates, never tilts, never changes focal length. The viewpoint is completely fixed and the framing stays exactly the same from the first frame to the last.\nLife within the scene carries on naturally, but the camera holds perfectly still throughout.\nNo camera movement of any kind, no drift, no sway, no zoom.",
|
|
4278
4287
|
term: "locked-off static camera"
|
|
4279
4288
|
},
|
|
4280
4289
|
{
|
|
@@ -4282,7 +4291,7 @@ var CAMERA_MOTIONS = [
|
|
|
4282
4291
|
label: "Handheld",
|
|
4283
4292
|
category: "default",
|
|
4284
4293
|
description: "Natural handheld shake",
|
|
4285
|
-
promptHint: "
|
|
4294
|
+
promptHint: "The camera is HANDHELD, held in an operator's hands rather than on any support, so it carries the constant small live motion of a real person holding it: a continuous gentle shake and wobble, tiny irregular drifts and corrections in every direction, a slight bob in time with breathing, never settling completely still even for a moment.\nThe motion is small and organic, never a large or deliberate move: the camera stays roughly where it is and keeps roughly the same framing, it simply never locks off. It does not travel toward anything, away from anything, or off to any side; it holds its position and only jitters around it. The unsteadiness is human and slightly random, not a smooth mechanical sway and not a rhythmic loop.\nThe lens does not change and the camera does not travel anywhere, orbit, or turn to a new direction; it just floats and jitters in place as if held.\nThe framing stays broadly the same across the shot, loosely on the subject, wandering by only small amounts.\nNo zoom, no deliberate camera move, no forward or backward travel, no rotation to a new angle, no smooth glide.",
|
|
4286
4295
|
term: "handheld camera"
|
|
4287
4296
|
},
|
|
4288
4297
|
{
|
|
@@ -4290,7 +4299,7 @@ var CAMERA_MOTIONS = [
|
|
|
4290
4299
|
label: "Steadicam",
|
|
4291
4300
|
category: "default",
|
|
4292
4301
|
description: "Smooth stabilized walking shot",
|
|
4293
|
-
promptHint: "smooth
|
|
4302
|
+
promptHint: "The camera moves with the perfectly smooth, floating quality of a Steadicam or gimbal: it glides gently and continuously, with none of the shake, jitter or bob of a handheld rig. Every bit of movement is buttery, damped and stabilised, as if the camera were floating on air.\nThe motion is a slow, graceful drift through the scene \u2014 easing a little forward and around with fluid, gliding ease \u2014 always even and controlled, never abrupt, never trembling, never correcting.\nThe lens does not change. The framing stays loosely on the subject throughout, the glide being gentle enough that the composition holds.\nThe single defining quality is SMOOTHNESS: this is the opposite of handheld \u2014 no shake whatsoever, only silky stabilised floating motion.\nNo zoom, no jitter, no handheld shake, no abrupt moves.",
|
|
4294
4303
|
term: "smooth steadicam shot"
|
|
4295
4304
|
},
|
|
4296
4305
|
// Pan — rotation on vertical axis
|
|
@@ -4485,14 +4494,14 @@ var CAMERA_MOTIONS = [
|
|
|
4485
4494
|
label: "Dutch Angle",
|
|
4486
4495
|
category: "roll",
|
|
4487
4496
|
description: "Static tilted frame for tension",
|
|
4488
|
-
promptHint: "
|
|
4497
|
+
promptHint: "The shot begins level, then the camera rolls a little way around its own lens axis and STOPS at a fixed cant, holding that tilted Dutch-angle framing for the rest of the shot. It is a single small settling roll into a tilt, not a continuous spin: the frame tips perhaps fifteen or twenty degrees off level and then stays there, canted and still, for an uneasy, tense feeling.\nOnly the roll axis is involved: the camera stays in the same position, does not travel, does not pan or tilt its aim up or down, and the lens does not change. The horizon starts level and ends clearly canted, then holds.\nBecause it is a pure roll, there is no parallax: the whole frame turns as one flat picture, near and far together.\nLife in the scene carries on gently while the framing holds its tilt.\nNo zoom, no travel, no continuous spinning, no returning to level once canted."
|
|
4489
4498
|
},
|
|
4490
4499
|
{
|
|
4491
4500
|
id: "spin-360",
|
|
4492
4501
|
label: "Full 360 Spin",
|
|
4493
4502
|
category: "roll",
|
|
4494
4503
|
description: "Camera rotates a full 360\xB0 on its axis",
|
|
4495
|
-
promptHint: "
|
|
4504
|
+
promptHint: "The camera rotates a FULL 360 degrees around its own lens axis in one continuous even spin, and keeps turning the same way without pausing until the picture has come all the way back to level exactly as it started. The horizon sweeps from level, round through fully sideways on one side, through completely upside-down, through fully sideways on the other side, and back to level \u2014 one complete unbroken revolution.\nOnly the roll axis is involved: the camera stays in exactly the same position, does not travel, does not pan or tilt its aim, and the lens does not change. It spins about the axis running straight out through the lens.\nBecause it is a pure roll, there is no parallax: the whole frame turns as one flat picture, near and far rotating together by the same amount.\nThe spin is smooth and continuous at an even speed, going round only once and ending back at level.\nNo zoom, no travel, no pan, no tilt of the aim, no reversal of the spin direction.",
|
|
4496
4505
|
term: "full 360 degree camera roll"
|
|
4497
4506
|
},
|
|
4498
4507
|
// Orbit / Arc
|
|
@@ -4614,7 +4623,7 @@ var CAMERA_MOTIONS = [
|
|
|
4614
4623
|
label: "Ronin Glide",
|
|
4615
4624
|
category: "tracking",
|
|
4616
4625
|
description: "Slow gliding move on a Ronin/Movi gimbal",
|
|
4617
|
-
promptHint: "ronin glide,
|
|
4626
|
+
promptHint: "ronin gimbal glide, ultra-smooth floating tracking movement following the subject",
|
|
4618
4627
|
term: "slow gliding gimbal move"
|
|
4619
4628
|
},
|
|
4620
4629
|
{
|
|
@@ -4622,7 +4631,7 @@ var CAMERA_MOTIONS = [
|
|
|
4622
4631
|
label: "Serpentine Track",
|
|
4623
4632
|
category: "tracking",
|
|
4624
4633
|
description: "Camera weaves through obstacles in S-curves",
|
|
4625
|
-
promptHint: "serpentine
|
|
4634
|
+
promptHint: "serpentine tracking shot, camera weaves smoothly side to side while following the subject",
|
|
4626
4635
|
term: "serpentine tracking shot"
|
|
4627
4636
|
},
|
|
4628
4637
|
// Special angles / rigs
|
|
@@ -4631,7 +4640,7 @@ var CAMERA_MOTIONS = [
|
|
|
4631
4640
|
label: "POV",
|
|
4632
4641
|
category: "special",
|
|
4633
4642
|
description: "First person point of view",
|
|
4634
|
-
promptHint: "POV shot, first person perspective as seen through the subject's eyes",
|
|
4643
|
+
promptHint: "POV shot, first person perspective as seen through the subject's eyes. The viewpoint moves forward at a calm, unhurried walking pace \u2014 steady and gentle, never a fast rush or a vehicle-like travel speed. No body parts, hands or feet ever enter the frame; only the point of view itself drifts smoothly forward.",
|
|
4635
4644
|
term: "first person pov shot"
|
|
4636
4645
|
},
|
|
4637
4646
|
{
|
|
@@ -4639,7 +4648,7 @@ var CAMERA_MOTIONS = [
|
|
|
4639
4648
|
label: "Over The Shoulder",
|
|
4640
4649
|
category: "special",
|
|
4641
4650
|
description: "Frame past a character's shoulder",
|
|
4642
|
-
promptHint: "
|
|
4651
|
+
promptHint: "Over the shoulder shot: the camera is already framed past the near character's shoulder onto the second character from the very first frame, with no push-in or approach - the framing and distance stay constant throughout, at most a very small handheld-style settle. No camera travel toward or away from either character. No dialogue, no spoken words, no lip movement suggesting speech - completely silent, ambient sound only if any.",
|
|
4643
4652
|
term: "over-the-shoulder shot"
|
|
4644
4653
|
},
|
|
4645
4654
|
{
|
|
@@ -4663,7 +4672,7 @@ var CAMERA_MOTIONS = [
|
|
|
4663
4672
|
label: "Aerial",
|
|
4664
4673
|
category: "special",
|
|
4665
4674
|
description: "High altitude drone-style shot",
|
|
4666
|
-
promptHint: "
|
|
4675
|
+
promptHint: "The camera is airborne and sinks straight downward through the air, losing altitude like an aircraft lowering itself vertically. Its aim is completely fixed: the horizon line stays at exactly the same height across the frame from the first moment to the last, and the camera never dips or tips its view downward at all \u2014 what it points at does not change, only where it is in space.\nAs the camera drops in height, everything in view slides UPWARD through the frame together because the viewpoint is lower: whatever stands tall rises up the frame and grows, and more of what lies far below climbs into view from the bottom. This vertical sliding of the whole scene is the ONLY change; the angle of view is frozen.\nNo tilting, no dipping the aim down, no looking further down, no rotation, no forward travel \u2014 the horizon must remain pinned at its starting height while the camera simply loses altitude.",
|
|
4667
4676
|
term: "high altitude aerial drone shot"
|
|
4668
4677
|
},
|
|
4669
4678
|
{
|
|
@@ -4671,7 +4680,7 @@ var CAMERA_MOTIONS = [
|
|
|
4671
4680
|
label: "Helicopter",
|
|
4672
4681
|
category: "special",
|
|
4673
4682
|
description: "Wide high-altitude sweeping aerial",
|
|
4674
|
-
promptHint: "helicopter shot,
|
|
4683
|
+
promptHint: "helicopter shot, sweeping aerial movement banking around the scene",
|
|
4675
4684
|
term: "sweeping helicopter aerial shot"
|
|
4676
4685
|
},
|
|
4677
4686
|
{
|
|
@@ -4679,7 +4688,7 @@ var CAMERA_MOTIONS = [
|
|
|
4679
4688
|
label: "Fly Over",
|
|
4680
4689
|
category: "special",
|
|
4681
4690
|
description: "Low fast aerial pass over the scene",
|
|
4682
|
-
promptHint: "
|
|
4691
|
+
promptHint: "The camera flies steadily FORWARD through the air at a constant height, cruising ahead toward what lies in front of it without ever changing altitude. Its height stays exactly the same from start to finish \u2014 it does not descend, does not climb, does not dip its aim; it simply travels forward at cruising speed.\nBecause it moves forward, whatever lies ahead grows closer and sweeps toward the camera and past it on both sides, near things rushing by faster than far things. The horizon holds at exactly the same height in the frame the whole time.\nNo descending, no climbing, no tilting the aim, no rotation \u2014 only steady level forward flight at a fixed altitude.",
|
|
4683
4692
|
term: "low aerial fly-over pass"
|
|
4684
4693
|
},
|
|
4685
4694
|
{
|
|
@@ -4711,7 +4720,7 @@ var CAMERA_MOTIONS = [
|
|
|
4711
4720
|
label: "Rack Focus",
|
|
4712
4721
|
category: "special",
|
|
4713
4722
|
description: "Pull focus between foreground and background",
|
|
4714
|
-
promptHint: "
|
|
4723
|
+
promptHint: "The camera itself never moves, never zooms and never changes its framing \u2014 it is completely locked in place for the whole shot. Only the lens's focus plane shifts. It starts sharply focused on the nearest element in the frame, with everything further back a soft out-of-focus blur. Then the focus pulls smoothly across to the far background, which becomes crisp and sharp, while the near foreground that was sharp a moment ago now falls out of focus and blurs instead. The two states \u2014 near-sharp/far-blurred, then near-blurred/far-sharp \u2014 must read as clearly opposite. No camera travel, no zoom, no change in composition \u2014 only which plane is sharp changes."
|
|
4715
4724
|
},
|
|
4716
4725
|
// Modern / social-video vocabulary
|
|
4717
4726
|
{
|
|
@@ -4719,7 +4728,7 @@ var CAMERA_MOTIONS = [
|
|
|
4719
4728
|
label: "Handheld Vlog",
|
|
4720
4729
|
category: "default",
|
|
4721
4730
|
description: "Casual vlog-style handheld",
|
|
4722
|
-
promptHint: "casual handheld vlog
|
|
4731
|
+
promptHint: "The camera is a casual handheld vlog camera, held at arm's length by the subject or a companion, with the loose, informal quality of someone filming themselves. It has clear handheld shake and small bobbing motion, but looser and more wandering than a careful operator: it drifts around a bit, reframes casually, bobs as if the holder is shifting their weight or gesturing.\nThe framing sits fairly close and personal, roughly on the subject, wandering by moderate amounts as a vlogger's arm naturally would \u2014 informal and lively, not locked or composed.\nThe motion has personality and looseness: more movement than a careful handheld, unpolished and spontaneous, but it stays broadly in place rather than travelling off anywhere.\nThe lens does not change; the camera does not glide smoothly (that would be a steadicam) and does not travel deliberately in any direction.\nNo zoom, no smooth stabilised glide, no deliberate directional move, no tripod stillness.",
|
|
4723
4732
|
term: "handheld vlog-style camera"
|
|
4724
4733
|
},
|
|
4725
4734
|
{
|
|
@@ -4727,7 +4736,7 @@ var CAMERA_MOTIONS = [
|
|
|
4727
4736
|
label: "POV Walk",
|
|
4728
4737
|
category: "tracking",
|
|
4729
4738
|
description: "First-person walking POV",
|
|
4730
|
-
promptHint: "first-person POV walking
|
|
4739
|
+
promptHint: "first-person POV walking shot, camera as the subject's eyes with natural head-bob as they walk forward",
|
|
4731
4740
|
term: "first person walking pov"
|
|
4732
4741
|
},
|
|
4733
4742
|
{
|
|
@@ -4750,23 +4759,23 @@ var CAMERA_MOTIONS = [
|
|
|
4750
4759
|
label: "Screen Tap",
|
|
4751
4760
|
category: "special",
|
|
4752
4761
|
description: "On-screen finger-tap transition",
|
|
4753
|
-
promptHint: "
|
|
4754
|
-
term: "
|
|
4762
|
+
promptHint: "An abrupt hard snap-cut transition: the camera instantly jumps to a new framing of the scene with no gradual movement in between, a fast decisive jolt rather than any smooth pan, push or travel. No object, hand, finger, or UI element ever appears in the frame. TikTok-native snap pacing.",
|
|
4763
|
+
term: "abrupt snap-cut transition"
|
|
4755
4764
|
},
|
|
4756
4765
|
{
|
|
4757
4766
|
id: "phone-flip",
|
|
4758
4767
|
label: "Phone Flip",
|
|
4759
4768
|
category: "special",
|
|
4760
4769
|
description: "Front/rear camera flip",
|
|
4761
|
-
promptHint: "
|
|
4762
|
-
term: "
|
|
4770
|
+
promptHint: "A rapid flip-transition, functioning as a hard cut rather than a smooth continuous rotation: the entire frame snaps through one quick full rotation in a fraction of a second, with strong motion blur through the spin, then lands upright again immediately on a new framing of the scene. This is abrupt and near-instant, never a slow, smooth, or continuously spinning carousel-like rotation. No object, hand, phone, or UI element ever appears in the frame.",
|
|
4771
|
+
term: "fast flip-cut transition"
|
|
4763
4772
|
},
|
|
4764
4773
|
{
|
|
4765
4774
|
id: "gentle-drift",
|
|
4766
4775
|
label: "Gentle Drift",
|
|
4767
4776
|
category: "default",
|
|
4768
4777
|
description: "Slow ambient floating motion",
|
|
4769
|
-
promptHint: "
|
|
4778
|
+
promptHint: "The camera drifts with an extremely slow, gentle, ambient floating motion, as if suspended and barely stirring in still air. There is no shake and no deliberate direction: it simply floats, drifting a tiny amount one way and then easing another, aimless and dreamlike.\nThe movement is minimal and continuous \u2014 the camera never sits perfectly still, but it never travels anywhere either; it hovers almost in place, wandering by only the smallest amounts, smooth and weightless throughout.\nThe pace is contemplative and calm, the drift so slow it is only just perceptible. The picture stays sharp; there is no motion blur.\nThe lens does not change and the framing stays broadly the same, resting loosely on the subject.\nNo zoom, no shake, no jitter, no deliberate directional move, no travel across the scene.",
|
|
4770
4779
|
term: "slow gentle camera drift"
|
|
4771
4780
|
},
|
|
4772
4781
|
{
|
|
@@ -4774,7 +4783,7 @@ var CAMERA_MOTIONS = [
|
|
|
4774
4783
|
label: "Parallax",
|
|
4775
4784
|
category: "default",
|
|
4776
4785
|
description: "Lateral motion with foreground/background depth separation",
|
|
4777
|
-
promptHint: "
|
|
4786
|
+
promptHint: "The camera makes a small, smooth sideways move that shows off the depth of the scene through parallax. It eases gently a short way across, staying at the same distance and keeping its aim forward.\nThe defining quality is a STRONG parallax gradient: the nearest foreground elements slide across noticeably and quickly, the mid-distance elements shift more gently, and the most distant elements barely move at all \u2014 one smooth continuous gradient of speed from near to far that makes the separation between the layers obvious. Nothing is frozen; everything shifts, just by very different amounts according to its distance.\nThe move is modest and ambient rather than a full travelling shot: a gentle reveal of depth, not a journey across the scene.\nThe lens does not change; the camera does not push in, pull back, rotate, or shake.\nNo zoom, no forward or backward travel, no rotation, no handheld shake.",
|
|
4778
4787
|
term: "lateral parallax camera move"
|
|
4779
4788
|
}
|
|
4780
4789
|
];
|
|
@@ -4862,7 +4871,8 @@ var TRANSITIONS = [
|
|
|
4862
4871
|
category: "standard",
|
|
4863
4872
|
description: "Instantaneous switch, no transition",
|
|
4864
4873
|
promptHint: "no transition, hard cut, instantaneous switch from first shot to second shot",
|
|
4865
|
-
term: "hard cut"
|
|
4874
|
+
term: "hard cut",
|
|
4875
|
+
instant: true
|
|
4866
4876
|
},
|
|
4867
4877
|
{
|
|
4868
4878
|
id: "cross-dissolve",
|
|
@@ -4891,21 +4901,24 @@ var TRANSITIONS = [
|
|
|
4891
4901
|
category: "standard",
|
|
4892
4902
|
description: "Instant cut to full black for a beat, then the next shot",
|
|
4893
4903
|
promptHint: "snap to black: the first shot cuts instantly to full black with no fade, the frame holds pure black for a single beat, then the second shot cuts in at full brightness",
|
|
4894
|
-
term: "snap to black"
|
|
4904
|
+
term: "snap to black",
|
|
4905
|
+
instant: true
|
|
4895
4906
|
},
|
|
4896
4907
|
{
|
|
4897
4908
|
id: "match-cut",
|
|
4898
4909
|
label: "Match Cut",
|
|
4899
4910
|
category: "standard",
|
|
4900
4911
|
description: "Shape or motion match across shots",
|
|
4901
|
-
promptHint: "match cut: the final composition of the first shot matches the opening composition of the second shot in shape, color, and motion, so the cut feels like a visual rhyme"
|
|
4912
|
+
promptHint: "match cut: the final composition of the first shot matches the opening composition of the second shot in shape, color, and motion, so the cut feels like a visual rhyme",
|
|
4913
|
+
instant: true
|
|
4902
4914
|
},
|
|
4903
4915
|
{
|
|
4904
4916
|
id: "smash-cut",
|
|
4905
4917
|
label: "Smash Cut",
|
|
4906
4918
|
category: "standard",
|
|
4907
4919
|
description: "Jarring abrupt cut between contrasting shots",
|
|
4908
|
-
promptHint: "smash cut: an abrupt jarring transition between two visually or tonally contrasting shots with no fade, on a beat"
|
|
4920
|
+
promptHint: "smash cut: an abrupt jarring transition between two visually or tonally contrasting shots with no fade, on a beat",
|
|
4921
|
+
instant: true
|
|
4909
4922
|
},
|
|
4910
4923
|
{
|
|
4911
4924
|
id: "iris",
|
|
@@ -4937,7 +4950,8 @@ var TRANSITIONS = [
|
|
|
4937
4950
|
category: "standard",
|
|
4938
4951
|
description: "Hidden cut disguised by matched motion and color",
|
|
4939
4952
|
promptHint: "hidden seamless transition: the camera motion, color palette, and on-screen motion at the end of the first shot continue exactly across the cut into the second shot, so the boundary is invisible and the two shots feel like one unbroken take",
|
|
4940
|
-
term: "invisible cut"
|
|
4953
|
+
term: "invisible cut",
|
|
4954
|
+
instant: true
|
|
4941
4955
|
},
|
|
4942
4956
|
{
|
|
4943
4957
|
id: "whip-pan",
|
|
@@ -4953,7 +4967,8 @@ var TRANSITIONS = [
|
|
|
4953
4967
|
category: "standard",
|
|
4954
4968
|
description: "Same framing, time skips forward",
|
|
4955
4969
|
promptHint: "jump cut: the framing, lens, and camera position stay identical across the cut while time skips abruptly forward, so the subject snaps to a new position inside what still reads as one continuous shot",
|
|
4956
|
-
term: "jump cut"
|
|
4970
|
+
term: "jump cut",
|
|
4971
|
+
instant: true
|
|
4957
4972
|
},
|
|
4958
4973
|
// ============================================================================
|
|
4959
4974
|
// TIME — 8 entries — temporal shifts (same or related scene, different time, or memory)
|
|
@@ -4987,7 +5002,7 @@ var TRANSITIONS = [
|
|
|
4987
5002
|
label: "Aging",
|
|
4988
5003
|
category: "time",
|
|
4989
5004
|
description: "Subject visibly ages forward in time",
|
|
4990
|
-
promptHint: "accelerated aging transition: the subject visibly ages forward
|
|
5005
|
+
promptHint: "accelerated aging transition: the subject visibly ages forward - fine lines deepen into wrinkles, hair greys to silver, posture settles - while the framing stays unchanged",
|
|
4991
5006
|
term: "accelerated aging"
|
|
4992
5007
|
},
|
|
4993
5008
|
{
|
|
@@ -5003,7 +5018,7 @@ var TRANSITIONS = [
|
|
|
5003
5018
|
label: "Freeze-Frame Jump",
|
|
5004
5019
|
category: "time",
|
|
5005
5020
|
description: "Action freezes, jumps forward in time",
|
|
5006
|
-
promptHint: "freeze-frame transition: motion
|
|
5021
|
+
promptHint: "freeze-frame transition: all motion stops mid-action and the picture holds still for a beat; only then does it jump to the same view hours or days later, everything in new positions, and motion resumes",
|
|
5007
5022
|
term: "freeze-frame time jump"
|
|
5008
5023
|
},
|
|
5009
5024
|
{
|
|
@@ -5215,7 +5230,7 @@ var TRANSITIONS = [
|
|
|
5215
5230
|
label: "Zoom Into Screen",
|
|
5216
5231
|
category: "portal",
|
|
5217
5232
|
description: "Push into TV/phone screen",
|
|
5218
|
-
promptHint: "the camera pushes toward a screen visible in the scene
|
|
5233
|
+
promptHint: "the camera pushes toward a screen visible in the scene, such as a TV, phone or monitor, the screen's image fills the frame, and the camera passes through into that image which becomes the new scene"
|
|
5219
5234
|
},
|
|
5220
5235
|
{
|
|
5221
5236
|
id: "zoom-into-book",
|
|
@@ -5251,7 +5266,7 @@ var TRANSITIONS = [
|
|
|
5251
5266
|
label: "Zoom Into Mouth",
|
|
5252
5267
|
category: "portal",
|
|
5253
5268
|
description: "Push into open mouth, emerges in new world inside",
|
|
5254
|
-
promptHint: "the camera pushes into the subject's open mouth, the dark interior fills the frame, and the camera passes through
|
|
5269
|
+
promptHint: "the camera pushes into the subject's open mouth, the dark interior fills the frame, and the camera passes through into the new scene which materialises as if emerging from inside the body"
|
|
5255
5270
|
},
|
|
5256
5271
|
{
|
|
5257
5272
|
id: "push-through-glass",
|
|
@@ -5342,7 +5357,8 @@ var TRANSITIONS = [
|
|
|
5342
5357
|
category: "physics",
|
|
5343
5358
|
description: "Subject jumps, landing matches into new scene",
|
|
5344
5359
|
promptHint: "the subject jumps upward and out of frame at the end of the first shot, with matched velocity the camera follows the arc, and on landing the subject is in a new location seamlessly continuing the same jump",
|
|
5345
|
-
term: "match cut on a jump"
|
|
5360
|
+
term: "match cut on a jump",
|
|
5361
|
+
instant: true
|
|
5346
5362
|
},
|
|
5347
5363
|
{
|
|
5348
5364
|
id: "hand-swipe",
|
|
@@ -5357,7 +5373,8 @@ var TRANSITIONS = [
|
|
|
5357
5373
|
category: "physics",
|
|
5358
5374
|
description: "Subject exits on an action and lands in the new scene mid-move",
|
|
5359
5375
|
promptHint: "match cut on action: the subject exits the frame on a committed action \u2014 a stride, a throw, a turn \u2014 and enters the new scene on the same beat continuing that movement at matched speed and direction, so the action carries unbroken across the cut",
|
|
5360
|
-
term: "match cut on action"
|
|
5376
|
+
term: "match cut on action",
|
|
5377
|
+
instant: true
|
|
5361
5378
|
},
|
|
5362
5379
|
// ============================================================================
|
|
5363
5380
|
// LIGHT — 8 entries — flash and lens FX
|
|
@@ -5513,6 +5530,30 @@ function getTransitionTerm(id) {
|
|
|
5513
5530
|
return resolveTerm(getTransition(id));
|
|
5514
5531
|
}
|
|
5515
5532
|
var TRANSITION_IDS = TRANSITIONS.map((t) => t.id);
|
|
5533
|
+
function isInstantTransition(id) {
|
|
5534
|
+
const ids = typeof id === "string" ? [id] : id ? [...id] : [];
|
|
5535
|
+
if (ids.length === 0) return false;
|
|
5536
|
+
return ids.every((one) => getTransition(one)?.instant === true);
|
|
5537
|
+
}
|
|
5538
|
+
var INSTANT_CUT_CLAUSE = "an abrupt single-frame hard cut, no dissolve, crossfade or superimposition; the two images never blend";
|
|
5539
|
+
var LEADING_LABEL = /^\s*((?:[^\s:,;.()]+\s+){0,4}[^\s:,;.()]+)\s*:\s+/;
|
|
5540
|
+
var normalizePhrase = (s) => s.trim().toLowerCase().replace(/\s+/g, " ");
|
|
5541
|
+
function transitionHintBody(id, term) {
|
|
5542
|
+
const hint = getTransitionPromptHint(id).replace(LEADING_LABEL, "").trim();
|
|
5543
|
+
const t = normalizePhrase(term);
|
|
5544
|
+
return hint.split(/,\s*/).filter((item) => normalizePhrase(item) !== t).join(", ").trim();
|
|
5545
|
+
}
|
|
5546
|
+
function transitionFragment(id, withCutClause) {
|
|
5547
|
+
const term = getTransitionTerm(id);
|
|
5548
|
+
if (!term) return "";
|
|
5549
|
+
const inner = [transitionHintBody(id, term), withCutClause ? INSTANT_CUT_CLAUSE : ""].filter((part) => part.length > 0).join("; ");
|
|
5550
|
+
return inner.length > 0 && normalizePhrase(inner) !== normalizePhrase(term) ? `${term} (${inner})` : term;
|
|
5551
|
+
}
|
|
5552
|
+
function renderTransitionBases(ids, _mode = "full") {
|
|
5553
|
+
const picked = ids.filter((id) => getTransitionTerm(id).length > 0);
|
|
5554
|
+
const instant = isInstantTransition(picked);
|
|
5555
|
+
return picked.map((id, i) => transitionFragment(id, instant && i === 0));
|
|
5556
|
+
}
|
|
5516
5557
|
var TRANSITION_POSITIONS = [
|
|
5517
5558
|
{ id: "auto", label: "Auto", description: "Let the model place it", promptHint: "", term: "" },
|
|
5518
5559
|
{ id: "start", label: "Start", description: "At the opening of the clip", promptHint: "the transition occurs at the opening of the clip", term: "at the opening of the clip" },
|
|
@@ -5530,7 +5571,7 @@ var TRANSITION_DURATIONS = [
|
|
|
5530
5571
|
var TRANSITION_INTENSITIES = [
|
|
5531
5572
|
{ id: "auto", label: "Auto", description: "Let the model judge it", promptHint: "", term: "" },
|
|
5532
5573
|
{ id: "subtle", label: "Subtle", description: "Restrained, minimal flourish", promptHint: "with subtle restrained energy and minimal flourish", term: "subtly" },
|
|
5533
|
-
{ id: "natural", label: "Natural", description: "Unhurried, unforced timing", promptHint: "with natural
|
|
5574
|
+
{ id: "natural", label: "Natural", description: "Unhurried, unforced timing", promptHint: "with natural timing", term: "at a natural pace" },
|
|
5534
5575
|
{ id: "dynamic", label: "Dynamic", description: "Assertive, energetic", promptHint: "with dynamic energy and assertive flourish", term: "energetically" },
|
|
5535
5576
|
{ id: "crazy", label: "Crazy", description: "Extreme, wild, distorted", promptHint: "with extreme exaggerated energy, wild flourishes, and dramatic distortion", term: "wildly exaggerated" }
|
|
5536
5577
|
];
|
|
@@ -5540,22 +5581,29 @@ function clausesOf(options) {
|
|
|
5540
5581
|
);
|
|
5541
5582
|
}
|
|
5542
5583
|
var POSITION_CLAUSES = clausesOf(TRANSITION_POSITIONS);
|
|
5584
|
+
var SHOT_POSITION_CLAUSES = Object.fromEntries(
|
|
5585
|
+
Object.entries(POSITION_CLAUSES).map(([id, clause]) => [
|
|
5586
|
+
id,
|
|
5587
|
+
clause.replace(/ of the clip\b/g, " of this shot").replace(/ the entire clip\b/g, " this entire shot")
|
|
5588
|
+
])
|
|
5589
|
+
);
|
|
5543
5590
|
var DURATION_CLAUSES = clausesOf(TRANSITION_DURATIONS);
|
|
5544
5591
|
var INTENSITY_CLAUSES = clausesOf(TRANSITION_INTENSITIES);
|
|
5545
|
-
function composeTransitionHintFromConnections(transitionId, startHints, endHints, timing, mode = "full") {
|
|
5592
|
+
function composeTransitionHintFromConnections(transitionId, startHints, endHints, timing, mode = "full", options) {
|
|
5546
5593
|
const ids = Array.isArray(transitionId) ? Array.from(new Set(transitionId)).slice(0, 2) : transitionId ? [transitionId] : [];
|
|
5547
|
-
const
|
|
5548
|
-
const baseHints = ids.map(resolveBase).filter((h) => h.length > 0);
|
|
5594
|
+
const baseHints = renderTransitionBases(ids, mode);
|
|
5549
5595
|
if (baseHints.length === 0) return "";
|
|
5596
|
+
const instant = isInstantTransition(ids.filter((id) => getTransitionTerm(id).length > 0));
|
|
5550
5597
|
const combinedBase = baseHints.join(", and ");
|
|
5551
5598
|
const parts = [combinedBase];
|
|
5552
|
-
if (timing?.position && timing.position !== "auto") {
|
|
5553
|
-
|
|
5599
|
+
if (timing?.position && timing.position !== "auto" && !(instant && timing.position === "full")) {
|
|
5600
|
+
const clauses = options?.scope === "shot" ? SHOT_POSITION_CLAUSES : POSITION_CLAUSES;
|
|
5601
|
+
parts.push(clauses[timing.position]);
|
|
5554
5602
|
}
|
|
5555
|
-
if (timing?.duration && timing.duration !== "auto") {
|
|
5603
|
+
if (timing?.duration && timing.duration !== "auto" && !instant) {
|
|
5556
5604
|
parts.push(DURATION_CLAUSES[timing.duration]);
|
|
5557
5605
|
}
|
|
5558
|
-
if (timing?.intensity && timing.intensity !== "auto") {
|
|
5606
|
+
if (timing?.intensity && timing.intensity !== "auto" && !instant) {
|
|
5559
5607
|
parts.push(INTENSITY_CLAUSES[timing.intensity]);
|
|
5560
5608
|
}
|
|
5561
5609
|
const startClause = startHints.filter((h) => h && h.length > 0).join(" and ");
|
|
@@ -18605,6 +18653,7 @@ function toOptions(arr, categoryField) {
|
|
|
18605
18653
|
if (e.description) opt.description = e.description;
|
|
18606
18654
|
if (categoryField) opt.category = e[categoryField];
|
|
18607
18655
|
if (e.adultOnly) opt.adultOnly = true;
|
|
18656
|
+
if (e.instant) opt.instant = true;
|
|
18608
18657
|
return opt;
|
|
18609
18658
|
});
|
|
18610
18659
|
}
|
|
@@ -19860,7 +19909,7 @@ var DIRECTION_FIELDS = [
|
|
|
19860
19909
|
{ key: "temporalFreeze", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
19861
19910
|
{ key: "temporalDirection", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
19862
19911
|
{ key: "temporalShutter", surface: "video", family: "motion", maxPicks: 1, render: temporal },
|
|
19863
|
-
{ key: "transition", surface: "video", family: "motion", maxPicks: 2, render:
|
|
19912
|
+
{ key: "transition", surface: "video", family: "motion", maxPicks: 2, render: renderTransitionBases },
|
|
19864
19913
|
{ key: "loopSubject", surface: "video", family: "motion", maxPicks: 1, render: perId(getLoopSubjectPromptHint, getLoopSubjectTerm) },
|
|
19865
19914
|
// ── LEGACY BLOCK — see the table doc above. Placed LAST, in today's exact
|
|
19866
19915
|
// `composePromptText` order, so every pre-registry caller is byte-identical.
|
|
@@ -21879,6 +21928,12 @@ var REF_BINDING = {
|
|
|
21879
21928
|
ordinal: (n) => `@image_${n}`,
|
|
21880
21929
|
frame: (n, role) => `Use @image_${n} as the ${role} (${role === "opening" ? "first" : "last"}) frame of the video.`
|
|
21881
21930
|
};
|
|
21931
|
+
var SEEDANCE_VIDEO_EDIT_PREFIX = "edit {video:1} as follows:\n";
|
|
21932
|
+
function buildSeedanceVideoEditPrompt(prompt) {
|
|
21933
|
+
const body = (prompt ?? "").trim();
|
|
21934
|
+
if (/^edit\s+(?:\{video:1(?::[^}]*)?\}|@video_1(?!\w))/i.test(body)) return body;
|
|
21935
|
+
return `${SEEDANCE_VIDEO_EDIT_PREFIX}${body}`;
|
|
21936
|
+
}
|
|
21882
21937
|
|
|
21883
21938
|
// src/ref-id-tokens.ts
|
|
21884
21939
|
var REF_TOKEN_LABEL_RE = /^[a-zA-Z0-9_ -]+$/;
|
|
@@ -38909,7 +38964,11 @@ var NODE_PROMPT_FIELDS = {
|
|
|
38909
38964
|
"forced-alignment": { prompt: "transcript", promptLabel: "Transcript", media: "audio", inline: false },
|
|
38910
38965
|
// Video Analysis — its focus hint is the editable prompt (renders a JSON scene
|
|
38911
38966
|
// table, not a media preview → no inline editor).
|
|
38912
|
-
"video-analysis": { prompt: "analysisFocus", promptLabel: "Analysis focus", media: "video", inline: false }
|
|
38967
|
+
"video-analysis": { prompt: "analysisFocus", promptLabel: "Analysis focus", media: "video", inline: false },
|
|
38968
|
+
// Edit Plan (podcast editing) — its free-text editing instructions are the
|
|
38969
|
+
// editable prompt; the affixes wrap them. Emits an EDL (JSON), not a media
|
|
38970
|
+
// preview, so no inline editor.
|
|
38971
|
+
"edit-plan": { prompt: "instructions", promptLabel: "Editing instructions", media: "video", inline: false }
|
|
38913
38972
|
};
|
|
38914
38973
|
function getPromptFields(nodeType) {
|
|
38915
38974
|
return nodeType ? NODE_PROMPT_FIELDS[nodeType] : void 0;
|
|
@@ -41689,6 +41748,27 @@ var GENERATE_VIDEO_PRESETS = [
|
|
|
41689
41748
|
generateAudio: true,
|
|
41690
41749
|
prompt: "{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>\uFF08low ominous brass drone\uFF09Biologically accurate anatomy, epic cinematic scale. HD, sharp micro-details, stable picture, keep it subtitle-free, do not generate a watermark."
|
|
41691
41750
|
}
|
|
41751
|
+
},
|
|
41752
|
+
// ── Video Editing ─────────────────────────────────────────────────────────
|
|
41753
|
+
// Seedance 2.5 EDITS a wired reference clip when the prompt reads as an edit
|
|
41754
|
+
// instruction. Edit mode takes the source clip's own ratio and length, so the
|
|
41755
|
+
// preset ships the exact shape the provider requires — Adaptive + Auto
|
|
41756
|
+
// (duration -1) — and the run goes through on the first submit. The user's
|
|
41757
|
+
// own sentence is the whole prompt: the preset only supplies the pre & post
|
|
41758
|
+
// text, with the clip bound as {video:1} (wire it into Video Refs).
|
|
41759
|
+
{
|
|
41760
|
+
id: "generate-video/edit-video",
|
|
41761
|
+
name: "Edit Video",
|
|
41762
|
+
description: "Change a wired clip by instruction \u2014 keeps its length, ratio and everything you don't mention.",
|
|
41763
|
+
group: "Video Editing",
|
|
41764
|
+
data: {
|
|
41765
|
+
provider: "seedance-2-5",
|
|
41766
|
+
aspectRatio: "adaptive",
|
|
41767
|
+
duration: -1,
|
|
41768
|
+
generateAudio: true,
|
|
41769
|
+
promptPrefix: "edit {video:1} as follows:\n",
|
|
41770
|
+
promptSuffix: "Keep everything else in the clip unchanged: the same people, motion, framing and timing. Keep it subtitle-free, do not generate a watermark."
|
|
41771
|
+
}
|
|
41692
41772
|
}
|
|
41693
41773
|
];
|
|
41694
41774
|
|
|
@@ -44255,6 +44335,63 @@ function getCharacterMotionDiagnostics(value, timing, bindings = {}) {
|
|
|
44255
44335
|
return result;
|
|
44256
44336
|
}
|
|
44257
44337
|
|
|
44258
|
-
export { ACTION_FX, ACTION_FX_CATEGORY_LABELS, ACTION_FX_CATEGORY_ORDER, ACTION_FX_IDS, ADULT_AGE_IDS, ADULT_ONLY_FLAG, ADULT_SWEPT_CATALOG_IDS, AESTHETICS, AESTHETIC_CATEGORY_LABELS, AESTHETIC_CATEGORY_ORDER, AESTHETIC_IDS, ALL_PICKER_WIRING, ANALYZABLE_PICKER_TYPES, ANGLE_LABELS, ASPECT_RATIO_LABELS, ATMOSPHERES, ATMOSPHERE_IDS, AUDIO_WIZARD_CATEGORIES, BACKDROPS, BACKDROP_CATEGORY_LABELS, BACKDROP_CATEGORY_ORDER, BACKDROP_IDS, BRAND_PRESETS, BRAND_PRESET_IDS, BRAND_PRESET_META, CAMERA_FORMATS, CAMERA_FORMAT_IDS, CAMERA_MOTIONS, CAMERA_MOTION_CATEGORY_LABELS, CAMERA_MOTION_CATEGORY_ORDER, CAMERA_MOTION_IDS, CHARACTER_FX, CHARACTER_FX_CATEGORY_LABELS, CHARACTER_FX_CATEGORY_ORDER, CHARACTER_FX_DURATIONS, CHARACTER_FX_IDS, CHARACTER_FX_INTENSITIES, CHARACTER_FX_POSITIONS, CHARACTER_MOTIONS, CHARACTER_MOTION_CATEGORY_LABELS, CHARACTER_MOTION_CATEGORY_ORDER, CHARACTER_MOTION_IDS, CHARACTER_MOTION_MAX_PICKS, CHARACTER_MOTION_PACES, CHARACTER_MOTION_POSITIONS, CINEMATIC_LOOK_TAIL, COLOR_LOOKS, COLOR_LOOK_CATEGORY_LABELS, COLOR_LOOK_CATEGORY_ORDER, COLOR_LOOK_IDS, COMPOSITION_EFFECTS, COMPOSITION_EFFECT_IDS, DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, DIRECTION_ARRAY_CEILING, DIRECTION_FIELDS, DIRECTION_ID_MAX_CHARS, DIRECTION_KEYS, ERAS, ERA_CATEGORY_LABELS, ERA_CATEGORY_ORDER, ERA_IDS, EXPOSURE_CATEGORY_LABELS, EXPOSURE_CATEGORY_ORDER, EXPOSURE_FIELD_BY_CATEGORY, EXPOSURE_IDS, EXPOSURE_SETTINGS, FACTORY_PRESETS, FACTORY_SNIPPETS, FILM_STILL_PREFIX, FILM_STYLE_KEYS, FLOORED_PICKER_KEYS, FRAMINGS, FRAMING_CATEGORY_LABELS, FRAMING_CATEGORY_ORDER, FRAMING_FIELD_BY_CATEGORY, FRAMING_IDS, GAPS_SCHEMA, HELD_PROPS, HELD_PROP_CATEGORY_LABELS, HELD_PROP_CATEGORY_ORDER, HELD_PROP_IDS, IMAGE_HINT_MODE_DEFAULT, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, LENSES, LENS_IDS, LIGHTINGS, LIGHTING_CATEGORY_LABELS, LIGHTING_CATEGORY_ORDER, LIGHTING_FIELD_BY_CATEGORY, LIGHTING_IDS, LLM_CHAT_WIZARD_CATEGORIES, LOOP_SUBJECTS, LOOP_SUBJECT_CATEGORY_LABELS, LOOP_SUBJECT_CATEGORY_ORDER, MATERIALS, MATERIAL_CATEGORY_LABELS, MATERIAL_CATEGORY_ORDER, MATERIAL_IDS, MAX_SELECTED_BY_DIMENSION, MAX_SELECTED_BY_FRAMING_CATEGORY, MAX_SELECTED_BY_STYLING_DIMENSION, MAX_SUBJECT_KEYS, MINOR_IMPLYING_TYPE_IDS, MOODS, MOOD_CATEGORY_LABELS, MOOD_CATEGORY_ORDER, MOOD_IDS, MOVEMENT_LABELS, MULTI_PICKER_WIRING, MUSIC_EMOTIONS, MUSIC_ENERGIES, MUSIC_ERAS, MUSIC_GENRES, MUSIC_GENRE_CATEGORY_LABELS, MUSIC_GENRE_CATEGORY_ORDER, MUSIC_GENRE_DEFAULT_DATA, MUSIC_MOOD_DEFAULT_DATA, MUSIC_VIBES, MUSIC_WIZARD_CATEGORIES, NODE_PROMPT_CANDIDATE_FIELDS, NODE_PROMPT_FIELDS, OBJECT_ANGLE_PRESETS, OBJECT_ANGLE_PROMPTS, OBJECT_ASSET_PRESETS, OBJECT_ASSET_PROMPTS, OBJECT_MATERIAL_PRESETS, OBJECT_MATERIAL_PROMPTS, OBJECT_VARIATION_PRESETS, OBJECT_VARIATION_PROMPTS, PEOPLE, PERSON_DIMENSION_LABELS, PERSON_DIMENSION_ORDER, PERSON_DIMENSION_SECTIONS, PERSON_FIELD_BY_DIMENSION, PERSON_IDS, PHOTOGRAPHERS, PHOTOGRAPHER_CATEGORY_LABELS, PHOTOGRAPHER_CATEGORY_ORDER, PHOTOGRAPHER_IDS, PHOTO_GENRES, PHOTO_GENRE_CATEGORY_LABELS, PHOTO_GENRE_CATEGORY_ORDER, PHOTO_GENRE_IDS, PICKER_ANALYZER_FAMILIES, PICKER_ANALYZER_REGISTRY, PICKER_CATALOGS, PICKER_TYPES, POSES, POSE_CATEGORY_LABELS, POSE_CATEGORY_ORDER, POSE_IDS, POST_PROCESS_EFFECTS, POST_PROCESS_EFFECT_IDS, PRODUCTION_STYLES, PROMPT_AFFIX_CORE_FIELD_OVERRIDES, PROMPT_AFFIX_NODE_TYPES, PROMPT_HINT_SEPARATOR, PROVIDER_CAPABILITIES, PROVIDER_PROMPT_DOCTRINES, REFERENCE_IMAGE_ROLES, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, REF_BINDING, RENDER_QUALITIES, RENDER_QUALITY_IDS, RETIRED_ADULT_ONLY_HINT_STRINGS, SCENE3D_FIGURE_REFERENCE_RULE, SCENE3D_FREE_PLATE_SLOTS, SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE, SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE, SCENE3D_LAYOUT_SCOPING_FOR, SCENE3D_LAYOUT_SCOPING_IGNORE, SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE, SCENE3D_LAYOUT_SCOPING_MARKER, SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE, SCENE_FRAME_RULE, SCENE_PROMPT_MAX_LENGTH, SETTINGS, SETTING_CATEGORY_LABELS, SETTING_IDS, SHOT_LABELS, SINGING_STYLES, SINGLE_PICKER_WIRING, SNIPPET_MEDIA_VALUES, STYLES, STYLE_IDS, STYLE_PRESETS, STYLE_SECTION_GAP, STYLE_SECTION_HEADER, STYLINGS, STYLING_DIMENSION_LABELS, STYLING_DIMENSION_ORDER, STYLING_FIELD_BY_DIMENSION, STYLING_IDS, SUBJECT_ARRAY_CEILING, SUBJECT_CUSTOM_AGE_KEY, SUBJECT_FIELDS, SUBJECT_FOLD_KEYS, SUBJECT_ID_MAX_CHARS, SUBJECT_IMAGE_HINT_MODE_DEFAULT, SUBJECT_KEYS, SUBJECT_KEY_MAX_CHARS, SUBJECT_VIDEO_HINT_MODE_DEFAULT, TEMPORALS, TEMPORAL_CATEGORY_LABELS, TEMPORAL_CATEGORY_ORDER, TEMPORAL_FIELD_BY_CATEGORY, TEMPORAL_IDS, TERM_MAX_CHARS, TEXT_WIZARD_CATEGORIES, TRANSITIONS, TRANSITION_CATEGORY_LABELS, TRANSITION_CATEGORY_ORDER, TRANSITION_DURATIONS, TRANSITION_IDS, TRANSITION_INTENSITIES, TRANSITION_POSITIONS, VIDEO_HINT_MODE_DEFAULT, VIDEO_WIZARD_CATEGORIES, VOCAL_PRESENCE, VOCAL_PRESENCE_INSTRUMENTAL_ID, VOICE_ACCENTS, VOICE_AGES, VOICE_ARCHETYPES, VOICE_CHARACTER_DEFAULT_DATA, VOICE_DELIVERY_DEFAULT_DATA, VOICE_EMOTIONS, VOICE_GENDERS, VOICE_LANGUAGES, VOICE_PACES, VOICE_TIMBRES, WARDROBE, WARDROBE_CATEGORY_LABELS, WARDROBE_DIMENSION_ORDER, WARDROBE_FIELD_BY_DIMENSION, __resetCatalogIdGuardForTests, appendField, appendMusicMeta, appendReferenceLines, appendScene3DStillScopingLines, applyMinorAgeFloorToPickerValues, applyPickerJson, applyPromptAffixes, applyReferenceOrderToVideo, applyTemplate, asBodyClauses, assembleImageInput, assembleSunoInput, buildActionFxHints, buildActionFxTerms, buildAestheticHints, buildAestheticTerms, buildAgeHint, buildAtmosphereHints, buildAtmosphereTerms, buildCharacterPrompt, buildCreaturePrompt, buildExposureHints, buildExposureTerms, buildFaceTemplateInputs, buildFramingHints, buildFramingTerms, buildHeldPropHints, buildHeldPropTerms, buildIdentityDirectives, buildIdentityLockLine, buildImagePrompt, buildImagePromptSegments, buildImagePromptWithOverflow, buildInstrumentationHints, buildInstrumentationTerms, buildLightingHints, buildLightingTerms, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMaterialHints, buildMaterialTerms, buildMoodHints, buildMoodTerms, buildMotionPrompt, buildMultiPickerAnalyzerSpec, buildMusicGenreHints, buildMusicGenreTerms, buildMusicMoodHints, buildMusicMoodTerms, buildNeedleAlternationSource, buildObjectMotionPrompt, buildObjectPrompt, buildPersonHints, buildPersonTerms, buildPhotographerHints, buildPhotographerTerms, buildPickerAnalyzerSpec, buildPickerLegend, buildPickerZodSchema, buildPoseHints, buildPoseTerms, buildPostProcessHints, buildPostProcessTerms, buildReferenceBlocks, buildScene3DLayoutScopingLine, buildScene3DUnreferencedFiguresWarning, buildScenePrompt, buildStylingHints, buildStylingTerms, buildSurroundFillPrompt, buildTemporalHints, buildTemporalTerms, buildVoiceCharacterHints, buildVoiceCharacterTerms, buildVoiceDeliveryHints, buildVoiceDeliveryTerms, buildWardrobeHints, catalogGuardActive, catalogPacksVersion, characterLockToRefLock, collectIdentityLockClause, composeCameraMotionHintFromConnections, composeCameraMotionTermFromConnections, composeCharacterFxHintFromConnections, composeCharacterMotionHintFromConnections, composeNegative, composePickerCatalogs, composeSectionedPrompt, composeSoundHintFromConnections, composeTransitionHintFromConnections, composeVideoPromptText, composedHas, composedOption, composedOptionIndex, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, containsMinorAgeHint, curateEntries, curatedAnimalPromptHint, curatedAnimalTerm, curatedFurnitureText, curatedVehicleText, curatedWeaponText, deriveTerm, directionFieldsForSurface, endsInsideStyleSection, expandImagePositionRefs, expandImageRefTokens, filmStillPrefix, findForeignCatalogIds, findForeignCatalogIdsInBody, foreignCatalogIdMessage, getActionFx, getActionFxLabel, getActionFxPromptHint, getActionFxTerm, getAdultOnlyEntries, getAdultOnlyHintStrings, getAdultOnlyIds, getAesthetic, getAestheticLabel, getAestheticPromptHint, getAestheticTerm, getAtmosphere, getAtmosphereLabel, getAtmospherePromptHint, getAtmosphereTerm, getBackdrop, getBackdropLabel, getBackdropPromptHint, getBackdropTerm, getCameraFormat, getCameraFormatLabel, getCameraFormatPromptHint, getCameraFormatTerm, getCameraMotion, getCameraMotionLabel, getCameraMotionPromptHint, getCameraMotionTerm, getCategoriesForNodeType, getCharacterFx, getCharacterFxLabel, getCharacterFxPromptHint, getCharacterFxTerm, getCharacterMotion, getCharacterMotionBindings, getCharacterMotionDiagnostics, getCharacterMotionLabel, getCharacterMotionPromptHint, getCharacterMotionTerm, getColorLook, getColorLookLabel, getColorLookPromptHint, getColorLookTerm, getCompositionEffect, getCompositionEffectLabel, getCompositionEffectPromptHint, getCompositionEffectTerm, getEffectiveSunoCustomMode, getEra, getEraLabel, getEraPromptHint, getEraTerm, getExposure, getExposureLabel, getExposurePromptHint, getExposureTerm, getFactoryPresets, getFactorySnippets, getFraming, getFramingCategoryLimit, getFramingLabel, getFramingPromptHint, getFramingTerm, getHeldProp, getHeldPropLabel, getHeldPropPromptHint, getHeldPropTerm, getIdentityLockClause, getInstrument, getInstrumentTerm, getLens, getLensLabel, getLensPromptHint, getLensTerm, getLighting, getLightingLabel, getLightingPromptHint, getLightingTerm, getLoopSubject, getLoopSubjectLabel, getLoopSubjectPromptHint, getLoopSubjectTerm, getMaterial, getMaterialLabel, getMaterialPromptHint, getMaterialTerm, getMinorAgeHintStrings, getMood, getMoodLabel, getMoodPromptHint, getMoodTerm, getMusicEmotion, getMusicEmotionTerm, getMusicEnergy, getMusicEnergyTerm, getMusicEra, getMusicEraTerm, getMusicGenre, getMusicGenreLabel, getMusicGenreTerm, getMusicSubgenre, getMusicSubgenreTerm, getMusicVibe, getMusicVibeTerm, getParameterPromptHint, getPerson, getPersonDimensionLimit, getPersonLabel, getPersonPromptHint, getPersonTerm, getPhotoGenre, getPhotoGenreLabel, getPhotoGenrePromptHint, getPhotoGenreTerm, getPhotographer, getPhotographerLabel, getPhotographerPromptHint, getPhotographerTerm, getPickerAnalyzer, getPickerCatalog, getPickerWiring, getPose, getPoseLabel, getPosePromptHint, getPoseTerm, getPostProcessEffect, getPostProcessEffectLabel, getPostProcessEffectPromptHint, getPostProcessEffectTerm, getProductionStyle, getProductionStyleTerm, getPromptDoctrine, getPromptFields, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRegisteredSubjectKeys, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, getSnippetMedia, getStyle, getStyleLabel, getStylePreset, getStylePromptHint, getStyleTerm, getStyling, getStylingDimensionLimit, getStylingLabel, getStylingPromptHint, getStylingTerm, getTemporal, getTemporalLabel, getTemporalPromptHint, getTemporalTerm, getTransition, getTransitionLabel, getTransitionPromptHint, getTransitionTerm, getVocalPresence, getVocalPresenceTerm, getVoiceAccent, getVoiceAccentTerm, getVoiceAge, getVoiceAgeTerm, getVoiceArchetype, getVoiceArchetypeTerm, getVoiceEmotion, getVoiceEmotionTerm, getVoiceGender, getVoiceGenderTerm, getVoiceLanguage, getVoiceLanguageTerm, getVoicePace, getVoicePaceTerm, getVoiceTimbre, getVoiceTimbreTerm, getWardrobeEntriesByDimension, getWardrobeEntry, getWardrobePromptHint, groupFactoryPresets, hasCatalogPacksFor, hasScene3DLayoutScopingLine, hasUpstreamCharacter, identityRefsSentence, insertBeforeStyleSection, isAnalyzablePicker, isDeniedStyleId, isInstrumentalVocal, isMinorAge, isSuspiciousDerivedTerm, isVantageFraming, isWizardSupported, joinHintFragments, joinPromptHints, joinPromptParts, keepableDirectionHints, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, normalizeSubjectFields, overlayEntry, partitionStyleClauses, personPacksVersion, pickerFanoutTargets, planFrameDelivery, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, readSubjectFields, referenceDescriptionLine, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDescribedReferenceLines, renderDirectionHintClauses, renderDirectionHints, renderReferenceCaptionLines, renderScene3DLayoutScopingLine, renderStructuredFields, renderStyleSection, renderSubjectHints, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, scene3DLayoutVideoCaptions, sectionedClauseCosts, setComposedCatalogResolver, splitStyleSection, styleSectionFromClauses, styleSlotFor, subjectFieldsForSurface, subscribeCatalogPacks, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|
|
44338
|
+
// src/ad-creative-analysis.ts
|
|
44339
|
+
var AD_CREATIVE_ANALYSIS_FIELDS = [
|
|
44340
|
+
"assetType",
|
|
44341
|
+
"format",
|
|
44342
|
+
"visualHooks",
|
|
44343
|
+
"audiences",
|
|
44344
|
+
"graphicIdentity",
|
|
44345
|
+
"copywritingHooks",
|
|
44346
|
+
"usps",
|
|
44347
|
+
"cta",
|
|
44348
|
+
"summary"
|
|
44349
|
+
];
|
|
44350
|
+
var AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT = `You are an expert competitor ad analyst. You look at a competitor's ad \u2014 its creative (image or video poster frame) and its copy \u2014 and extract the relevant ad information into a structured summary a marketing team can act on.
|
|
44351
|
+
|
|
44352
|
+
Judge from what is actually in the creative and copy; never invent claims that are not visible or written. Be concrete and specific (name the objects, colors, people, layouts, words), not generic ("eye-catching visuals"). Write in the language of the ad copy when it is not English, otherwise in English.
|
|
44353
|
+
|
|
44354
|
+
Fill every field:
|
|
44355
|
+
- assetType: "static" (a still image), "motion" (a video \u2014 you see its poster frame), "carousel" (several creatives in one ad), or "unknown".
|
|
44356
|
+
- format: the placement the creative is built for \u2014 e.g. "in-feed", "story / reel (9:16)", "square feed", "banner / web", judged from its shape and framing.
|
|
44357
|
+
- visualHooks: the key visuals and visual angles used to stop the scroll (product close-up, before/after, face + eye contact, big number, screenshot, meme style, UGC selfie, text-on-image\u2026). 2\u20136 short items.
|
|
44358
|
+
- audiences: who the ad represents or addresses (age band, gender, life situation, profession, interest, geography, pain point). 1\u20135 short items.
|
|
44359
|
+
- graphicIdentity: the graphic components \u2014 color palette, typography style, logo placement, layout system, illustration vs photo, brand consistency cues. One or two sentences.
|
|
44360
|
+
- copywritingHooks: the copywriting angles used in the visual text and in the body (curiosity, urgency, social proof, question, offer, fear of missing out, authority, humor\u2026). 1\u20136 short items, each naming the angle and quoting or paraphrasing the line that carries it.
|
|
44361
|
+
- usps: the unique selling points the ad claims (price, speed, exclusivity, guarantee, results, features). 1\u20135 short items.
|
|
44362
|
+
- cta: the call to action \u2014 the button label and/or the closing line that tells the viewer what to do.
|
|
44363
|
+
- summary: two to four sentences: what the ad sells, to whom, with what hook, and why it likely works (or does not).`;
|
|
44364
|
+
var POST_CONTENT_ANALYSIS_SYSTEM_PROMPT = `You are an expert social-media content analyst. You look at a single organic post \u2014 its creative (image or video cover frame) and its caption \u2014 and extract what a marketing team can learn from it into a structured summary.
|
|
44365
|
+
|
|
44366
|
+
Judge from what is actually in the creative and caption; never invent claims that are not visible or written. Be concrete and specific (name the objects, colors, people, layouts, words), not generic ("engaging content"). Write in the language of the caption when it is not English, otherwise in English.
|
|
44367
|
+
|
|
44368
|
+
Fill every field:
|
|
44369
|
+
- assetType: "static" (a still image), "motion" (a video / reel \u2014 you see its cover frame), "carousel" (a multi-image post), or "unknown".
|
|
44370
|
+
- format: the format the post is built for \u2014 e.g. "reel (9:16)", "square feed photo", "carousel", "portrait (4:5)", judged from its shape and framing.
|
|
44371
|
+
- visualHooks: the key visuals and visual angles used to stop the scroll (product close-up, before/after, face + eye contact, big text overlay, meme style, UGC selfie, trend/format\u2026). 2\u20136 short items.
|
|
44372
|
+
- audiences: who the post represents or speaks to (age band, gender, life situation, profession, interest, geography, community). 1\u20135 short items.
|
|
44373
|
+
- graphicIdentity: the graphic components \u2014 color palette, typography style, logo / handle placement, layout, illustration vs photo, brand consistency cues. One or two sentences.
|
|
44374
|
+
- copywritingHooks: the caption / content angles (curiosity, storytelling, question, trend, humor, social proof, education, behind-the-scenes\u2026). 1\u20136 short items, each naming the angle and quoting or paraphrasing the line that carries it.
|
|
44375
|
+
- usps: the value or benefit the post conveys to the viewer (entertainment, education, inspiration, a product benefit, a deal). 1\u20135 short items.
|
|
44376
|
+
- cta: the ask \u2014 the caption's call to action ("link in bio", "shop now", "follow", "comment below"), or "none" if the post makes none.
|
|
44377
|
+
- summary: two to four sentences: what the post is about, who it speaks to, with what hook, and why it likely performs (or does not).`;
|
|
44378
|
+
function buildAdCreativeAnalysisUserText(input) {
|
|
44379
|
+
const lines = [];
|
|
44380
|
+
if (input.advertiser) lines.push(`Account / advertiser: ${input.advertiser}`);
|
|
44381
|
+
if (input.headline) lines.push(`Headline: ${input.headline}`);
|
|
44382
|
+
if (input.body) lines.push(`Body copy:
|
|
44383
|
+
${input.body}`);
|
|
44384
|
+
if (input.ctaLabel) lines.push(`CTA button: ${input.ctaLabel}`);
|
|
44385
|
+
if (input.landing) lines.push(`Landing: ${input.landing}`);
|
|
44386
|
+
if (input.platforms && input.platforms.length > 0) lines.push(`Placements: ${input.platforms.join(", ")}`);
|
|
44387
|
+
if (input.creativeFormat) lines.push(`Creative shape: ${input.creativeFormat}`);
|
|
44388
|
+
if (input.mediaSummary) lines.push(`Media: ${input.mediaSummary}`);
|
|
44389
|
+
lines.push("The attached image is the ad's creative (for a video, its poster frame).");
|
|
44390
|
+
if (input.focus) lines.push(`
|
|
44391
|
+
Analyst focus from the user: ${input.focus}`);
|
|
44392
|
+
return lines.join("\n");
|
|
44393
|
+
}
|
|
44394
|
+
|
|
44395
|
+
export { ACTION_FX, ACTION_FX_CATEGORY_LABELS, ACTION_FX_CATEGORY_ORDER, ACTION_FX_IDS, ADULT_AGE_IDS, ADULT_ONLY_FLAG, ADULT_SWEPT_CATALOG_IDS, AD_CREATIVE_ANALYSIS_FIELDS, AD_CREATIVE_ANALYSIS_SYSTEM_PROMPT, AESTHETICS, AESTHETIC_CATEGORY_LABELS, AESTHETIC_CATEGORY_ORDER, AESTHETIC_IDS, ALL_PICKER_WIRING, ANALYZABLE_PICKER_TYPES, ANGLE_LABELS, ASPECT_RATIO_LABELS, ATMOSPHERES, ATMOSPHERE_IDS, AUDIO_WIZARD_CATEGORIES, BACKDROPS, BACKDROP_CATEGORY_LABELS, BACKDROP_CATEGORY_ORDER, BACKDROP_IDS, BRAND_PRESETS, BRAND_PRESET_IDS, BRAND_PRESET_META, CAMERA_FORMATS, CAMERA_FORMAT_IDS, CAMERA_MOTIONS, CAMERA_MOTION_CATEGORY_LABELS, CAMERA_MOTION_CATEGORY_ORDER, CAMERA_MOTION_IDS, CHARACTER_FX, CHARACTER_FX_CATEGORY_LABELS, CHARACTER_FX_CATEGORY_ORDER, CHARACTER_FX_DURATIONS, CHARACTER_FX_IDS, CHARACTER_FX_INTENSITIES, CHARACTER_FX_POSITIONS, CHARACTER_MOTIONS, CHARACTER_MOTION_CATEGORY_LABELS, CHARACTER_MOTION_CATEGORY_ORDER, CHARACTER_MOTION_IDS, CHARACTER_MOTION_MAX_PICKS, CHARACTER_MOTION_PACES, CHARACTER_MOTION_POSITIONS, CINEMATIC_LOOK_TAIL, COLOR_LOOKS, COLOR_LOOK_CATEGORY_LABELS, COLOR_LOOK_CATEGORY_ORDER, COLOR_LOOK_IDS, COMPOSITION_EFFECTS, COMPOSITION_EFFECT_IDS, DEFAULT_IDENTITY_LOCK, DEFAULT_TEMPLATES, DIRECTION_ARRAY_CEILING, DIRECTION_FIELDS, DIRECTION_ID_MAX_CHARS, DIRECTION_KEYS, ERAS, ERA_CATEGORY_LABELS, ERA_CATEGORY_ORDER, ERA_IDS, EXPOSURE_CATEGORY_LABELS, EXPOSURE_CATEGORY_ORDER, EXPOSURE_FIELD_BY_CATEGORY, EXPOSURE_IDS, EXPOSURE_SETTINGS, FACTORY_PRESETS, FACTORY_SNIPPETS, FILM_STILL_PREFIX, FILM_STYLE_KEYS, FLOORED_PICKER_KEYS, FRAMINGS, FRAMING_CATEGORY_LABELS, FRAMING_CATEGORY_ORDER, FRAMING_FIELD_BY_CATEGORY, FRAMING_IDS, GAPS_SCHEMA, HELD_PROPS, HELD_PROP_CATEGORY_LABELS, HELD_PROP_CATEGORY_ORDER, HELD_PROP_IDS, IMAGE_HINT_MODE_DEFAULT, IMAGE_REFERENCE_PROMPT_DOCTRINE, IMAGE_WIZARD_CATEGORIES, INSTANT_CUT_CLAUSE, INSTRUMENTATION_DEFAULT_DATA, INSTRUMENTS, INSTRUMENT_CATEGORY_LABELS, INSTRUMENT_CATEGORY_ORDER, LENSES, LENS_IDS, LIGHTINGS, LIGHTING_CATEGORY_LABELS, LIGHTING_CATEGORY_ORDER, LIGHTING_FIELD_BY_CATEGORY, LIGHTING_IDS, LLM_CHAT_WIZARD_CATEGORIES, LOOP_SUBJECTS, LOOP_SUBJECT_CATEGORY_LABELS, LOOP_SUBJECT_CATEGORY_ORDER, MATERIALS, MATERIAL_CATEGORY_LABELS, MATERIAL_CATEGORY_ORDER, MATERIAL_IDS, MAX_SELECTED_BY_DIMENSION, MAX_SELECTED_BY_FRAMING_CATEGORY, MAX_SELECTED_BY_STYLING_DIMENSION, MAX_SUBJECT_KEYS, MINOR_IMPLYING_TYPE_IDS, MOODS, MOOD_CATEGORY_LABELS, MOOD_CATEGORY_ORDER, MOOD_IDS, MOVEMENT_LABELS, MULTI_PICKER_WIRING, MUSIC_EMOTIONS, MUSIC_ENERGIES, MUSIC_ERAS, MUSIC_GENRES, MUSIC_GENRE_CATEGORY_LABELS, MUSIC_GENRE_CATEGORY_ORDER, MUSIC_GENRE_DEFAULT_DATA, MUSIC_MOOD_DEFAULT_DATA, MUSIC_VIBES, MUSIC_WIZARD_CATEGORIES, NODE_PROMPT_CANDIDATE_FIELDS, NODE_PROMPT_FIELDS, OBJECT_ANGLE_PRESETS, OBJECT_ANGLE_PROMPTS, OBJECT_ASSET_PRESETS, OBJECT_ASSET_PROMPTS, OBJECT_MATERIAL_PRESETS, OBJECT_MATERIAL_PROMPTS, OBJECT_VARIATION_PRESETS, OBJECT_VARIATION_PROMPTS, PEOPLE, PERSON_DIMENSION_LABELS, PERSON_DIMENSION_ORDER, PERSON_DIMENSION_SECTIONS, PERSON_FIELD_BY_DIMENSION, PERSON_IDS, PHOTOGRAPHERS, PHOTOGRAPHER_CATEGORY_LABELS, PHOTOGRAPHER_CATEGORY_ORDER, PHOTOGRAPHER_IDS, PHOTO_GENRES, PHOTO_GENRE_CATEGORY_LABELS, PHOTO_GENRE_CATEGORY_ORDER, PHOTO_GENRE_IDS, PICKER_ANALYZER_FAMILIES, PICKER_ANALYZER_REGISTRY, PICKER_CATALOGS, PICKER_TYPES, POSES, POSE_CATEGORY_LABELS, POSE_CATEGORY_ORDER, POSE_IDS, POST_CONTENT_ANALYSIS_SYSTEM_PROMPT, POST_PROCESS_EFFECTS, POST_PROCESS_EFFECT_IDS, PRODUCTION_STYLES, PROMPT_AFFIX_CORE_FIELD_OVERRIDES, PROMPT_AFFIX_NODE_TYPES, PROMPT_HINT_SEPARATOR, PROVIDER_CAPABILITIES, PROVIDER_PROMPT_DOCTRINES, REFERENCE_IMAGE_ROLES, REFERENCE_RULES, REFERENCE_RULES_MULTI_PERSON, REF_BINDING, RENDER_QUALITIES, RENDER_QUALITY_IDS, RETIRED_ADULT_ONLY_HINT_STRINGS, SCENE3D_FIGURE_REFERENCE_RULE, SCENE3D_FREE_PLATE_SLOTS, SCENE3D_LAYOUT_REFERENCE_SCOPING_FIXTURE, SCENE3D_LAYOUT_REFERENCE_SCOPING_LINE, SCENE3D_LAYOUT_SCOPING_FOR, SCENE3D_LAYOUT_SCOPING_IGNORE, SCENE3D_LAYOUT_SCOPING_LOOK_SOURCE, SCENE3D_LAYOUT_SCOPING_MARKER, SCENE3D_UNREFERENCED_FIGURES_WARNING_CODE, SCENE_FRAME_RULE, SCENE_PROMPT_MAX_LENGTH, SEEDANCE_VIDEO_EDIT_PREFIX, SETTINGS, SETTING_CATEGORY_LABELS, SETTING_IDS, SHOT_LABELS, SINGING_STYLES, SINGLE_PICKER_WIRING, SNIPPET_MEDIA_VALUES, STYLES, STYLE_IDS, STYLE_PRESETS, STYLE_SECTION_GAP, STYLE_SECTION_HEADER, STYLINGS, STYLING_DIMENSION_LABELS, STYLING_DIMENSION_ORDER, STYLING_FIELD_BY_DIMENSION, STYLING_IDS, SUBJECT_ARRAY_CEILING, SUBJECT_CUSTOM_AGE_KEY, SUBJECT_FIELDS, SUBJECT_FOLD_KEYS, SUBJECT_ID_MAX_CHARS, SUBJECT_IMAGE_HINT_MODE_DEFAULT, SUBJECT_KEYS, SUBJECT_KEY_MAX_CHARS, SUBJECT_VIDEO_HINT_MODE_DEFAULT, TEMPORALS, TEMPORAL_CATEGORY_LABELS, TEMPORAL_CATEGORY_ORDER, TEMPORAL_FIELD_BY_CATEGORY, TEMPORAL_IDS, TERM_MAX_CHARS, TEXT_WIZARD_CATEGORIES, TRANSITIONS, TRANSITION_CATEGORY_LABELS, TRANSITION_CATEGORY_ORDER, TRANSITION_DURATIONS, TRANSITION_IDS, TRANSITION_INTENSITIES, TRANSITION_POSITIONS, VIDEO_HINT_MODE_DEFAULT, VIDEO_WIZARD_CATEGORIES, VOCAL_PRESENCE, VOCAL_PRESENCE_INSTRUMENTAL_ID, VOICE_ACCENTS, VOICE_AGES, VOICE_ARCHETYPES, VOICE_CHARACTER_DEFAULT_DATA, VOICE_DELIVERY_DEFAULT_DATA, VOICE_EMOTIONS, VOICE_GENDERS, VOICE_LANGUAGES, VOICE_PACES, VOICE_TIMBRES, WARDROBE, WARDROBE_CATEGORY_LABELS, WARDROBE_DIMENSION_ORDER, WARDROBE_FIELD_BY_DIMENSION, __resetCatalogIdGuardForTests, appendField, appendMusicMeta, appendReferenceLines, appendScene3DStillScopingLines, applyMinorAgeFloorToPickerValues, applyPickerJson, applyPromptAffixes, applyReferenceOrderToVideo, applyTemplate, asBodyClauses, assembleImageInput, assembleSunoInput, buildActionFxHints, buildActionFxTerms, buildAdCreativeAnalysisUserText, buildAestheticHints, buildAestheticTerms, buildAgeHint, buildAtmosphereHints, buildAtmosphereTerms, buildCharacterPrompt, buildCreaturePrompt, buildExposureHints, buildExposureTerms, buildFaceTemplateInputs, buildFramingHints, buildFramingTerms, buildHeldPropHints, buildHeldPropTerms, buildIdentityDirectives, buildIdentityLockLine, buildImagePrompt, buildImagePromptSegments, buildImagePromptWithOverflow, buildInstrumentationHints, buildInstrumentationTerms, buildLightingHints, buildLightingTerms, buildLocationMotionPrompt, buildLocationPrompt, buildLocationRefinePrompt, buildMaterialHints, buildMaterialTerms, buildMoodHints, buildMoodTerms, buildMotionPrompt, buildMultiPickerAnalyzerSpec, buildMusicGenreHints, buildMusicGenreTerms, buildMusicMoodHints, buildMusicMoodTerms, buildNeedleAlternationSource, buildObjectMotionPrompt, buildObjectPrompt, buildPersonHints, buildPersonTerms, buildPhotographerHints, buildPhotographerTerms, buildPickerAnalyzerSpec, buildPickerLegend, buildPickerZodSchema, buildPoseHints, buildPoseTerms, buildPostProcessHints, buildPostProcessTerms, buildReferenceBlocks, buildScene3DLayoutScopingLine, buildScene3DUnreferencedFiguresWarning, buildScenePrompt, buildSeedanceVideoEditPrompt, buildStylingHints, buildStylingTerms, buildSurroundFillPrompt, buildTemporalHints, buildTemporalTerms, buildVoiceCharacterHints, buildVoiceCharacterTerms, buildVoiceDeliveryHints, buildVoiceDeliveryTerms, buildWardrobeHints, catalogGuardActive, catalogPacksVersion, characterLockToRefLock, collectIdentityLockClause, composeCameraMotionHintFromConnections, composeCameraMotionTermFromConnections, composeCharacterFxHintFromConnections, composeCharacterMotionHintFromConnections, composeNegative, composePickerCatalogs, composeSectionedPrompt, composeSoundHintFromConnections, composeTransitionHintFromConnections, composeVideoPromptText, composedHas, composedOption, composedOptionIndex, computeLlmChatFields, computeNodePrompt, computePackSidecarCoverage, containsMinorAgeHint, curateEntries, curatedAnimalPromptHint, curatedAnimalTerm, curatedFurnitureText, curatedVehicleText, curatedWeaponText, deriveTerm, directionFieldsForSurface, endsInsideStyleSection, expandImagePositionRefs, expandImageRefTokens, filmStillPrefix, findForeignCatalogIds, findForeignCatalogIdsInBody, foreignCatalogIdMessage, getActionFx, getActionFxLabel, getActionFxPromptHint, getActionFxTerm, getAdultOnlyEntries, getAdultOnlyHintStrings, getAdultOnlyIds, getAesthetic, getAestheticLabel, getAestheticPromptHint, getAestheticTerm, getAtmosphere, getAtmosphereLabel, getAtmospherePromptHint, getAtmosphereTerm, getBackdrop, getBackdropLabel, getBackdropPromptHint, getBackdropTerm, getCameraFormat, getCameraFormatLabel, getCameraFormatPromptHint, getCameraFormatTerm, getCameraMotion, getCameraMotionLabel, getCameraMotionPromptHint, getCameraMotionTerm, getCategoriesForNodeType, getCharacterFx, getCharacterFxLabel, getCharacterFxPromptHint, getCharacterFxTerm, getCharacterMotion, getCharacterMotionBindings, getCharacterMotionDiagnostics, getCharacterMotionLabel, getCharacterMotionPromptHint, getCharacterMotionTerm, getColorLook, getColorLookLabel, getColorLookPromptHint, getColorLookTerm, getCompositionEffect, getCompositionEffectLabel, getCompositionEffectPromptHint, getCompositionEffectTerm, getEffectiveSunoCustomMode, getEra, getEraLabel, getEraPromptHint, getEraTerm, getExposure, getExposureLabel, getExposurePromptHint, getExposureTerm, getFactoryPresets, getFactorySnippets, getFraming, getFramingCategoryLimit, getFramingLabel, getFramingPromptHint, getFramingTerm, getHeldProp, getHeldPropLabel, getHeldPropPromptHint, getHeldPropTerm, getIdentityLockClause, getInstrument, getInstrumentTerm, getLens, getLensLabel, getLensPromptHint, getLensTerm, getLighting, getLightingLabel, getLightingPromptHint, getLightingTerm, getLoopSubject, getLoopSubjectLabel, getLoopSubjectPromptHint, getLoopSubjectTerm, getMaterial, getMaterialLabel, getMaterialPromptHint, getMaterialTerm, getMinorAgeHintStrings, getMood, getMoodLabel, getMoodPromptHint, getMoodTerm, getMusicEmotion, getMusicEmotionTerm, getMusicEnergy, getMusicEnergyTerm, getMusicEra, getMusicEraTerm, getMusicGenre, getMusicGenreLabel, getMusicGenreTerm, getMusicSubgenre, getMusicSubgenreTerm, getMusicVibe, getMusicVibeTerm, getParameterPromptHint, getPerson, getPersonDimensionLimit, getPersonLabel, getPersonPromptHint, getPersonTerm, getPhotoGenre, getPhotoGenreLabel, getPhotoGenrePromptHint, getPhotoGenreTerm, getPhotographer, getPhotographerLabel, getPhotographerPromptHint, getPhotographerTerm, getPickerAnalyzer, getPickerCatalog, getPickerWiring, getPose, getPoseLabel, getPosePromptHint, getPoseTerm, getPostProcessEffect, getPostProcessEffectLabel, getPostProcessEffectPromptHint, getPostProcessEffectTerm, getProductionStyle, getProductionStyleTerm, getPromptDoctrine, getPromptFields, getPromptTips, getRegisteredCatalogPacks, getRegisteredPeople, getRegisteredPersonDimensionLabels, getRegisteredPersonDimensionOrder, getRegisteredPersonFieldByDimension, getRegisteredPickerCatalogs, getRegisteredSubjectKeys, getRenderQuality, getRenderQualityLabel, getRenderQualityPromptHint, getRenderQualityTerm, getSetting, getSettingLabel, getSettingPromptHint, getSettingTerm, getSingingStyle, getSingingStyleTerm, getSnippetMedia, getStyle, getStyleLabel, getStylePreset, getStylePromptHint, getStyleTerm, getStyling, getStylingDimensionLimit, getStylingLabel, getStylingPromptHint, getStylingTerm, getTemporal, getTemporalLabel, getTemporalPromptHint, getTemporalTerm, getTransition, getTransitionLabel, getTransitionPromptHint, getTransitionTerm, getVocalPresence, getVocalPresenceTerm, getVoiceAccent, getVoiceAccentTerm, getVoiceAge, getVoiceAgeTerm, getVoiceArchetype, getVoiceArchetypeTerm, getVoiceEmotion, getVoiceEmotionTerm, getVoiceGender, getVoiceGenderTerm, getVoiceLanguage, getVoiceLanguageTerm, getVoicePace, getVoicePaceTerm, getVoiceTimbre, getVoiceTimbreTerm, getWardrobeEntriesByDimension, getWardrobeEntry, getWardrobePromptHint, groupFactoryPresets, hasCatalogPacksFor, hasScene3DLayoutScopingLine, hasUpstreamCharacter, identityRefsSentence, insertBeforeStyleSection, isAnalyzablePicker, isDeniedStyleId, isInstantTransition, isInstrumentalVocal, isMinorAge, isSuspiciousDerivedTerm, isVantageFraming, isWizardSupported, joinHintFragments, joinPromptHints, joinPromptParts, keepableDirectionHints, listPickerCatalogs, migratePersonValue, modeForFamily, nodeHasInlinePrompt, nodeHasPromptField, nodeSupportsPromptAffixes, normalizeSubjectFields, overlayEntry, partitionStyleClauses, personPacksVersion, pickerFanoutTargets, planFrameDelivery, projectAllCatalogs, projectPickerCatalog, promptAffixCoreField, promptBindsFirstFrame, promptFieldCarriesAffixes, promptPartSeparator, readDirectionFields, readStructuredFields, readSubjectFields, referenceDescriptionLine, referenceRulesBlock, registerCatalogPack, registerPersonPack, renderDescribedReferenceLines, renderDirectionHintClauses, renderDirectionHints, renderReferenceCaptionLines, renderScene3DLayoutScopingLine, renderStructuredFields, renderStyleSection, renderSubjectHints, renderTransitionBases, resetCatalogPacks, resetPersonPacks, resolveBrandInput, resolveCharacterMentions, resolveGeminiOmniI2vInputs, resolveLocationMentions, resolvePrompt, resolveRefIdTokens, resolveReferenceTokens, resolveSeedance2Inputs, resolveTemplate, resolveTerm, resolveVeoI2vInputs, resolveVideoReferenceCore, scene3DLayoutVideoCaptions, sectionedClauseCosts, setComposedCatalogResolver, splitStyleSection, styleSectionFromClauses, styleSlotFor, subjectFieldsForSurface, subscribeCatalogPacks, summarizePickerCatalogs, toIdentityLockMode, truncateForField, truncateText, withForcedIdentityLock };
|
|
44259
44396
|
//# sourceMappingURL=index.js.map
|
|
44260
44397
|
//# sourceMappingURL=index.js.map
|