Skip to content

BoxBox is a custom node collection for ComfyUI that provides extended tools for region handling, image visualization, and workflow debugging. It introduces new visual and interactive nodes designed to make working with bounding boxes, crops, and compositing more intuitive directly inside the ComfyUI interface.

Notifications You must be signed in to change notification settings

mercu-lore/BoxBox

Repository files navigation

BoxBox - Complete Image Region Processing Suite

A comprehensive ComfyUI custom nodes package for selecting, cropping, resizing, and reinserting image regions with full metadata tracking.

πŸ“‹ Overview

BoxBox provides a complete workflow for working with specific image regions:

  1. πŸ“¦ BoxSelector - Interactive interface to select rectangular regions on images
  2. βœ‚οΈ BoxCrop - Crop selected regions from original images
  3. πŸ“¦ BoxResize - Resize cropped regions with preset aspect ratios for AI generation
  4. 🎨 BoxReinsert - Reinsert generated images back into original positions

🎯 Available Nodes

1. BoxSelector (πŸ“¦ BoxSelector)

Interactive interface to select rectangular regions on images.

Input

  • image (IMAGE): Source image to select from

Output

  • image (IMAGE): Original image (passthrough)
  • box_metadata (STRING): JSON with selection coordinates

Features

  • πŸ–±οΈ Interactive Selection: Click and drag to draw rectangles
  • πŸ“ Side Coordinates: Returns x1, x2, y1, y2 (not x, y, width, height)
  • πŸ”„ Clear Button: Reset selection and start over
  • πŸ“Š Live Coordinates: Shows selection position in real-time

Output JSON Format

{
    "x1": 100,
    "y1": 150,
    "x2": 600,
    "y2": 450,
    "borderWidth": 3,
    "borderPosition": "inside",
    "displayScaleFactor": 1.0,
    "selected": true
}

Advanced Features

  • πŸ“ Aspect Ratio Locking: Select from preset ratios or draw freely
    • Presets: 1:1, 3:4, 5:8, 9:16, 9:21, 4:3, 3:2, 16:9, 21:9
    • Custom: Draw freely and get closest standard ratio
  • πŸ”§ Auto-Scale Large Images: Images > 1024px automatically scaled down for smooth selection
    • Scaling factor saved in metadata (displayScaleFactor)
    • BoxCrop and BoxReinsert automatically correct coordinates

2. BoxCrop (βœ‚οΈ BoxCrop)

Crops images according to coordinates provided by BoxSelector.

Input

  • image (IMAGE): Image to crop
  • box_metadata (STRING): JSON coordinates from BoxSelector (x1, x2, y1, y2)
    • Connect directly from BoxSelector output

Optional Input

  • fallback_mode (COMBO): Behavior when no valid coordinates
    • use_full_image: Return entire image (default)
    • return_zero: Return black image
    • error: Raise error

Output

  • cropped_image (IMAGE): Cropped region

How It Works

  1. Extracts x1, x2, y1, y2 from metadata
  2. If displayScaleFactor is present (from large image auto-scaling):
    • Divides coordinates by scale factor to convert from preview space to original image space
  3. Normalizes coordinates (ensures x1 < x2, y1 < y2)
  4. Clips to image boundaries
  5. Crops the specified region

Automatic Scale Correction

When BoxSelector uses auto-scale for large images (> 1024px), BoxCrop automatically:

  • Detects the displayScaleFactor in metadata
  • Converts preview-space coordinates back to original-image-space
  • Ensures crops match the intended selection on the original image

3. BoxResize (πŸ“¦ BoxResize)

Resizes cropped regions with preset aspect ratios or custom dimensions, with full metadata tracking.

Input

  • image (IMAGE): Image to resize
  • size (COMBO): Preset selection or "Custom"
    • 1:1 Square 1024x1024
    • 3:4 Portrait 896x1152
    • 5:8 Portrait 832x1216
    • 9:16 Portrait 768x1344
    • 9:21 Portrait 640x1536
    • 4:3 Landscape 1152x896
    • 3:2 Landscape 1216x832
    • 16:9 Landscape 1344x768
    • 21:9 Landscape 1536x640
    • Custom (use width/height parameters)

Optional Input

  • keep_aspect_ratio (BOOLEAN): Maintain original aspect ratio (default: True)
  • interpolation_mode (COMBO): Resize algorithm
    • bilinear (default, faster)
    • bicubic (higher quality)
    • nearest (pixel-perfect)
  • width (INT): Custom width [64-8192, step 8] (when size = "Custom")
  • height (INT): Custom height [64-8192, step 8] (when size = "Custom")

