export interface TransitionInput {
    /** Path to the outgoing video clip. */
    clipA: string;
    /** Path to the incoming video clip. */
    clipB: string;
    /** Output path for the resulting concatenated video with transition. */
    outputPath: string;
    /** Length of clip A in seconds. Transition starts at clipADuration - transitionDuration. */
    clipADuration: number;
    /** How long the transition itself runs (typically 0.5-1.5s). */
    transitionDuration: number;
    /** Output dimensions. */
    width: number;
    height: number;
    /** Output fps. */
    fps: number;
}
/**
 * Light-leak cross-fade. The B clip fades in while a bright orange
 * "leak" sweeps across the frame, masking the transition seam. Looks
 * like a film burn / lens flare. Very common in viral editorial cuts.
 *
 * Implementation strategy:
 *   1. Generate a 1080x1920 light-leak PNG into a temp file (gradient
 *      with hot center). Done once per output.
 *   2. ffmpeg filter_complex:
 *        [0]xfade=fade=duration=N:offset=M[v01];
 *        [v01][2:v]overlay=enable='between(t,M,M+N)':...,blend=screen[out]
 *   3. Mux audio from clip A + B (xfade also handles audio crossfade
 *      via afade chained off the same offset).
 *
 * Returns the output path on success.
 */
export declare function applyLightLeakTransition(opts: TransitionInput): Promise<string>;
/**
 * Ensure a light-leak overlay PNG exists at the right size, returning
 * its path. Cached per-process — overlay is deterministic so we don't
 * regenerate on every transition.
 *
 * The overlay is a 1080x1920 (or arbitrary) RGBA image with:
 *   - Mostly-transparent background (alpha = 0)
 *   - A bright orange/yellow vertical streak ~30% width centered
 *   - Soft falloff at edges
 *
 * We generate it via ffmpeg's lavfi `color` + gradient filter rather
 * than shipping a binary PNG asset. Keeps the codebase self-contained.
 */
export declare function ensureLightLeakOverlay(width: number, height: number): Promise<string>;
/** Test-only — clears the cached overlay path. */
export declare function _resetLightLeakCacheForTests(): void;
/**
 * Pure-function filter graph builder. Exposed so unit tests can assert
 * on the graph string without spawning ffmpeg.
 */
export declare function buildLightLeakFilterGraph(opts: {
    clipADuration: number;
    transitionDuration: number;
    fps: number;
}): string;
/**
 * Glitch-cut: during the transition window we crossfade A→B while
 * applying RGB channel-split + horizontal jitter, mimicking VHS / data-
 * mosh aesthetic. Pure ffmpeg — uses `geq` for per-channel offset.
 *
 * NOTE re: ffmpeg 8.x — geq's random() lookup is non-deterministic
 * across frames; we substitute a periodic `sin(t*200)*15` jitter that
 * still reads as "glitch" without flicker artefacts.
 */
export declare function applyGlitchCutTransition(opts: TransitionInput): Promise<string>;
/** Pure-function filter-graph builder for the glitch-cut transition. */
export declare function buildGlitchCutFilterGraph(opts: {
    clipADuration: number;
    transitionDuration: number;
    fps: number;
}): string;
/**
 * Domain-warp: during the transition window pixels are displaced by a
 * vertical sine wave whose amplitude ramps from 0 → 40 px and back as
 * the transition progresses. Combined with xfade=fade, B emerges
 * through the rippling A frame. Pure ffmpeg `geq`.
 */
export declare function applyDomainWarpTransition(opts: TransitionInput): Promise<string>;
/** Pure-function filter-graph builder for the domain-warp transition. */
export declare function buildDomainWarpFilterGraph(opts: {
    clipADuration: number;
    transitionDuration: number;
    fps: number;
}): string;
/**
 * Gravitational-lens: radial barrel/pincushion distortion ramps up on
 * A and down on B during the transition window, simulating a black-hole
 * "swallowing" A while B is "pulled out" of the same point. Uses
 * ffmpeg's `lenscorrection` filter with time-varying k1.
 */
export declare function applyGravLensTransition(opts: TransitionInput): Promise<string>;
/** Pure-function filter-graph builder for the grav-lens transition. */
export declare function buildGravLensFilterGraph(opts: {
    clipADuration: number;
    transitionDuration: number;
    fps: number;
}): string;
//# sourceMappingURL=transitions.d.ts.map