@nodaro/prompts 1.8.0 → 1.8.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/dist/index.cjs +14 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +14 -19
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/fixtures/parameter-hint-golden.json +1 -1
- package/src/__tests__/provider-prompt-doctrine.test.ts +18 -0
- package/src/framing.ts +4 -12
- package/src/lens.ts +2 -2
- package/src/provider-prompt-doctrine.ts +12 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nodaro/prompts",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "Nodaro's prompt-engineering layer — person/picker catalogs with prompt hints, identity-lock clauses, entity prompt builders, brand presets, and prompt/reference assembly shared by the Nodaro platform and SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"test": "vitest run"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@nodaro/shared": "
|
|
23
|
+
"@nodaro/shared": "^2.12.1"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"tsup": "^8.5.0",
|
|
@@ -1182,7 +1182,7 @@
|
|
|
1182
1182
|
}
|
|
1183
1183
|
},
|
|
1184
1184
|
"ctx": null,
|
|
1185
|
-
"expected": "macro lens, extreme close
|
|
1185
|
+
"expected": "macro lens, capable of extreme close focus and life-size magnification with a very shallow depth of field"
|
|
1186
1186
|
},
|
|
1187
1187
|
{
|
|
1188
1188
|
"key": "lens/id:petzval",
|
|
@@ -48,4 +48,22 @@ describe("PROVIDER_PROMPT_DOCTRINES", () => {
|
|
|
48
48
|
// no native negative-prompt param
|
|
49
49
|
expect(d.doctrine).toMatch(/negative/i)
|
|
50
50
|
})
|
|
51
|
+
|
|
52
|
+
it("splits the timestamp + multi-view rules by version: 2.0 SKUs no, seedance-2-5 yes (official 2.5 guide)", () => {
|
|
53
|
+
// Official "Dreamina Seedance 2.5 prompt guide" → Differences from Seedance 2.0:
|
|
54
|
+
// 2.0 does not respond to timestamps (shot numbers only) and multi-view
|
|
55
|
+
// subject images are not recommended; 2.5 supports integer-second
|
|
56
|
+
// timestamps and multi-view references. The doctrine is one group for the
|
|
57
|
+
// whole family, so BOTH halves must be stated — a rewrite that drops
|
|
58
|
+
// either side re-applies a 2.0 rule to 2.5 (or vice versa).
|
|
59
|
+
const d = getPromptDoctrine("seedance-2-5")!
|
|
60
|
+
expect(d.providers).toContain("seedance-2")
|
|
61
|
+
expect(d.doctrine).toMatch(/2\.0[^.]*(ignore|do not respond to|respond to shot numbers only)[^.]*timestamps|timestamps[^.]*2\.0/i)
|
|
62
|
+
expect(d.doctrine).toMatch(/seedance-2-5[^.]*integer-second timestamps|integer-second timestamps[^.]*2\.5/i)
|
|
63
|
+
expect(d.doctrine).toMatch(/At the 5-second mark/)
|
|
64
|
+
expect(d.doctrine).toMatch(/2\.5 accepts multi-view|supported on 2\.5/i)
|
|
65
|
+
const tips = getPromptTips("seedance-2-5").join(" ")
|
|
66
|
+
expect(tips).toMatch(/2\.0 SKUs ignore timestamps/)
|
|
67
|
+
expect(tips).toMatch(/seedance-2-5 honours integer-second timestamps/)
|
|
68
|
+
})
|
|
51
69
|
})
|
package/src/framing.ts
CHANGED
|
@@ -166,15 +166,7 @@ export const FRAMINGS: ReadonlyArray<Framing> = [
|
|
|
166
166
|
label: "Cowboy Shot",
|
|
167
167
|
category: "shot-size",
|
|
168
168
|
description: "Mid-thigh up, classic Western framing",
|
|
169
|
-
promptHint: "cowboy shot, subject framed from mid-thigh up, classic Western framing
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
id: "head-to-knees",
|
|
173
|
-
label: "Head to Knees",
|
|
174
|
-
category: "shot-size",
|
|
175
|
-
description: "From head down to the knees",
|
|
176
|
-
promptHint: "head-to-knees framing, subject visible from the top of the head down to just above the knees",
|
|
177
|
-
term: "head-to-knees framing",
|
|
169
|
+
promptHint: "cowboy shot, subject framed from mid-thigh up, classic Western framing",
|
|
178
170
|
},
|
|
179
171
|
{
|
|
180
172
|
id: "head-to-hip",
|
|
@@ -434,15 +426,15 @@ export const FRAMINGS: ReadonlyArray<Framing> = [
|
|
|
434
426
|
label: "Magazine Spread",
|
|
435
427
|
category: "composition",
|
|
436
428
|
description: "Two-page magazine layout with typography",
|
|
437
|
-
promptHint: "magazine spread layout, two-page editorial composition with
|
|
429
|
+
promptHint: "magazine spread layout, two-page editorial composition with a visible page gutter down the middle",
|
|
438
430
|
},
|
|
439
431
|
{
|
|
440
432
|
id: "cutaway-cross-section",
|
|
441
433
|
label: "Cutaway / Cross-Section",
|
|
442
434
|
category: "composition",
|
|
443
435
|
description: "Architectural cross-section with walls peeled away",
|
|
444
|
-
promptHint: "cutaway cross-section composition, the
|
|
445
|
-
term: "cutaway cross-section, near
|
|
436
|
+
promptHint: "cutaway cross-section composition, the near surface peeled away to reveal the interior in clean cross-section, the inner layers and hidden structure exposed at once",
|
|
437
|
+
term: "cutaway cross-section, near surface removed",
|
|
446
438
|
},
|
|
447
439
|
{
|
|
448
440
|
id: "golden-spiral",
|
package/src/lens.ts
CHANGED
|
@@ -37,8 +37,8 @@ export const LENSES: ReadonlyArray<Lens> = [
|
|
|
37
37
|
{ id: "telephoto-135mm", label: "Telephoto (135mm)", description: "Compressed depth, isolated subject", promptHint: "shot on 135mm telephoto lens, compressed depth with subject isolated from background", term: "135mm telephoto lens" },
|
|
38
38
|
{ id: "super-telephoto-400mm", label: "Super Telephoto (400mm)", description: "Extreme compression, distant subject", promptHint: "shot on super-telephoto 400mm lens, extreme depth compression with subject pulled forward", term: "400mm super-telephoto lens" },
|
|
39
39
|
{ id: "fisheye", label: "Fisheye", description: "Hemispherical 180° distortion", promptHint: "shot on fisheye lens, extreme 180-degree hemispherical distortion with curved horizon", term: "fisheye lens" },
|
|
40
|
-
{ id: "anamorphic", label: "Anamorphic", description: "Cinematic widescreen, oval bokeh", promptHint: "anamorphic lens look,
|
|
41
|
-
{ id: "macro", label: "Macro", description: "Extreme close-up of small detail", promptHint: "macro lens, extreme close
|
|
40
|
+
{ id: "anamorphic", label: "Anamorphic", description: "Cinematic widescreen, oval bokeh", promptHint: "anamorphic lens look, characteristic oval bokeh and horizontal lens flares", term: "anamorphic lens" },
|
|
41
|
+
{ id: "macro", label: "Macro", description: "Extreme close-up of small detail", promptHint: "macro lens, capable of extreme close focus and life-size magnification with a very shallow depth of field", term: "macro lens" },
|
|
42
42
|
{ id: "probe", label: "Probe Lens", description: "Tube macro — through holes and tight spaces", promptHint: "probe lens shot, tube-lens macro perspective gliding through impossibly tight spaces with extreme close-up depth" },
|
|
43
43
|
{ id: "cctv", label: "CCTV", description: "Security-camera surveillance look", promptHint: "CCTV security camera footage look, high-angle fixed surveillance framing, mild wide-angle distortion, washed contrast and visible video grain", term: "cctv surveillance camera look" },
|
|
44
44
|
{ id: "tilt-shift", label: "Tilt-shift", description: "Selective focus, miniature effect", promptHint: "tilt-shift lens, selective plane of focus producing a miniature-diorama effect", term: "tilt-shift lens" },
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
* Seedance 2.0:
|
|
11
11
|
* - Official BytePlus ModelArk "Dreamina Seedance 2.0 series prompt guide"
|
|
12
12
|
* https://docs.byteplus.com/en/docs/ModelArk/2222480
|
|
13
|
+
* - Official BytePlus ModelArk "Dreamina Seedance 2.5 prompt guide"
|
|
14
|
+
* https://docs.byteplus.com/en/docs/ModelArk/2607689 — its "Differences
|
|
15
|
+
* from Seedance 2.0" section is the authority for every 2.0-vs-2.5 split
|
|
16
|
+
* below (timestamps, multi-view references, aspect ratios, MOV output).
|
|
13
17
|
* - Official launch post https://seed.bytedance.com/en/blog/official-launch-of-seedance-2-0
|
|
14
18
|
* - KIE API docs https://docs.kie.ai/market/bytedance/seedance-2
|
|
15
19
|
* Kling:
|
|
@@ -41,19 +45,19 @@ const SEEDANCE_2_DOCTRINE: ProviderPromptDoctrine = {
|
|
|
41
45
|
providers: ["seedance-2", "seedance-2-fast", "seedance-2-mini", "seedance-2-5"],
|
|
42
46
|
heading: "Seedance 2 (seedance-2, seedance-2-fast, seedance-2-mini, seedance-2-5)",
|
|
43
47
|
tips: [
|
|
44
|
-
"Storyboard
|
|
48
|
+
"Storyboard as 'Shot 1: … Shot 2: …'. The 2.0 SKUs ignore timestamps and '(0-3s)' shots are officially unstable there; seedance-2-5 honours integer-second timestamps ('0-3s: …', 'at the 5-second mark').",
|
|
45
49
|
"One camera movement per shot; describe actions per body part with degree ('slowly raises a hand'); express emotion as physical detail, never abstract words.",
|
|
46
50
|
"Native multi-track audio — cue it inline: (background music), <sound effects>, and quoted dialogue.",
|
|
47
|
-
"References go by ordinal (@Image 1, Video 2) in attachment order; earlier = higher priority. Identity = ONE headshot + ONE full-body (multi-view sheets
|
|
51
|
+
"References go by ordinal (@Image 1, Video 2) in attachment order; earlier = higher priority. Identity = ONE headshot + ONE full-body (multi-view sheets drift on 2.0; 2.5 accepts them). 4-5 assets beats maxing 9/3/3.",
|
|
48
52
|
"No negative-prompt parameter — put constraints in the prompt: 'keep it subtitle-free, do not generate a watermark, do not generate a logo'.",
|
|
49
|
-
"seedance-2-5 only: one shot runs to 30s (
|
|
53
|
+
"seedance-2-5 only: one shot runs to 30s (2.0 stops at 15s) — storyboard a whole beat, not a stitch; timestamps work (gap-free, 1s units, don't overpack); refs 30/10/10 but 4-5 assets still gives the best identity.",
|
|
50
54
|
"Auto-path formula: Subject → Action → Environment → Camera → Style → Constraints in 60-100 words; ONE camera instruction (chain with 'then'); separate camera motion from subject motion; always add one lighting phrase.",
|
|
51
55
|
],
|
|
52
56
|
doctrine: `Prompt structure (front-load what matters most):
|
|
53
57
|
precise subject → action details → scene/environment → lighting & color tone → camera movement → visual style → image quality → constraints.
|
|
54
58
|
|
|
55
59
|
**Shots & pacing**
|
|
56
|
-
- Storyboard complex videos as "Shot 1: … Shot 2: … Shot 3: …" in event order.
|
|
60
|
+
- Storyboard complex videos as "Shot 1: … Shot 2: … Shot 3: …" in event order. TIMESTAMPS ARE VERSION-SPLIT: the 2.0 SKUs (seedance-2 / -fast / -mini) respond to shot numbers only — do NOT attach timestamps there (e.g. "(0-3s)"; precise timing is officially unstable on 2.0 and forcing durations can break generation, so let the model pace). seedance-2-5 honours integer-second timestamps — the forms and limits are under "Generation differences" below.
|
|
57
61
|
- Per shot cover, in order: camera move or transition, subject action + expression, spatial/position change, audio for that shot.
|
|
58
62
|
- One camera movement type per shot — never ask for push + pan + orbit at once (image instability).
|
|
59
63
|
- Prefer slow, gentle, continuous movements over high-burst action (sprints, big jumps, violent rolls morph). Describe actions per body part with quantified degree: "slowly raises a hand", "pushes hard off the ground". Chain actions with inertia: "uses the momentum of the turn to naturally raise an arm".
|
|
@@ -64,11 +68,14 @@ precise subject → action details → scene/environment → lighting & color to
|
|
|
64
68
|
- 2.5 also takes far more reference material (30 images / 10 videos / 10 audio vs 9/3/3). Treat that as room for COVERAGE — more distinct characters, locations and props in one shot — not as licence to pile refs onto one identity. The "ONE headshot + ONE full-body, 4-5 assets total" rule above still produces the best likeness on 2.5.
|
|
65
69
|
- 2.5 renders at 480p/720p/1080p (1080p since 2026-08-17): there is no 4K tier, so route a job that needs 4K to seedance-2 (which has it) or upscale afterwards.
|
|
66
70
|
- With a start frame, 2.5 always derives the output aspect from that frame — an explicit aspect ratio is rejected outright, so compose the frame at the ratio you want.
|
|
71
|
+
- Timestamps (official 2.5 guide, "Differences from Seedance 2.0"): 2.0 does not respond to them; 2.5 supports integer-second timestamps in three forms — gap-free intervals ("0-3s: … 3-7s: … 7-15s: …" or "[1s-4s] … [4s-8s] …"; never leave a hole like "0-3s … 5-6s"), time-point control ("At the 5-second mark, …"), and relative time ("After 3 seconds, …"). Use 1-second units. Too little content in a range lets the model improvise; too much packs in extra cuts or drops beats — budget the seconds. Never use timestamps to drive high-frequency actions ("shake three times per second").
|
|
72
|
+
- Multi-view subject images: not recommended on 2.0 (the views read as separate people → twins); supported on 2.5. ONE headshot + ONE full-body remains the safest default on both.
|
|
73
|
+
- Transitions and camera terms on 2.5: state a transition's trigger point AND method in one sentence — "At the 5-second mark, the camera quickly transitions leftward using a left wipe combined with a natural dissolve." Basic shot and camera terms are written directly (push in / pull out / pan / track / orbit / dolly zoom / whip pan / hard cut / dissolve / one-shot / speed ramp); only niche terms need [term + descriptive explanation] — which is exactly what the pickers' compact hint mode emits versus their long hints.
|
|
67
74
|
|
|
68
75
|
**References (when reference media is attached)**
|
|
69
76
|
- Refer to assets by ordinal in attachment order: "@Image 1", "Video 2", "Audio 1". Asset ORDER is priority — put the most identity-critical asset first. (In the editor, the \`{image:N:label}\` / \`{video:N}\` / \`{audio:N}\` prompt tokens auto-emit this binding — \`{image:1:person}\` resolves to "the person from @image_1" — so a wired reference and its mention stay in sync.)
|
|
70
77
|
- Define each subject once, then reuse the label consistently: 'Define the woman in the red dress in Image 1 as the courier' … 'the courier opens the door'. In multi-character scenes bind every character to its image ("the man from Image 1 hands the box to the woman from Image 2") and append: "do not generate duplicate copies of the same character".
|
|
71
|
-
- Character identity: ONE close-up headshot + ONE full-body image is ideal.
|
|
78
|
+
- Character identity: ONE close-up headshot + ONE full-body image is ideal. On the 2.0 SKUs do NOT attach multi-view/three-view character sheets — the model reads the views as separate people, causing identity drift and twin duplicates; 2.5 accepts multi-view images (see "Generation differences").
|
|
72
79
|
- 4-5 assets total works best (1-2 character images + 1 scene image + 1 camera-movement video + 1 audio clip). Maxing out the 9-image/3-video/3-audio limits degrades feature priority and adherence.
|
|
73
80
|
- Editing/extension instructions name clips directly: "Extend Video 1 backward…", "Remove the chair from Video 1". Saying "reference Video 1" flips the model into reference mode and breaks the edit. Track completion: "Video 1 + [transition description] + followed by Video 2" (≤3 clips, ≤15s total).
|
|
74
81
|
|