Output

  • image (IMAGE): Resized image
  • resize_metadata (STRING): JSON with resize information

Output JSON Format

{
    "original_width": 500,
    "original_height": 300,
    "resized_width": 1024,
    "resized_height": 1024,
    "scale_x": 2.048,
    "scale_y": 3.413,
    "size_preset": "1:1 Square 1024x1024",
    "keep_aspect_ratio": true,
    "interpolation_mode": "bilinear"
}

4. BoxReinsert (🎨 BoxReinsert)

Reinserts generated images back into original positions using metadata.

Input

  • original_image (IMAGE): Original full-size image
  • generated_image (IMAGE): Generated/processed image
  • box_metadata (STRING): Selection coordinates from BoxSelector
  • resize_metadata (STRING): Resize information from BoxResize

Output

  • image (IMAGE): Final image with generated content reinserted

How It Works

  1. Reads box_metadata for original selection position (x1, x2, y1, y2)
  2. If displayScaleFactor is present (from large image auto-scaling):
    • Divides coordinates by scale factor to convert from preview space to original image space
  3. If resize_metadata is provided:
    • Resizes generated_image back to crop dimensions
    • Inserts at exact original position
  4. If resize_metadata is empty:
    • Inserts generated_image as-is (bypasses resize reversal)
  5. Returns full image with processed region in place

Automatic Scale Correction

When BoxSelector uses auto-scale for large images (> 1024px), BoxReinsert automatically:

  • Detects the displayScaleFactor in metadata
  • Converts preview-space coordinates back to original-image-space
  • Reinserts the generated content at the correct position on the original image

Flexible Workflow

  • With Resize: Generated β†’ De-resize β†’ Reinsert
  • Without Resize: Generated β†’ Reinsert directly

πŸ”„ Complete Workflow

Standard AI Generation Workflow

LoadImage
    ↓
πŸ“¦ BoxSelector (select region interactively)
    ↓ box_metadata
βœ‚οΈ BoxCrop (extract region)
    ↓ cropped_image
πŸ“¦ BoxResize (prepare for AI, e.g., 1024x1024)
    ↓ resize_metadata
[AI Generation Model - SDXL, SD, etc.]
    ↓ generated_image
🎨 BoxReinsert (put back in original position)
    ↓
Output: Final image with AI-generated region

Direct Editing Workflow (skip resize)

LoadImage
    ↓
πŸ“¦ BoxSelector (select region)
    ↓ box_metadata
βœ‚οΈ BoxCrop (extract region)
    ↓ cropped_image
[Edit/Filter directly]
    ↓ edited_image
🎨 BoxReinsert (reinsert without resize)
    ↓
Output: Final image

πŸ’‘ Metadata System

The metadata system ensures complete traceability:

  1. BoxSelector Output: {"x1": ..., "y1": ..., "x2": ..., "y2": ..., "displayScaleFactor": ...}

    • Stores original selection coordinates
    • Includes scale factor if image was auto-scaled (for large images > 1024px)
    • borderWidth and borderPosition also included
  2. BoxResize Output: {"original_width": ..., "resized_width": ..., "scale_x": ..., ...}

    • Tracks resize transformation for reversal
  3. BoxCrop & BoxReinsert: Automatically handle:

    • If displayScaleFactor present: Convert coordinates from preview-space to original-image-space
    • Use converted coordinates for accurate cropping and reinsertion
    • Both nodes work seamlessly with auto-scaled selections

βš™οΈ Settings & Presets

BoxSelector

  • Border Width: Fixed at 3px (built-in)
  • Border Position: Fixed at "inside" (built-in)

BoxResize Presets

All presets optimize for AI generation models:

  • Square: 1:1 ratio at 1024x1024
  • Portrait: Multiple heights (3:4, 5:8, 9:16, 9:21)
  • Landscape: Multiple widths (4:3, 3:2, 16:9, 21:9)

BoxResize Interpolation

  • bilinear: Fast, good quality (default)
  • bicubic: Slower, higher quality
  • nearest: Pixel-perfect, no smoothing

πŸ”„ Coordinate System

All nodes use side coordinates (x1, x2, y1, y2):

  • x1: Left edge
  • x2: Right edge
  • y1: Top edge
  • y2: Bottom edge

This allows:

  • Easy understanding of selected region
  • Automatic validation (x1 < x2, y1 < y2)
  • Direct use for cropping and reinsertion

🎨 User Interface

BoxSelector Dialog

Left Panel (Controls)

  • Image name
  • Aspect Ratio selector (9 presets + Custom mode)
  • Clear Selection button
  • Selection coordinates display with live aspect ratio info
  • Scale info display (when large image is auto-scaled)

