{"record":{"id":"a2f8bfe3ab627d8b","repo":"pbakaus/impeccable","slug":"embed-prompt-prompt-too-long-for-a-jpeg-segment","errorCode":null,"errorMessage":"embed-prompt: prompt too long for a JPEG segment\n","messagePattern":"embed-prompt: prompt too long for a JPEG segment\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/context/src/embed_prompt.rs","lineNumber":321,"sourceCode":"                o.extend_from_slice(&body);\n                o.extend_from_slice(&text_chunk);\n                o.extend_from_slice(&png_chunk(b\"IEND\", &[]));\n                o\n            } else {\n                let mut o = buf[..iend].to_vec();\n                o.extend_from_slice(&text_chunk);\n                o.extend_from_slice(&buf[iend..]);\n                o\n            };\n            let _ = std::fs::write(&file_abs, out);\n            io.out(&format!(\"EMBEDDED: {} (png tEXt, {} chars)\\n\", file, plen));\n            0\n        } else if jpeg {\n            let mut seg = KEYWORD.to_vec();\n            seg.push(0);\n            seg.extend_from_slice(prompt.as_bytes());\n            if seg.len() + 2 > 0xffff {\n                io.err(\"embed-prompt: prompt too long for a JPEG segment\\n\");\n                return 1;\n            }\n            let mut com = vec![0xff, 0xfe];\n            com.extend_from_slice(&((seg.len() + 2) as u16).to_be_bytes());\n            com.extend_from_slice(&seg);\n            let mut out = buf[..2].to_vec();\n            out.extend_from_slice(&com);\n            out.extend_from_slice(&buf[2..]);\n            let _ = std::fs::write(&file_abs, out);\n            io.out(&format!(\"EMBEDDED: {} (jpeg COM, {} chars)\\n\", file, plen));\n            0\n        } else {\n            let mut m = Map::new();\n            m.insert(\"prompt\".into(), Value::String(prompt));\n            m.insert(\"createdAt\".into(), Value::String(iso_now()));\n            let _ = std::fs::write(&sidecar_abs, json_pretty(&Value::Object(m)));\n            io.out(&format!(\"EMBEDDED: {} (sidecar fallback for this format)\\n\", sidecar));\n            0","sourceCodeStart":303,"sourceCodeEnd":339,"githubUrl":"https://github.com/pbakaus/impeccable/blob/2bc2879276c1f321a53c4ca99d3371e411329b52/crates/context/src/embed_prompt.rs#L303-L339","documentation":"JPEG embedding uses a COM marker segment whose length field is 16-bit (max 0xffff bytes). If keyword + NUL + prompt exceeds the segment capacity, the CLI refuses and exits 1 rather than producing a corrupt JPEG.","triggerScenarios":"Running `embed-prompt --image photo.jpg --prompt <very long text>` where the prompt (plus 1-byte keyword and separator) makes the COM segment exceed 65535 bytes.","commonSituations":"Embedding entire system-prompt transcripts or very long generation configs into JPEGs; PNG has no such limit but JPEG does.","solutions":["Shorten the prompt text before embedding into a JPEG.","Embed into PNG instead (PNG tEXt has no 64KB segment limit) if the long prompt is required.","Store the full prompt in a sidecar file and embed only a short reference."],"exampleFix":"// before\nimpeccable embed-prompt --image photo.jpg --prompt \"$(cat huge-transcript.txt)\"\n// after\nhead -c 60000 huge-transcript.txt > short.txt\nimpeccable embed-prompt --image photo.jpg --prompt \"$(cat short.txt)\"","handlingStrategy":"validation","validationCode":"const KEYWORD = 'prompt'; if (Buffer.byteLength(KEYWORD) + 1 + Buffer.byteLength(prompt) + 2 > 0xffff) { throw new Error('prompt too long for JPEG COM segment'); }","typeGuard":null,"tryCatchPattern":"try { embedPrompt(jpeg, prompt); } catch (e) { if (/too long/.test(e.message)) prompt = prompt.slice(0, 60000); }","preventionTips":["Keep embedded prompts under ~60KB for JPEG targets","Use PNG when embedding long prompts","Store oversized prompts in sidecar files"],"tags":["cli","jpeg","size-limit","prompt"],"backgroundTag":"payload-too-large","analyzedSha":"2bc2879276c1f321a53c4ca99d3371e411329b52","analyzedAt":"2026-09-08T04:51:14.109Z","contentChangedAt":"2026-09-08T04:51:14.109Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}