Replace Comfy YuE with standalone YuEGP profile 1

This commit is contained in:
Towsty
2026-09-07 20:24:47 -05:00
parent eeff12cdab
commit c2b6032e49
33 changed files with 976 additions and 294 deletions
+1
View File
@@ -5,6 +5,7 @@ import type { ImageV2PresetSettings } from '~/utils/imageV2'
export type GenerationPresetKind = 'video' | 'image' | 'imagev2' | 'music'
export type MusicPresetSettings = {
yueProfile?: 1 | 3
tags?: string
lyrics?: string
instrumental?: boolean
+4 -2
View File
@@ -284,6 +284,7 @@ export function clipSettingsRows(clip: {
}
export function trackSettingsRows(track: {
yueProfile?: 1 | 3
tags?: string
lyrics?: string
duration?: number
@@ -310,8 +311,9 @@ export function trackSettingsRows(track: {
const rounded = Math.round(track.duration * 10) / 10
rows.push({ label: 'Duration', value: Number.isInteger(rounded) ? `${rounded}s` : `${rounded.toFixed(1)}s` })
}
if (track.steps != null) rows.push({ label: 'Steps', value: String(track.steps) })
if (track.cfg != null) rows.push({ label: 'CFG', value: formatNum(track.cfg) })
if (track.yueProfile != null) rows.push({ label: 'YuEGP profile', value: String(track.yueProfile) })
if (track.yueProfile == null && track.steps != null) rows.push({ label: 'Steps', value: String(track.steps) })
if (track.yueProfile == null && track.cfg != null) rows.push({ label: 'CFG', value: formatNum(track.cfg) })
if (track.samplerName) rows.push({ label: 'Sampler', value: track.samplerName })
if (track.scheduler) rows.push({ label: 'Scheduler', value: track.scheduler })
if (track.lyricsStrength != null) rows.push({ label: 'Lyric strength', value: formatNum(track.lyricsStrength) })
+2 -3
View File
@@ -104,9 +104,8 @@ export function countYueLyricSections(lyrics: unknown) {
export function yueLyricsProblem(lyrics: unknown): string | null {
const text = String(lyrics || '').trim()
if (!text) return 'YuE needs lyrics with section tags like [Verse 1] and [Chorus].'
if (countYueLyricSections(text) < 1) {
return 'YuE lyrics must include at least one [Section] tag (use the chips under Lyrics).'
}
const sections = [...text.matchAll(/\[([^\]]+)\]\s*([^\[]*)/gs)].filter(match => match[2].trim())
if (sections.length !== 1) return 'YuEGP needs exactly one non-empty lyric section. Combine the lyrics under one heading.'
return null
}
+3 -1
View File
@@ -22,6 +22,7 @@ export type QueuedShotDraft = import('~/utils/imageIterations').ImageIteration &
}
export type QueuedInspectPayload = {
yueProfile?: 1 | 3
prompt?: string
promptMid?: string
promptPre?: string
@@ -227,7 +228,8 @@ export function queuedJobPresetBody(job: QueuedInspectJob, name: string) {
steps: clampMusicSteps(payload.steps),
seed: payload.seed,
cfg: payload.cfg,
engine: payload.musicEngine || payload.engine
engine: payload.musicEngine || payload.engine,
yueProfile: payload.yueProfile
}
}
}