Extracted and integrated the Equirect360EdgeBlender from ComfyUI-DiT360 to provide professional-grade edge blending for panoramic images.
New Node: Equirectangular Edge Blender
- Blends left/right edges for perfect 360° wraparound continuity
- Essential for eliminating visible seams in panorama viewers
- Three blending modes: cosine (smoothest), linear, smooth
- Automatic edge continuity validation
- Configurable blend width (0-200px, 10-20 recommended)
- Console reporting of seamless status
Implementation Details:
- Added blend_edges() method to EquirectangularProcessor
- Supports linear, cosine, and smooth blending curves
- Uses weighted interpolation between edges
- Cosine mode provides smoothest S-curve transition
- Added check_edge_continuity() method
- Validates seamlessness with configurable threshold
- Measures mean absolute difference between edges
- Default 5% tolerance for quality assurance
Node Features:
- Compatible with all image sizes (including 16K)
- Batch processing support
- Progress bar for multi-image workflows
- Optional continuity checking with detailed feedback
- Integrates seamlessly with existing LatLong workflow
Use Cases:
- Final polish after rotation/transformation
- Pre-processing for interactive 360° viewers
- Quality validation for panoramic content
- Professional VR and 360° photography workflows
Based on proven implementation from ComfyUI-DiT360, adapted for LatLong node pack with full ComfyUI integration and enhanced user feedback.
Implemented memory-efficient tiled processing to handle extra-large high-resolution panoramic images up to 16K (16384×8192) and beyond.
New Features:
- Automatic tiling detection: Auto-enables for images >8K pixels
- Configurable tile size: Default 2048px tiles with adjustable size
- Overlap regions: 64px overlap between tiles prevents seam artifacts
- Memory-efficient: Processes images in horizontal bands
- Backward compatible: Small images use fast direct processing
Performance Improvements:
- calculate_optimal_tile_size(): Smart memory-based tile sizing
- should_use_tiled_processing(): Automatic detection for large images
- _rotate_equirectangular_tiled(): Band-based processing with overlap
- Memory cleanup: Explicit deletion of temporary arrays
Node Updates (EquirectangularRotate):
- New parameter 'use_tiling': auto/enabled/disabled
- New parameter 'tile_size': 512-8192 pixels
- Auto-selection based on image dimensions
- Full backward compatibility with existing workflows
Technical Details:
- Processes 16K images in ~4-8 bands depending on tile size
- Reduces peak memory from ~1.6GB to ~400-800MB per image
- Maintains quality with proper overlap blending
- Pre-computes rotation matrix once for efficiency
This enables processing of extra-large panoramas that previously would cause out-of-memory errors, making the node pack suitable for professional high-resolution 360° photography workflows.
New nodes:
- Cubemap (3x2) → Equirectangular: Convert cubemap atlases back to equirectangular
- Equirectangular Mirror/Flip: Horizontal/vertical flip with proper spherical wrapping
- Equirectangular Resize: Smart resize with 2:1 aspect ratio preservation
- Equirectangular Rotate (Preset): Quick preset rotations (front, back, left, right, up, down)
- Cubemap Faces Extract: Export all 6 cube faces as separate images
Improvements:
- Enhanced tooltips for better user guidance across all new nodes
- Updated README with comprehensive documentation of new features
- Added processing methods to EquirectangularProcessor module
Technical details:
- Cubemap-to-equirectangular uses face sampling with bilinear interpolation
- Mirror/flip operations use numpy flip operations for efficiency
- Resize maintains standard 2:1 equirectangular aspect ratio by default
- Preset rotations map to common viewing angles with offset adjustments
- All nodes support batch processing and multiple interpolation methods
- Embed rotation/crop/interp controls in Equirectangular Processor node (optional inputs, defaults)
- Add node/param tooltips and node descriptions across all nodes
- Rewrite README with updated usage, node overview, and installation notes
- Include tests/run_node_smoke_tests.py for local sanity checks
- Add crop_to_square function that crops width to match original image height
- Create dedicated EquirectangularCropSquare node for square cropping
- Add crop_to_square option to combined processor node
- Change default pitch rotation from 0° to -65° across all nodes
- Square crop takes precedence over 180° crop when both are enabled
- Perfect for creating square images at original height resolution
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement multiple interpolation methods: nearest, bilinear, bicubic, lanczos
- Add interpolation parameter to all three node types with dropdown selection
- Use scipy map_coordinates with spline interpolation for rotation transforms
- Use OpenCV LANCZOS4 for resize operations during cropping
- Set Lanczos as default for highest quality filtering
- Add proper longitude wrapping mode for equirectangular projection
- Improve image quality significantly during transformations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove uint8 conversion that was causing value clipping
- Keep images in float32 format throughout processing pipeline
- Add proper value clamping to [0,1] range after processing
- Maintain image quality during rotation and horizon adjustments
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement 3D rotation (yaw/pitch/roll) for equirectangular images
- Add horizon line adjustment functionality
- Support 180-degree longitude cropping with custom output dimensions
- Include bilinear interpolation for smooth transformations
- Provide three node types: rotation-only, crop-only, and combined processor
- Add comprehensive mathematical coordinate transformations
- Support batch processing with progress indicators
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>