Add a Scale to 1 MP toggle on image edit before Klein.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+44
-3
@@ -621,6 +621,25 @@
|
||||
<p class="text-xs text-zinc-500">Flux.2 Klein 9B. Shares the desktop GPU with video.</p>
|
||||
<div class="max-w-md space-y-2">
|
||||
<LoraSelect v-model="imageLoraStack" :names="imageLoraOptions" label="LoRA" empty-label="None" compact />
|
||||
<label class="flex cursor-pointer items-center gap-2 text-xs text-zinc-400">
|
||||
<span class="relative inline-flex h-5 w-9 shrink-0 items-center">
|
||||
<input v-model="editScaleToTotalPixels" type="checkbox" class="peer sr-only" role="switch" aria-label="Scale to 1 MP">
|
||||
<span class="absolute inset-0 rounded-full bg-zinc-700 transition peer-checked:bg-amber-400" />
|
||||
<span class="absolute left-0.5 top-0.5 h-4 w-4 rounded-full bg-white transition peer-checked:translate-x-4" />
|
||||
</span>
|
||||
<span>Scale to 1 MP</span>
|
||||
<input
|
||||
v-if="editScaleToTotalPixels"
|
||||
v-model.number="editScaleMegapixels"
|
||||
type="number"
|
||||
:min="IMAGE_SCALE_MP_MIN"
|
||||
:max="IMAGE_SCALE_MP_MAX"
|
||||
:step="IMAGE_SCALE_MP_STEP"
|
||||
class="w-16 rounded-lg border border-white/10 bg-zinc-950 px-2 py-1 text-xs outline-none ring-amber-300/40 focus:ring-2"
|
||||
aria-label="Megapixels"
|
||||
@change="onEditScaleMegapixels"
|
||||
>
|
||||
</label>
|
||||
<GenerationPresetBar
|
||||
:presets="imageGenerationPresets"
|
||||
v-model:selected-id="imagePresetId"
|
||||
@@ -660,7 +679,7 @@
|
||||
<input v-model="seedInput" class="w-full rounded-xl border border-white/10 bg-zinc-950 px-3 py-2 text-sm" placeholder="random">
|
||||
</label>
|
||||
</div>
|
||||
<p class="text-xs text-zinc-500">Graph default is 20 steps, CFG 1, euler. CFG 0–20 (0.1 steps), steps 1–50. A second still switches the two-image branch on.</p>
|
||||
<p class="text-xs text-zinc-500">Graph default is 20 steps, CFG 1, euler. CFG 0–20 (0.1 steps), steps 1–50. A second still switches the two-image branch on. Scale to 1 MP runs Scale Image to Total Pixels (lanczos) on both stills before Klein.</p>
|
||||
</div>
|
||||
|
||||
<details v-if="studioMode === 'video'" class="rounded-2xl border border-white/10 bg-zinc-950/40 px-4 py-3">
|
||||
@@ -1627,11 +1646,15 @@ import {
|
||||
} from '~/utils/loras'
|
||||
import {
|
||||
clampImageCfg,
|
||||
clampImageScaleMegapixels,
|
||||
clampImageSteps,
|
||||
clampVideoCfg,
|
||||
IMAGE_CFG_MAX,
|
||||
IMAGE_CFG_MIN,
|
||||
IMAGE_CFG_STEP,
|
||||
IMAGE_SCALE_MP_MAX,
|
||||
IMAGE_SCALE_MP_MIN,
|
||||
IMAGE_SCALE_MP_STEP,
|
||||
IMAGE_STEPS_MAX,
|
||||
IMAGE_STEPS_MIN,
|
||||
VIDEO_CFG_MAX,
|
||||
@@ -1895,6 +1918,8 @@ const editLockedSave = ref(false)
|
||||
const editSteps = ref(20)
|
||||
const editCfg = ref(1)
|
||||
const editNegative = ref('')
|
||||
const editScaleToTotalPixels = ref(false)
|
||||
const editScaleMegapixels = ref(1)
|
||||
const editRefFile = ref<File | null>(null)
|
||||
const editRefPreview = ref('')
|
||||
const editChainStep = ref(1)
|
||||
@@ -2891,6 +2916,10 @@ function onEditCfgNumber() {
|
||||
editCfg.value = clampImageCfg(editCfg.value)
|
||||
}
|
||||
|
||||
function onEditScaleMegapixels() {
|
||||
editScaleMegapixels.value = clampImageScaleMegapixels(editScaleMegapixels.value)
|
||||
}
|
||||
|
||||
function onCfgSlider(event: Event) {
|
||||
cfgTouched.value = true
|
||||
cfg.value = clampCfg(Number((event.target as HTMLInputElement).value))
|
||||
@@ -2967,7 +2996,9 @@ function currentPresetSnapshot() {
|
||||
settings: {
|
||||
steps: clampImageSteps(editSteps.value),
|
||||
cfg: clampImageCfg(editCfg.value),
|
||||
negative: editNegative.value
|
||||
negative: editNegative.value,
|
||||
scaleToTotalPixels: editScaleToTotalPixels.value,
|
||||
scaleMegapixels: clampImageScaleMegapixels(editScaleMegapixels.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2993,10 +3024,18 @@ function applyGenerationPreset(preset: GenerationPreset) {
|
||||
const skipped = preset.loraStack.length - stack.length
|
||||
if (preset.kind === 'image') {
|
||||
imageLoraStack.value = stack
|
||||
const settings = preset.settings as { steps?: number; cfg?: number; negative?: string }
|
||||
const settings = preset.settings as {
|
||||
steps?: number
|
||||
cfg?: number
|
||||
negative?: string
|
||||
scaleToTotalPixels?: boolean
|
||||
scaleMegapixels?: number
|
||||
}
|
||||
if (typeof settings.steps === 'number') editSteps.value = clampImageSteps(settings.steps)
|
||||
if (typeof settings.cfg === 'number') editCfg.value = clampImageCfg(settings.cfg)
|
||||
if (typeof settings.negative === 'string') editNegative.value = settings.negative
|
||||
editScaleToTotalPixels.value = settings.scaleToTotalPixels === true
|
||||
editScaleMegapixels.value = clampImageScaleMegapixels(settings.scaleMegapixels)
|
||||
imagePresetId.value = preset.id
|
||||
imagePresetName.value = preset.name
|
||||
} else {
|
||||
@@ -4645,6 +4684,8 @@ async function editImage() {
|
||||
body.append('negative', editNegative.value)
|
||||
body.append('steps', String(clampImageSteps(editSteps.value)))
|
||||
body.append('cfg', String(clampImageCfg(editCfg.value)))
|
||||
body.append('scaleToTotalPixels', String(editScaleToTotalPixels.value))
|
||||
body.append('scaleMegapixels', String(clampImageScaleMegapixels(editScaleMegapixels.value)))
|
||||
body.append('seed', seedInput.value || 'random')
|
||||
body.append('folderId', folderId.value)
|
||||
body.append('hideInput', String(showPrivacyToggles.value && hideInputPreview.value))
|
||||
|
||||
Reference in New Issue
Block a user