import type { VideoProvider } from "./types.js";
export declare const POLL_INTERVAL_MS = 5000;
export declare const MAX_POLL_ATTEMPTS = 180;
export declare const SUPPORTED_VIDEO_ASPECT_RATIOS: readonly ["1:1", "3:4", "9:16", "4:3", "16:9", "21:9", "9:21"];
export declare const SUPPORTED_VIDEO_RESOLUTIONS: readonly ["480p", "720p", "1080p"];
/** supported_durations: 4..15 integer seconds (no 3 — the old {3,5,10} teaching was wrong). */
export declare const SUPPORTED_VIDEO_DURATIONS: readonly [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
/**
 * Closest supported aspect-ratio label for a "W:H" string, by log distance, or
 * undefined when the input is malformed (gateway default then applies). Mirrors
 * openrouter-image.ts deriveAspectRatio. Anchors: 4:5 → 3:4, 9:16 → 9:16.
 */
export declare function closestSupportedRatio(aspect: string): string | undefined;
export interface SeedanceProviderOptions {
    /** Override OpenRouter base URL (for testing). */
    baseUrl?: string;
    /** Output directory for the downloaded mp4. Required for production use. */
    outputDir?: string;
}
/**
 * Seedance 2.0 video provider via OpenRouter.
 *
 * Async-job API:
 *   1. POST /videos -> { id, polling_url, status: "pending" }
 *   2. GET polling_url every 5s until status === "completed" or "failed"
 *   3. GET unsigned_urls[0] (with same auth header) -> mp4 bytes
 *
 * Falls back to stub when OPENROUTER_API_KEY is not set.
 *
 * Root cause confirmed 2026-06-10: the request schema is FLAT —
 * model / prompt / duration / aspect_ratio / resolution / generate_audio /
 * frame_images are all top-level fields (verified against the official
 * create-videos doc + GET /api/v1/videos/models). The previous code wrapped
 * everything in `input: {}`, which the gateway silently DROPPED — so portrait
 * requests came back 16:9 and i2v "never took": the parameters never arrived.
 * The fix sends them flat; i2v frame entries follow the schema shape
 * { type: "image_url", image_url: { url }, frame_type: "first_frame" | "last_frame" }.
 *
 * Empirically verified via paid probes (2026-06-10, ffprobe-confirmed):
 *   - t2v aspect_ratio "16:9" @720p → 1280×720 landscape ($0.60/4s)
 *   - t2v "9:16" @1080p → 1080×1920 ($1.36/4s) — 1080p is real, not doc fiction
 *   - i2v with a 9:16 input image + explicit "16:9" → 1280×720: the CALLER's
 *     aspect wins over the input image's own ratio (no crop-to-input lock)
 *   - all outputs 24fps; ByteDance REJECTS i2v input images that look like a
 *     real person (InputImageSensitiveContentDetected.PrivacyInformation, 400
 *     at enqueue, not billed)
 */
export declare function createSeedanceProvider(opts?: SeedanceProviderOptions): VideoProvider;
export declare const seedanceProvider: VideoProvider;
//# sourceMappingURL=seedance.d.ts.map