Generated reference · ComfyUI workflow · chroma

HiDream-O1 Dev Personalize

Subject-driven personalization with HiDream-O1-Image Dev (bf16) on the RunPod image endpoint, SFW only: two to ten reference images define the subject(s) and the prompt places them in a new scene. Translated from …

chroma21nodesGPU A5000out image~39sv1.0.0

On this page

Subject-driven personalization with HiDream-O1-Image Dev (bf16) on the RunPod image endpoint, SFW only: two to ten reference images define the subject(s) and the prompt places them in a new scene. Translated from Comfy-Org/workflow_templates@aaac56dd templates/image_hidream_o1_dev.json: its HiDreamO1ReferenceImages node (the template's note: up to 10 reference images, add Load Image nodes and link them; the node's tooltip: 2-10 images = multi reference) on the prompt and the empty negative, the Dev sampling chain (ModelNoiseScale 7.6, BasicScheduler normal 28 steps, SamplerLCM 1/1/2.5, SamplerCustom CFG 1), and the template's EmptyHiDreamO1LatentImage at a chosen trained resolution rather than the source's size, because upstream's personalization runs (HiDream-ai/HiDream-O1-Image README, sections 3-5) generate at --height/--width (2048x2048 by default) instead of keeping a reference's aspect as its edit example does. Skeleton conditioning in the upstream pipeline is a pose skeleton image passed as one of the reference images (README section 4), so it needs no input of its own; layout conditioning is the pipeline's --layout_bboxes argument, which neither the ComfyUI template nor any core node exposes, so it is not offered. The template loads the fp8_scaled checkpoint; this catalog loads the bf16 file on the volume. Prompt refine is not offered (see prompt_refine_note).

21Graph nodes
11Node classes
15Inputs
1Models

Tags: chromarunpod-serverlessvolume-backedimage-to-imagepersonalizationmulti-referencehidream-o1

Inputs (15)#

The typed parameter surface callers bind when they request this workflow. Enum options and numeric bounds are the values the workflow document declares.

