Wire Qwen Edit Start still to image_1 and PE-I2I identity keep.
Edit no longer invents strangers when the prompt omits <image1> or PE drops image tokens; Hero stays Klein-only. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -40,7 +40,10 @@ export function validateRequest(raw, xaigen = false) {
|
||||
if (Array.isArray(raw.batch) && raw.batch.length>30) fail('A batch supports up to 31 shots including the first prompt.')
|
||||
if (Array.isArray(raw.guides) && raw.guides.length>8) fail('Use up to eight guide stills.')
|
||||
if (!raw.folderId) fail('Choose a folder.')
|
||||
if (['edit','compose','refine'].includes(mode) && !raw.imageAId && !(mode==='edit' && engine==='flux' && raw.identityStillId)) fail('Choose the source still.')
|
||||
if (['edit','compose','refine'].includes(mode) && !raw.imageAId && !(mode==='edit' && engine==='flux' && raw.identityStillId)) {
|
||||
if (engine === 'qwen21') fail('Qwen Edit requires Start still (image_1). Hero is ignored.')
|
||||
fail('Choose the source still.')
|
||||
}
|
||||
if ((video || ['edit','compose','iterate'].includes(mode)) && engine !== 'qwen21' && (raw.lockFace !== false || raw.lockOutfit !== false) && !raw.identityStillId && (video || !raw.imageAId)) fail('Choose a sticky hero still.')
|
||||
if (mode === 'compose' && !raw.imageBId) fail('Compose requires a second still.')
|
||||
if (mode === 'refine' && !raw.maskId) fail('Refine requires a mask.')
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
/** Qwen Edit / PE-I2I prompt helpers. Start still = <image1>; Hero is never a slot. */
|
||||
|
||||
export const QWEN21_EDIT_KEEP =
|
||||
'Keep the identity, face, body, and pose of the person in <image1>.'
|
||||
|
||||
export const QWEN21_EDIT_KEEP_CHANGE =
|
||||
`${QWEN21_EDIT_KEEP} Apply only this change:`
|
||||
|
||||
/** User omitted <image1> — prepend the keep-identity instruction once. */
|
||||
export function ensureQwen21EditPrompt(prompt) {
|
||||
const text = String(prompt || '').trim()
|
||||
if (!text) return text
|
||||
if (/<image1>/i.test(text)) return text
|
||||
return `${QWEN21_EDIT_KEEP_CHANGE} ${text}`.trim()
|
||||
}
|
||||
|
||||
/**
|
||||
* After PE-I2I: if the rewrite dropped every <imageN> token, stitch the
|
||||
* keep-identity line onto the rewrite (do not discard the rewrite).
|
||||
*/
|
||||
export function stitchQwen21PeEditPrompt(rewritten) {
|
||||
const text = String(rewritten || '').trim()
|
||||
if (!text) return text
|
||||
if (/<image\d+>/i.test(text)) return text
|
||||
return `${QWEN21_EDIT_KEEP} ${text}`.trim()
|
||||
}
|
||||
Reference in New Issue
Block a user