Add sidecar Qwen VL prompt recommend, fix queued shot bursts, and leave unused MiniMax identity slots empty.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -11,13 +11,13 @@ export function identityBoilerplate(extraRefs: number | number[] = 0) {
|
||||
const secondary = extras.length === 0
|
||||
? ''
|
||||
: extras.length === 1
|
||||
? ` <Picture ${extras[0]}> is a secondary reference angle for profile details.`
|
||||
: ` ${extras.map(n => `<Picture ${n}>`).join(' and ')} are secondary reference angles for profile features only.`
|
||||
return `<Picture 1> is the primary identity anchor defining exact facial geometry, hairstyle, and body proportions.${secondary} Strictly maintain the structural proportions of <Picture 1> with high fidelity when moving.`
|
||||
? ` <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>.`
|
||||
}
|
||||
|
||||
export function looksLikeIdentityPrompt(text: string) {
|
||||
return /^<Picture 1> is the (primary identity anchor|exact facial identity)/i.test(String(text || '').trim())
|
||||
return /^<Picture 1> is the (identity lock|primary identity anchor|exact facial identity)/i.test(String(text || '').trim())
|
||||
}
|
||||
|
||||
export function buildIdentityPrompt(actionPrompt: string, extraRefs: number | number[] = 0) {
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
export function parseEditPasses(text: string): string[] | null {
|
||||
const src = String(text || '').replace(/\r\n/g, '\n')
|
||||
const marker = /^[ \t]*---pass\s+(\d+)---[ \t]*$/gim
|
||||
const markers = [...src.matchAll(marker)]
|
||||
if (!markers.length) return null
|
||||
const parts: string[] = []
|
||||
const preamble = src.slice(0, markers[0].index || 0).trim()
|
||||
for (let i = 0; i < markers.length; i++) {
|
||||
const from = (markers[i].index || 0) + markers[i][0].length
|
||||
const to = i + 1 < markers.length ? (markers[i + 1].index || src.length) : src.length
|
||||
const body = src.slice(from, to).trim()
|
||||
if (body) parts.push(body)
|
||||
}
|
||||
if (!parts.length) return null
|
||||
if (preamble && preamble.length > 40) {
|
||||
parts[0] = `${preamble}\n\n${parts[0]}`
|
||||
}
|
||||
return parts
|
||||
}
|
||||
|
||||
export function looksLikeShotScript(text: string) {
|
||||
return /^[ \t]*shot\s+[2-9]\d*\b/im.test(String(text || ''))
|
||||
}
|
||||
Reference in New Issue
Block a user