Files

403 lines
13 KiB
Markdown

# PDF Tools - Code Structure Summary
## Overview
This is a ComfyUI custom node package containing **downloader nodes** and **PDF/image processing nodes**. Despite the "PDF_tools" name, it's evolved into a comprehensive media download and processing toolkit.
## Directory Structure
```
PDF_tools/
├── __init__.py # Main entry point - loads all nodes
├── requirements.txt # Python dependencies
├── INSTALLATION_GUIDE.md # Setup instructions (NEW)
│
├── nodes/ # ComfyUI node implementations
│ ├── gallery_dl_downloader.py # Download from 100+ websites (Instagram, Reddit, etc.)
│ ├── yt_dlp_downloader.py # Video/audio downloader (YouTube, TikTok, etc.)
│ ├── pdf_extractor_v08.py # Latest PDF extraction node (MAIN VERSION)
│ ├── pdf_extractor_v07.py # Previous version
│ ├── enhanced_layout_parser_v06.py # Layout analysis node (MAIN VERSION)
│ ├── eric_rectangle_detector_node.py # Rectangle detection node
│ └── [older versions] # v01-v06 versions for reference
│
├── florence2_scripts/ # Florence2 AI vision model integration
│ ├── florence2_detector.py # Main detector (based on kijai's implementation)
│ ├── modeling_florence2.py # Florence2 model definition
│ ├── modern_image_enhancer.py # Image enhancement utilities
│ └── [test/demo scripts] # Various test and demo files
│
├── sam2_scripts/ # SAM2 (Segment Anything 2) integration
│ ├── sam2_florence_segmentation.py # Combined SAM2+Florence2
│ ├── sam2_integration.py # SAM2 wrapper
│ └── [other scripts]
│
├── configs/ # Configuration files
│ ├── auth_config.json # Authentication for various sites
│ ├── instagram_cookies.json # Cookie storage
│ ├── gallery-dl*.conf # Gallery-dl configurations
│ └── yt-dlp*.conf # Yt-dlp configurations
│
├── Docs/ # Documentation and guides
│ ├── gallery_dl_node_complete_guide.md # Gallery-dl setup guide
│ ├── yt_dlp_node_complete_guide.md # Yt-dlp setup guide
│ ├── SETUP_COMPLETE.md # Authentication setup
│ ├── test_*.py # Test scripts for various features
│ └── [various guides] # Implementation guides
│
├── oldfiles/ # Deprecated/backup files
├── test-*/ # Test output directories
└── [other directories] # History, cache, etc.
```
## Main Components
### 1. Gallery-dl Downloader (`nodes/gallery_dl_downloader.py`)
**Purpose:** Download media from 100+ websites
**Key Features:**
- URL list or URL file input
- Browser cookie support (Chrome, Firefox, etc.)
- Exported cookie file support
- Download archive (SQLite) to avoid duplicates
- Automatic file organization (images/videos/audio/other)
- Video filtering
- Metadata extraction
- Rate limiting and retry logic
- Instagram-specific optimizations
**Main Class:** `GalleryDLDownloader`
**Key Methods:**
- `_build_command()` - Constructs gallery-dl command
- `_convert_cookie_file()` - Converts cookie formats
- `_organize_downloaded_files()` - Sorts files by type
- `download()` - Main download execution
**External Dependencies:**
- `gallery-dl` command-line tool
- `browser-cookie3` for browser cookie extraction
### 2. Yt-dlp Downloader (`nodes/yt_dlp_downloader.py`)
**Purpose:** Download videos and audio from 1000+ sites
**Key Features:**
- URL list or batch file input
- Format selection (quality presets)
- Audio extraction (MP3, FLAC, etc.)
- Subtitle download and embedding
- Playlist support
- Rate limiting
- Cookie support
- File organization
**Main Class:** `YtDlpDownloader`
**Key Methods:**
- `_build_command()` - Constructs yt-dlp command
- `_organize_downloaded_files()` - Sorts files by type
- `download()` - Main download execution
**External Dependencies:**
- `yt-dlp` command-line tool
- `ffmpeg` for audio/video processing
### 3. PDF Extractor v08 (`nodes/pdf_extractor_v08.py`)
**Purpose:** Extract images and text from PDFs
**Key Features:**
- Page extraction as images
- Quality assessment
- Spread detection (book scanning)
- OCR integration
- Metadata preservation
- Multiple output formats
**Main Classes:**
- `PDFExtractorV08Node` - Main ComfyUI node
- `PDFProcessor` - Core PDF processing logic
**Dependencies:**
- `PyMuPDF` (fitz) for PDF reading
- `PyPDF2` as fallback
- Florence2 for image analysis
### 4. Florence2 Detector (`florence2_scripts/florence2_detector.py`)
**Purpose:** AI-powered vision model for image analysis
**Key Features:**
- Rectangle detection
- Object detection
- Caption generation
- Visual question answering
**Main Classes:**
- `Florence2RectangleDetector` - Main detector
- `BoundingBox` - Bounding box data structure
**Based on:** kijai's ComfyUI-Florence2 implementation
**Dependencies:**
- `transformers` library
- `safetensors`
- Florence2 models from Hugging Face
### 5. Enhanced Layout Parser v06 (`nodes/enhanced_layout_parser_v06.py`)
**Purpose:** Document layout analysis
**Key Features:**
- Text block detection
- Figure/table detection
- Multi-engine OCR support
- Computer vision-based analysis
**Dependencies:**
- `opencv-python`
- Optional: Surya OCR, LayoutLMv3
## Architecture Patterns
### Node Loading System
The `__init__.py` dynamically loads all nodes from the `nodes/` directory:
1. Scans `nodes/` for `.py` files
2. Imports each module
3. Extracts `NODE_CLASS_MAPPINGS` and `NODE_DISPLAY_NAME_MAPPINGS`
4. Registers with ComfyUI
### Downloader Pattern
Both gallery-dl and yt-dlp nodes follow the same pattern:
1. **Command Building** - Construct CLI command with all options
2. **Subprocess Execution** - Run external tool via subprocess
3. **Output Parsing** - Parse stdout/stderr for status
4. **File Organization** - Move downloaded files into organized folders
5. **Status Reporting** - Return summary with file counts and errors
### Error Handling
All nodes use extensive try-except blocks with:
- Graceful fallbacks (e.g., PyMuPDF → PyPDF2)
- Detailed debug output
- Status reporting to user
- Optional strict error mode
### Memory Management
AI model nodes (Florence2, SAM2) include:
- GPU memory checking
- Model offloading to CPU
- Batch size management
- CUDA cache clearing
## Key Design Decisions
### 1. External Command-Line Tools
**Why:** Gallery-dl and yt-dlp are mature, well-maintained tools with extensive site support. Wrapping them provides instant access to 1000+ sites without reimplementing complex protocols.
**Trade-offs:**
- ✅ Comprehensive site support
- ✅ Active maintenance
- ❌ Subprocess overhead
- ❌ Error parsing complexity
### 2. File Organization Within Profile Directories
**Why:** Preserves gallery-dl's original directory structure while organizing by file type.
**Implementation:** Files are moved into subdirectories (images/, videos/, audio/, other/) within each profile/site directory.
### 3. Cookie Authentication
**Why:** Many sites (Instagram, Reddit) require authentication for full access.
**Implementation:**
- Browser cookie extraction via `browser-cookie3`
- Exported cookie file support (JSON/Netscape format)
- Automatic cookie format conversion
**Challenges:**
- Chrome requires admin privileges on Windows
- Cookie expiration handling
- Site-specific cookie formats
### 4. Modular AI Model Integration
**Why:** Allow optional AI features without forcing all dependencies.
**Implementation:**
- Try-except imports for optional models
- Graceful degradation when models unavailable
- Lazy loading of heavy models
## Configuration System
### Config Files (`configs/`)
- **auth_config.json** - Site credentials and API keys
- **instagram_cookies.json** - Cookie storage
- **gallery-dl.conf** - Gallery-dl options
- **yt-dlp.conf** - Yt-dlp options
### Runtime Configuration
Nodes accept configuration via:
1. Node parameters (primary)
2. Config files (secondary)
3. Environment variables (some cases)
Priority: Node params > Config file > Defaults
## Testing Strategy
### Test Scripts (`Docs/test_*.py`)
- **test_instagram_optimal_setup.py** - Instagram download test
- **test_file_sorting.py** - File organization test
- **test_gallery_dl_node.py** - Gallery-dl integration test
- **test_yt_dlp_node.py** - Yt-dlp integration test
- And many more...
### Test Pattern
```python
# 1. Setup test environment
# 2. Create node instance
# 3. Run with test data
# 4. Verify output
# 5. Cleanup
```
## Dependencies Summary
### Core (Required)
- `Pillow` - Image processing
- `numpy` - Array operations
- `PyMuPDF` - PDF reading
- `opencv-python` - Computer vision
### AI/ML (Optional)
- `torch` - Deep learning (from ComfyUI)
- `transformers` - Hugging Face models
- `safetensors` - Model format
- `timm` - Vision models
### Downloaders (Optional)
- `gallery-dl` - Web media downloader
- `yt-dlp` - Video downloader
- `browser-cookie3` - Cookie extraction
### Utilities
- `requests` - HTTP requests
- `tqdm` - Progress bars
- `colorama` - Terminal colors
## Performance Considerations
### Memory Usage
- **Florence2**: ~2-4GB VRAM
- **SAM2**: ~4-8GB VRAM
- **PDF Processing**: Depends on PDF size
- **Downloads**: Minimal (streaming)
### Optimization Strategies
1. **Model Offloading** - Move models to CPU when not in use
2. **Batch Processing** - Process multiple items together
3. **Caching** - Cache model outputs
4. **Streaming Downloads** - Don't load entire files in memory
## Known Issues & Limitations
### Reddit API
- May hang with old credentials
- 2FA complications
- **Solution:** Use browser cookies instead
### Chrome Cookie Access
- Requires admin privileges on Windows
- **Solution:** Use Firefox or export cookies
### Instagram Rate Limiting
- Too many requests can trigger rate limits
- **Solution:** Use `--sleep` parameter (implemented)
### Large PDF Files
- Memory intensive for large PDFs
- **Solution:** Process page by page
## Future Improvement Areas
1. **Async Downloads** - Parallel downloads for better performance
2. **Download Queue** - Queue system for batch downloads
3. **Better Error Recovery** - Automatic retry with backoff
4. **Model Caching** - Better model management
5. **UI Improvements** - Progress bars in ComfyUI
6. **Database Integration** - Track all downloads in database
7. **Webhook Support** - Notify on completion
## How to Extend
### Adding a New Downloader Node
1. Create new file in `nodes/`
2. Implement node class with required methods
3. Add `NODE_CLASS_MAPPINGS` and `NODE_DISPLAY_NAME_MAPPINGS`
4. Test with various URLs
5. Document in `Docs/`
### Adding a New PDF Feature
1. Extend `PDFProcessor` class
2. Add new parameters to node
3. Update `_build_command()` or processing logic
4. Test with various PDFs
5. Update documentation
### Adding a New AI Model
1. Create new script in `florence2_scripts/` or `sam2_scripts/`
2. Implement model loading and inference
3. Add memory management
4. Create node wrapper in `nodes/`
5. Test on GPU and CPU
6. Document model requirements
## Code Quality Notes
### Good Practices
- ✅ Extensive error handling
- ✅ Detailed documentation
- ✅ Debug output for troubleshooting
- ✅ Modular design
- ✅ Graceful degradation
### Areas for Improvement
- ⚠️ Some code duplication between versions
- ⚠️ Test coverage could be better
- ⚠️ Some large functions could be split
- ⚠️ More type hints would help
- ⚠️ Some hardcoded paths
## Security Considerations
### Cookie Handling
- Cookies stored in JSON files
- **Risk:** Plaintext cookie storage
- **Mitigation:** Document proper file permissions
### Subprocess Execution
- User input passed to subprocess
- **Risk:** Command injection
- **Mitigation:** Input validation and sanitization (implemented)
### External Commands
- Relies on external binaries
- **Risk:** Malicious binary execution
- **Mitigation:** Check binary availability, use known paths
## Version History
- **v08** - Current PDF extractor with enhanced features
- **v07** - Added spread detection
- **v06** - Enhanced layout parser
- Earlier versions in oldfiles/
## Contributing Guidelines
If extending this codebase:
1. Follow existing patterns
2. Add comprehensive error handling
3. Include debug output
4. Test with real data
5. Document in Docs/
6. Update requirements.txt if adding dependencies
7. Keep backward compatibility when possible
## Summary
This is a **well-structured, feature-rich** ComfyUI custom node package that combines:
- Mature external tools (gallery-dl, yt-dlp)
- Modern AI models (Florence2, SAM2)
- Robust error handling
- Comprehensive documentation
The codebase is **production-ready** for the download nodes and **functional but evolving** for the AI model integration. The modular design makes it easy to use only the features you need.