Make Studio 2 the home bench with YuE2 music, LTX, and per-preview hide.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -74,8 +74,6 @@ async function prepareGraph(r: any) {
|
||||
|
||||
let graph: any;
|
||||
if (['video', 'extend'].includes(q.mode)) {
|
||||
if (q.engine !== 'minimax')
|
||||
throw new Error('Studio 2 native identity video currently requires MiniMax. Use the existing xAIGen studio for LTX.');
|
||||
let start = a;
|
||||
if (q.startClipId) {
|
||||
const dir = join(studio2Root(), r.id);
|
||||
@@ -86,14 +84,46 @@ async function prepareGraph(r: any) {
|
||||
start = await upload(r, 'start', readFileSync(dest));
|
||||
unlinkSync(dest);
|
||||
}
|
||||
const end = await load(q.endStillId, 'end'), guides = [];
|
||||
for (const [i, g] of q.guides.entries())
|
||||
guides.push({ image: await load(g.stillId, `guide${i}`), frame: g.frame });
|
||||
graph = nativeVideoGraph(template, q, { hero, start, end, guides }, prefix);
|
||||
await ensureComfyLoraNames('video');
|
||||
resolveGraphLoraNames(graph, 'video');
|
||||
applyUserLoraToGraph(graph, s.loraStack);
|
||||
r.graphId = 'studio2_minimax_native.json';
|
||||
if (q.engine === 'ltx') {
|
||||
const { buildWorkflow } = await import('../workflow');
|
||||
const { frameLength } = await import('../videoChain');
|
||||
const { ltxWorkflowEnabled, LTX_DISABLED_MESSAGE } = await import('~/utils/videoModels');
|
||||
if (!ltxWorkflowEnabled()) throw new Error(LTX_DISABLED_MESSAGE);
|
||||
if (!start) throw new Error('Choose a start still for LTX video.');
|
||||
const fps = s.fps || 24;
|
||||
graph = buildWorkflow({
|
||||
workflow: 'ltx',
|
||||
imageName: start,
|
||||
prompt: q.compiledPrompt,
|
||||
width: s.width,
|
||||
height: s.height,
|
||||
length: frameLength(s.duration || 5, fps),
|
||||
fps,
|
||||
steps: s.steps,
|
||||
cfg: s.cfg,
|
||||
seed: s.seed,
|
||||
samplerName: 'euler',
|
||||
scheduler: 'simple',
|
||||
turbo: false,
|
||||
duration: s.duration || 5,
|
||||
filenamePrefix: prefix + '/video',
|
||||
loraStack: s.loraStack,
|
||||
useIdentityRefs: false
|
||||
});
|
||||
await ensureComfyLoraNames('video');
|
||||
r.graphId = 'workflow_ltx_video.json';
|
||||
} else {
|
||||
if (q.engine !== 'minimax')
|
||||
throw new Error('Studio 2 video supports MiniMax H3 and LTX (xAIGen).');
|
||||
const end = await load(q.endStillId, 'end'), guides = [];
|
||||
for (const [i, g] of q.guides.entries())
|
||||
guides.push({ image: await load(g.stillId, `guide${i}`), frame: g.frame });
|
||||
graph = nativeVideoGraph(template, q, { hero, start, end, guides }, prefix);
|
||||
await ensureComfyLoraNames('video');
|
||||
resolveGraphLoraNames(graph, 'video');
|
||||
applyUserLoraToGraph(graph, s.loraStack);
|
||||
r.graphId = 'studio2_minimax_native.json';
|
||||
}
|
||||
}
|
||||
else {
|
||||
const mode = identityPlan?.mode ?? (q.mode === 'iterate' ? (a ? 'edit' : 'generate') : q.mode);
|
||||
|
||||
Reference in New Issue
Block a user