- Fixed tensor dimension error in mask slicing (unsqueeze for 2D mask)
- Fixed perspective coordinate system to center image at equator with yaw=0, pitch=0
- Simplified FOV calculation: eff_fov = fov * scale (prevents extreme barrel distortion)
- Increased scale max from 10.0 to 100.0
- Updated Stitch node with matching FOV calculation
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.
Implemented a comprehensive 360° panorama viewing system based on the ComfyUI_preview360panorama reference implementation. This adds interactive visualization capabilities to the LatLong node pack.
Changes:
- Added PanoramaViewerNode: Interactive single-image 360° viewer with pan and zoom controls
- Added PanoramaVideoViewerNode: Frame-by-frame 360° video panorama player
- Created JavaScript viewer using Three.js for WebGL-based equirectangular rendering
- Added required Pillow dependency for image encoding
- Updated .gitignore to allow js/lib/ directory
Features:
- Mouse drag to look around the panorama
- Mouse wheel to zoom in/out (FOV adjustment)
- Base64-encoded PNG delivery for seamless integration
- Automatic image resizing for performance optimization
- Support for grayscale to RGB conversion
- Batch processing support (uses first image from batch)
Technical Implementation:
- js/pano_viewer.js: Three.js-based viewer with MinimalPanoViewer and MinimalPanoVideoViewer classes
- js/lib/three.module.min.js: Three.js library loaded from CDN
- nodes.py: Added viewer node classes with proper OUTPUT_NODE configuration
- __init__.py: Registered new nodes and added WEB_DIRECTORY for JavaScript loading
The viewer integrates seamlessly with ComfyUI's node system and provides an intuitive interface for exploring equirectangular panoramas directly within the workflow.
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 .gitignore file to exclude .claude configuration directory
- Remove .claude directory and __pycache__ files from git tracking
- Exclude Python cache files, virtual environments, and IDE files
- Keep repository clean of development artifacts
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add forceInput: True to all input parameters
- Forces ComfyUI to always provide values instead of None
- Should definitively resolve validation errors
- Ensures robust parameter handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Move all optional parameters to required section with defaults
- Remove None value handling since ComfyUI will always provide valid values
- Prevents validation error at ComfyUI level before function execution
- All parameters now have proper defaults and will never be None
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Delete template directory that was only used for development reference
- Clean up repository to contain only the equirectangular processing nodes
- Remove unnecessary template files and examples
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Remove type hints from output_width and output_height parameters
- Add explicit None value handling for all optional parameters
- Set proper defaults when ComfyUI passes None values
- Prevents validation error: "int() argument must be a string, a bytes-like object or a real number, not 'NoneType'"
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Complete feature overview and node descriptions
- Installation instructions for multiple methods
- Usage examples and technical details
- Troubleshooting and performance tips
- Professional documentation for equirectangular processing capabilities
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replace None values with default integers (1024, 512) for output dimensions
- Prevents ComfyUI validation error when crop_to_square is used
- Values are ignored when not using crop_to_180, so defaults are safe
- Fixes: "int() argument must be a string, a bytes-like object or a real number, not 'NoneType'"
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 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>