Right Panel (Canvas)

  • Interactive image canvas
  • Auto-scaled preview (for images > 1024px)
  • Click + drag to draw rectangle
  • Drag handles to resize
  • Drag body to move
  • Resize handles with smooth interaction

Features

  • πŸ”§ Automatic Large Image Handling: Seamlessly scales down for preview while maintaining accuracy
  • πŸ“ Aspect Ratio Locking: Lock to standard ratios or draw freely
  • πŸ“Š Live Feedback: Real-time coordinate and ratio display

πŸ“¦ Installation

  1. Clone/copy the BoxBox folder to:

    ComfyUI/custom_nodes/BoxBox/
    
  2. Restart ComfyUI

  3. Nodes will appear in image/box category


πŸ“‹ Requirements

  • ComfyUI: Latest version
  • Python: 3.8+
  • PyTorch: >= 2.0.0
  • Pillow (PIL): >= 8.0.0
  • NumPy: >= 1.20.0
  • torch.nn.functional: For interpolation (included with PyTorch)

requirements.txt

torch>=2.0.0
Pillow>=8.0.0
numpy>=1.20.0

πŸš€ Quick Start

  1. Add LoadImage node
  2. Add πŸ“¦ BoxSelector node, connect image
  3. Click "πŸ“¦ Select Box" button
  4. Draw rectangle on image, click "βœ… Confirm"
  5. Add βœ‚οΈ BoxCrop, connect BoxSelector output
  6. Add πŸ“¦ BoxResize, select preset (e.g., "1:1 Square 1024x1024")
  7. Send to AI model or editor
  8. Add 🎨 BoxReinsert:
    • Connect original image from step 1
    • Connect generated image from step 7
    • Connect box_metadata from step 4 output
    • Connect resize_metadata from step 6 output
  9. Execute graph β†’ final image!

πŸ› Troubleshooting

Selection Dialog Doesn't Open

  • Make sure image is connected to BoxSelector
  • Check browser console (F12) for errors
  • Try reloading page (Ctrl+Shift+R)

Drawing Rectangle Doesn't Work

  • Ensure you're clicking inside the image area
  • Check that cursor shows crosshair
  • Try refreshing the page

Resize Creates Black/Empty Image

  • Check that keep_aspect_ratio is set correctly
  • Verify image dimensions are valid
  • Try different interpolation_mode

Reinsert Doesn't Work

  • Verify all 4 inputs are connected (original_image, generated_image, box_metadata, resize_metadata)
  • Check that metadata JSON is valid
  • Ensure original_image and box_metadata match (same image used for selection)

πŸ“ Changelog

v1.1.0 (Current)

  • βœ… Auto-Scale Large Images: Images > 1024px automatically scaled in preview for smooth selection
  • βœ… displayScaleFactor Metadata: Scale factor saved in metadata for accurate coordinate conversion
  • βœ… Aspect Ratio Locking: 9 preset aspect ratios + custom free drawing mode
  • βœ… Smart Coordinate Correction: BoxCrop and BoxReinsert auto-correct coordinates from scaled previews
  • βœ… Live Aspect Ratio Display: Shows closest standard ratio when drawing freely

v1.0.0

  • βœ… BoxSelector with interactive region selection
  • βœ… BoxCrop with coordinate-based cropping
  • βœ… BoxResize with preset aspect ratios and custom sizes
  • βœ… BoxReinsert with flexible resize handling
  • βœ… Complete metadata tracking system
  • βœ… Optional resize bypass in BoxReinsert
  • βœ… Multiple interpolation modes

πŸŽ“ Advanced Usage

Chaining Multiple Regions

Select Region 1 β†’ Crop β†’ Resize β†’ AI Generate β†’ Reinsert
Parallel with:
Select Region 2 β†’ Crop β†’ Resize β†’ AI Generate β†’ Reinsert

Batch Processing

Use Reroute nodes to process same coordinates on multiple images.

Custom Aspect Ratios

Use BoxResize with "Custom" mode and specify exact width/height.


πŸ“„ License

MIT


🀝 Support

For issues, feature requests, or suggestions, please contact the developer.


Created for ComfyUI - Transform your images with precision! πŸŽ―βœ‚οΈπŸ“¦πŸŽ¨

About

BoxBox is a custom node collection for ComfyUI that provides extended tools for region handling, image visualization, and workflow debugging. It introduces new visual and interactive nodes designed to make working with bounding boxes, crops, and compositing more intuitive directly inside the ComfyUI interface.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published