Z-Image text-to-image steered by a control image through the Fun-Controlnet-Union 2.1 patch (canny, depth, pose or tile), on the base or a Civitai Turbo finetune, with an optional Z-Image LoRA. Translated from Comfy-Org/workflow_templates@aaac56dd templates/image_z_image_turbo_fun_union_controlnet.json: ModelPatchLoader + QwenImageDiffsynthControlnet (strength 1), core Canny (low 0.1, high 0.32), the control image through ImageScaleToMaxDimension (lanczos, 1024) and GetImageSize into EmptySD3LatentImage, ModelSamplingAuraFlow shift 3, res_multistep + simple, Turbo at 8 steps and CFG 1 with the negative zeroed. The base schedule (25 steps, CFG 4, a real negative) is templates/image_z_image.json's. Depth runs the core Depth Anything 3 nodes with the values of templates/utility_depth_anything3_image_depth_estimation.json. Choosing a Turbo checkpoint selects the Turbo union patch and the 8-step schedule through checkpoint_profile.
Tags: zimagerunpod-serverlessvolume-backedtext-to-imagecontrolnet
Inputs (13)#
The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.
promptstringrequireddefault Realistic photo, close-up of a latina model peeking through pine branches, dappled sunlight on her face, natural, moody, smooth skin, a little bit film grain.negative_promptstringdefault checkpointenumdefault zimage-base-bf16zimage-base-bf16cyberrealistic-zimage-turbo-v8-bf16zimage-turbo-bf16-aiostepsintegerdefault 25min 8max 60cfgfloatdefault 4.0min 1.0max 10.0seedintegerdefault -1control_imageimagerequiredcontrolenumdefault cannycannydepthposetilecontrol_strengthfloatdefault 1.0min 0.0max 2.0control_end_fractionfloatdefault 1.0min 0.1max 1.0batch_sizeintegerdefault 1min 1max 1loraenumdefault nonenonephotoreal-betternudes-v3realistic-snapshot-v5breast-sliderdetail-sliderdetaildaemonz-v1.1lora_strengthfloatdefault 1.0min -2.0max 2.0ComfyUI node graph (25)#
The executable ComfyUI prompt graph: 25 nodes across 23 distinct node classes, wired by 21 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.
Nodes (25)#
1UNETLoadercoreunet_name = {{checkpoint_map[checkpoint]}} tmplweight_dtype = defaultMODEL2CLIPLoadercoreclip_name = qwen_3_4b.safetensorstype = lumina2device = defaultCLIP3VAELoadercorevae_name = ae.safetensorsVAE4CheckpointLoaderSimplecoreckpt_name = {{checkpoint_map[checkpoint]}} tmplMODELCLIPVAE5LoraLoaderModelOnlycoremodel = {{loader_refs[checkpoint_profile[checkpoint].loader].model}} tmpllora_name = {{lora_map[lora]}} tmplstrength_model = {{lora_strength}} tmplMODEL6ModelSamplingAuraFlowcoremodel = {{lora_ref if lora != 'none' else loader_refs[checkpoint_profile[checkpoint].loader].model}} tmplshift = 3MODEL7CLIPTextEncodecoretext = {{constructed_prompt}} tmplclip = {{loader_refs[checkpoint_profile[checkpoint].loader].clip}} tmplCONDITIONING8CLIPTextEncodecoretext = {{negative_prompt}} tmplclip = {{loader_refs[checkpoint_profile[checkpoint].loader].clip}} tmplCONDITIONING9ConditioningZeroOutcoreconditioning = ◂ node 7 · out[0]CONDITIONING10LoadImagecoreimage = {{control_image}} tmplIMAGEMASK11ImageScaleToMaxDimensioncoreimage = ◂ node 10 · out[0]upscale_method = lanczoslargest_size = 1024IMAGE12GetImageSizecoreimage = ◂ node 11 · out[0]INTINTINT13EmptySD3LatentImagecorewidth = ◂ node 12 · out[0]height = ◂ node 12 · out[1]batch_size = {{batch_size}} tmplLATENT14Cannycoreimage = ◂ node 11 · out[0]low_threshold = 0.1high_threshold = 0.32IMAGE15LoadDA3Modelcoremodel_name = depth_anything_3_mono_large.safetensorsweight_dtype = defaultDA3_MODEL16DA3Inferencecoreda3_model = ◂ node 15 · out[0]image = ◂ node 11 · out[0]resolution = 504resize_method = upper_bound_resizemode = monoDA3_GEOMETRY17DA3Rendercoreda3_geometry = ◂ node 16 · out[0]output = depthoutput.normalization = v2_styleoutput.apply_sky_clip = falseIMAGE18DWPreprocessorcoreimage = ◂ node 11 · out[0]detect_hand = enabledetect_body = enabledetect_face = enableresolution = 512bbox_detector = yolox_l.onnxpose_estimator = dw-ll_ucoco_384.onnxscale_stick_for_xinsr_cn = disableIMAGEPOSE_KEYPOINT19TilePreprocessorcoreimage = ◂ node 11 · out[0]pyrUp_iters = 3resolution = 512IMAGE20ModelPatchLoadercorename = {{checkpoint_profile[checkpoint].union_patch}} tmplMODEL_PATCH21QwenImageDiffsynthControlnetcoremodel = ◂ node 6 · out[0]model_patch = ◂ node 20 · out[0]vae = {{loader_refs[checkpoint_profile[checkpoint].loader].vae}} tmplimage = {{control_source_map[control]}} tmplstrength = {{control_strength}} tmplMODEL22KSamplerAdvancedcoremodel = ◂ node 21 · out[0]add_noise = enablenoise_seed = {{seed}} tmplsteps = {{distilled_schedule.steps if checkpoint_profile[checkpoint].distilled else steps}} tmplcfg = {{distilled_schedule.cfg if checkpoint_profile[checkpoint].distilled else cfg}} tmplsampler_name = res_multistepscheduler = simplepositive = ◂ node 7 · out[0]negative = {{checkpoint_profile[checkpoint].negative}} tmpllatent_image = ◂ node 13 · out[0]start_at_step = 0end_at_step = {{int(round((distilled_schedule.steps if checkpoint_profile[checkpoint].distilled else steps) * control_end_fraction))}} tmplreturn_with_leftover_noise = {{'enable' if control_end_fraction < 1.0 else 'disable'}} tmplLATENT23KSamplerAdvancedcoremodel = ◂ node 6 · out[0]add_noise = disablenoise_seed = {{seed}} tmplsteps = {{distilled_schedule.steps if checkpoint_profile[checkpoint].distilled else steps}} tmplcfg = {{distilled_schedule.cfg if checkpoint_profile[checkpoint].distilled else cfg}} tmplsampler_name = res_multistepscheduler = simplepositive = ◂ node 7 · out[0]negative = {{checkpoint_profile[checkpoint].negative}} tmpllatent_image = ◂ node 22 · out[0]start_at_step = {{int(round((distilled_schedule.steps if checkpoint_profile[checkpoint].distilled else steps) * control_end_fraction))}} tmplend_at_step = 10000return_with_leftover_noise = disableLATENT24VAEDecodecoresamples = ◂ node 23 · out[0]vae = {{loader_refs[checkpoint_profile[checkpoint].loader].vae}} tmplIMAGE25SaveImagecoreimages = ◂ node 24 · out[0]filename_prefix = isis/zimage-txt2img-controlPrompt construction#
template{base_prompt}Variables (1)#
base_prompt{{prompt}} tmplParameter banks (9)#
The prompt / configuration lookup tables this workflow keys into from its inputs — the vocabulary that turns a style / palette / preset selection into graph parameters.
option_policy (2)#
checkpoint{"zimage-base-bf16": {"distribution": "service", "content": "neutral"}, "cyberrealistic-zimage-turbo-v8-bf16": {"distribution": "service", "content": "racy"}, "zimage-turbo-bf16-aio": {"distribution": "service", "content": "neutral"}}lora{"photoreal-betternudes-v3": {"distribution": "service", "content": "explicit"}, "realistic-snapshot-v5": {"distribution": "service", "content": "neutral"}, "breast-slider": {"distribution": "service", "content": "racy"}, "detail-slider": {"distribution": "service", "content": "neutral"}, "detaildaemonz-v1.1": {"distribution": "service", "content": "neutral"}}checkpoint_map (3)#
zimage-base-bf16z_image_bf16.safetensorscyberrealistic-zimage-turbo-v8-bf16cyberrealistic_zimage_turbo_v8_bf16.safetensorszimage-turbo-bf16-aiozimage_turbo_bf16_aio.safetensorscheckpoint_profile (3)#
zimage-base-bf16{"loader": "unet", "distilled": false, "negative": ["8", 0], "union_patch": "Z-Image-Fun-Controlnet-Union-2.1.safetensors"}cyberrealistic-zimage-turbo-v8-bf16{"loader": "unet", "distilled": true, "negative": ["9", 0], "union_patch": "Z-Image-Turbo-Fun-Controlnet-Union-2.1-2602-8steps.safetensors"}zimage-turbo-bf16-aio{"loader": "aio", "distilled": true, "negative": ["9", 0], "union_patch": "Z-Image-Turbo-Fun-Controlnet-Union-2.1-2602-8steps.safetensors"}distilled_schedule (2)#
steps8cfg1.0loader_refs (2)#
unet{"model": ["1", 0], "clip": ["2", 0], "vae": ["3", 0]}aio{"model": ["4", 0], "clip": ["4", 1], "vae": ["4", 2]}lora_ref (2)#
50control_source_map (4)#
canny140depth170pose180tile190lora_map (6)#
nonephotoreal-betternudes-v3zimage-photoreal-betternudes-v3.safetensorsrealistic-snapshot-v5zimage-realistic-snapshot-v5.safetensorsbreast-sliderzimage-breast-slider.safetensorsdetail-sliderzimage-detail-slider.safetensorsdetaildaemonz-v1.1zimage-detaildaemonz-v1.1.safetensorsrequires_families (5)#
zimagezimage-cyberrealisticzimage-aiozimage-controlcontrolnet-auxModels & dependencies#
Custom node packs (1)#
The non-core ComfyUI node classes this graph requires; the RunPod worker image the workflow runs on must bake or install a pack that provides every one of them.
comfyui_controlnet_auxModels required (15)#
z_image_bf16.safetensorscyberrealistic_zimage_turbo_v8_bf16.safetensorszimage_turbo_bf16_aio.safetensorsqwen_3_4b.safetensorsae.safetensorsZ-Image-Fun-Controlnet-Union-2.1.safetensorsZ-Image-Turbo-Fun-Controlnet-Union-2.1-2602-8steps.safetensorsdepth_anything_3_mono_large.safetensorsyolox_l.onnxdw-ll_ucoco_384.onnxzimage-photoreal-betternudes-v3.safetensorszimage-realistic-snapshot-v5.safetensorszimage-breast-slider.safetensorszimage-detail-slider.safetensorszimage-detaildaemonz-v1.1.safetensorsOutput contract#
What a successful run of this workflow returns.
typeimageformatpngTaxonomy & routing#
How the control plane classifies this workflow — from the committed workflow-taxonomy-registry.json. It drives the consistency / control surface the agentic director can exercise over the workflow.
assetFamilyportrait-hero-image-bundleoutputPackageProfileimage-single-profilecontrolModalitiescontrolnet-cannycontrolnet-depthcontrolnet-posemodel-locksampler-scheduler-lockseed-lockconsistencyDimensionsidentitylightingenvironmentnotesZ-Image with a Fun-Controlnet-Union 2.1 control image (canny, depth, pose, tile); a Turbo checkpoint selects the Turbo patch and the 8-step schedule.