Files
Genarrative/src/tools/qwenSpriteSheetToolPersistence.ts
2026-04-10 15:37:02 +08:00

114 lines
2.7 KiB
TypeScript

import {
ASSET_API_PATHS,
postApiJson,
} from '../editor/shared/editorApiClient';
const QWEN_SPRITE_MASTER_API_PATH = ASSET_API_PATHS.qwenSpriteMaster;
const QWEN_SPRITE_SHEET_API_PATH = ASSET_API_PATHS.qwenSpriteSheet;
const QWEN_SPRITE_FRAME_REPAIR_API_PATH =
ASSET_API_PATHS.qwenSpriteFrameRepair;
const QWEN_SPRITE_SAVE_API_PATH = ASSET_API_PATHS.qwenSpriteSave;
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,
) {
return postApiJson<T>(url, payload, fallbackMessage);
}
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, '保存精灵表失败');
}