Nodes/ComfyUI-TrixLoader/🌊Load Image AIO
ComfyUI Node

🌊Load Image AIO

Load, mask, crop, and color-grade in one node β€” TrixLoader's AIO input prep

By trx7111Β·Created 3 months agoΒ·Updated 24 days agoΒ· 90
🌊Load Image AIO
  • in_image
  • in_mask
  • IMAGE
  • MASK
  • ↓ original_input
β—„imageβ–Ύβ–Ί
β—„width1024β–Ί
β—„height1024β–Ί
β—„pad_left0β–Ί
β—„pad_top0β–Ί
β—„pad_right0β–Ί
β—„pad_bottom0β–Ί
β—„upscale_methodnearest-exactβ–Ί
β—„keep_proportionresizeβ–Ί
β—„crop_positioncenterβ–Ί
β—„scale_by1.00β–Ί
β—„conditionalwaysβ–Ί
β—„feathering0β–Ί
β—„divisible_by8β–Ί
β—„enable_resizefalseβ–Ί
β—„modePreviewβ–Ί
β—„mask_dataβ–Ί
β—„crop_data{}β–Ί
β—„cr_enablefalseβ–Ί
β—„cr_offset0β–Ί
β—„cr_exp0β–Ί
β—„cr_cont0β–Ί
β—„cr_high0β–Ί
β—„cr_shad0β–Ί
β—„cr_white0β–Ί
β—„cr_black0β–Ί
β—„cr_temp0β–Ί
β—„cr_tint0β–Ί
β—„cr_vibrance0β–Ί
β—„cr_colorfulness0β–Ί
β—„cr_sat0β–Ί
β—„cr_tex0β–Ί
β—„cr_clar0β–Ί
β—„cr_dehz0β–Ί
β—„cr_sharp0β–Ί
β—„cr_denoise0β–Ί
β—„cr_blur0β–Ί
β—„cr_surface_blur0β–Ί
β—„cr_grain0β–Ί
β—„cr_vignette0β–Ί
β—„cr_sketch_kernel_size0β–Ί
β—„cr_sketch_sigma1.40β–Ί
β—„cr_sketch_k_sigma1.60β–Ί
β—„cr_sketch_epsilon-0.030β–Ί
β—„cr_sketch_phi10β–Ί
β—„cr_sketch_gamma1.000β–Ί
β—„cr_sketch_colorgrayβ–Ί
β—„cr_pixel_colors128β–Ί
β—„cr_pixel_dot_size0β–Ί
β—„cr_pixel_outline0β–Ί
β—„cr_pixel_smoothing0β–Ί
β—„cr_pixel_algokmeansβ–Ί
β—„cr_ht_size0β–Ί
β—„cr_ht_angle15β–Ί
β—„cr_ht_contrast0β–Ί
β—„cr_ht_brightness0β–Ί
β—„cr_ht_dither100β–Ί
β—„cr_ht_inversefalseβ–Ί
β—„cr_ht_shapeDotβ–Ί
β—„cr_usm_amount0β–Ί
β—„cr_usm_radius1β–Ί
β—„cr_usm_threshold0β–Ί
β—„cr_lap_amount0.00β–Ί
β—„cr_lap_kernel8-neighborβ–Ί
β—„cr_cf_hue0β–Ί
β—„cr_cf_density0β–Ί
β—„cr_cf_preserve50β–Ί
β—„cr_post_enablefalseβ–Ί
β—„cr_post_levels4β–Ί
β—„cr_post_modeRGBβ–Ί
β—„cr_post_dither_modeNoneβ–Ί
β—„cr_post_dither0β–Ί
β—„cr_lvl_channelrgbβ–Ί
β—„cr_lvl_in_black0β–Ί
β—„cr_lvl_in_white255β–Ί
β—„cr_lvl_gamma1.00β–Ί
β—„cr_lvl_out_black0β–Ί
β—„cr_lvl_out_white255β–Ί
β—„cr_cb_shad_r0β–Ί
β—„cr_cb_shad_g0β–Ί
β—„cr_cb_shad_b0β–Ί
β—„cr_cb_mid_r0β–Ί
β—„cr_cb_mid_g0β–Ί
β—„cr_cb_mid_b0β–Ί
β—„cr_cb_high_r0β–Ί
β—„cr_cb_high_g0β–Ί
β—„cr_cb_high_b0β–Ί
β—„cr_blur_modeGaussianβ–Ί
β—„cr_blur_radius0β–Ί
β—„hsl_activefalseβ–Ί
β—„hsl_data{}β–Ί
β—„curve_activefalseβ–Ί
β—„curve_data{}β–Ί
β—„trix_uuidβ–Ί

