makaron-persona-look-cli 0.5.0 → 0.5.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/README.md CHANGED
@@ -47,7 +47,7 @@ Once setup and `remote doctor` succeed, an Agent can fulfill a request such as
47
47
  personlib remote render --brief '20 秒嘻哈说唱女 rapper 舞台视频,红黑街头风、宽松工装、强节奏' --output-dir ./personlib-turnaround --json
48
48
  ```
49
49
 
50
- This is a paid external generation action: the Agent must first have working Makaron authentication and receive explicit approval to spend credits. The result is `turnaround.png` (or `.jpg`/`.webp`), plus `turnaround-plan.json`, `prompt_used.md`, and `qc_report.md`. The CLI never automatically retries a paid job. Use `--dry-run` to inspect the exact prompt and matching IDs without downloading inputs or submitting anything, or `--no-wait` to keep the returned Makaron run ID for later retrieval.
50
+ This is a paid external generation action: the Agent must first have working Makaron authentication and receive explicit approval to spend credits. The result is `turnaround.png` (or `.jpg`/`.webp`), plus `turnaround-plan.json`, `prompt_used.md`, and `qc_report.md`. The CLI removes only brand identifiers: visible logos, wordmarks, brand names, protected monograms, recognizable trademark symbols, and brand/team crests. Ordinary stripes, numbers, abstract graphics, and shoe construction remain part of the Look. The CLI never automatically retries a paid job. Use `--dry-run` to inspect the exact prompt and matching IDs without downloading inputs or submitting anything, or `--no-wait` to keep the returned Makaron run ID for later retrieval.
51
51
 
52
52
  For a free reference-only check, retain the explicit preview command:
53
53
 
@@ -262,6 +262,8 @@ function providerImages(payload) {
262
262
  return [...new Map(images.map((item) => [item.url, item])).values()];
263
263
  }
264
264
 
265
+ const BRAND_IDENTIFIER_REMOVAL_CONTRACT = "Brand identifier removal: preserve the Look's silhouette, palette, material, styling energy, decorative stripes, abstract graphics, non-brand numbers, and ordinary shoe construction. Remove only a visible logo, wordmark, brand name, protected monogram, recognizable trademark symbol, or brand/team crest, replacing it with blank fabric or an original non-brand detail. Do not add any recognizable trademark symbol or branded text. If an element is not a brand identifier, retain it rather than simplifying the styling.";
266
+
265
267
  function turnaroundPrompt(payload) {
266
268
  if (!payload?.render_brief) throw new Error("remote selection did not include a render brief");
267
269
  return [
@@ -270,6 +272,7 @@ function turnaroundPrompt(payload) {
270
272
  "Layout: three equal vertical panels at identical scale: left is straight-on front view, center is exact right-side profile, right is back view. Show head-to-toe including both shoes in every panel.",
271
273
  "Identity rule: the Persona reference is the only identity reference. Preserve the same adult facial structure, skin traits, stable marks, apparent age, hairline, build, and proportions in all three panels. Never use the Look-reference face.",
272
274
  "Look rule: use the Look reference only for the selected outfit, hairstyle, makeup, accessories, palette, and material direction. Keep the exact same clothing, footwear, hairstyle, and accessories in every panel. Ignore any scene, person, text, logo, or watermark in the Look reference.",
275
+ BRAND_IDENTIFIER_REMOVAL_CONTRACT,
273
276
  "Use a seamless neutral light-grey studio background, even lighting, fixed eye-level camera, natural relaxed standing pose, clean anatomy, and no props.",
274
277
  "No text, labels, watermark, source logos, team marks, celebrity likenesses, or recognizable brand elements."
275
278
  ].join(" ");
@@ -298,6 +301,7 @@ async function renderTurnaround(args, output) {
298
301
  project: getOption(args, "--project") || "auto",
299
302
  output_dir: outputDir,
300
303
  source_policy: "persona-is-the-only-identity-reference",
304
+ brand_identifier_policy: "remove-identifiers-only",
301
305
  prompt
302
306
  };
303
307
  if (has(args, "--dry-run")) {
@@ -320,7 +324,7 @@ async function renderTurnaround(args, output) {
320
324
  const runId = providerRunId(submitted);
321
325
  const submission = { run_id: runId, project_id: providerBody(submitted).projectId || providerBody(submitted).project_id, project_url: providerBody(submitted).projectUrl || providerBody(submitted).project_url };
322
326
  if (has(args, "--no-wait")) {
323
- writeFileSync(join(outputDir, "qc_report.md"), `# QC report\n\n- State: PENDING_VISUAL_QC\n- Run ID: ${runId}\n- Requested asset: front-side-back turnaround sheet\n`, "utf8");
327
+ writeFileSync(join(outputDir, "qc_report.md"), `# QC report\n\n- State: PENDING_VISUAL_QC\n- Run ID: ${runId}\n- Requested asset: front-side-back turnaround sheet\n- Required check: no logo, wordmark, brand name, protected monogram, recognizable trademark symbol, or brand/team crest. Preserve ordinary stripes, numbers, abstract graphics, and shoe construction.\n`, "utf8");
324
328
  jsonOutput({ ok: true, submitted: true, render: { ...plan, ...submission, qc_state: "PENDING_VISUAL_QC" } }, output, args);
