Keep last-frame continuity when character stills are attached.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Towsty
2026-08-30 08:21:57 -05:00
co-authored by Cursor
parent 5d828afbd7
commit 0fa64ea765
10 changed files with 29 additions and 51 deletions
+4 -4
View File
@@ -11,13 +11,13 @@ export function identityBoilerplate(extraRefs: number | number[] = 0) {
const secondary = extras.length === 0
? ''
: extras.length === 1
? ` <Picture ${extras[0]}> is another view of that same person for identity only, not a second character.`
: ` ${extras.map(n => `<Picture ${n}>`).join(' and ')} are extra views of that same person for identity only, not additional characters.`
return `<Picture 1> is the identity lock for a single main subject: exact face, hair, body, and clothing.${secondary} Do not spawn extra people from reference stills. If this subject leaves the frame, they must return as the same person from <Picture 1>.`
? ` <Picture ${extras[0]}> is that same person for face, hair, and body only — not a second character and not a wardrobe change.`
: ` ${extras.map(n => `<Picture ${n}>`).join(' and ')} are extra views of that same person for face, hair, and body only — not additional characters and not a wardrobe change.`
return `<Picture 1> is the current frame: keep this pose, clothes, place, and who is in shot. Do not reset the outfit to an earlier still.${secondary} Do not spawn extra people from reference stills. If this subject leaves the frame, they return as the person from the extra stills, wearing whatever Picture 1 already shows.`
}
export function looksLikeIdentityPrompt(text: string) {
return /^<Picture 1> is the (identity lock|primary identity anchor|exact facial identity)/i.test(String(text || '').trim())
return /^<Picture 1> is the (current frame|identity lock|primary identity anchor|exact facial identity)/i.test(String(text || '').trim())
}
export function buildIdentityPrompt(actionPrompt: string, extraRefs: number | number[] = 0) {