/**
 * @copyright
 * Copyright 2026 Steven Roussey
 * All Rights Reserved
 */
import { Task } from "@workglow/task-graph";
import type { IExecuteContext, IExecutePreviewContext, TaskConfig } from "@workglow/task-graph";
import type { ImageValue } from "@workglow/util/media";
export interface ImageFilterInput {
    image: ImageValue;
}
export interface ImageFilterOutput {
    image: ImageValue;
}
export declare abstract class ImageFilterTask<P, Input extends ImageFilterInput & Record<string, unknown> = ImageFilterInput & Record<string, unknown>, Output extends ImageFilterOutput & Record<string, unknown> = ImageFilterOutput & Record<string, unknown>, Config extends TaskConfig = TaskConfig> extends Task<Input, Output, Config> {
    protected abstract readonly filterName: string;
    protected abstract opParams(input: Input): P;
    /** Override in subclasses with pixel-space params. Default is identity.
     *  Always called before applyFilter; multiply-by-1 in run mode is a no-op.
     *  Now called by both execute() and executePreview() since ImageValue
     *  carries previewScale on the value, not the run mode. */
    protected scalePreviewParams(params: P, _scale: number): P;
    private runFilter;
    execute(input: Input, _ctx: IExecuteContext): Promise<Output | undefined>;
    executePreview(input: Input, _ctx: IExecutePreviewContext): Promise<Output | undefined>;
}
//# sourceMappingURL=ImageFilterTask.d.ts.map