FLUX.2 klein 4B (the distilled 4-step model, bf16) text-to-image on the RunPod image endpoint, SFW only. Translated from Comfy-Org/workflow_templates@aaac56dd templates/image_flux2_klein_text_to_image.json, its "Text to Image (Flux.2 Klein 4B Distilled)" subgraph, which is the one that loads flux-2-klein-4b.safetensors (the template's enabled subgraph loads the undistilled flux-2-klein-base-4b, which is not on the volume): UNETLoader, CLIPLoader qwen_3_4b in flux2 mode, VAELoader flux2-vae, CFGGuider at CFG 1 with the negative zeroed by ConditioningZeroOut, KSamplerSelect euler, Flux2Scheduler at 4 steps, EmptyFlux2LatentImage 1024x1024, SamplerCustomAdvanced.
Tags: chromarunpod-serverlessvolume-backedtext-to-imageflux2-klein
Inputs (4)#
The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.
promptstringrequireddefault A hedgehog wearing a tiny party hat surrounded by confetti, early digital camera style, slight noise, flash photography, candid moment, 2000s digicam aesthetic, festive birthday celebration atmosphereseedintegerdefault -1aspectenumdefault square_1024square_1024portrait_896x1152landscape_1152x896portrait_832x1216landscape_1216x832batch_sizeintegerdefault 1min 1max 1ComfyUI node graph (13)#
The executable ComfyUI prompt graph: 13 nodes across 13 distinct node classes, wired by 13 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.
Nodes (13)#
1UNETLoadercoreunet_name = flux-2-klein-4b.safetensorsweight_dtype = defaultMODEL2CLIPLoadercoreclip_name = qwen_3_4b.safetensorstype = flux2device = defaultCLIP3VAELoadercorevae_name = flux2-vae.safetensorsVAE4CLIPTextEncodecoretext = {{constructed_prompt}} tmplclip = ◂ node 2 · out[0]CONDITIONING5ConditioningZeroOutcoreconditioning = ◂ node 4 · out[0]CONDITIONING6CFGGuidercoremodel = ◂ node 1 · out[0]positive = ◂ node 4 · out[0]negative = ◂ node 5 · out[0]cfg = 1.0GUIDER7KSamplerSelectcoresampler_name = eulerSAMPLER8Flux2Schedulercoresteps = 4width = {{aspect_map[aspect].width}} tmplheight = {{aspect_map[aspect].height}} tmplSIGMAS9RandomNoisecorenoise_seed = {{seed}} tmplNOISE10EmptyFlux2LatentImagecorewidth = {{aspect_map[aspect].width}} tmplheight = {{aspect_map[aspect].height}} tmplbatch_size = {{batch_size}} tmplLATENT11SamplerCustomAdvancedcorenoise = ◂ node 9 · out[0]guider = ◂ node 6 · out[0]sampler = ◂ node 7 · out[0]sigmas = ◂ node 8 · out[0]latent_image = ◂ node 10 · out[0]LATENTLATENT12VAEDecodecoresamples = ◂ node 11 · out[0]vae = ◂ node 3 · out[0]IMAGE13SaveImagecoreimages = ◂ node 12 · out[0]filename_prefix = isis/klein4b-txt2imgPrompt construction#
template{base_prompt}Variables (1)#
base_prompt{{prompt}} tmplParameter banks (2)#
The prompt / configuration lookup tables this workflow keys into from its inputs — the vocabulary that turns a style / palette / preset selection into graph parameters.
aspect_map (5)#
square_1024{"width": 1024, "height": 1024}portrait_896x1152{"width": 896, "height": 1152}landscape_1152x896{"width": 1152, "height": 896}portrait_832x1216{"width": 832, "height": 1216}landscape_1216x832{"width": 1216, "height": 832}requires_families (1)#
klein4bModels & dependencies#
Models required (3)#
flux-2-klein-4b.safetensorsqwen_3_4b.safetensorsflux2-vae.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-profilecontrolModalitiesmodel-locksampler-scheduler-lockseed-lockprompt-template-lockconsistencyDimensionsidentitylightinglensnotesFLUX.2 klein 4B distilled text-to-image on RunPod serverless, SFW only.