@agentmedia/schema 0.5.0 → 0.5.2
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/v2/generators.d.ts.map +1 -1
- package/dist/v2/generators.js +14 -6
- package/dist/v2/generators.js.map +1 -1
- package/dist/v2/selfie.d.ts +53 -30
- package/dist/v2/selfie.d.ts.map +1 -1
- package/dist/v2/selfie.js +69 -29
- package/dist/v2/selfie.js.map +1 -1
- package/package.json +13 -13
- package/scripts/generate-v2-docs.ts +384 -290
- package/src/v2/generators.ts +14 -6
- package/src/v2/selfie.ts +86 -30
- package/LICENSE +0 -199
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/v2/generators.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAO7B;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IAEpB,gCAAgC;IAChC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC;IAE1B,0EAA0E;IAC1E,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,qBAAqB,CAAC;IAE7D,8CAA8C;IAC9C,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IAEF,qDAAqD;IACrD,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,sDAAsD;IACtD,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAEF,yEAAyE;IACzE,OAAO,CAAC,EACJ;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GACpE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAID,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/v2/generators.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAO7B;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IAEpB,gCAAgC;IAChC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC;IAE1B,0EAA0E;IAC1E,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,qBAAqB,CAAC;IAE7D,8CAA8C;IAC9C,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IAEF,qDAAqD;IACrD,GAAG,CAAC,EAAE;QACJ,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,sDAAsD;IACtD,IAAI,CAAC,EAAE;QACL,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAEF,yEAAyE;IACzE,OAAO,CAAC,EACJ;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,GACpE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAID,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAwGlD,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,aAAa,CAAC;AAEvD,eAAO,MAAM,gBAAgB,EAAiC,aAAa,EAAE,CAAC;AAE9E;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAMjG"}
|
package/dist/v2/generators.js
CHANGED
|
@@ -7,19 +7,24 @@ export const V2_GENERATORS = {
|
|
|
7
7
|
selfie: {
|
|
8
8
|
id: 'selfie',
|
|
9
9
|
status: 'stable',
|
|
10
|
-
summary: 'AI
|
|
10
|
+
summary: 'AI UGC selfie video with generated actor, character sheet, storyboard board, and Seedance.',
|
|
11
11
|
description: 'Generate a 9:16 vertical TikTok-style selfie clip. Pick a saved character (--character) ' +
|
|
12
12
|
'OR pass a photo + description inline. The pipeline composes a portrait → multi-pose ' +
|
|
13
|
-
'character sheet →
|
|
14
|
-
'audio. Output: an mp4 hosted on R2.'
|
|
13
|
+
'character sheet → photographic storyboard/wireframe board, then Seedance 2.0 animates ' +
|
|
14
|
+
'the scene with native audio. Output: an mp4 hosted on R2. Intermediate portrait, sheet, ' +
|
|
15
|
+
'and wireframe URLs are surfaced on the job status while the video runs.',
|
|
15
16
|
inputSchema: SelfieSchema,
|
|
16
17
|
output: 'video_url',
|
|
17
18
|
cli: {
|
|
18
19
|
command: 'selfie',
|
|
19
20
|
fileFields: ['photo_url'],
|
|
20
21
|
examples: [
|
|
21
|
-
|
|
22
|
-
'agent-media selfie --
|
|
22
|
+
// Lead with the description-only case (the default, no photo needed).
|
|
23
|
+
'agent-media selfie --description "25yo asian woman, long wavy dark hair, soft smile" --script "I keep getting DMs about my hair oil routine" --scene-action "standing by a bright vanity, showing a small amber hair-oil bottle and scrunching one curl mid-line" --duration 10',
|
|
24
|
+
// Reuse a saved character across multiple videos.
|
|
25
|
+
'agent-media selfie --character char_8x2vqp --script "..." --scene-action "sitting at a desk, gesturing toward an open laptop beside them" --duration 10',
|
|
26
|
+
// Pin an exact real-person likeness (optional — only when the user provides a photo).
|
|
27
|
+
'agent-media selfie --photo me.png --description "25yo creator, casual black tee" --script "..." --duration 10',
|
|
23
28
|
],
|
|
24
29
|
},
|
|
25
30
|
mcp: { toolName: 'create_selfie' },
|
|
@@ -46,7 +51,10 @@ export const V2_GENERATORS = {
|
|
|
46
51
|
command: 'character create',
|
|
47
52
|
fileFields: ['photo_url'],
|
|
48
53
|
examples: [
|
|
49
|
-
|
|
54
|
+
// Default: description-only — agent-media generates the portrait, no photo upload.
|
|
55
|
+
'agent-media character create --name "sofia" --description "25yo asian woman, long wavy dark hair, soft smile"',
|
|
56
|
+
// Optional: pass a real-person photo when the user wants an exact likeness.
|
|
57
|
+
'agent-media character create --name "sofia" --description "..." --photo me.png',
|
|
50
58
|
],
|
|
51
59
|
},
|
|
52
60
|
mcp: { toolName: 'create_character' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/v2/generators.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAkB/D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAoD/C,6EAA6E;AAE7E,MAAM,CAAC,MAAM,aAAa,GAAsC;IAC9D,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/v2/generators.ts"],"names":[],"mappings":"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"}
|
package/dist/v2/selfie.d.ts
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* v2 · Selfie input schema.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Generates a 9:16 vertical TikTok-style clip via the Selfie pipeline
|
|
5
|
+
* (orchestration agent -> gpt-image-2 portrait -> gpt-image-2 character
|
|
6
|
+
* sheet -> gpt-image-2 wireframe -> Seedance 2.0 reference-to-video). See
|
|
7
|
+
* services/media-worker-v2/src/v2/selfie-adapter.js.
|
|
6
8
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
9
|
+
* Character inputs (one of):
|
|
10
|
+
* - character_id (reuse saved character)
|
|
11
|
+
* - description (text-only, agent-media paints the character)
|
|
12
|
+
* - description + photo_url (use the user's photo as a likeness ref)
|
|
10
13
|
*
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
*
|
|
14
|
-
* - Saved character: pass `character_id` (we load the persisted
|
|
15
|
-
* portrait + sheet + pinned seed + voice brief from the DB).
|
|
16
|
-
*
|
|
17
|
-
* One of `photo_url + description` OR `character_id` is required.
|
|
14
|
+
* Action inputs (one or both):
|
|
15
|
+
* - script (what the person says - drives lip-sync and staging)
|
|
16
|
+
* - scene_action (what the person does - for non-speech clips)
|
|
18
17
|
*/
|
|
19
18
|
import { z } from 'zod';
|
|
20
19
|
export declare const V2_SHOT_PRESETS: readonly ["bedroom-morning-ritual", "getting-ready-mirror-edge", "bathroom-skincare-routine", "bedside-lamp-evening", "kitchen-glow-up", "backyard-morning-coffee", "picnic-blanket-outdoor", "car-quick-honest-review", "car-passenger-honest", "outdoor-walking-talking", "couch-haul-show-off", "closet-fit-check", "studio-apartment-tour", "balcony-evening-vibes", "desk-wfh-quick-pitch", "cafe-window-seat", "office-bathroom-discreet", "gym-post-workout", "salon-mirror-result", "travel-hotel-room-review"];
|
|
@@ -23,56 +22,80 @@ export declare const V2_VIBES: readonly ["excited", "calm", "sassy", "serious",
|
|
|
23
22
|
export type V2Vibe = (typeof V2_VIBES)[number];
|
|
24
23
|
export declare const V2_DURATIONS: readonly [5, 10, 15];
|
|
25
24
|
export type V2Duration = (typeof V2_DURATIONS)[number];
|
|
25
|
+
export declare const V2_PHONE_IN_FRAME: readonly ["forbidden", "optional", "required"];
|
|
26
|
+
export type V2PhoneInFrame = (typeof V2_PHONE_IN_FRAME)[number];
|
|
27
|
+
export declare const V2_POLISH_INTENSITIES: readonly ["off", "default", "heavy"];
|
|
28
|
+
export type V2PolishIntensity = (typeof V2_POLISH_INTENSITIES)[number];
|
|
26
29
|
export declare const SelfieSchema: z.ZodEffects<z.ZodObject<{
|
|
27
30
|
character_id: z.ZodOptional<z.ZodString>;
|
|
28
31
|
photo_url: z.ZodOptional<z.ZodString>;
|
|
29
32
|
description: z.ZodOptional<z.ZodString>;
|
|
30
|
-
script: z.ZodString
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
script: z.ZodOptional<z.ZodString>;
|
|
34
|
+
scene_action: z.ZodOptional<z.ZodString>;
|
|
35
|
+
background_music: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodString]>>;
|
|
33
36
|
duration: z.ZodDefault<z.ZodUnion<[z.ZodLiteral<5>, z.ZodLiteral<10>, z.ZodLiteral<15>]>>;
|
|
34
|
-
voice_brief: z.ZodOptional<z.ZodString>;
|
|
35
37
|
subtitles: z.ZodDefault<z.ZodBoolean>;
|
|
38
|
+
shot_preset: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
39
|
+
vibe: z.ZodOptional<z.ZodEnum<["excited", "calm", "sassy", "serious", "curious"]>>;
|
|
40
|
+
camera_locked: z.ZodOptional<z.ZodBoolean>;
|
|
41
|
+
phone_in_frame: z.ZodDefault<z.ZodEnum<["forbidden", "optional", "required"]>>;
|
|
42
|
+
polish: z.ZodOptional<z.ZodEnum<["off", "default", "heavy"]>>;
|
|
36
43
|
}, "strip", z.ZodTypeAny, {
|
|
37
44
|
duration: 5 | 10 | 15;
|
|
38
|
-
script: string;
|
|
39
45
|
subtitles: boolean;
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
phone_in_frame: "forbidden" | "optional" | "required";
|
|
47
|
+
script?: string | undefined;
|
|
42
48
|
description?: string | undefined;
|
|
49
|
+
vibe?: "serious" | "calm" | "excited" | "sassy" | "curious" | undefined;
|
|
43
50
|
character_id?: string | undefined;
|
|
44
51
|
photo_url?: string | undefined;
|
|
45
|
-
|
|
52
|
+
scene_action?: string | undefined;
|
|
53
|
+
background_music?: string | boolean | undefined;
|
|
54
|
+
shot_preset?: string | undefined;
|
|
55
|
+
camera_locked?: boolean | undefined;
|
|
56
|
+
polish?: "off" | "default" | "heavy" | undefined;
|
|
46
57
|
}, {
|
|
47
|
-
script: string;
|
|
48
58
|
duration?: 5 | 10 | 15 | undefined;
|
|
59
|
+
script?: string | undefined;
|
|
49
60
|
subtitles?: boolean | undefined;
|
|
50
61
|
description?: string | undefined;
|
|
51
62
|
vibe?: "serious" | "calm" | "excited" | "sassy" | "curious" | undefined;
|
|
52
63
|
character_id?: string | undefined;
|
|
53
64
|
photo_url?: string | undefined;
|
|
54
|
-
|
|
55
|
-
|
|
65
|
+
scene_action?: string | undefined;
|
|
66
|
+
background_music?: string | boolean | undefined;
|
|
67
|
+
shot_preset?: string | undefined;
|
|
68
|
+
camera_locked?: boolean | undefined;
|
|
69
|
+
phone_in_frame?: "forbidden" | "optional" | "required" | undefined;
|
|
70
|
+
polish?: "off" | "default" | "heavy" | undefined;
|
|
56
71
|
}>, {
|
|
57
72
|
duration: 5 | 10 | 15;
|
|
58
|
-
script: string;
|
|
59
73
|
subtitles: boolean;
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
phone_in_frame: "forbidden" | "optional" | "required";
|
|
75
|
+
script?: string | undefined;
|
|
62
76
|
description?: string | undefined;
|
|
77
|
+
vibe?: "serious" | "calm" | "excited" | "sassy" | "curious" | undefined;
|
|
63
78
|
character_id?: string | undefined;
|
|
64
79
|
photo_url?: string | undefined;
|
|
65
|
-
|
|
80
|
+
scene_action?: string | undefined;
|
|
81
|
+
background_music?: string | boolean | undefined;
|
|
82
|
+
shot_preset?: string | undefined;
|
|
83
|
+
camera_locked?: boolean | undefined;
|
|
84
|
+
polish?: "off" | "default" | "heavy" | undefined;
|
|
66
85
|
}, {
|
|
67
|
-
script: string;
|
|
68
86
|
duration?: 5 | 10 | 15 | undefined;
|
|
87
|
+
script?: string | undefined;
|
|
69
88
|
subtitles?: boolean | undefined;
|
|
70
89
|
description?: string | undefined;
|
|
71
90
|
vibe?: "serious" | "calm" | "excited" | "sassy" | "curious" | undefined;
|
|
72
91
|
character_id?: string | undefined;
|
|
73
92
|
photo_url?: string | undefined;
|
|
74
|
-
|
|
75
|
-
|
|
93
|
+
scene_action?: string | undefined;
|
|
94
|
+
background_music?: string | boolean | undefined;
|
|
95
|
+
shot_preset?: string | undefined;
|
|
96
|
+
camera_locked?: boolean | undefined;
|
|
97
|
+
phone_in_frame?: "forbidden" | "optional" | "required" | undefined;
|
|
98
|
+
polish?: "off" | "default" | "heavy" | undefined;
|
|
76
99
|
}>;
|
|
77
100
|
export type SelfieInput = z.infer<typeof SelfieSchema>;
|
|
78
101
|
//# sourceMappingURL=selfie.d.ts.map
|
package/dist/v2/selfie.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selfie.d.ts","sourceRoot":"","sources":["../../src/v2/selfie.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"selfie.d.ts","sourceRoot":"","sources":["../../src/v2/selfie.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,eAAe,yfAqBlB,CAAC;AACX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,eAAO,MAAM,QAAQ,6DAA8D,CAAC;AACpF,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,eAAO,MAAM,YAAY,sBAAuB,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD,eAAO,MAAM,iBAAiB,gDAAiD,CAAC;AAChF,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,eAAO,MAAM,qBAAqB,sCAAuC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAiBvE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4FrB,CAAC;AAEL,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
package/dist/v2/selfie.js
CHANGED
|
@@ -2,23 +2,24 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* v2 · Selfie input schema.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Generates a 9:16 vertical TikTok-style clip via the Selfie pipeline
|
|
6
|
+
* (orchestration agent -> gpt-image-2 portrait -> gpt-image-2 character
|
|
7
|
+
* sheet -> gpt-image-2 wireframe -> Seedance 2.0 reference-to-video). See
|
|
8
|
+
* services/media-worker-v2/src/v2/selfie-adapter.js.
|
|
7
9
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
10
|
+
* Character inputs (one of):
|
|
11
|
+
* - character_id (reuse saved character)
|
|
12
|
+
* - description (text-only, agent-media paints the character)
|
|
13
|
+
* - description + photo_url (use the user's photo as a likeness ref)
|
|
11
14
|
*
|
|
12
|
-
*
|
|
13
|
-
* -
|
|
14
|
-
*
|
|
15
|
-
* - Saved character: pass `character_id` (we load the persisted
|
|
16
|
-
* portrait + sheet + pinned seed + voice brief from the DB).
|
|
17
|
-
*
|
|
18
|
-
* One of `photo_url + description` OR `character_id` is required.
|
|
15
|
+
* Action inputs (one or both):
|
|
16
|
+
* - script (what the person says - drives lip-sync and staging)
|
|
17
|
+
* - scene_action (what the person does - for non-speech clips)
|
|
19
18
|
*/
|
|
20
19
|
import { z } from 'zod';
|
|
21
|
-
//
|
|
20
|
+
// Re-exported for character.ts (sheet preset default) and the character
|
|
21
|
+
// CLI command. NOT used by the Selfie pipeline - the orchestrator
|
|
22
|
+
// drives composition from the script, not a fixed preset list.
|
|
22
23
|
export const V2_SHOT_PRESETS = [
|
|
23
24
|
'bedroom-morning-ritual',
|
|
24
25
|
'getting-ready-mirror-edge',
|
|
@@ -43,7 +44,17 @@ export const V2_SHOT_PRESETS = [
|
|
|
43
44
|
];
|
|
44
45
|
export const V2_VIBES = ['excited', 'calm', 'sassy', 'serious', 'curious'];
|
|
45
46
|
export const V2_DURATIONS = [5, 10, 15];
|
|
46
|
-
|
|
47
|
+
export const V2_PHONE_IN_FRAME = ['forbidden', 'optional', 'required'];
|
|
48
|
+
export const V2_POLISH_INTENSITIES = ['off', 'default', 'heavy'];
|
|
49
|
+
// shot_preset accepts a registered V2_SHOT_PRESETS key or an escape
|
|
50
|
+
// hatch `custom-scene:<text>` for one-off scenes that don't match the
|
|
51
|
+
// preset library. See realism.js resolveShotBrief() for the runtime.
|
|
52
|
+
const shotPresetSchema = z
|
|
53
|
+
.string()
|
|
54
|
+
.refine((v) => V2_SHOT_PRESETS.includes(v) ||
|
|
55
|
+
v.startsWith('custom-scene:'), {
|
|
56
|
+
message: 'shot_preset must be one of the registered presets, or "custom-scene:<text>"',
|
|
57
|
+
});
|
|
47
58
|
export const SelfieSchema = z
|
|
48
59
|
.object({
|
|
49
60
|
// Character — one path or the other
|
|
@@ -53,29 +64,43 @@ export const SelfieSchema = z
|
|
|
53
64
|
.optional(),
|
|
54
65
|
photo_url: z.string().url().optional(),
|
|
55
66
|
description: z.string().min(8).max(400).optional(),
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
// What is said. Optional - when omitted (or empty) the pipeline
|
|
68
|
+
// produces a non-speech clip from scene_action. At
|
|
69
|
+
// least ONE of script / scene_action must be present.
|
|
70
|
+
script: z.string().max(600).optional(),
|
|
71
|
+
// What the person is doing in the scene. Drives the action_prompt
|
|
72
|
+
// when there is no script (dance, b-roll, ambient clips).
|
|
73
|
+
scene_action: z.string().min(4).max(400).optional(),
|
|
74
|
+
// Background-music direction. `true` for "soft upbeat music, no
|
|
75
|
+
// dialogue", a string for explicit direction ("lo-fi jazz, soft
|
|
76
|
+
// kick"). Appended to the Seedance action_prompt.
|
|
77
|
+
background_music: z.union([z.boolean(), z.string().min(2).max(200)]).optional(),
|
|
61
78
|
duration: z
|
|
62
79
|
.union([z.literal(5), z.literal(10), z.literal(15)])
|
|
63
80
|
.default(10),
|
|
64
|
-
//
|
|
65
|
-
// character record when character_id is used; user can still
|
|
66
|
-
// override per-job.
|
|
67
|
-
voice_brief: z.string().min(4).max(240).optional(),
|
|
68
|
-
// Subtitles
|
|
81
|
+
// Burn Hormozi-style subtitles on the final clip.
|
|
69
82
|
subtitles: z.boolean().default(true),
|
|
83
|
+
// ── Realism opt-in controls (all optional) ─────────────────────────
|
|
84
|
+
// shot_preset / vibe pin the scene composition + energy. When
|
|
85
|
+
// omitted, the orchestrator picks defaults based on the script.
|
|
86
|
+
shot_preset: shotPresetSchema.optional(),
|
|
87
|
+
vibe: z.enum(V2_VIBES).optional(),
|
|
88
|
+
// Default: handheld iPhone feel (the #1 realism cue). Set to true
|
|
89
|
+
// ONLY for product/demo shots where a stable frame is required.
|
|
90
|
+
camera_locked: z.boolean().optional(),
|
|
91
|
+
// Default 'forbidden': no visible phone/camera/selfie-arm unless
|
|
92
|
+
// explicitly requested for a specific composition.
|
|
93
|
+
// 'required' — actively compose with phone covering chin/lower face
|
|
94
|
+
// (the "iPhone-cover trick" — fewer face-render errors).
|
|
95
|
+
// 'forbidden' — strip phone from frame entirely (default behavior).
|
|
96
|
+
phone_in_frame: z.enum(V2_PHONE_IN_FRAME).default('forbidden'),
|
|
97
|
+
// Post-Seedance polish pass (ffmpeg grain + warm grade + vignette).
|
|
98
|
+
// Defaults to 'default'. Set to 'off' to bypass entirely.
|
|
99
|
+
polish: z.enum(V2_POLISH_INTENSITIES).optional(),
|
|
70
100
|
})
|
|
71
101
|
.superRefine((val, ctx) => {
|
|
72
102
|
const hasSavedCharacter = !!val.character_id;
|
|
73
103
|
const hasDescription = !!val.description;
|
|
74
|
-
// Three valid input paths:
|
|
75
|
-
// 1. character_id alone (reuse saved character)
|
|
76
|
-
// 2. description alone (agent-media generates the portrait from text)
|
|
77
|
-
// 3. photo_url + description (use the user's photo as reference)
|
|
78
|
-
// Anything else is rejected.
|
|
79
104
|
if (!hasSavedCharacter && !hasDescription) {
|
|
80
105
|
ctx.addIssue({
|
|
81
106
|
code: z.ZodIssueCode.custom,
|
|
@@ -88,6 +113,21 @@ export const SelfieSchema = z
|
|
|
88
113
|
message: 'Use character_id OR description (+ optional photo_url) — not both.',
|
|
89
114
|
});
|
|
90
115
|
}
|
|
116
|
+
const hasScript = !!val.script && val.script.trim().length >= 4;
|
|
117
|
+
const hasSceneAction = !!val.scene_action && val.scene_action.trim().length >= 4;
|
|
118
|
+
if (!hasScript && !hasSceneAction) {
|
|
119
|
+
ctx.addIssue({
|
|
120
|
+
code: z.ZodIssueCode.custom,
|
|
121
|
+
message: 'Provide either script (what they say) or scene_action (what they do). At least one is required.',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (val.script !== undefined && val.script.length > 0 && val.script.length < 4) {
|
|
125
|
+
ctx.addIssue({
|
|
126
|
+
code: z.ZodIssueCode.custom,
|
|
127
|
+
path: ['script'],
|
|
128
|
+
message: 'script must be at least 4 characters if provided',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
91
131
|
if (val.photo_url && !val.description) {
|
|
92
132
|
ctx.addIssue({
|
|
93
133
|
code: z.ZodIssueCode.custom,
|
package/dist/v2/selfie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selfie.js","sourceRoot":"","sources":["../../src/v2/selfie.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D
|
|
1
|
+
{"version":3,"file":"selfie.js","sourceRoot":"","sources":["../../src/v2/selfie.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentmedia/schema",
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"description": "Type-safe schema definitions for AI UGC video generation
|
|
3
|
+
"version": "0.5.2",
|
|
4
|
+
"description": "Type-safe schema definitions for AI UGC video generation \u2014 enums, Zod validation, and generator registry. Single source of truth for the agent-media platform.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"homepage": "https://agent-media.ai/docs/api-reference",
|
|
@@ -43,6 +43,16 @@
|
|
|
43
43
|
"import": "./dist/v2/index.js"
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc",
|
|
48
|
+
"typecheck": "tsc --noEmit",
|
|
49
|
+
"test": "vitest run",
|
|
50
|
+
"generate:edge-schema": "tsx scripts/generate-edge-schema.ts",
|
|
51
|
+
"generate:openapi": "tsx scripts/generate-openapi.ts",
|
|
52
|
+
"gen:v2-docs": "tsx scripts/generate-v2-docs.ts",
|
|
53
|
+
"check:spec": "tsx scripts/check-spec-freshness.ts",
|
|
54
|
+
"check:sdk-types": "npx openapi-typescript ../../generated/openapi.json -o ../../generated/api-types.d.ts && echo '\u2713 SDK types generated'"
|
|
55
|
+
},
|
|
46
56
|
"dependencies": {
|
|
47
57
|
"zod": "^3.23.0",
|
|
48
58
|
"zod-to-json-schema": "^3.25.2"
|
|
@@ -52,15 +62,5 @@
|
|
|
52
62
|
"tsx": "^4.19.0",
|
|
53
63
|
"typescript": "^5.7.3",
|
|
54
64
|
"vitest": "^3.1.0"
|
|
55
|
-
},
|
|
56
|
-
"scripts": {
|
|
57
|
-
"build": "tsc",
|
|
58
|
-
"typecheck": "tsc --noEmit",
|
|
59
|
-
"test": "vitest run",
|
|
60
|
-
"generate:edge-schema": "tsx scripts/generate-edge-schema.ts",
|
|
61
|
-
"generate:openapi": "tsx scripts/generate-openapi.ts",
|
|
62
|
-
"gen:v2-docs": "tsx scripts/generate-v2-docs.ts",
|
|
63
|
-
"check:spec": "tsx scripts/check-spec-freshness.ts",
|
|
64
|
-
"check:sdk-types": "npx openapi-typescript ../../generated/openapi.json -o ../../generated/api-types.d.ts && echo '✓ SDK types generated'"
|
|
65
65
|
}
|
|
66
|
-
}
|
|
66
|
+
}
|