@koda-sl/baker-cli 0.248.0 → 0.249.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/dist/cli.js
CHANGED
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
ulid,
|
|
59
59
|
validateCanvasDeep,
|
|
60
60
|
ytDlpBlockSignal
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-VLNO5AUC.js";
|
|
62
62
|
import {
|
|
63
63
|
csvOrJson,
|
|
64
64
|
daysAgoIso,
|
|
@@ -20292,10 +20292,7 @@ var adSetWriteArgs = {
|
|
|
20292
20292
|
"daily-budget": { type: "string", description: "Daily budget (ABO; omit if the campaign uses CBO)" },
|
|
20293
20293
|
"lifetime-budget": { type: "string", description: "Lifetime budget (needs --end)" },
|
|
20294
20294
|
"bid-amount": { type: "string", description: "Bid amount (required for COST_CAP / bid-cap strategies)" },
|
|
20295
|
-
"bid-strategy": {
|
|
20296
|
-
type: "string",
|
|
20297
|
-
description: "LOWEST_COST_WITHOUT_CAP (auto-bid) | LOWEST_COST_WITH_BID_CAP | COST_CAP \u2014 needs --bid-amount. Omit and Baker sets auto-bid; never leave it to Meta, whose default is a bid cap that then fails without an amount."
|
|
20298
|
-
},
|
|
20295
|
+
"bid-strategy": { type: "string", description: "Bid strategy override" },
|
|
20299
20296
|
currency: { type: "string", description: "3-letter currency (defaults to the account currency)" },
|
|
20300
20297
|
start: { type: "string", description: "Start time" },
|
|
20301
20298
|
end: { type: "string", description: "End time" },
|
|
@@ -24449,7 +24446,8 @@ import { defineCommand as defineCommand94 } from "citty";
|
|
|
24449
24446
|
import { defineCommand as defineCommand89 } from "citty";
|
|
24450
24447
|
|
|
24451
24448
|
// src/commands/avatars/casting.ts
|
|
24452
|
-
var
|
|
24449
|
+
var CAST_FLAG_RULE = "Cast with `--avatar <handle>` on `baker studio generate` and `baker studio animate`. Do NOT hand-roll it by pasting `subjectDescription` into the prompt or by passing the sheet through `--reference` \u2014 both render something that merely resembles them. `--avatar` is also the ONLY thing that carries their pinned VOICE and how they speak into a clip; without it the video model invents a different voice, and no later step can put theirs back.";
|
|
24450
|
+
var VERBATIM_RULE = "When you do write the description yourself \u2014 a canvas node, a landing image, anywhere `--avatar` does not exist \u2014 copy `subjectDescription` VERBATIM, word for word. Re-phrasing it per generation is the other reason a face drifts across a set.";
|
|
24453
24451
|
var VIDEO_ROUTING = "In video, a photoreal presenter renders on `google/veo-3.1` (or `google/veo-3.1-fast`), never `bytedance/seedance-2.0` \u2014 it refuses photoreal human faces, AI-generated ones included. Scaffolding a video creative: `baker canvas scaffold-video \u2026 --real-face`.";
|
|
24454
24452
|
function castingHints(avatar) {
|
|
24455
24453
|
if (avatar.status === "generating") {
|
|
@@ -24473,7 +24471,8 @@ function castingHints(avatar) {
|
|
|
24473
24471
|
];
|
|
24474
24472
|
}
|
|
24475
24473
|
return [
|
|
24476
|
-
`Ready to cast
|
|
24474
|
+
`Ready to cast: \`baker studio generate "<your scene>" --avatar ${avatar.handle}\` for a still, \`baker studio animate "<the motion, and the line they say>" --avatar ${avatar.handle}\` for a clip.`,
|
|
24475
|
+
CAST_FLAG_RULE,
|
|
24477
24476
|
VERBATIM_RULE,
|
|
24478
24477
|
VIDEO_ROUTING
|
|
24479
24478
|
];
|
|
@@ -24513,10 +24512,19 @@ function rosterHints(roster, statusFilter) {
|
|
|
24513
24512
|
}
|
|
24514
24513
|
return hints;
|
|
24515
24514
|
}
|
|
24516
|
-
function
|
|
24515
|
+
function thinProfileHint(profile, handle) {
|
|
24516
|
+
const missing = ["motion", "persona", "speech", "wardrobe", "setting"].filter(
|
|
24517
|
+
(field) => !profile?.[field]?.trim()
|
|
24518
|
+
);
|
|
24519
|
+
if (missing.length === 0) return null;
|
|
24520
|
+
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(" ")}\`.`;
|
|
24521
|
+
}
|
|
24522
|
+
function creationHints(created, profile) {
|
|
24523
|
+
const thin = thinProfileHint(profile, created.handle);
|
|
24517
24524
|
const hints = [
|
|
24525
|
+
...thin ? [thin] : [],
|
|
24518
24526
|
...castingHints({ handle: created.handle, status: created.status }),
|
|
24519
|
-
`Once it is ready,
|
|
24527
|
+
`Once it is ready, cast it with \`--avatar ${created.handle}\` on \`baker studio generate\` / \`baker studio animate\` \u2014 that flag is what grounds the render on its identity sheet and, for a clip, what makes it speak in this avatar's own voice.`
|
|
24520
24528
|
];
|
|
24521
24529
|
if (created.likeness === "licensed") {
|
|
24522
24530
|
hints.push(
|
|
@@ -24786,7 +24794,7 @@ var createCommand2 = defineCommand89({
|
|
|
24786
24794
|
...chatIdFromEnv() ? { chatId: chatIdFromEnv() } : {}
|
|
24787
24795
|
};
|
|
24788
24796
|
const data = await writeAvatars("/api/avatars", body);
|
|
24789
|
-
writeJson({ ok: true, data, hints: creationHints(data) });
|
|
24797
|
+
writeJson({ ok: true, data, hints: creationHints(data, body.profile) });
|
|
24790
24798
|
} catch (err) {
|
|
24791
24799
|
failAvatarApi(err, handle);
|
|
24792
24800
|
}
|