If you've ever built an input-prep chain, you know the ritual: Load Image, a resize node, a mask editor, then four color nodes because the reference photo was shot in a cave. 🌊 Load Image AIO from ComfyUI-TrixLoader folds all of that into one node with four tabs - Preview, Mask, Filter, Resize - so you prep the input where it lives instead of stringing ten nodes together and praying the wires stay tidy.

The name isn't hype about the model: it's a UI node, so there's no model to download and no API to call. What it does is swallow an image and let you touch every pixel problem that comes before sampling - cropping, padding for outpaint, a hand-painted mask, and a Lightroom-style color grade - then hand the cleaned result to the sampler.

How it works

Under the hood it's a fancier Load Image. You pick a file from ComfyUI/input (plus its private input/aio_input folder, which it reads but hides from the dropdown), and the node keeps your edits as plain widget data: masks travel in mask_data, crops in crop_data, the whole grading stack in a wall of cr_* sliders plus hsl_data and curve_data. When you run, it composites the mask, applies the Camera Raw filter stack first, then resizes and pads second - a deliberate order so outpaint borders stay clean instead of picking up filter artifacts.

The fancy part is the UI. Double-click the Mask tab and you get the full-screen editor with SAM 3 / SAM 2.1 clicking, GroundingDINO text-to-mask, and RMBG background removal; double-click Filter for the Camera Raw workspace; Resize for the crop/pad/outpaint (CPO) board. The editor saves its result back into the node's widgets, and your preview renders live as you drag.

The inputs that actually matter

The node dumps ~150 widgets on you. Ignore most of them until you need them:

  • image - the file picker; drop a file in ComfyUI/input to see it here.
  • enable_resize + width/height - the master switch for resizing. Until you flip it, the node is pure pass-through.
  • keep_proportion - the one beginners burn time on: resize fits inside, stretch ignores aspect, pad_for_outpainting grows the canvas and lets the pad_left/top/right/bottom fields add outpaint room, crop cuts.
  • divisible_by - snaps dimensions to clean multiples (default 8) so you don't feed the VAE an awkward resolution.
  • cr_enable - the master switch for grading; once on, the cr_exp/cr_cont/cr_temp cluster behaves like exposure and white balance.
  • in_image / in_mask - optional inputs for chaining AIO nodes, the intended workaround since layers are kept out of the main node.

Outputs are IMAGE, MASK (wire this straight into an inpaint/ControlNet slot), and ↓ original_input if you want the untouched copy downstream.

Installing it

Either via ComfyUI Manager (search "TrixLoader") or by hand:

cd ComfyUI/custom_nodes
git clone https://github.com/trx7111/ComfyUI-TrixLoader.git

Then restart ComfyUI. Fair warning: requirements.txt pulls transformers, transparent-background, ben2, albumentations, pymatting, and timm - that's a chunky install, and the SAM/RMBG model weights download on first use. Don't reach for this pack just to crop an image.

Where people get burned

The README's own gotcha is the big one: on the first run of SAM 3, the download can sit at 100% for a while - that's Python compiling deps and initializing Triton mocks, not a hang. Watch your terminal. Also: "Save to Node" is non-reversible - it rewrites the base file in the workflow, so you can't undo a crop or filter after clicking it, which is deliberate (it stops duplicate files piling up in input/aio_input). If the editor feels sluggish on a weak GPU, flip on Potato PC Mode in ComfyUI settings - it drops canvas previews to 512px and kills animations.

The editor is genuinely useful - Trix built it after the community said they wanted editing without leaving ComfyUI for Photoshop - but it's a big dependency footprint for what's ultimately convenience. Worth it if you prep references constantly; overkill if your input is already clean.

CategoryTrixLoader πŸͺ¬

Inputs (96)

