import type { SceneAspect } from "./scene-project.js";
export declare const VIBE_CONFIG_FILENAME = "vibe.config.json";
export declare const LEGACY_VIBE_PROJECT_FILENAME = "vibe.project.yaml";
export type CompositionEngine = "hyperframes";
export type ProjectImageProvider = "openai" | "gemini" | "grok" | null;
export type ProjectVideoProvider = "seedance" | "grok" | "kling" | "runway" | "veo" | null;
export type ProjectNarrationProvider = "elevenlabs" | "kokoro" | null;
export type ProjectComposerProvider = "claude" | "openai" | "gemini" | null;
export type ProjectQuality = "draft" | "standard" | "high";
export interface VibeProjectConfigV1 {
    schemaVersion: "1";
    name: string;
    aspect: SceneAspect;
    defaults: {
        sceneDurationSec: number;
        narrationPaddingSec: number;
        fps: 24 | 30 | 60;
        quality: ProjectQuality;
    };
    providers: {
        image: ProjectImageProvider;
        video: ProjectVideoProvider;
        narration: ProjectNarrationProvider;
        music: string | null;
        composer: ProjectComposerProvider;
    };
    build: {
        mode: "agent" | "batch" | "auto";
        stage: "all" | "assets" | "compose" | "sync" | "render";
        maxCostUsd: number | null;
        imageQuality: "standard" | "hd";
        imageSize: "1024x1024" | "1536x1024" | "1024x1536";
    };
    composition: {
        engine: CompositionEngine;
        entry: string;
        compositionsDir: string;
        assetsDir: string;
        rendersDir: string;
    };
}
export interface LoadedProjectConfig {
    config: VibeProjectConfigV1;
    /** `vibe.config.json`, `vibe.project.yaml`, or `default`. */
    source: string;
    path: string | null;
    legacy: boolean;
}
export declare function defaultProjectConfig(opts: {
    name: string;
    aspect?: SceneAspect;
    sceneDurationSec?: number;
}): VibeProjectConfigV1;
export declare function mergeProjectConfig(parsed: Partial<VibeProjectConfigV1> | null | undefined, fallback: VibeProjectConfigV1): VibeProjectConfigV1;
export declare function projectConfigJson(opts: {
    name: string;
    aspect?: SceneAspect;
    sceneDurationSec?: number;
}): string;
export declare function readProjectConfig(projectDir: string): Promise<LoadedProjectConfig>;