325
329
  return;
326
330
  }
@@ -333,7 +337,7 @@ async function renderTurnaround(args, output) {
333
337
  const media = await fetch(images[0].url);
334
338
  if (!media.ok) throw new Error(`Makaron image download failed (${media.status})`);
335
339
  writeFileSync(finalPath, Buffer.from(await media.arrayBuffer()));
336
- writeFileSync(join(outputDir, "qc_report.md"), `# QC report\n\n- State: PENDING_VISUAL_QC\n- Run ID: ${runId}\n- Asset: ${basename(finalPath)}\n- Required check: one adult Persona identity across front, exact side, and back views; one unchanged Look; no source Look face, logos, or text.\n- Retry policy: no automatic reroll.\n`, "utf8");
340
+ writeFileSync(join(outputDir, "qc_report.md"), `# QC report\n\n- State: PENDING_VISUAL_QC\n- Run ID: ${runId}\n- Asset: ${basename(finalPath)}\n- Required check: one adult Persona identity across front, exact side, and back views; one unchanged Look; no source Look face, logo, wordmark, brand name, protected monogram, recognizable trademark symbol, or brand/team crest. Preserve ordinary stripes, numbers, abstract graphics, and shoe construction.\n- Retry policy: no automatic reroll.\n`, "utf8");
337
341
  jsonOutput({ ok: true, render: { ...plan, ...submission, status: body.status || "completed", qc_state: "PENDING_VISUAL_QC", files: { turnaround: finalPath, plan: join(outputDir, "turnaround-plan.json"), prompt: join(outputDir, "prompt_used.md"), qc_report: join(outputDir, "qc_report.md") } } }, output, args);
338
342
  }
339
343
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makaron-persona-look-cli",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Portable Persona and Look library for Makaron agents",
5
5
  "private": false,
6
6
  "type": "module",
@@ -29,6 +29,6 @@ Any enrolled OpenClaw Agent may use credentialed `remote doctor`, `remote recomm
29
29
 
30
30
  ## Current local-admin milestone
31
31
 
32
- The current package supports local Persona and Look intake, list, show, integrity validation, `recommend --brief TEXT`, `fetch --brief TEXT --output-dir PATH`, and `compose --persona P-xxx --look L-xxx`; it also ships the remote Worker/client implementation. The remote commands need a deployed private Worker and a successful top-level `setup` before use; do not claim that the current host is live until `remote doctor` succeeds against its Worker URL. `remote render` obtains the selected private inputs just in time, calls Makaron with the Persona as the sole identity reference, and asks for one neutral-studio front/right-side/back turnaround. It keeps internal inputs in `_internal_references/` for traceability but only the finished turnaround is customer-ready. Reject an output that is not one three-view adult turnaround, mixes identities or Looks, uses the Look source face, or includes source text/logos. Record `PASS`, `REROLL`, or `BLOCKED`; do not submit a hidden retry.
32
+ The current package supports local Persona and Look intake, list, show, integrity validation, `recommend --brief TEXT`, `fetch --brief TEXT --output-dir PATH`, and `compose --persona P-xxx --look L-xxx`; it also ships the remote Worker/client implementation. The remote commands need a deployed private Worker and a successful top-level `setup` before use; do not claim that the current host is live until `remote doctor` succeeds against its Worker URL. `remote render` obtains the selected private inputs just in time, calls Makaron with the Persona as the sole identity reference, and asks for one neutral-studio front/right-side/back turnaround. It retains the Look's silhouette, palette, materials, energy, ordinary stripes, numbers, abstract graphics, and shoe construction. It removes only brand identifiers: logos, wordmarks, brand names, protected monograms, recognizable trademark symbols, and brand/team crests. It keeps internal inputs in `_internal_references/` for traceability but only the finished turnaround is customer-ready. Reject an output that is not one three-view adult turnaround, mixes identities or Looks, uses the Look source face, or includes a brand identifier. Record `PASS`, `REROLL`, or `BLOCKED`; do not submit a hidden retry.
33
33
 
34
34
  When a source has preppy, uniform-adjacent, or youth-coded styling, store only an adult office-core/editorial interpretation. Do not use a student identity, school context, or sexualized youth styling.