fix(realtime-canvas): enforce sketch-preserving i2i defaults
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-02-25 15:58:20 +08:00
parent 80e826039f
commit f25cfd3fab
3 changed files with 20 additions and 21 deletions

View File

@ -36,9 +36,9 @@ const defaultConfig = {
model: {
id: "runware:101@1",
defaults: {
steps: 4,
cfgScale: 3.5,
strength: 0.85,
steps: 8,
cfgScale: 6,
strength: 0.4,
imageSize: "square" as const,
},
limits: {
@ -117,21 +117,18 @@ export async function GET() {
defaultConfig.model.limits.steps.min,
defaultConfig.model.limits.steps.max
);
const legacyScheduleMu = Number(config.defaults?.scheduleMu);
const cfgScaleBase = Number(
config.defaults?.cfgScale ??
(Number.isFinite(legacyScheduleMu) ? legacyScheduleMu * 2.5 : defaultConfig.model.defaults.cfgScale)
);
const cfgScale = clamp(
Number(
config.defaults?.cfgScale ??
config.defaults?.scheduleMu ??
defaultConfig.model.defaults.cfgScale
),
cfgScaleBase,
defaultConfig.model.limits.cfgScale.min,
defaultConfig.model.limits.cfgScale.max
);
const strength = clamp(
Number(
config.defaults?.strength ??
config.defaults?.feedback ??
defaultConfig.model.defaults.strength
),
Number(config.defaults?.strength ?? defaultConfig.model.defaults.strength),
defaultConfig.model.limits.strength.min,
defaultConfig.model.limits.strength.max
);

View File

@ -115,23 +115,24 @@ export async function POST(request: Request) {
const maxInputResolution = clamp(Number(config.maxInputResolution || 1024), 512, 1536);
const size = resolveSquareSize(body.imageSize, maxInputResolution);
const steps = clamp(
Number(body.steps || config.defaults?.steps || 4),
Number(body.steps || config.defaults?.steps || 8),
1,
8
);
const cfgScale = clamp(
Number(body.cfgScale || config.defaults?.cfgScale || 3.5),
Number(body.cfgScale || config.defaults?.cfgScale || 6),
1,
12
);
const strength = clamp(
Number(body.strength || config.defaults?.strength || 0.85),
Number(body.strength || config.defaults?.strength || 0.4),
0.05,
1
);
const positivePrompt =
String(body.prompt || "").trim() || "将草图渲染为高质感产品设计图,保持结构和主轮廓一致。";
String(body.prompt || "").trim() ||
"严格按照输入草图生成:保持主体轮廓、位置、比例和数量一致,只做材质与光影细化;禁止改变构图,禁止新增无关背景纹理。";
const requestInference = async (modelId: string) => {
const taskUUID = crypto.randomUUID();

View File

@ -67,7 +67,8 @@ type RealtimeCanvasDialogProps = {
onApplyResult: (payload: { imageUrl: string; prompt: string }) => void;
};
const FALLBACK_PROMPT = "将草图渲染为高质感产品设计图,保持结构和主轮廓一致。";
const FALLBACK_PROMPT =
"严格按照输入草图生成:保持主体轮廓、位置、比例和数量一致,只做材质与光影细化;禁止改变构图,禁止新增无关背景纹理。";
const CANVAS_BACKGROUND = "#ffffff";
const BRUSH_COLOR_PRESETS = [
"#18181b",
@ -91,9 +92,9 @@ const defaultRealtimeConfig: RealtimeConfig = {
model: {
id: "runware:101@1",
defaults: {
steps: 4,
cfgScale: 3.5,
strength: 0.85,
steps: 8,
cfgScale: 6,
strength: 0.4,
imageSize: "square",
},
},