From 0bc8643b51ca7f07762a286e33e374da9c8e8c32 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Sep 2026 00:11:15 +0000 Subject: [PATCH] Sync generated provider output --- .agents/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .claude/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .cursor/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .gemini/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .github/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .grok/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .hermes/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .kiro/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .opencode/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .pi/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .qoder/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .rovodev/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .trae-cn/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .trae/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- .vibe/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- plugin/skills/impeccable/scripts/generate-image.mjs | 7 +++++-- 16 files changed, 80 insertions(+), 32 deletions(-) diff --git a/.agents/skills/impeccable/scripts/generate-image.mjs b/.agents/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.agents/skills/impeccable/scripts/generate-image.mjs +++ b/.agents/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.claude/skills/impeccable/scripts/generate-image.mjs b/.claude/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.claude/skills/impeccable/scripts/generate-image.mjs +++ b/.claude/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.cursor/skills/impeccable/scripts/generate-image.mjs b/.cursor/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.cursor/skills/impeccable/scripts/generate-image.mjs +++ b/.cursor/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.gemini/skills/impeccable/scripts/generate-image.mjs b/.gemini/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.gemini/skills/impeccable/scripts/generate-image.mjs +++ b/.gemini/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.github/skills/impeccable/scripts/generate-image.mjs b/.github/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.github/skills/impeccable/scripts/generate-image.mjs +++ b/.github/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.grok/skills/impeccable/scripts/generate-image.mjs b/.grok/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.grok/skills/impeccable/scripts/generate-image.mjs +++ b/.grok/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.hermes/skills/impeccable/scripts/generate-image.mjs b/.hermes/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.hermes/skills/impeccable/scripts/generate-image.mjs +++ b/.hermes/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.kiro/skills/impeccable/scripts/generate-image.mjs b/.kiro/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.kiro/skills/impeccable/scripts/generate-image.mjs +++ b/.kiro/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.opencode/skills/impeccable/scripts/generate-image.mjs b/.opencode/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.opencode/skills/impeccable/scripts/generate-image.mjs +++ b/.opencode/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.pi/skills/impeccable/scripts/generate-image.mjs b/.pi/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.pi/skills/impeccable/scripts/generate-image.mjs +++ b/.pi/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.qoder/skills/impeccable/scripts/generate-image.mjs b/.qoder/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.qoder/skills/impeccable/scripts/generate-image.mjs +++ b/.qoder/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.rovodev/skills/impeccable/scripts/generate-image.mjs b/.rovodev/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.rovodev/skills/impeccable/scripts/generate-image.mjs +++ b/.rovodev/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.trae-cn/skills/impeccable/scripts/generate-image.mjs b/.trae-cn/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.trae-cn/skills/impeccable/scripts/generate-image.mjs +++ b/.trae-cn/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.trae/skills/impeccable/scripts/generate-image.mjs b/.trae/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.trae/skills/impeccable/scripts/generate-image.mjs +++ b/.trae/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/.vibe/skills/impeccable/scripts/generate-image.mjs b/.vibe/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/.vibe/skills/impeccable/scripts/generate-image.mjs +++ b/.vibe/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`); diff --git a/plugin/skills/impeccable/scripts/generate-image.mjs b/plugin/skills/impeccable/scripts/generate-image.mjs index 1bf97ecaf..c6ba5d393 100644 --- a/plugin/skills/impeccable/scripts/generate-image.mjs +++ b/plugin/skills/impeccable/scripts/generate-image.mjs @@ -431,12 +431,15 @@ fs.writeFileSync(out, Buffer.from(b64, 'base64')); // The prompt travels with the asset: embedded in the file itself (EXIF-class // metadata via embed-prompt.mjs) so intent survives copies across harnesses, // plus a sidecar for anything that indexes rather than opens the image. +let embedded = false; try { const { spawnSync } = await import('node:child_process'); - spawnSync(process.execPath, [new URL('./embed-prompt.mjs', import.meta.url).pathname, out, '--prompt', prompt], { stdio: 'ignore' }); + const result = spawnSync(process.execPath, [fileURLToPath(new URL('./embed-prompt.mjs', import.meta.url)), out, '--prompt', prompt], { stdio: 'ignore' }); + embedded = !result.error && result.status === 0; + if (!embedded) console.warn('generate-image: failed to embed prompt in the image'); fs.writeFileSync(`${out}.json`, JSON.stringify({ prompt, createdAt: new Date().toISOString(), tool: 'generate-image.mjs', model: 'gpt-image-2', ...(refs.length ? { refs } : {}) }, null, 2)); } catch { /* embedding is best-effort */ } -console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); prompt embedded + sidecar at ${out}.json`); +console.log(`IMAGE: ${out} (${size}, ${quality}, gpt-image-2, billed to your OpenAI key); ${embedded ? 'prompt embedded + sidecar' : 'sidecar'} at ${out}.json`); if (plateCtx && plateCtx.chroma) { const frac = await keyChroma(out, plateCtx.chroma); console.log(`PLATE-CHROMA keyed ${(frac * 100).toFixed(0)}% of pixels to alpha (${plateCtx.chroma}); place with a plain over the page's own ground, no background on the plate. If the keyed fraction is under 20% the generator ignored the key: regenerate with --no-chroma and use mix-blend-mode: multiply instead.`);