@koda-sl/baker-cli 0.250.2-dev.e7a1a227e → 0.252.0-dev.e7a1a227e
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/README.md +2 -0
- package/dist/cli.js +15 -5
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5792,6 +5792,8 @@ This CLI is designed for AI agent consumption. Key patterns:
|
|
|
5792
5792
|
- **0.217.0**: new family `baker avatars list|get|create|update|delete`, plus `--avatar <handle>` on `baker studio generate` and `baker studio animate` — company-scoped reusable presenters, typed from the shared `@baker/api` avatars contract. `--avatar` is the way to cast one: it grounds the render on the identity sheet, reuses the subject description verbatim, and records the avatar on the batch. Passing the sheet through `--reference` instead does none of those and leaves the batch unattributed, so the avatar can never show what it has appeared in; the route refuses a handle that is not `ready`, because generating a stranger is worse than an error. `get` returns the sheet URL and that description; every command's `hints` carry the next move (still building → re-check with `get`; changed `--subject` without `--regenerate-sheet` → the sheet is stale). `create` refuses `--source-image` without `--likeness-confirmed` and returns an `error.fix` telling the agent to ask the user for that permission, since only they can give it; an unknown handle returns an `error.fix` pointing at `baker avatars list`. Profile flags on `update` merge over the stored profile instead of replacing it.
|
|
5793
5793
|
|
|
5794
5794
|
- **0.250.1**: `--avatar <handle>` on `baker studio generate` and `baker studio animate` never worked. Both were declared in `registerSchema` and read at the call site, but neither was in the command's own citty `args` — and citty does not reject an undeclared flag, it keeps it and sets it to `true`. So `--avatar elena` reached the route as `avatar: true` with `elena` dropped as a stray positional, and the body schema (`z.string()`) refused it. Documented since 0.217.0, broken since 0.217.0: casting an avatar into a render was not possible from the CLI at all, which is why a clip of a named presenter came back with neither the identity sheet nor the voice. Both flags are now declared. A new test in `command-reference-integrity` compares every registered schema against the args of the command that parses it, so the two cannot drift again — it found a third case on the way, `actions status`, whose schema advertised a `--refs` flag for what the command actually takes as positionals.
|
|
5795
|
+
- **0.251.0**: `--accent` on `baker avatars create|update` — the region an avatar's voice comes from, e.g. `"Spanish from Spain, Madrid accent"`. Its own field rather than a sentence inside `--speech`, because that is where it went to die: asked for "pace, register, accent", the agent wrote *"clear Spanish accent"* for a Madrid presenter, the video model read that as no accent, and the clip came out sounding like nowhere. A place can be checked; an adjective cannot. It reaches the render through `buildDeliveryDirection` as its own `ACCENT:` instruction, and `thinProfileHint` now names it first among the missing fields since it is the only one that fails silently — a clip with no accent still looks finished.
|
|
5796
|
+
- **0.252.0**: avatar voices removed. `--voice-id` / `--voice-description` are gone from `baker avatars create|update`, and an avatar no longer holds a voice at all — every clip is voiced by the video model as it renders, directed by the profile's `--accent`. The picker they replaced offered a voice, played its preview, and then shipped a clip that did not sound like it: the re-voice was speech-to-speech, which replaces timbre and keeps pronunciation, so the accent the user picked could never survive. Three other routes were built and judged on video before removing it — TTS + lip-sync (mouth), audio-driven avatar models (picture), and Seedance 2.5 driven by audio (refuses AI faces). Reasoning and the re-open condition: `docs/adr/0005-an-avatar-is-a-face-not-a-voice.md`.
|
|
5795
5797
|
## Publishing
|
|
5796
5798
|
|
|
5797
5799
|
### Auto-publish (CI)
|
package/dist/cli.js
CHANGED
|
@@ -3682,6 +3682,7 @@ var avatarProfileSchema = z7.object({
|
|
|
3682
3682
|
subjectDescription: z7.string().trim().min(1).max(2e3),
|
|
3683
3683
|
persona: z7.string().trim().max(2e3).optional(),
|
|
3684
3684
|
speech: z7.string().trim().max(2e3).optional(),
|
|
3685
|
+
accent: z7.string().trim().max(2e3).optional(),
|
|
3685
3686
|
motion: z7.string().trim().max(2e3).optional(),
|
|
3686
3687
|
wardrobe: z7.string().trim().max(2e3).optional(),
|
|
3687
3688
|
setting: z7.string().trim().max(2e3).optional(),
|
|
@@ -3697,7 +3698,6 @@ var avatarSummarySchema = z7.object({
|
|
|
3697
3698
|
/** The identity sheet to wire into `--reference`. Absent until the build settles. */
|
|
3698
3699
|
sheetUrl: z7.string().optional(),
|
|
3699
3700
|
coverUrl: z7.string().optional(),
|
|
3700
|
-
hasVoice: z7.boolean(),
|
|
3701
3701
|
errorMessage: z7.string().optional()
|
|
3702
3702
|
});
|
|
3703
3703
|
var avatarDetailSchema = avatarSummarySchema.extend({
|
|
@@ -24488,7 +24488,6 @@ function rosterRow(avatar) {
|
|
|
24488
24488
|
status: avatar.status,
|
|
24489
24489
|
likeness: avatar.likeness,
|
|
24490
24490
|
sheetUrl: avatar.sheetUrl ?? null,
|
|
24491
|
-
hasVoice: avatar.hasVoice,
|
|
24492
24491
|
avatarId: avatar.avatarId,
|
|
24493
24492
|
...avatar.errorMessage ? { errorMessage: avatar.errorMessage } : {}
|
|
24494
24493
|
};
|
|
@@ -24517,11 +24516,11 @@ function rosterHints(roster, statusFilter) {
|
|
|
24517
24516
|
return hints;
|
|
24518
24517
|
}
|
|
24519
24518
|
function thinProfileHint(profile, handle) {
|
|
24520
|
-
const missing = ["motion", "persona", "speech", "wardrobe", "setting"].filter(
|
|
24519
|
+
const missing = ["motion", "persona", "speech", "accent", "wardrobe", "setting"].filter(
|
|
24521
24520
|
(field) => !profile?.[field]?.trim()
|
|
24522
24521
|
);
|
|
24523
24522
|
if (missing.length === 0) return null;
|
|
24524
|
-
return `MISSING ${missing.map((field) => `--${field}`).join(" ")}. A bare subject description holds the face still and nothing else, so clips of @${handle} come out stiff and generic \u2014 measured, filling these in nearly doubled the movement in the same brief. The user almost certainly told you how this person talks and carries themselves; put it in: \`baker avatars update ${handle} ${missing.map((field) => `--${field} "\u2026"`).join(" ")}\`.`;
|
|
24523
|
+
return `MISSING ${missing.map((field) => `--${field}`).join(" ")}. A bare subject description holds the face still and nothing else, so clips of @${handle} come out stiff and generic \u2014 measured, filling these in nearly doubled the movement in the same brief. --accent is the one nobody guesses and the only one that fails silently: it decides the accent the avatar SPEAKS with in every clip, so name the region the user is writing to you from ("Spanish from Spain, Madrid accent") \u2014 "Spanish" on its own renders as no accent at all. The user almost certainly told you how this person talks and carries themselves; put it in: \`baker avatars update ${handle} ${missing.map((field) => `--${field} "\u2026"`).join(" ")}\`.`;
|
|
24525
24524
|
}
|
|
24526
24525
|
function creationHints(created, profile) {
|
|
24527
24526
|
const thin = thinProfileHint(profile, created.handle);
|
|
@@ -24614,6 +24613,7 @@ var TEXT_FIELDS = [
|
|
|
24614
24613
|
["subject", "subjectDescription"],
|
|
24615
24614
|
["persona", "persona"],
|
|
24616
24615
|
["speech", "speech"],
|
|
24616
|
+
["accent", "accent"],
|
|
24617
24617
|
["motion", "motion"],
|
|
24618
24618
|
["wardrobe", "wardrobe"],
|
|
24619
24619
|
["setting", "setting"]
|
|
@@ -24702,7 +24702,12 @@ registerSchema({
|
|
|
24702
24702
|
required: true
|
|
24703
24703
|
},
|
|
24704
24704
|
persona: { type: "string", description: "Who they are on camera \u2014 role, attitude, energy", required: false },
|
|
24705
|
-
speech: { type: "string", description: "How they speak \u2014 pace, register,
|
|
24705
|
+
speech: { type: "string", description: "How they speak \u2014 pace, register, verbal habits", required: false },
|
|
24706
|
+
accent: {
|
|
24707
|
+
type: "string",
|
|
24708
|
+
description: "Where their voice is FROM, as a place: 'Spanish from Spain, Madrid accent', 'Mexican Spanish', 'British English, London'. Name the region \u2014 an adjective like 'clear Spanish accent' is read by the video model as NO accent, and the clip comes out sounding like nowhere. Set it whenever the avatar will speak; the user's own language is the default to assume, not English.",
|
|
24709
|
+
required: false
|
|
24710
|
+
},
|
|
24706
24711
|
motion: { type: "string", description: "Body language and gesture in video", required: false },
|
|
24707
24712
|
wardrobe: { type: "string", description: "Default outfit when the brief does not name one", required: false },
|
|
24708
24713
|
setting: { type: "string", description: "Default surroundings when the brief leaves them open", required: false },
|
|
@@ -24736,6 +24741,11 @@ var createCommand2 = defineCommand89({
|
|
|
24736
24741
|
subject: { type: "string", description: "The person, plainly described \u2014 reused verbatim", required: false },
|
|
24737
24742
|
persona: { type: "string", description: "Who they are on camera", required: false },
|
|
24738
24743
|
speech: { type: "string", description: "How they speak", required: false },
|
|
24744
|
+
accent: {
|
|
24745
|
+
type: "string",
|
|
24746
|
+
description: "Where their voice is FROM \u2014 name the region, e.g. 'Spanish from Spain, Madrid accent'",
|
|
24747
|
+
required: false
|
|
24748
|
+
},
|
|
24739
24749
|
motion: { type: "string", description: "Body language in video", required: false },
|
|
24740
24750
|
wardrobe: { type: "string", description: "Default outfit", required: false },
|
|
24741
24751
|
setting: { type: "string", description: "Default surroundings", required: false },
|