promptstringrequireddefault Create a realistic try-on image of the person wearing the provided clothing.
Describe the new scene and how the referenced subjects appear in it (the default is the upstream README's skeleton personalization example). There is no negative prompt: the Dev model samples at CFG 1, where the template's empty negative is not evaluated.
seedintegerdefault -1
Random seed (-1 = random)
reference_countintegerdefault 2min 2max 10
How many reference images the node reads, 2 to 10 (the node's multi-reference range; one reference is hidream-o1-edit). reference_image_1 up to reference_image_<reference_count> must all be supplied; a job missing one is refused when the graph is rendered, before submission.
reference_image_1imagerequired
Reference image 1, required. References are attached in this order; the prompt can name them by content. A pose skeleton image (for example an OpenPose render) goes in as one of them, as the upstream README's skeleton example does.
reference_image_2imagerequired
Reference image 2, required. The node resizes each reference itself (smaller as the count grows), so upload them at their natural size.
reference_image_3image
Reference image 3, read only when reference_count is 3 or more.
reference_image_4image
Reference image 4, read only when reference_count is 4 or more.
reference_image_5image
Reference image 5, read only when reference_count is 5 or more.
reference_image_6image
Reference image 6, read only when reference_count is 6 or more.
reference_image_7image
Reference image 7, read only when reference_count is 7 or more.
reference_image_8image
Reference image 8, read only when reference_count is 8 or more.
reference_image_9image
Reference image 9, read only when reference_count is 9 or more.
reference_image_10image
Reference image 10, read only when reference_count is 10 or more.
aspectenumdefault square_2048x2048
Output size, one of the eleven resolutions the model was trained at (the template's size note; ComfyUI v0.34.0 comfy_extras/nodes_hidream_o1.py says lower resolutions go off-distribution). All are about 4 MP and within the per-job pixel cap; 2048x2048 is the template's empty-latent value and upstream's default.
options: square_2048x2048landscape_4x3_2304x1728portrait_3x4_1728x2304landscape_9x7_2304x1792portrait_7x9_1792x2304landscape_3x2_2496x1664portrait_2x3_1664x2496landscape_16x9_2560x1440portrait_9x16_1440x2560ultrawide_3104x1312ultratall_1312x3104
batch_sizeintegerdefault 1min 1max 1
Images per run. Pinned to 1: the executor's resolution-scaled batch cap (C.12.19) allows a second latent only below ~0.5 MP, and every trained resolution is ~4 MP.

ComfyUI node graph (21)#

The executable ComfyUI prompt graph: 21 nodes across 11 distinct node classes, wired by 25 data dependencies. Nodes tinted green come from a custom node pack this workflow declares; the rest are ComfyUI core / baked-community classes.

flowchart TD n0["1: CheckpointLoaderSimple"] n1["2: CLIPTextEncode"] n2["3: CLIPTextEncode"] n3["4: LoadImage"] n4["5: LoadImage"] n5["6: LoadImage"] n6["7: LoadImage"] n7["8: LoadImage"] n8["9: LoadImage"] n9["10: LoadImage"] n10["11: LoadImage"] n11["12: LoadImage"] n12["13: LoadImage"] n13["14: HiDreamO1ReferenceImages"] n14["15: EmptyHiDreamO1LatentImage"] n15["16: ModelNoiseScale"] n16["17: BasicScheduler"] n17["18: SamplerLCM"] n18["19: SamplerCustom"] n19["20: VAEDecode"] n20["21: SaveImage"] n0 -->|clip| n1 n0 -->|clip| n2 n1 -->|positive| n13 n2 -->|negative| n13 n3 -->|imagesimage_1| n13 n4 -->|imagesimage_2| n13 n5 -->|imagesimage_3| n13 n6 -->|imagesimage_4| n13 n7 -->|imagesimage_5| n13 n8 -->|imagesimage_6| n13 n9 -->|imagesimage_7| n13 n10 -->|imagesimage_8| n13 n11 -->|imagesimage_9| n13 n12 -->|imagesimage_10| n13 n0 -->|model| n15 n15 -->|model| n16 n15 -->|model| n18 n13 -->|positive| n18 n13 -->|negative| n18 n17 -->|sampler| n18 n16 -->|sigmas| n18 n14 -->|latent_image| n18 n18 -->|samples| n19 n0 -->|vae| n19 n19 -->|images| n20
Data-flow DAG — scroll to zoom, drag to pan.

Nodes (21)#

1CheckpointLoaderSimplecore
ckpt_name = hidream_o1_image_dev_bf16.safetensors
outputs: MODELCLIPVAE
2CLIPTextEncodecore
text = {{constructed_prompt}} tmplclip = ◂ node 1 · out[1]
outputs: CONDITIONING
3CLIPTextEncodecore
text = clip = ◂ node 1 · out[1]
outputs: CONDITIONING
4LoadImagecore
image = {{reference_image_1}} tmpl
outputs: IMAGEMASK
5LoadImagecore
image = {{reference_image_2}} tmpl
outputs: IMAGEMASK
6LoadImagecore
image = {{reference_image_3}} tmpl
outputs: IMAGEMASK
7LoadImagecore
image = {{reference_image_4}} tmpl
outputs: IMAGEMASK
8LoadImagecore
image = {{reference_image_5}} tmpl
outputs: IMAGEMASK
9LoadImagecore
image = {{reference_image_6}} tmpl
outputs: IMAGEMASK
10LoadImagecore
image = {{reference_image_7}} tmpl
outputs: IMAGEMASK
11LoadImagecore
image = {{reference_image_8}} tmpl
outputs: IMAGEMASK
12LoadImagecore
image = {{reference_image_9}} tmpl
outputs: IMAGEMASK
13LoadImagecore
image = {{reference_image_10}} tmpl
outputs: IMAGEMASK
14HiDreamO1ReferenceImagescore
positive = ◂ node 2 · out[0]negative = ◂ node 3 · out[0]images.image_1 = ◂ node 4 · out[0]images.image_2 = ◂ node 5 · out[0]images.image_3 = ◂ node 6 · out[0]images.image_4 = ◂ node 7 · out[0]images.image_5 = ◂ node 8 · out[0]images.image_6 = ◂ node 9 · out[0]images.image_7 = ◂ node 10 · out[0]images.image_8 = ◂ node 11 · out[0]images.image_9 = ◂ node 12 · out[0]images.image_10 = ◂ node 13 · out[0]
outputs: CONDITIONINGCONDITIONING
15EmptyHiDreamO1LatentImagecore
width = {{aspect_map[aspect].width}} tmplheight = {{aspect_map[aspect].height}} tmplbatch_size = {{batch_size}} tmpl
outputs: LATENT
16ModelNoiseScalecore
model = ◂ node 1 · out[0]noise_scale = 7.6
outputs: MODEL
17BasicSchedulercore
model = ◂ node 16 · out[0]scheduler = normalsteps = 28denoise = 1.0
outputs: SIGMAS
18SamplerLCMcore
s_noise = 1.0s_noise_end = 1.0noise_clip_std = 2.5
outputs: SAMPLER
19SamplerCustomcore
model = ◂ node 16 · out[0]add_noise = truenoise_seed = {{seed}} tmplcfg = 1.0positive = ◂ node 14 · out[0]negative = ◂ node 14 · out[1]sampler = ◂ node 18 · out[0]sigmas = ◂ node 17 · out[0]latent_image = ◂ node 15 · out[0]
outputs: LATENTLATENT
20VAEDecodecore
samples = ◂ node 19 · out[0]vae = ◂ node 1 · out[2]
outputs: IMAGE
21SaveImagecore
images = ◂ node 20 · out[0]filename_prefix = isis/hidream-o1-personalize

Prompt construction#

template
{base_prompt}

Variables (1)#

base_prompt
{{prompt}} tmpl

Parameter 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 (11)#

square_2048x2048
{"width": 2048, "height": 2048}
landscape_4x3_2304x1728
{"width": 2304, "height": 1728}
portrait_3x4_1728x2304
{"width": 1728, "height": 2304}
landscape_9x7_2304x1792
{"width": 2304, "height": 1792}
portrait_7x9_1792x2304
{"width": 1792, "height": 2304}
landscape_3x2_2496x1664
{"width": 2496, "height": 1664}
portrait_2x3_1664x2496
{"width": 1664, "height": 2496}
landscape_16x9_2560x1440
{"width": 2560, "height": 1440}
portrait_9x16_1440x2560
{"width": 1440, "height": 2560}
ultrawide_3104x1312
{"width": 3104, "height": 1312}
ultratall_1312x3104
{"width": 1312, "height": 3104}

requires_families (1)#

hidream-o1

Models & dependencies#

Models required (1)#

hidream_o1_image_dev_bf16.safetensors

Output contract#

What a successful run of this workflow returns.

type
image
format
png

Taxonomy & 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.

assetFamily
portrait-hero-image-bundle
outputPackageProfile
image-single-profile
controlModalities
reference-ensemblemodel-locksampler-scheduler-lockseed-lockprompt-template-lock
consistencyDimensions
identitylightingenvironment
notes
HiDream-O1-Image Dev subject-driven personalization from two to ten reference images at a trained ~4 MP resolution, SFW only.