NameTypeDefaultDescription
imageCOMBO1 options: example.png
widthINT102416–16384β€”
heightINT102416–16384β€”
pad_leftINT00–16384β€”
pad_topINT00–16384β€”
pad_rightINT00–16384β€”
pad_bottomINT00–16384β€”
upscale_methodCOMBOnearest-exact5 options: nearest-exact, bilinear, area, bicubic, lanczos
keep_proportionCOMBOresize7 options: stretch, resize, scale_by, pad, pad_edge_pixel, crop, +1
crop_positionCOMBOcenter9 options: top-left, top, top-right, left, center, right, +3
scale_byFLOAT1.000.01–64β€”
conditionCOMBOalways5 options: always, downscale if bigger, upscale if smaller, if bigger area, if smaller area
featheringINT00–250β€”
divisible_byINT81–256β€”
enable_resizeBOOLEANfalseβ€”
modeCOMBOPreview4 options: Preview, Mask, Filter, Resize
mask_dataSTRINGβ€”
crop_dataSTRING{}β€”
cr_enableBOOLEANfalseβ€”
cr_offsetINT0-100–100β€”
cr_expINT0-200–200β€”
cr_contINT0-150–150β€”
cr_highINT0-150–150β€”
cr_shadINT0-150–150β€”
cr_whiteINT0-150–150β€”
cr_blackINT0-150–150β€”
cr_tempINT0-150–150β€”
cr_tintINT0-150–150β€”
cr_vibranceINT0-150–150β€”
cr_colorfulnessINT0-150–150β€”
cr_satINT0-100–100β€”
cr_texINT0-200–200β€”
cr_clarINT0-200–200β€”
cr_dehzINT0-150–150β€”
cr_sharpINT00–150β€”
cr_denoiseINT00–150β€”
cr_blurINT00–150β€”
cr_surface_blurINT00–200β€”
cr_grainINT00–150β€”
cr_vignetteINT00–150β€”
cr_sketch_kernel_sizeINT00–25β€”
cr_sketch_sigmaFLOAT1.400.1–5β€”
cr_sketch_k_sigmaFLOAT1.601–5β€”
cr_sketch_epsilonFLOAT-0.030-0.2–0.2β€”
cr_sketch_phiFLOAT101–50β€”
cr_sketch_gammaFLOAT1.0000–1β€”
cr_sketch_colorCOMBOgray2 options: gray, rgb
cr_pixel_colorsINT1282–256β€”
cr_pixel_dot_sizeINT00–32β€”
cr_pixel_outlineINT00–9β€”
cr_pixel_smoothingINT00–10β€”
cr_pixel_algoCOMBOkmeans3 options: kmeans, dithering, kmeans with dithering
cr_ht_sizeINT00–50β€”
cr_ht_angleINT15-180–180β€”
cr_ht_contrastINT0-100–100β€”
cr_ht_brightnessINT0-100–100β€”
cr_ht_ditherINT1000–100β€”
cr_ht_inverseBOOLEANfalseβ€”
cr_ht_shapeCOMBODot7 options: Dot, Square Dot, Line, Rhomboid, Cross Cut, Saddle, +1
cr_usm_amountINT00–200β€”
cr_usm_radiusINT11–10β€”
cr_usm_thresholdINT00–255β€”
cr_lap_amountFLOAT0.000–1β€”
cr_lap_kernelCOMBO8-neighbor2 options: 8-neighbor, 4-neighbor
cr_cf_hueINT00–360β€”
cr_cf_densityINT00–255β€”
cr_cf_preserveINT500–100β€”
cr_post_enableBOOLEANfalseβ€”
cr_post_levelsINT42–32β€”
cr_post_modeCOMBORGB2 options: RGB, Luminance
cr_post_dither_modeCOMBONone5 options: None, Bayer, Random, Floyd-Steinberg, Atkinson
cr_post_ditherINT00–100β€”
cr_lvl_channelCOMBOrgb4 options: rgb, r, g, b
cr_lvl_in_blackINT00–254β€”
cr_lvl_in_whiteINT2551–255β€”
cr_lvl_gammaFLOAT1.000.1–10β€”
cr_lvl_out_blackINT00–254β€”
cr_lvl_out_whiteINT2551–255β€”
cr_cb_shad_rINT0-100–100β€”
cr_cb_shad_gINT0-100–100β€”
cr_cb_shad_bINT0-100–100β€”
cr_cb_mid_rINT0-100–100β€”
cr_cb_mid_gINT0-100–100β€”
cr_cb_mid_bINT0-100–100β€”
cr_cb_high_rINT0-100–100β€”
cr_cb_high_gINT0-100–100β€”
cr_cb_high_bINT0-100–100β€”
cr_blur_modeCOMBOGaussian4 options: Gaussian, Average, Edge Average, Surface Blur
cr_blur_radiusINT00–50β€”
hsl_activeBOOLEANfalseβ€”
hsl_dataSTRING{}β€”
curve_activeBOOLEANfalseβ€”
curve_dataSTRING{}β€”
trix_uuidSTRINGβ€”
in_imageoptIMAGEβ€”
in_maskoptMASKβ€”

Outputs (3)

NameTypeDescription
IMAGEIMAGEβ€”
MASKMASKβ€”
↓ original_inputIMAGEβ€”