Implement scene-based chapter quest progression
Some checks failed
CI / verify (push) Has been cancelled
Some checks failed
CI / verify (push) Has been cancelled
This commit is contained in:
120
src/tools/qwenSpriteSheetToolPersistence.ts
Normal file
120
src/tools/qwenSpriteSheetToolPersistence.ts
Normal file
@@ -0,0 +1,120 @@
|
||||
import { parseApiErrorMessage } from '../editor/shared/jsonClient';
|
||||
|
||||
const QWEN_SPRITE_MASTER_API_PATH = '/api/qwen-sprite/master';
|
||||
const QWEN_SPRITE_SHEET_API_PATH = '/api/qwen-sprite/sheet';
|
||||
const QWEN_SPRITE_FRAME_REPAIR_API_PATH = '/api/qwen-sprite/frame-repair';
|
||||
const QWEN_SPRITE_SAVE_API_PATH = '/api/qwen-sprite/save';
|
||||
|
||||
export type QwenSpriteImageDraft = {
|
||||
id: string;
|
||||
label: string;
|
||||
imageSrc: string;
|
||||
remoteUrl?: string;
|
||||
};
|
||||
|
||||
export type GenerateQwenSpritePayload = {
|
||||
promptText: string;
|
||||
negativePrompt: string;
|
||||
model: string;
|
||||
size: string;
|
||||
promptExtend: boolean;
|
||||
candidateCount: number;
|
||||
seed?: number;
|
||||
referenceImages: string[];
|
||||
};
|
||||
|
||||
export type RepairQwenSpriteFramePayload = {
|
||||
promptText: string;
|
||||
negativePrompt: string;
|
||||
model: string;
|
||||
size: string;
|
||||
promptExtend: boolean;
|
||||
seed?: number;
|
||||
referenceImages: string[];
|
||||
};
|
||||
|
||||
export type SaveQwenSpriteAssetPayload = {
|
||||
assetKey: string;
|
||||
actionKey: string;
|
||||
masterSource: string;
|
||||
sheetSource: string;
|
||||
framesDataUrls: string[];
|
||||
metadata: Record<string, unknown>;
|
||||
prompts: Record<string, unknown>;
|
||||
};
|
||||
|
||||
async function postJson<T>(
|
||||
url: string,
|
||||
payload: Record<string, unknown>,
|
||||
fallbackMessage: string,
|
||||
) {
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
const responseText = await response.text();
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(parseApiErrorMessage(responseText, fallbackMessage));
|
||||
}
|
||||
|
||||
return JSON.parse(responseText) as T;
|
||||
}
|
||||
|
||||
export async function generateQwenSpriteMaster(
|
||||
payload: GenerateQwenSpritePayload,
|
||||
) {
|
||||
return postJson<{
|
||||
ok: true;
|
||||
draftId: string;
|
||||
drafts: QwenSpriteImageDraft[];
|
||||
model: string;
|
||||
size: string;
|
||||
promptText: string;
|
||||
negativePrompt: string;
|
||||
}>(QWEN_SPRITE_MASTER_API_PATH, payload, '生成主图失败');
|
||||
}
|
||||
|
||||
export async function generateQwenSpriteSheet(
|
||||
payload: GenerateQwenSpritePayload,
|
||||
) {
|
||||
return postJson<{
|
||||
ok: true;
|
||||
draftId: string;
|
||||
drafts: QwenSpriteImageDraft[];
|
||||
model: string;
|
||||
size: string;
|
||||
promptText: string;
|
||||
negativePrompt: string;
|
||||
}>(QWEN_SPRITE_SHEET_API_PATH, payload, '生成精灵表失败');
|
||||
}
|
||||
|
||||
export async function repairQwenSpriteFrame(
|
||||
payload: RepairQwenSpriteFramePayload,
|
||||
) {
|
||||
return postJson<{
|
||||
ok: true;
|
||||
draftId: string;
|
||||
drafts: QwenSpriteImageDraft[];
|
||||
repairedFrame: QwenSpriteImageDraft | null;
|
||||
model: string;
|
||||
size: string;
|
||||
promptText: string;
|
||||
negativePrompt: string;
|
||||
}>(QWEN_SPRITE_FRAME_REPAIR_API_PATH, payload, '修复帧失败');
|
||||
}
|
||||
|
||||
export async function saveQwenSpriteAsset(
|
||||
payload: SaveQwenSpriteAssetPayload,
|
||||
) {
|
||||
return postJson<{
|
||||
ok: true;
|
||||
assetId: string;
|
||||
assetDir: string;
|
||||
masterImagePath: string | null;
|
||||
sheetImagePath: string;
|
||||
framePaths: string[];
|
||||
saveMessage: string;
|
||||
}>(QWEN_SPRITE_SAVE_API_PATH, payload, '保存精灵表失败');
|
||||
}
|
||||
Reference in New Issue
Block a user