feat(cycler): add preset strength scale (#865)

This commit is contained in:
Will Miao
2026-04-01 11:05:38 +08:00
parent f3b3e0adad
commit 14cb7fec47
14 changed files with 446 additions and 138 deletions

View File

@@ -79,6 +79,8 @@ describe('useLoraCyclerState', () => {
model_strength: 1.0,
clip_strength: 1.0,
use_same_clip_strength: true,
use_preset_strength: false,
preset_strength_scale: 1.0,
sort_by: 'filename',
current_lora_name: '',
current_lora_filename: '',
@@ -340,7 +342,8 @@ describe('useLoraCyclerState', () => {
baseModels: ['SD 1.5'],
tags: { include: [], exclude: [] },
folders: { include: [], exclude: [] },
license: { noCreditRequired: false, allowSelling: false }
license: { noCreditRequired: false, allowSelling: false },
namePatterns: { include: [], exclude: [], useRegex: false }
}
})
@@ -349,7 +352,8 @@ describe('useLoraCyclerState', () => {
baseModels: ['SDXL'],
tags: { include: [], exclude: [] },
folders: { include: [], exclude: [] },
license: { noCreditRequired: false, allowSelling: false }
license: { noCreditRequired: false, allowSelling: false },
namePatterns: { include: [], exclude: [], useRegex: false }
}
})
@@ -540,7 +544,8 @@ describe('useLoraCyclerState', () => {
baseModels: ['SDXL'],
tags: { include: [], exclude: [] },
folders: { include: [], exclude: [] },
license: { noCreditRequired: false, allowSelling: false }
license: { noCreditRequired: false, allowSelling: false },
namePatterns: { include: [], exclude: [], useRegex: false }
}
})

View File

@@ -16,6 +16,8 @@ export function createMockCyclerConfig(overrides: Partial<CyclerConfig> = {}): C
model_strength: 1.0,
clip_strength: 1.0,
use_same_clip_strength: true,
use_preset_strength: false,
preset_strength_scale: 1.0,
sort_by: 'filename',
current_lora_name: 'lora1.safetensors',
current_lora_filename: 'lora1.safetensors',
@@ -26,7 +28,7 @@ export function createMockCyclerConfig(overrides: Partial<CyclerConfig> = {}): C
is_paused: false,
include_no_lora: false,
...overrides
}
} as CyclerConfig
}
/**
@@ -42,7 +44,8 @@ export function createMockPoolConfig(overrides: Partial<LoraPoolConfig> = {}): L
license: {
noCreditRequired: false,
allowSelling: false
}
},
namePatterns: { include: [], exclude: [], useRegex: false }
},
preview: { matchCount: 10, lastUpdated: Date.now() },
...overrides
@@ -148,7 +151,8 @@ export const SAMPLE_POOL_CONFIGS = {
baseModels: ['SD 1.5'],
tags: { include: [], exclude: [] },
folders: { include: [], exclude: [] },
license: { noCreditRequired: false, allowSelling: false }
license: { noCreditRequired: false, allowSelling: false },
namePatterns: { include: [], exclude: [], useRegex: false }
}
}),
@@ -158,7 +162,8 @@ export const SAMPLE_POOL_CONFIGS = {
baseModels: ['SDXL'],
tags: { include: [], exclude: [] },
folders: { include: [], exclude: [] },
license: { noCreditRequired: false, allowSelling: false }
license: { noCreditRequired: false, allowSelling: false },
namePatterns: { include: [], exclude: [], useRegex: false }
}
}),
@@ -168,7 +173,8 @@ export const SAMPLE_POOL_CONFIGS = {
baseModels: ['SD 1.5'],
tags: { include: ['anime', 'style'], exclude: ['realistic'] },
folders: { include: [], exclude: [] },
license: { noCreditRequired: false, allowSelling: false }
license: { noCreditRequired: false, allowSelling: false },
namePatterns: { include: [], exclude: [], useRegex: false }
}
}),

View File

@@ -4,17 +4,13 @@
* These tests simulate ComfyUI's execution modes to verify correct LoRA cycling behavior.
*/
import { describe, it, expect, beforeEach, vi } from 'vitest'
import { describe, it, expect, beforeEach } from 'vitest'
import { useLoraCyclerState } from '@/composables/useLoraCyclerState'
import type { CyclerConfig } from '@/composables/types'
import {
createMockWidget,
createMockCyclerConfig,
createMockLoraList,
createMockPoolConfig
} from '../fixtures/mockConfigs'
import { setupFetchMock, resetFetchMock } from '../setup'
import { BatchQueueSimulator, IndexTracker } from '../utils/BatchQueueSimulator'
import { resetFetchMock } from '../setup'
import { BatchQueueSimulator } from '../utils/BatchQueueSimulator'
/**
* Creates a test harness that mimics the LoraCyclerWidget's behavior

View File

@@ -27,7 +27,7 @@ export interface SimulatorOptions {
/**
* Creates execution output based on the current state
*/
function defaultGenerateOutput(executionIndex: number, config: CyclerConfig) {
function defaultGenerateOutput(_executionIndex: number, config: CyclerConfig) {
// Calculate what the next index would be after this execution
let nextIdx = (config.execution_index ?? config.current_index) + 1
if (nextIdx > config.total_count) {