import type { ItemId } from './types.ts'; /** * Message prefix for "unsupported but graceful" outcomes (no WebCodecs, * unsupported codec). Consumers detect this prefix and fall back to uploading * the original GIF instead of surfacing a hard error. * * The contract is the message *prefix*, not the Error type: the worker RPC * layer (comctx) serializes a thrown error to its `message` string only - the * Error subclass, `name`, and `stack` do not survive the worker boundary. */ export declare const UNSUPPORTED_ERROR_PREFIX = "Unsupported"; /** * Message prefix for GIFs skipped because they exceed the total-pixel budget. * * Starts with UNSUPPORTED_ERROR_PREFIX so existing consumers treat the skip * as a graceful fallback (keep the uploaded GIF, no companion video); the * longer prefix lets consumers distinguish it, e.g. to log a warning. Like * UNSUPPORTED_ERROR_PREFIX, the contract is the message prefix because only * the message string survives the worker boundary. */ export declare const SIZE_LIMIT_ERROR_PREFIX = "Unsupported: GIF exceeds maximum conversion size"; /** * Default budget for total decoded pixels (width × height × frame count) * beyond which conversion is not attempted. * * Conversion cost is roughly proportional to the total number of decoded * pixels. 300 megapixels approximates what a mid-range machine converts * within the ~30s the caller is willing to wait (e.g. a 1920x1080 GIF at * ~145 frames); anything larger would likely be abandoned anyway, so it is * cheaper to not start. Pass `0` to disable the check. */ export declare const DEFAULT_MAX_TOTAL_PIXELS = 300000000; /** * Cancels all ongoing operations for a given item ID. * * Cancellation takes effect at async boundaries (waiting for the lock, * encoder-support check, decoder completion, between frames). * * @param id Item ID. * @return Whether an operation was cancelled. */ export declare function cancelOperations(id: ItemId): Promise; /** * Converts an animated GIF to a video file (MP4 or WebM). * * Decodes GIF frames via the browser ImageDecoder (honoring per-frame * delays) and re-encodes them with mediabunny / WebCodecs. * * Accepts the GIF as a Blob so the bytes are read once, here in the worker, * instead of being materialized on the main thread and transferred. An * ArrayBuffer is still accepted for direct callers and tests. * * @param id Item ID. * @param gifSource GIF file as a Blob/File or ArrayBuffer. * @param outputMimeType Output MIME type ('video/mp4' or 'video/webm'). * @param maxDimensions Optional maximum dimension for downscaling. * @param maxTotalPixels Optional budget for total decoded pixels * (width × height × frame count) beyond which the * conversion is rejected with SIZE_LIMIT_ERROR_PREFIX. * Defaults to DEFAULT_MAX_TOTAL_PIXELS; `0` disables. * @return Encoded video buffer. */ export declare function convertGifToVideo(id: ItemId, gifSource: ArrayBuffer | Blob, outputMimeType: string, maxDimensions?: number, maxTotalPixels?: number): Promise; //# sourceMappingURL=index.d.ts.map