Skip to content

Node-RED Image Processing Toolkit

A comprehensive Node-RED package providing 17 specialized nodes for high-performance image processing using C++ OpenCV backend. Perfect for computer vision workflows, batch processing, and automated image manipulation.

Demo

🚀 Quick Start

Installation

bash
# Quick setup
./install.sh

# Manual installation
cd rosepetal-image-engine && npm install && npm run build
cd ../node-red-contrib-rosepetal-image-tools && npm install
cd ~/.node-red && npm install /path/to/node-red-contrib-rosepetal-image-tools

Requirements

  • Node.js 16+ with node-gyp support
  • OpenCV 4.x (auto-detected via pkg-config)
  • C++ compiler with C++17 support

📋 Node Categories

I/O Nodes - Data Flow Management

NodePurposeKey Features
image-inLoad images from filesystemJPEG/PNG/WebP/etc. support, Sharp backend
image-outSave images with timestamp namingAuto-naming, overwrite protection, format conversion
array-inCollect data into positioned arraysDynamic positioning, batch collection
array-outAssemble arrays from multiple sourcesTimeout protection, ordered assembly
array-selectExtract elements with flexible selectionPython-like slicing, range selection
queueBuffer and pace message deliveryFIFO gating, rate control, timed expiry

Transform Nodes - Image Processing

NodePurposeKey Features
resizeScale images with aspect ratio controlProportional scaling, multiple modes
rotateRotate images with custom paddingSub-pixel precision, background colors
cropExtract regions with pixel/normalized coordsDynamic coordinates, bounds checking
paddingAdd configurable marginsColor customization, flexible sizing
filterApply enhancement filtersBlur, sharpen, edge, emboss, Gaussian
drawOverlay points and lines on imagesNormalized coordinates, typed inputs, C++ compositing

Mix Nodes - Image Composition

NodePurposeKey Features
concatCombine images horizontally/verticallyDirection control, padding strategies
mosaicPosition images on canvasCoordinate positioning, manual placement
advanced-mosaicComplex layouts with custom positioningPixel-perfect control, layering

Blend Nodes - Advanced Compositing

NodePurposeKey Features
blendAlpha blend two images with opacityBackground removal, color tolerance
add-maskApply polygon-based masks to regionsCoordinate arrays, mask strength control

Specialized Nodes - AI/ML Integration

NodePurposeKey Features
cropBBExtract crops from AI bounding boxesObject detection integration, confidence filtering
image-alignUltra-fast image alignment using ECC algorithmTranslation correction, speed presets, real-time processing

Utility Nodes - Diagnostics

NodePurposeKey Features
clean-debugSafe debug output for large payloadsBuffer cleaning, sidebar/console toggles, enable/disable button
block-detectBackground watchdog for event-loop blockingNo wires, configurable thresholds, live status metrics

Architecture & Performance

Two-Tier Design

  • JavaScript Layer: Node-RED integration, validation, I/O handling
  • C++ Layer: OpenCV-powered image processing for maximum performance

Performance Benefits

  • Faster! than pure JavaScript implementations
  • Parallel processing for array operations
  • Memory efficient with optimized algorithms
  • Async operations with real-time performance timing

Image Data Format

javascript
{
  data: Buffer,        // Raw pixel data
  width: number,       // Image width in pixels  
  height: number,      // Image height in pixels
  channels: number,    // Channel count (1, 3, 4)
  colorSpace: string,  // "GRAY", "RGB", "RGBA", "BGR", "BGRA"
  dtype: string        // "uint8" (standard)
}

🛠️ Development

Project Structure

node-red-contrib-rosepetal-image-tools/
├── docs/nodes/          # Individual node documentation
├── nodes/              # Node-RED node implementations
│   ├── io/             # I/O nodes
│   ├── transform/      # Transform nodes  
│   ├── mix/            # Composition nodes
│   ├── blend/          # Blending nodes
│   └── specialized/    # AI/ML nodes
├── lib/                # Shared utilities
└── assets/             # Documentation assets

rosepetal-image-engine/  # C++ processing engine
├── src/                # OpenCV implementations
├── binding.gyp         # Node.js addon configuration
└── package.json

Adding New Nodes

  1. Implement C++ processing in rosepetal-image-engine/src/
  2. Export function in src/main.cpp
  3. Create Node-RED wrapper in appropriate nodes/ category
  4. Add comprehensive documentation following existing patterns

🚨 Troubleshooting

Common Issues

  • Build Failures: Ensure OpenCV 4.x installed and pkg-config available
  • Missing Nodes: Check Node-RED installation path and package registration
  • Performance Issues: Verify C++ addon built with optimization flags
  • Memory Problems: Process large images in smaller batches

Performance Tips

  • Use raw format for processing chains (fastest)
  • Process arrays when possible for parallel execution
  • Choose appropriate output formats for your destination
  • Monitor node status displays for timing information

🤝 Contributing

  • Issues: Report bugs and feature requests via GitHub
  • Pull Requests: Contributions welcome for new nodes and optimizations
  • Documentation: Help improve guides and examples

📄 License

This project is part of the Rosepetal development toolkit for Node-RED image processing applications.


💡 Pro Tip: Start with simple single-node workflows, then combine them into complex processing pipelines as you become familiar with the image format and node interactions.