import { ThumbnailCache, type Thumbnails } from './thumbnails.js'; import type { TreatmentProgress } from './treatment.js'; import type { VeniceClient } from '../venice/client.js'; import type { AestheticProfile } from '../storyboard/prompt-builder.js'; import type { Character, EpisodeScript, Location, SeriesState } from '../series/types.js'; export interface WorkshopInputs { objective: string; targetDuration: string; audience: string; mustInclude: string; avoid: string; references: string; delivery: 'standard' | '4k'; referenceSources?: WorkshopReferenceSource[]; } export interface WorkshopReferenceSource { path: string; kind: 'text' | 'image' | 'video' | 'audio' | 'other'; sizeBytes: number; content?: string; truncated?: boolean; } export declare function normalizeDroppedPath(value: string): string; export declare function inventoryReferencePath(value: string): Promise; /** @deprecated Use {@link Thumbnails} from `./thumbnails.js`. */ export type ReferenceThumbnails = Thumbnails; /** * Renders inline previews for the image and video references so the workshop * page shows the creative direction instead of a list of file paths. * * Best-effort throughout: a reference that can't be decoded (corrupt file, * exotic codec, no ffmpeg on PATH) is simply left out and falls back to its * path row in the page. */ export declare function buildReferenceThumbnails(sources: ReadonlyArray, cache?: ThumbnailCache): Promise; /** * Inline art for the entities the page describes: each character's portrait * and each location's key angles, pulled from the reference images the * pipeline has already generated on disk. Keys are `character:` and * `location:`; values are ordered data-URI thumbnails. * * Best-effort like everything else on this page — an entity whose references * have not been generated yet (or failed to decode) simply renders as the * text-only card it always was. */ export type EntityArt = Map; export declare function buildEntityArt(series: SeriesState, draft: Pick, cache?: ThumbnailCache): Promise; export interface WorkshopDraft { version: 1; status: 'draft' | 'approved'; revision: number; generatedAt: string; projectName: string; projectType: string; inputs: WorkshopInputs; logline: string; synopsis: string; themes: string[]; structure: Array<{ name: string; purpose: string; beats: string[]; }>; aesthetic: AestheticProfile; characters: Character[]; locations: Location[]; script: EpisodeScript; productionNotes: { delivery?: 'standard' | '4k'; audioApproach: string; continuityPriorities: string[]; risks: string[]; openQuestions: string[]; }; feedbackHistory: string[]; } export declare function getWorkshopPath(series: Pick): string; export declare function loadWorkshop(series: Pick): Promise; export declare function buildWorkshopSystemPrompt(series: SeriesState): string; export declare function buildWorkshopUserPrompt(series: SeriesState, inputs: WorkshopInputs, previous?: WorkshopDraft | null, feedback?: string): string; export declare function generateWorkshop(client: VeniceClient, series: SeriesState, inputs: WorkshopInputs, model: string, previous?: WorkshopDraft | null, feedback?: string): Promise; export declare function renderWorkshopMarkdown(draft: WorkshopDraft, progress?: TreatmentProgress): string; export declare function renderWorkshopHtml(draft: WorkshopDraft, thumbnails?: ReferenceThumbnails, progress?: TreatmentProgress, /** Which reasoning model produced this, shown alongside the other settings. */ intelligence?: string, /** Character portraits + location stills from generated references. */ entityArt?: EntityArt): string; export declare function saveWorkshop(series: SeriesState, draft: WorkshopDraft): Promise; export declare function approveWorkshop(series: SeriesState, draft: WorkshopDraft): Promise; //# sourceMappingURL=workshop.d.ts.map