@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodaro/prompts",
3
- "version": "1.8.0",
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-up revealing fine detail with shallow depth of field"
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 that leaves the holster visible",
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 bold display typography overlaid on the image, headline and pull quotes integrated with the photograph, visible page gutter down the middle",
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 building's near wall peeled away to reveal the interior in dollhouse fashion, multiple rooms visible at once with floors and furnishings exposed in clean architectural section, the subject inhabiting one of the rooms",
445
- term: "cutaway cross-section, near wall removed",
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, cinematic widescreen feel with 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, extreme close-up revealing fine detail with shallow depth of field", term: "macro lens" },
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 complex videos as 'Shot 1: … Shot 2: …' WITHOUT timestamps — timed shots like '(0-3s)' are officially unstable and can break generation.",
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 cause ID drift). 4-5 assets total beats maxing the 9/3/3 caps.",
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 (the 2.0 SKUs stop at 15s), so storyboard a whole beat instead of planning a stitch. Ref caps are wider (30/10/10), but 4-5 assets still gives the best identity fidelity.",
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. Do NOT attach timestamps (e.g. "(0-3s)") — precise-timing support is officially unstable and forcing durations can break generation; let the model pace naturally.
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. Do NOT attach multi-view/three-view character sheets — the model reads the views as separate people, causing identity drift and twin duplicates.
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