60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
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: {
|
|
characterBriefText: string;
|
|
promptText: string;
|
|
referenceImageDataUrls: string[];
|
|
role: EditableCustomWorldRole;
|
|
sourceMode: 'text-to-image' | 'image-to-image';
|
|
}) => {
|
|
const {
|
|
characterBriefText,
|
|
promptText,
|
|
referenceImageDataUrls,
|
|
role,
|
|
sourceMode,
|
|
} = params;
|
|
|
|
return generateCharacterVisualCandidates({
|
|
characterId: role.id,
|
|
sourceMode,
|
|
promptText,
|
|
characterBriefText,
|
|
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,
|
|
};
|
|
}
|