import { type ControlNetType as ArchControlNetType } from "../architectures/types.js"; export interface LoraConfig { name: string; strength_model?: number; strength_clip?: number; } export interface BaseSamplerParams { prompt: string; negativePrompt?: string; steps?: number; cfgScale?: number; sampler?: string; scheduler?: string; model: string; seed?: number; filenamePrefix?: string; loras?: LoraConfig[]; } export interface Txt2ImgParams extends BaseSamplerParams { width?: number; height?: number; } export interface Img2ImgParams extends BaseSamplerParams { inputImage: string; denoise?: number; } export interface UpscaleParams { inputImage: string; upscaleModel?: string; targetWidth?: number; targetHeight?: number; filenamePrefix?: string; } export interface InpaintParams extends BaseSamplerParams { sourceImage: string; maskImage: string; denoise?: number; growMaskBy?: number; } export interface OutpaintParams extends BaseSamplerParams { sourceImage: string; extendLeft?: number; extendRight?: number; extendTop?: number; extendBottom?: number; feathering?: number; denoise?: number; } export type IPAdapterWeightType = "linear" | "ease in" | "ease out" | "ease in-out" | "reverse in-out" | "weak input" | "weak output" | "weak middle" | "strong middle" | "style transfer" | "composition" | "strong style transfer"; export type IPAdapterCombineEmbeds = "concat" | "add" | "subtract" | "average" | "norm average"; export interface IPAdapterParams extends BaseSamplerParams { width?: number; height?: number; referenceImage: string; referenceImages?: string[]; weight?: number; weightType?: IPAdapterWeightType; startAt?: number; endAt?: number; combineEmbeds?: IPAdapterCombineEmbeds; ipadapterModel?: string; clipVisionModel?: string; } export declare function buildTxt2ImgWorkflow(params: Txt2ImgParams): Record; export declare function buildImg2ImgWorkflow(params: Img2ImgParams): Record; export declare function buildInpaintWorkflow(params: InpaintParams): Record; export declare function buildOutpaintWorkflow(params: OutpaintParams): Record; /** * Build an IP-Adapter workflow for identity preservation * * IP-Adapter allows using reference images to guide generation, * preserving character identity, style, or composition. */ export declare function buildIPAdapterWorkflow(params: IPAdapterParams): Record; export declare function buildUpscaleWorkflow(params: UpscaleParams): Record; export type ControlNetType = ArchControlNetType; export interface PreprocessorOptions { lowThreshold?: number; highThreshold?: number; detectBody?: boolean; detectFace?: boolean; detectHands?: boolean; objectMinSize?: number; } export interface ControlNetConfig { type: ControlNetType; image: string; controlNetModel: string; strength?: number; startPercent?: number; endPercent?: number; preprocessorOptions?: PreprocessorOptions; } export interface ControlNetParams extends BaseSamplerParams { width?: number; height?: number; controlNet: ControlNetConfig; preprocess?: boolean; } export interface MultiControlNetParams extends BaseSamplerParams { width?: number; height?: number; controlNets: ControlNetConfig[]; preprocess?: boolean; } /** * Build a single ControlNet workflow */ export declare function buildControlNetWorkflow(params: ControlNetParams): Record; /** * Build a multi-ControlNet workflow (chain multiple control conditions) */ export declare function buildMultiControlNetWorkflow(params: MultiControlNetParams): Record; /** * Build a preprocessing-only workflow (to see what the control signal looks like) */ export declare function buildPreprocessorWorkflow(params: { inputImage: string; type: ControlNetType; options?: PreprocessorOptions; filenamePrefix?: string; }): Record; export type MaskPreset = "hands" | "face" | "eyes" | "body" | "background" | "foreground"; export interface MaskRegion { x: number; y: number; width: number; height: number; } export interface CreateMaskParams { sourceImage: string; preset?: MaskPreset; textPrompt?: string; region?: MaskRegion; expandPixels?: number; featherPixels?: number; invert?: boolean; samModel?: string; groundingDinoModel?: string; threshold?: number; filenamePrefix?: string; } /** * Build an intelligent mask generation workflow using GroundingDINO + SAM. * GroundingDINO detects objects from text prompts, SAM generates precise masks. * Requires: comfyui_segment_anything extension * * Based on research from: * - https://github.com/storyicon/comfyui_segment_anything * - https://stable-diffusion-art.com/sam3-comfyui-image/ */ export declare function buildMaskWorkflow(params: CreateMaskParams): Record; export interface TTSParams { text: string; voiceReference: string; voiceReferenceText?: string; speed?: number; seed?: number; model?: string; vocoder?: "auto" | "vocos" | "bigvgan"; filenamePrefix?: string; } /** * Build a TTS workflow using F5-TTS */ export declare function buildTTSWorkflow(params: TTSParams): Record; export type LipSyncModel = "sonic" | "dice-talk" | "hallo2" | "sadtalker"; export interface LipSyncParams { portraitImage: string; audio: string; model?: LipSyncModel; svdCheckpoint?: string; sonicUnet?: string; ipAudioScale?: number; useInterframe?: boolean; dtype?: "fp16" | "fp32" | "bf16"; minResolution?: number; duration?: number; expandRatio?: number; inferenceSteps?: number; dynamicScale?: number; fps?: number; seed?: number; filenamePrefix?: string; } /** * Build a SONIC lip-sync workflow * Uses ImageOnlyCheckpointLoader with SVD model which provides MODEL, CLIP_VISION, and VAE */ export declare function buildLipSyncWorkflow(params: LipSyncParams): Record; /** * Build a combined TTS + LipSync workflow (full pipeline) * This chains TTS output directly into SONIC * Uses ImageOnlyCheckpointLoader with SVD model for SONIC */ export declare function buildTalkingAvatarWorkflow(params: { text: string; voiceReference: string; voiceReferenceText?: string; portraitImage: string; speed?: number; ttsSeed?: number; svdCheckpoint?: string; sonicUnet?: string; inferenceSteps?: number; fps?: number; lipSyncSeed?: number; filenamePrefix?: string; }): Record; export interface I2VWorkflowParams { sourceImage: string; backend?: string; checkpoint?: string; prompt?: string; negativePrompt?: string; width?: number; height?: number; frames?: number; fps?: number; steps?: number; cfgScale?: number; seed?: number; motionScale?: number; filenamePrefix?: string; } /** * Build an AnimateDiff image-to-video workflow. * Uses ADE_LoadAnimateDiffModel + ADE_UseEvolvedSampling for v3, * or ADE_ApplyAnimateLCMI2VModel for LCM backend. */ export declare function buildI2VWorkflow(params: I2VWorkflowParams): Record;