import { generateCharacterVisualCandidates } from '../asset-studio/characterAssetWorkflowPersistence'; import type { CharacterVisualDraft } from '../asset-studio/characterAssetWorkflowPersistence'; import { roleAssetStudioPublishClient } from './roleAssetStudioPublishClient'; import type { EditableCustomWorldRole } from './roleAssetStudioModel'; export function useRoleVisualCandidateWorkflow() { const generateVisualCandidatesForRole = async (params: { promptText: string; referenceImageDataUrls: string[]; role: EditableCustomWorldRole; sourceMode: 'text-to-image' | 'image-to-image'; }) => { const { promptText, referenceImageDataUrls, role, sourceMode, } = params; return generateCharacterVisualCandidates({ characterId: role.id, sourceMode, promptText, referenceImageDataUrls, candidateCount: 1, imageModel: 'wan2.7-image-pro', size: '1024*1024', }); }; const applyVisualDraftToRole = async (params: { draft: CharacterVisualDraft; promptText: string; role: EditableCustomWorldRole; sourceMode: 'text-to-image' | 'image-to-image'; }) => { const { draft, promptText, role, sourceMode } = params; return roleAssetStudioPublishClient.publishCharacterVisualAsset({ characterId: role.id, sourceMode, promptText, selectedPreviewSource: draft.imageSrc, previewSources: [draft.imageSrc], width: draft.width, height: draft.height, updateCharacterOverride: false, }); }; return { applyVisualDraftToRole, generateVisualCandidatesForRole, }; }