import { VIDEO_MAX_SECONDS, VIDEO_MIN_SECONDS, type VideoJobResult } from '@bitmagic/asset-core'; import type { Environment } from '../config/environments.js'; import { type ApiDeps } from '../http/client.js'; import type { ProjectContext } from '../project/context.js'; export declare const JOBS_PATH = "/api/cli/v1/assets/video/jobs"; /** A first frame is a still, not a film reel; anything larger is a mistake worth catching here. */ export declare const MAX_IMAGE_BYTES: number; export declare const IMAGE_EXTENSIONS: string[]; export interface VideoRun { prompt: string; durationSeconds?: number; name?: string; /** Local first-frame image; uploaded before the job is submitted. */ imagePath?: string; /** Already-uploaded first frame. When set, `imagePath` is not read. */ imageUrl?: string; seed?: number; assetId?: string; creatorPrompt?: string; } export interface VideoDeps extends ApiDeps { log: (message: string) => void; sleep: (ms: number) => Promise; } export interface VideoInstallResult { assetId: string; videoUrl: string; webmUrl?: string; durationSeconds: number; width?: number; height?: number; sparksCharged: number; patchesApplied: number; } interface JobStatus { status: 'pending' | 'running' | 'succeeded' | 'failed'; result?: VideoJobResult; error?: { kind?: string; message?: string; } | string; } /** The creator-facing sentence for a failed job — `error.kind` decides it, never the raw JSON. */ export declare function describeJobFailure(error: JobStatus['error']): string; export declare function generateAndInstallVideo(options: { context: ProjectContext; environment: Environment; token: string; run: VideoRun; deps: VideoDeps; }): Promise; export { VIDEO_MIN_SECONDS, VIDEO_MAX_SECONDS };