@koda-sl/baker-cli 0.297.0-dev.306c0952c → 0.298.0-dev.52a1f12f8

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
@@ -38984,6 +38984,12 @@ registerSchema({
38984
38984
  required: false,
38985
38985
  description: "Cast this avatar as the ad's recurring person \u2014 the same flag, the same word and the same meaning as on `baker studio generate` and `baker studio animate`. Every beat they appear in is grounded on their identity sheet and their subject description is copied verbatim, so it is one face throughout and the same face as the rest of the company's work. Overrides `cast.avatar` in the spec. `baker avatars list` shows who there is."
38986
38986
  },
38987
+ "no-brand": {
38988
+ type: "boolean",
38989
+ description: "Build the ad with no logo and no closing card. For a company that has no mark yet, or an ad they asked to keep plain. Never a way past a missing file: if they HAVE a logo, put it in src/brand/logos/ instead \u2014 an ad wearing a drawn or stand-in mark is a different company's ad.",
38990
+ required: false,
38991
+ default: false
38992
+ },
38987
38993
  "video-model": {
38988
38994
  type: "string",
38989
38995
  required: false,
@@ -39015,6 +39021,12 @@ var scaffoldAdCommand = defineCommand111({
39015
39021
  required: false,
39016
39022
  description: "Which curated video model renders the shots. Defaults to the one the lane picks; pass this only to compare models on the same brief, because mixing models across a campaign changes how the same face reads. `baker canvas catalog` lists what each one takes."
39017
39023
  },
39024
+ "no-brand": {
39025
+ type: "boolean",
39026
+ required: false,
39027
+ default: false,
39028
+ description: "Build the ad with no logo and no closing card. For a company with no mark yet, or an ad they asked to keep plain \u2014 never a way past a missing file."
39029
+ },
39018
39030
  slug: {
39019
39031
  type: "string",
39020
39032
  required: false,
@@ -39153,19 +39165,20 @@ var scaffoldAdCommand = defineCommand111({
39153
39165
  }
39154
39166
  const resolvedLogo = spec.data.brand?.logo?.trim();
39155
39167
  const logoExists = resolvedLogo ? await stat4(resolvedLogo).then(() => true, () => false) : false;
39156
- if (!logoExists) {
39168
+ const noBrand = Boolean(args["no-brand"]);
39169
+ if (!logoExists && !noBrand) {
39157
39170
  writeJson({
39158
39171
  ok: false,
39159
39172
  error: {
39160
39173
  code: "VALIDATION_ERROR",
39161
39174
  message: resolvedLogo ? `The brand mark at \`${resolvedLogo}\` does not exist, so this ad has no logo to put on screen.` : `This company has no brand mark in \`${BRAND_DIR}/logos/\`, so an ad cannot carry its logo.`,
39162
- fix: `Put the client's real mark in \`${BRAND_DIR}/logos/\` \u2014 an SVG is best, a PNG is fine \u2014 and run this again. Ask them for it if you have to; do NOT draw one, and do not pass a placeholder. The mark is drawn on every frame and on the closing card, so a stand-in ships an ad wearing the wrong brand.`
39175
+ fix: `Put the client's real mark in \`${BRAND_DIR}/logos/\` \u2014 an SVG is best, a PNG is fine \u2014 and run this again. Ask them for it if you have to; do NOT draw one, and do not pass a placeholder. The mark is drawn on every frame and on the closing card, so a stand-in ships an ad wearing the wrong brand. If this ad genuinely carries no brand \u2014 they have no logo yet, or they asked for it plain \u2014 pass \`--no-brand\` and say in your reply that it went out unbranded.`
39163
39176
  }
39164
39177
  });
39165
39178
  process.exit(1);
39166
39179
  return;
39167
39180
  }
39168
- if (resolvedLogo?.toLowerCase().endsWith(".svg")) {
39181
+ if (!noBrand && resolvedLogo?.toLowerCase().endsWith(".svg")) {
39169
39182
  const svg = await readFile16(resolvedLogo, "utf-8").catch(() => null);
39170
39183
  if (svg === null) {
39171
39184
  writeJson({
@@ -39289,6 +39302,9 @@ var scaffoldAdCommand = defineCommand111({
39289
39302
  ok: true,
39290
39303
  data: { canvas: outPath, beats: spec.data.beats.length, slug },
39291
39304
  hints: [
39305
+ ...noBrand ? [
39306
+ "Built with NO brand mark and no closing card, because you passed --no-brand. Say that in your reply: the user is getting an unbranded ad and should know it, not discover it. When they do have a logo, put it in `src/brand/logos/` and re-run without the flag."
39307
+ ] : [],
39292
39308
  // Same reasoning as `studio animate`: a cast avatar that speaks routes to the
39293
39309
  // default model on purpose, and pinning one discards that silently. An ad's
39294
39310
  // beats always speak, so there is no silent case to exclude here.