Files
makelore/shared/image-prompt-museum.ts
inman 26b52d76e3
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled
feat: 完善图像工作区与创作工具体验
2026-08-16 14:08:27 +08:00

115 lines
2.2 KiB
TypeScript

/**
* Shared contract for the server-backed Prompt Museum.
*
* The renderer never bundles the museum dataset. It only receives these
* records through the Main-owned Host API boundary.
*/
export const IMAGE_PROMPT_MUSEUM_API_PATH = '/api/works/image-prompt-museum';
export const PROMPT_MUSEUM_CATEGORY_GROUPS = [
'use_case',
'style',
'subject',
] as const;
export type PromptMuseumCategoryGroup = typeof PROMPT_MUSEUM_CATEGORY_GROUPS[number];
export type PromptMuseumCategory = {
id: string;
name: string;
group: PromptMuseumCategoryGroup;
};
export type PromptMuseumFacet = {
id: string;
name: string;
count?: number;
};
export type PromptMuseumFacets = {
useCases: PromptMuseumFacet[];
styles: PromptMuseumFacet[];
subjects: PromptMuseumFacet[];
};
export type PromptMuseumAuthor = {
name: string;
url?: string | null;
};
export type PromptMuseumSource = {
name: string;
url: string;
};
export type PromptMuseumLicense = {
name: string;
url?: string | null;
attributionText: string;
};
export type PromptMuseumAttribution = {
author: PromptMuseumAuthor;
source: PromptMuseumSource;
license: PromptMuseumLicense;
};
export type PromptMuseumModel = {
id: string;
name: string;
};
export type PromptMuseumImage = {
url: string;
width: number;
height: number;
alt: string;
};
export type PromptMuseumVariable = {
name: string;
label: string;
defaultValue?: string | null;
required: boolean;
};
export type PromptMuseumCard = {
id: string;
slug: string;
title: string;
summary: string;
thumbnail: PromptMuseumImage;
categories: PromptMuseumCategory[];
model: PromptMuseumModel;
language: string;
attribution: PromptMuseumAttribution;
publishedAt: string;
updatedAt: string;
};
export type PromptMuseumEntry = PromptMuseumCard & {
prompt: string;
variables: PromptMuseumVariable[];
images: PromptMuseumImage[];
requiresReferenceImages: boolean;
};
export type PromptMuseumListQuery = {
q?: string;
useCase?: string;
style?: string;
subject?: string;
language?: string;
model?: string;
cursor?: string;
limit?: number;
};
export type PromptMuseumPage = {
items: PromptMuseumCard[];
facets: PromptMuseumFacets;
nextCursor: string | null;
total?: number;
};