@sogni-ai/sogni-client 5.58.0 → 5.58.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/AGENTS.md +1 -1
- package/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/Projects/types/index.d.ts +33 -15
- package/dist/Projects/types/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist-esm/Projects/types/index.js.map +1 -1
- package/dist-esm/version.js +1 -1
- package/llms-full.txt +29 -14
- package/llms.txt +11 -5
- package/package.json +1 -1
- package/src/Projects/types/index.ts +33 -15
- package/src/version.ts +1 -1
package/AGENTS.md
CHANGED
|
@@ -365,7 +365,7 @@ const urls = await project.waitForCompletion();
|
|
|
365
365
|
| Text-to-Video | `*_t2v*` | None |
|
|
366
366
|
| Image-to-Video | `*_i2v*` | `referenceImage` (and/or `referenceImageEnd`) |
|
|
367
367
|
| First/Last-Frame Video | `*_flf2v*` (MiniMax H3) | `referenceImage` + `referenceImageEnd` |
|
|
368
|
-
| MiniMax H3 intermediate keyframes | every H3 id except `*_t2v*`: `*_i2v*`, `*_flf2v*`, `*_ia2v*`, `*_flfa2v*`, `*_a2v*`, `*_r2v*` (`isMinimaxH3KeyframeModel`, 21 ids) | optional `keyframes: [{ image, frameIndex }]`, up to 8, alongside the workflow's own uploads; `frameIndex` is a 0-based 24 fps frame from 1 to `frames - 2` (pass `frames`: `duration` snaps to the 124 + n*17 grid); images upload to `keyframeImage1..N` in order (r2v references keep their `contextImage` slots); the prompt
|
|
368
|
+
| MiniMax H3 intermediate keyframes | every H3 id except `*_t2v*`: `*_i2v*`, `*_flf2v*`, `*_ia2v*`, `*_flfa2v*`, `*_a2v*`, `*_r2v*` (`isMinimaxH3KeyframeModel`, 21 ids) | optional `keyframes: [{ image, frameIndex }]`, up to 8, alongside the workflow's own uploads; `frameIndex` is a 0-based 24 fps frame from 1 to `frames - 2` (pass `frames`: `duration` snaps to the 124 + n*17 grid); images upload to `keyframeImage1..N` in order (r2v references keep their `contextImage` slots); the prompt names each keyframe `<Picture N>` after the workflow's own pictures, lists it in the alignment line (r2v: keyframe entry, `keyframe completion` task, retention entry), describes what it shows, and cuts to a new shot where framing or light changes (see `llms.txt`) |
|
|
369
369
|
| Reference-to-Video | `*_r2v*` (Happy Horse) | 1-9 images via `referenceImage`/`referenceImageUrls` |
|
|
370
370
|
| Video-to-Video | `*_v2v*` (LTX-2.3) | `referenceVideo` + `controlNet` |
|
|
371
371
|
| Sound-to-Video | `*_s2v*` (WAN only) | `referenceImage` + `referenceAudio` |
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [5.58.1](https://github.com/Sogni-AI/sogni-client/compare/v5.58.0...v5.58.1) (2026-09-27)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **minimax-h3:** name keyframes as <Picture N> in the prompt guidance ([db85ad7](https://github.com/Sogni-AI/sogni-client/commit/db85ad709e6764c9b0b8fe3da60e18edccff69f2))
|
|
7
|
+
|
|
1
8
|
# [5.58.0](https://github.com/Sogni-AI/sogni-client/compare/v5.57.0...v5.58.0) (2026-09-27)
|
|
2
9
|
|
|
3
10
|
|
package/README.md
CHANGED
|
@@ -1065,7 +1065,7 @@ When creating video projects, you can specify:
|
|
|
1065
1065
|
- `referenceVideoDurations` - Optional MiniMax H3 r2v duration hints in `[referenceVideo, ...referenceVideos]` order for early client-side validation; Socket probes the uploaded files and uses measured durations for pricing and admission
|
|
1066
1066
|
- `referenceAudio` - Reference audio for sound-to-video workflows (s2v, ia2v, flfa2v, a2v)
|
|
1067
1067
|
- `referenceImageEnd` - Last frame for i2v, flf2v and the MiniMax H3 FastH3 flfa2v audio-guide workflow
|
|
1068
|
-
- `keyframes` - Every MiniMax H3 workflow except t2v (21 ids, `isMinimaxH3KeyframeModel()`: i2v and flf2v on every tier, Sound to Video ia2v/flfa2v/a2v, and Ref2VA r2v): up to `MINIMAX_H3_MAX_KEYFRAMES` (8) `{ image, frameIndex }` stills pinned between the first and last frame. `frameIndex` is the 0-based frame at 24 fps (`Math.round(seconds * 24)`), an integer from 1 to `frames - 2`, each frame used once. Pass `frames` from the H3 grid (124, 141, 158, … 362) so the count is exact: `duration` snaps to the grid (`duration: 6` renders 141 frames, not 144). Frame 0 and the last frame are never keyframes: i2v, flf2v and flfa2v set them with `referenceImage` / `referenceImageEnd`, ia2v sets frame 0 with `referenceImage`, and a2v and r2v cannot pin them.
|
|
1068
|
+
- `keyframes` - Every MiniMax H3 workflow except t2v (21 ids, `isMinimaxH3KeyframeModel()`: i2v and flf2v on every tier, Sound to Video ia2v/flfa2v/a2v, and Ref2VA r2v): up to `MINIMAX_H3_MAX_KEYFRAMES` (8) `{ image, frameIndex }` stills pinned between the first and last frame. `frameIndex` is the 0-based frame at 24 fps (`Math.round(seconds * 24)`), an integer from 1 to `frames - 2`, each frame used once. Pass `frames` from the H3 grid (124, 141, 158, … 362) so the count is exact: `duration` snaps to the grid (`duration: 6` renders 141 frames, not 144). Frame 0 and the last frame are never keyframes: i2v, flf2v and flfa2v set them with `referenceImage` / `referenceImageEnd`, ia2v sets frame 0 with `referenceImage`, and a2v and r2v cannot pin them. The prompt names each keyframe `<Picture N>` (MiniMax's keyframe format), numbered in time order after the workflow's own pictures: after the first frame on i2v and ia2v (after the last frame on a last-frame-only i2v job), after the first and last frames on flf2v and flfa2v, from `<Picture 1>` on a2v, and after the reference images on r2v; keyframes still never count as references. i2v, flf2v and Sound to Video prompts open with one alignment line listing every picture at its mark (`How the reference pictures align with the target video — Picture 1 (from Shot 1) aligns with the 0.00-second mark of the target video; Picture 2 (from Shot 2) aligns with the 2.88-second mark of the target video.`), the shot where a keyframe lands says "the shot's keyframe corresponds to `<Picture N>`", and r2v adds a `<Picture N> is the keyframe of [Shot M], showing ...` entry, `keyframe completion` in the summary tasks and a `<Picture N> ([Shot M] keyframe): fully_preserved - ...` retention entry. H3's text encoder never sees the keyframe images, so the prompt must still describe what each keyframe shows at its time. On Sound to Video the audio drives the performance and keyframes pin how it looks at their times. When a keyframe changes the framing, camera angle, location or light, start a new shot (a hard cut) in the prompt at its time: two differently framed or lit stills inside one continuous shot cross-fade, and a shot described differently from its still can flash the still for a single frame. Images upload to their own `keyframeImage1..N` slots in array order, so r2v sends its references (`referenceImage`, `contextImages`) and keyframes together. If no worker serving the model can pin keyframes yet, the job is refused with error code `4100` MiniMax H3 keyframe pricing: the first two keyframes are included; each extra keyframe adds output time at the job's per-second rate, 0.75 s on FastH3 and 0.3 s on every other tier (an 8 s FastH3 clip with 8 keyframes: 32 + 18 = 50 Spark). Pass `keyframeCount` (or the job's `keyframes`) to `estimateVideoCost` to quote it.
|
|
1069
1069
|
- `referenceImageUrls` - Loose image context URLs for Seedance, Happy Horse, and Wan 3; Wan 3 accepts up to 10
|
|
1070
1070
|
- `referenceVideoUrls` - Loose video context URLs for Seedance and Wan 3; Wan 3 accepts up to 5
|
|
1071
1071
|
- `referenceAudioUrls` - Loose audio context URLs for Seedance and Wan 3; Wan 3 accepts up to 5
|
|
@@ -159,8 +159,9 @@ export type InputMedia = File | Buffer | Blob | boolean;
|
|
|
159
159
|
*/
|
|
160
160
|
export interface MinimaxH3Keyframe {
|
|
161
161
|
/**
|
|
162
|
-
* The still image the video passes through at `frameIndex`.
|
|
163
|
-
*
|
|
162
|
+
* The still image the video passes through at `frameIndex`. The prompt names
|
|
163
|
+
* it `<Picture N>` and describes what it shows at that time: H3's text
|
|
164
|
+
* encoder never sees the image, which only pins the frame.
|
|
164
165
|
*/
|
|
165
166
|
image: InputMedia;
|
|
166
167
|
/**
|
|
@@ -268,15 +269,29 @@ export interface MinimaxH3Keyframe {
|
|
|
268
269
|
* `ia2v` sets frame 0 with `referenceImage`, and `a2v` and `r2v` cannot pin
|
|
269
270
|
* them. Each workflow keeps its own uploads, and `contextImages` stays
|
|
270
271
|
* r2v-only.
|
|
271
|
-
* -
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
*
|
|
272
|
+
* - The prompt names each keyframe `<Picture N>` (MiniMax's keyframe format),
|
|
273
|
+
* numbered in time order after the workflow's own pictures: after the first
|
|
274
|
+
* frame on `i2v` and `ia2v` (after the last frame on a last-frame-only `i2v`
|
|
275
|
+
* job), after the first and last frames on `flf2v` and `flfa2v`, from
|
|
276
|
+
* `<Picture 1>` on `a2v`, and after the reference images on `r2v`.
|
|
277
|
+
* Keyframes still never count as references.
|
|
278
|
+
* - `i2v`, `flf2v` and Sound to Video prompts open with one alignment line
|
|
279
|
+
* listing every picture at its mark, in time order: `How the reference
|
|
280
|
+
* pictures align with the target video — Picture 1 (from Shot 1) aligns with
|
|
281
|
+
* the 0.00-second mark of the target video; Picture 2 (from Shot 2) aligns
|
|
282
|
+
* with the 2.88-second mark of the target video.` The shot where a keyframe
|
|
283
|
+
* lands says "the shot's keyframe corresponds to `<Picture N>`". `r2v` adds
|
|
284
|
+
* `<Picture N> is the keyframe of [Shot M], showing ...` to
|
|
285
|
+
* `subject_definitions`, `keyframe completion` to the summary tasks and
|
|
286
|
+
* `<Picture N> ([Shot M] keyframe): fully_preserved - ...` to
|
|
287
|
+
* `retention_analysis`.
|
|
288
|
+
* - H3's text encoder never sees the keyframe images, so the prompt must still
|
|
289
|
+
* describe what each keyframe shows at its time. On Sound to Video the audio
|
|
290
|
+
* drives the performance, and keyframes pin how it looks at their times.
|
|
277
291
|
* - When a keyframe changes the framing, camera angle, location or light, the
|
|
278
|
-
* prompt must start a new shot (a hard cut, `[Shot N] At MM:SS.mmm,
|
|
279
|
-
*
|
|
292
|
+
* prompt must start a new shot (a hard cut, `[Shot N] At MM:SS.mmm, the
|
|
293
|
+
* camera cuts to ..., whose keyframe corresponds to <Picture N>.`) at its
|
|
294
|
+
* time, `frameIndex / 24` seconds. Two differently framed or lit stills
|
|
280
295
|
* inside one continuous shot cross-fade into each other, and a shot described
|
|
281
296
|
* differently from its still can flash the still for a single frame.
|
|
282
297
|
* - `keyframes[i].image` uploads to its own `keyframeImage<i+1>` slot and the
|
|
@@ -538,11 +553,14 @@ export interface VideoProjectParams extends BaseProjectParams {
|
|
|
538
553
|
* sets frame 0 with `referenceImage`, and `a2v` and `r2v` cannot pin them.
|
|
539
554
|
* Every workflow keeps its own upload rules.
|
|
540
555
|
*
|
|
541
|
-
*
|
|
542
|
-
*
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
*
|
|
556
|
+
* The prompt names each keyframe `<Picture N>`, numbered in time order after
|
|
557
|
+
* the workflow's own pictures (the first and last frames, or the `r2v`
|
|
558
|
+
* reference images), lists it in the alignment line (`r2v`: a keyframe entry,
|
|
559
|
+
* the `keyframe completion` task and a retention entry), and describes what
|
|
560
|
+
* it shows at its time, since H3's text encoder never sees the keyframe
|
|
561
|
+
* images. Keyframes still never count as references. On Sound to Video the
|
|
562
|
+
* audio drives the performance, and keyframes pin how it looks at their
|
|
563
|
+
* times. When a keyframe changes the framing, camera angle, location or
|
|
546
564
|
* light, start a new shot (a hard cut) at its time, `frameIndex / 24` seconds:
|
|
547
565
|
* two differently framed or lit stills inside one continuous shot cross-fade
|
|
548
566
|
* into each other, and a shot described differently from its still can flash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Projects/types/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Projects/types/index.ts"],"names":[],"mappings":";;AAmmCA,sCAEC;AAED,sCAEC;AAED,sCAEC;AAVD,SAAgB,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "5.58.
|
|
1
|
+
export declare const LIB_VERSION = "5.58.1";
|
package/dist/version.js
CHANGED
|
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LIB_VERSION = void 0;
|
|
4
4
|
// AUTO-GENERATED by scripts/generate-version.mjs — do not edit.
|
|
5
5
|
// Source of truth: package.json version.
|
|
6
|
-
exports.LIB_VERSION = '5.58.
|
|
6
|
+
exports.LIB_VERSION = '5.58.1';
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Projects/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Projects/types/index.ts"],"names":[],"mappings":"AAmmCA,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,OAAO,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;AACjC,CAAC"}
|
package/dist-esm/version.js
CHANGED
package/llms-full.txt
CHANGED
|
@@ -1071,18 +1071,33 @@ to its own `keyframeImage<i+1>` slot in array order and the indices travel as
|
|
|
1071
1071
|
together. If no worker serving the model can pin keyframes yet, the job is
|
|
1072
1072
|
refused with error code `4100`. MiniMax H3 keyframe pricing: the first two keyframes are included; each extra keyframe adds output time at the job's per-second rate, 0.75 s on FastH3 and 0.3 s on every other tier (an 8 s FastH3 clip with 8 keyframes: 32 + 18 = 50 Spark). Pass `keyframeCount` (or the job's `keyframes`) to `estimateVideoCost` to quote it.
|
|
1073
1073
|
|
|
1074
|
-
Prompts for keyframes
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1074
|
+
Prompts for keyframes (MiniMax's keyframe format): name each keyframe
|
|
1075
|
+
`<Picture N>`, numbered in time order after the workflow's own pictures: after
|
|
1076
|
+
the first frame `<Picture 1>` on I2V and IA2V (after the last frame
|
|
1077
|
+
`<Picture 1>` on a last-frame-only I2V job), after `<Picture 1>` (first) and
|
|
1078
|
+
`<Picture 2>` (last) on FLF2V and FLFA2V, from `<Picture 1>` on A2V, and after
|
|
1079
|
+
the last reference image `<Picture N>` on R2V. Keyframes are still not
|
|
1080
|
+
references and never count toward the reference limits. I2V, FLF2V and Sound to
|
|
1081
|
+
Video prompts open with one alignment line listing every picture at its mark
|
|
1082
|
+
(`frameIndex / 24` seconds, two decimals; a last frame at the clip's end), in
|
|
1083
|
+
time order, each credited to the shot on screen there: `How the reference
|
|
1084
|
+
pictures align with the target video — Picture 1 (from Shot 1) aligns with the
|
|
1085
|
+
0.00-second mark of the target video; Picture 2 (from Shot 2) aligns with the
|
|
1086
|
+
2.88-second mark of the target video.` The shot where a keyframe lands says
|
|
1087
|
+
"the shot's keyframe corresponds to `<Picture N>`". R2V adds
|
|
1088
|
+
`<Picture N> is the keyframe of [Shot M], showing ...` to
|
|
1089
|
+
`subject_definitions`, `keyframe completion` to the summary tasks, and
|
|
1090
|
+
`<Picture N> ([Shot M] keyframe): fully_preserved - ...` to
|
|
1091
|
+
`retention_analysis`. H3's text encoder never sees the keyframe images (they
|
|
1092
|
+
only pin frames), so the prompt must still describe what each keyframe shows at
|
|
1093
|
+
its time. On Sound to Video the uploaded audio drives the performance and
|
|
1094
|
+
keyframes pin how it looks at their times. When a keyframe changes the framing,
|
|
1095
|
+
camera angle, location or light, start a new shot (a hard cut) at its time:
|
|
1096
|
+
`[Shot N] At MM:SS.mmm, the camera cuts to ..., whose keyframe corresponds to
|
|
1097
|
+
<Picture N>.`, where the time is `frameIndex / 24` seconds (frame 144 is
|
|
1098
|
+
`00:06.000`). Two differently framed or lit stills inside one continuous shot
|
|
1099
|
+
cross-fade into each other, and a shot described differently from its still can
|
|
1100
|
+
flash the still for a single frame.
|
|
1086
1101
|
|
|
1087
1102
|
FASTH3 AUDIO GUIDE (`minimax-h3-fastvideo-int8_ia2v_turbo`,
|
|
1088
1103
|
`minimax-h3-fastvideo-int8_flfa2v_turbo`, `minimax-h3-fastvideo-int8_a2v_turbo`
|
|
@@ -1277,8 +1292,8 @@ Ref2VA uses six sections in exact order: `subject_definitions`, `summary`,
|
|
|
1277
1292
|
`retention_analysis`, `detailed_description`, `overall_soundscape`, and
|
|
1278
1293
|
`non_diegetic_music`. Use `<Subject N>` for reusable visible content abstracted
|
|
1279
1294
|
from a reference. Reserve standalone `<Picture N>` for a reference image used
|
|
1280
|
-
as a concrete keyframe or composition anchor (MiniMax's wording;
|
|
1281
|
-
in `keyframes`
|
|
1295
|
+
as a concrete keyframe or composition anchor (MiniMax's wording; each image
|
|
1296
|
+
passed in `keyframes` is one, numbered after the reference images); a still used only for identity, wardrobe, environment, or
|
|
1282
1297
|
style belongs in a `<Subject N>` definition. `<Video N>` represents whole-video
|
|
1283
1298
|
structure and `<Audio N>` represents copied or referenced audio. Keep labels
|
|
1284
1299
|
stable across all sections. `summary` begins with official task types such as
|
package/llms.txt
CHANGED
|
@@ -548,14 +548,20 @@ Intermediate keyframes: every H3 workflow except text-to-video accepts `keyframe
|
|
|
548
548
|
|
|
549
549
|
Writing the prompt for keyframes:
|
|
550
550
|
|
|
551
|
-
-
|
|
551
|
+
- Name each keyframe `<Picture N>` (MiniMax's keyframe format), numbered in time order after the workflow's own pictures: after the first frame `<Picture 1>` on I2V and IA2V (after the last frame `<Picture 1>` on a last-frame-only I2V job), after `<Picture 1>` (first) and `<Picture 2>` (last) on FLF2V and FLFA2V, from `<Picture 1>` on A2V, and after the last reference image `<Picture N>` on R2V. Keyframes are still not references and never count toward the reference limits.
|
|
552
|
+
- I2V, FLF2V and Sound to Video prompts open with one alignment line listing every picture at its mark (`frameIndex / 24` seconds, two decimals; a last frame at the clip's end), in time order, each credited to the shot on screen there: `How the reference pictures align with the target video — Picture 1 (from Shot 1) aligns with the 0.00-second mark of the target video; Picture 2 (from Shot 2) aligns with the 2.88-second mark of the target video.` The shot where a keyframe lands says "the shot's keyframe corresponds to `<Picture N>`".
|
|
553
|
+
- R2V adds `<Picture N> is the keyframe of [Shot M], showing ...` to `subject_definitions`, `keyframe completion` to the summary tasks (as in `[reference generation + keyframe completion]`), and `<Picture N> ([Shot M] keyframe): fully_preserved - ...` to `retention_analysis`.
|
|
554
|
+
- H3's text encoder never sees the keyframe images (they only pin frames), so the prompt must still describe what each keyframe shows at its time: shot size, camera angle, where each subject stands, pose, setting and light.
|
|
552
555
|
- On Sound to Video the uploaded audio drives the performance; keyframes pin how it looks at their times, so describe the look at each keyframe's time and let the audio carry timing and delivery.
|
|
553
|
-
- When a keyframe changes the framing, camera angle, location or light, start a new shot (a hard cut) at its time: `[Shot N] At MM:SS.mmm,
|
|
556
|
+
- When a keyframe changes the framing, camera angle, location or light, start a new shot (a hard cut) at its time: `[Shot N] At MM:SS.mmm, the camera cuts to ..., whose keyframe corresponds to <Picture N>.`, where the time is `frameIndex / 24` seconds (frame 144 is `00:06.000`). Two differently framed or lit stills inside one continuous shot cross-fade into each other, and a shot described differently from its still can flash the still for a single frame.
|
|
554
557
|
|
|
555
558
|
```javascript
|
|
556
559
|
// 192 frames (8 s): frame 0 is referenceImage, frame 191 is referenceImageEnd.
|
|
557
|
-
//
|
|
558
|
-
//
|
|
560
|
+
// The keyframes are <Picture 3> and <Picture 4>, after the first and last
|
|
561
|
+
// frames. flf2vPrompt opens with the alignment line (Picture 1 at 0.00, Picture
|
|
562
|
+
// 3 at 2.50, Picture 4 at 6.00, Picture 2 at 8.00), says "the shot's keyframe
|
|
563
|
+
// corresponds to <Picture 3>" inside [Shot 1], and starts [Shot 2] At
|
|
564
|
+
// 00:06.000 with the new camera angle <Picture 4> shows.
|
|
559
565
|
const project = await sogni.projects.create({
|
|
560
566
|
type: 'video',
|
|
561
567
|
network: 'fast',
|
|
@@ -626,7 +632,7 @@ const project = await sogni.projects.create({
|
|
|
626
632
|
|
|
627
633
|
MiniMax's [official H3 prompt-writing skill](https://github.com/MiniMax-AI/MiniMax-H3/tree/main/skills/h3-prompt-writing) makes Context-IR part of the prompt contract. T2V, I2V, L2V, and FLF2V use `integrated_multimodal_description`, `overall_soundscape`, then `non_diegetic_music`, in that exact order. Frame-conditioned modes prepend their official image-alignment line. I2V anchors `<Picture 1>` at 0.00 seconds; L2V uses `How the reference pictures align with the target video — <Picture 1> (from [Shot N]) aligns with the S.SS-second mark of the target video.`; FLF2V aligns both endpoints. Use `[Shot 1]` without a timestamp, then `[Shot N] At MM:SS.mmm, ...` for later cuts. Speakers keep stable `(S1)` IDs and exact spoken words go in `<d>[Language] ...</d>`. Write the structural sections in English while preserving dialogue, lyrics, and visible text in their original language. Use `non_diegetic_music: N/A` when there is no audience-only score.
|
|
628
634
|
|
|
629
|
-
Ref2VA (`_r2v`) is a separate checkpoint with no frame anchors, so `referenceImageEnd` is rejected; intermediate `keyframes` still work (see above) and
|
|
635
|
+
Ref2VA (`_r2v`) is a separate checkpoint with no frame anchors, so `referenceImageEnd` is rejected; intermediate `keyframes` still work (see above) and are named `<Picture N>` after the reference images, without counting as references. It runs on a Sogni worker, so every artist reference uses the normal S3 upload path: `referenceImage` plus `contextImages`, `referenceVideo` plus `referenceVideos`, and `referenceAudio` plus `referenceAudios`. Direct URL arrays are rejected. `referenceVideoDurations` is optional early-validation metadata in matching video order. If supplied, each hint must be 2-15 seconds and all hints may total at most 15 seconds; if omitted, project submission still proceeds. Socket always probes the uploaded files, overwrites caller claims, and uses measured durations for pricing and admission. At least one visual reference (image or video) is required; audio alone is rejected. Its prompt uses six ordered sections: `subject_definitions`, `summary`, `retention_analysis`, `detailed_description`, `overall_soundscape`, `non_diegetic_music`. Use `<Subject N>` for reusable visible content, `<Picture N>` only for concrete keyframes/composition anchors, `<Video N>` for whole-video structure, and `<Audio N>` for copied or referenced audio.
|
|
630
636
|
|
|
631
637
|
```javascript
|
|
632
638
|
const project = await sogni.projects.create({
|
package/package.json
CHANGED
|
@@ -177,8 +177,9 @@ export type InputMedia = File | Buffer | Blob | boolean;
|
|
|
177
177
|
*/
|
|
178
178
|
export interface MinimaxH3Keyframe {
|
|
179
179
|
/**
|
|
180
|
-
* The still image the video passes through at `frameIndex`.
|
|
181
|
-
*
|
|
180
|
+
* The still image the video passes through at `frameIndex`. The prompt names
|
|
181
|
+
* it `<Picture N>` and describes what it shows at that time: H3's text
|
|
182
|
+
* encoder never sees the image, which only pins the frame.
|
|
182
183
|
*/
|
|
183
184
|
image: InputMedia;
|
|
184
185
|
/**
|
|
@@ -287,15 +288,29 @@ export interface MinimaxH3Keyframe {
|
|
|
287
288
|
* `ia2v` sets frame 0 with `referenceImage`, and `a2v` and `r2v` cannot pin
|
|
288
289
|
* them. Each workflow keeps its own uploads, and `contextImages` stays
|
|
289
290
|
* r2v-only.
|
|
290
|
-
* -
|
|
291
|
-
*
|
|
292
|
-
*
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
*
|
|
291
|
+
* - The prompt names each keyframe `<Picture N>` (MiniMax's keyframe format),
|
|
292
|
+
* numbered in time order after the workflow's own pictures: after the first
|
|
293
|
+
* frame on `i2v` and `ia2v` (after the last frame on a last-frame-only `i2v`
|
|
294
|
+
* job), after the first and last frames on `flf2v` and `flfa2v`, from
|
|
295
|
+
* `<Picture 1>` on `a2v`, and after the reference images on `r2v`.
|
|
296
|
+
* Keyframes still never count as references.
|
|
297
|
+
* - `i2v`, `flf2v` and Sound to Video prompts open with one alignment line
|
|
298
|
+
* listing every picture at its mark, in time order: `How the reference
|
|
299
|
+
* pictures align with the target video — Picture 1 (from Shot 1) aligns with
|
|
300
|
+
* the 0.00-second mark of the target video; Picture 2 (from Shot 2) aligns
|
|
301
|
+
* with the 2.88-second mark of the target video.` The shot where a keyframe
|
|
302
|
+
* lands says "the shot's keyframe corresponds to `<Picture N>`". `r2v` adds
|
|
303
|
+
* `<Picture N> is the keyframe of [Shot M], showing ...` to
|
|
304
|
+
* `subject_definitions`, `keyframe completion` to the summary tasks and
|
|
305
|
+
* `<Picture N> ([Shot M] keyframe): fully_preserved - ...` to
|
|
306
|
+
* `retention_analysis`.
|
|
307
|
+
* - H3's text encoder never sees the keyframe images, so the prompt must still
|
|
308
|
+
* describe what each keyframe shows at its time. On Sound to Video the audio
|
|
309
|
+
* drives the performance, and keyframes pin how it looks at their times.
|
|
296
310
|
* - When a keyframe changes the framing, camera angle, location or light, the
|
|
297
|
-
* prompt must start a new shot (a hard cut, `[Shot N] At MM:SS.mmm,
|
|
298
|
-
*
|
|
311
|
+
* prompt must start a new shot (a hard cut, `[Shot N] At MM:SS.mmm, the
|
|
312
|
+
* camera cuts to ..., whose keyframe corresponds to <Picture N>.`) at its
|
|
313
|
+
* time, `frameIndex / 24` seconds. Two differently framed or lit stills
|
|
299
314
|
* inside one continuous shot cross-fade into each other, and a shot described
|
|
300
315
|
* differently from its still can flash the still for a single frame.
|
|
301
316
|
* - `keyframes[i].image` uploads to its own `keyframeImage<i+1>` slot and the
|
|
@@ -560,11 +575,14 @@ export interface VideoProjectParams extends BaseProjectParams {
|
|
|
560
575
|
* sets frame 0 with `referenceImage`, and `a2v` and `r2v` cannot pin them.
|
|
561
576
|
* Every workflow keeps its own upload rules.
|
|
562
577
|
*
|
|
563
|
-
*
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
*
|
|
567
|
-
*
|
|
578
|
+
* The prompt names each keyframe `<Picture N>`, numbered in time order after
|
|
579
|
+
* the workflow's own pictures (the first and last frames, or the `r2v`
|
|
580
|
+
* reference images), lists it in the alignment line (`r2v`: a keyframe entry,
|
|
581
|
+
* the `keyframe completion` task and a retention entry), and describes what
|
|
582
|
+
* it shows at its time, since H3's text encoder never sees the keyframe
|
|
583
|
+
* images. Keyframes still never count as references. On Sound to Video the
|
|
584
|
+
* audio drives the performance, and keyframes pin how it looks at their
|
|
585
|
+
* times. When a keyframe changes the framing, camera angle, location or
|
|
568
586
|
* light, start a new shot (a hard cut) at its time, `frameIndex / 24` seconds:
|
|
569
587
|
* two differently framed or lit stills inside one continuous shot cross-fade
|
|
570
588
|
* into each other, and a shot described differently from its still can flash
|
package/src/version.ts
CHANGED