319 lines
7.5 KiB
Markdown
319 lines
7.5 KiB
Markdown
# Contributing to PDF Tools for ComfyUI
|
|
|
|
Thank you for your interest in contributing to PDF Tools! This document provides guidelines and information for contributors.
|
|
|
|
## Table of Contents
|
|
|
|
- [Code of Conduct](#code-of-conduct)
|
|
- [How to Contribute](#how-to-contribute)
|
|
- [Development Setup](#development-setup)
|
|
- [Coding Standards](#coding-standards)
|
|
- [Testing](#testing)
|
|
- [Submitting Changes](#submitting-changes)
|
|
- [License](#license)
|
|
|
|
## Code of Conduct
|
|
|
|
This project and everyone participating in it is governed by common sense and mutual respect. We expect all contributors to:
|
|
|
|
- Be respectful and inclusive
|
|
- Accept constructive criticism gracefully
|
|
- Focus on what is best for the community
|
|
- Show empathy towards other community members
|
|
|
|
## How to Contribute
|
|
|
|
### Reporting Bugs
|
|
|
|
If you find a bug, please open an issue with:
|
|
|
|
1. **Clear title and description**
|
|
2. **Steps to reproduce** the problem
|
|
3. **Expected behavior** vs **actual behavior**
|
|
4. **Environment details** (OS, Python version, ComfyUI version)
|
|
5. **Relevant logs or error messages**
|
|
6. **Screenshots** if applicable
|
|
|
|
### Suggesting Enhancements
|
|
|
|
Enhancement suggestions are welcome! Please open an issue with:
|
|
|
|
1. **Clear description** of the feature
|
|
2. **Use case** - why would this be useful?
|
|
3. **Examples** of how it would work
|
|
4. **References** to similar features in other tools (if applicable)
|
|
|
|
### Contributing Code
|
|
|
|
1. **Fork the repository** and create a branch from `main`
|
|
2. **Make your changes** following our coding standards
|
|
3. **Test thoroughly** with real data
|
|
4. **Update documentation** if needed
|
|
5. **Submit a pull request**
|
|
|
|
## Development Setup
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.10 or higher
|
|
- ComfyUI installation
|
|
- Git
|
|
|
|
### Setting Up Development Environment
|
|
|
|
```powershell
|
|
# Clone your fork
|
|
git clone https://github.com/YOUR_USERNAME/PDF_tools.git
|
|
cd PDF_tools
|
|
|
|
# Create virtual environment
|
|
python -m venv .venv
|
|
|
|
# Activate virtual environment
|
|
# Windows PowerShell:
|
|
.\.venv\Scripts\Activate.ps1
|
|
|
|
# Linux/Mac:
|
|
source .venv/bin/activate
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
|
|
# Install development dependencies (if any)
|
|
pip install pytest black flake8
|
|
```
|
|
|
|
### Testing Your Changes
|
|
|
|
1. **Copy to ComfyUI custom_nodes:**
|
|
```powershell
|
|
# Create symlink or copy to ComfyUI
|
|
# Example: mklink /D "C:\ComfyUI\custom_nodes\PDF_tools" "C:\path\to\your\PDF_tools"
|
|
```
|
|
|
|
2. **Start ComfyUI and test:**
|
|
- Verify nodes load correctly
|
|
- Test with real-world data
|
|
- Check for errors in console
|
|
|
|
3. **Run manual tests:**
|
|
- Test each modified node
|
|
- Verify backward compatibility
|
|
- Check error handling
|
|
|
|
## Coding Standards
|
|
|
|
### Python Style Guide
|
|
|
|
We follow [PEP 8](https://pep8.org/) with some modifications:
|
|
|
|
- **Line length**: 100 characters (prefer 80-90)
|
|
- **Indentation**: 4 spaces (no tabs)
|
|
- **Imports**: Group in order (standard library, third-party, local)
|
|
- **Docstrings**: Use for all public functions, classes, and modules
|
|
|
|
### File Headers
|
|
|
|
All Python files should include a header with license and credits:
|
|
|
|
```python
|
|
"""
|
|
[Module Name] - [Brief Description]
|
|
|
|
Author: [Your Name] (GitHub: YourUsername)
|
|
Original Author: Eric Hiss (GitHub: EricRollei)
|
|
Contact: [eric@historic.camera, eric@rollei.us]
|
|
License: Dual License (CC BY-NC 4.0 / Commercial)
|
|
Copyright (c) 2025 Eric Hiss. All rights reserved.
|
|
|
|
[Additional description if needed]
|
|
|
|
Dependencies:
|
|
- List key dependencies used by this specific module
|
|
- Include their licenses
|
|
|
|
[Additional notes]
|
|
"""
|
|
```
|
|
|
|
### Code Organization
|
|
|
|
```python
|
|
# 1. Standard library imports
|
|
import os
|
|
import sys
|
|
from typing import Dict, List, Optional
|
|
|
|
# 2. Third-party imports
|
|
import numpy as np
|
|
import torch
|
|
from PIL import Image
|
|
|
|
# 3. Local imports
|
|
from .utils import helper_function
|
|
```
|
|
|
|
### Error Handling
|
|
|
|
Always include comprehensive error handling:
|
|
|
|
```python
|
|
try:
|
|
# Your code here
|
|
result = process_image(image)
|
|
except ValueError as e:
|
|
print(f"Error: Invalid input - {e}")
|
|
return None
|
|
except Exception as e:
|
|
print(f"Unexpected error in process_image: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return None
|
|
```
|
|
|
|
### Logging and Debug Output
|
|
|
|
Use print statements for user-facing messages:
|
|
|
|
```python
|
|
print(f"[PDF Extractor] Processing {filename}")
|
|
print(f"[PDF Extractor] Extracted {count} images")
|
|
print(f"[PDF Extractor] ERROR: {error_message}")
|
|
```
|
|
|
|
### ComfyUI Node Structure
|
|
|
|
Follow the established pattern for ComfyUI nodes:
|
|
|
|
```python
|
|
class MyCustomNode:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"param1": ("STRING", {"default": ""}),
|
|
},
|
|
"optional": {
|
|
"param2": ("INT", {"default": 0}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
FUNCTION = "process"
|
|
CATEGORY = "PDF_tools"
|
|
|
|
def process(self, param1, param2=0):
|
|
"""Process the input and return result."""
|
|
try:
|
|
# Your logic here
|
|
return (result,)
|
|
except Exception as e:
|
|
print(f"Error in MyCustomNode: {e}")
|
|
return (None,)
|
|
```
|
|
|
|
## Testing
|
|
|
|
### Manual Testing
|
|
|
|
1. **Basic functionality**: Does the node work as expected?
|
|
2. **Edge cases**: Empty inputs, invalid data, very large files
|
|
3. **Error handling**: Graceful failures with helpful messages
|
|
4. **Performance**: Reasonable speed for typical use cases
|
|
5. **Memory usage**: No memory leaks or excessive consumption
|
|
|
|
### Test Data
|
|
|
|
- Use realistic test data (actual PDFs, images, URLs)
|
|
- Test with both small and large inputs
|
|
- Test with corrupted or malformed data
|
|
- Document any test cases in `Docs/` if they're useful examples
|
|
|
|
### Regression Testing
|
|
|
|
- Ensure existing functionality still works
|
|
- Test with existing workflows if possible
|
|
- Check for backward compatibility
|
|
|
|
## Submitting Changes
|
|
|
|
### Pull Request Process
|
|
|
|
1. **Update documentation** for any user-facing changes
|
|
2. **Add or update tests** if applicable
|
|
3. **Ensure your code follows** the coding standards
|
|
4. **Write a clear PR description** including:
|
|
- What changes were made
|
|
- Why they were needed
|
|
- How to test them
|
|
- Any breaking changes
|
|
|
|
### PR Description Template
|
|
|
|
```markdown
|
|
## Description
|
|
Brief description of changes
|
|
|
|
## Motivation
|
|
Why is this change needed?
|
|
|
|
## Changes Made
|
|
- Change 1
|
|
- Change 2
|
|
- Change 3
|
|
|
|
## Testing
|
|
How was this tested?
|
|
|
|
## Screenshots (if applicable)
|
|
[Add screenshots here]
|
|
|
|
## Checklist
|
|
- [ ] Code follows project style guidelines
|
|
- [ ] Documentation updated
|
|
- [ ] Tested with real data
|
|
- [ ] No breaking changes (or documented if necessary)
|
|
```
|
|
|
|
### Commit Messages
|
|
|
|
Use clear, descriptive commit messages:
|
|
|
|
```
|
|
Good examples:
|
|
- "Add support for multi-page PDF processing"
|
|
- "Fix memory leak in image processor"
|
|
- "Update README with new installation instructions"
|
|
|
|
Avoid:
|
|
- "fix bug"
|
|
- "update"
|
|
- "changes"
|
|
```
|
|
|
|
## License
|
|
|
|
By contributing to this project, you agree that your contributions will be licensed under the same dual license as the project (CC BY-NC 4.0 for non-commercial use, separate commercial license required).
|
|
|
|
You also certify that:
|
|
|
|
1. You have the right to contribute the code
|
|
2. Your contribution is your original work or properly attributed
|
|
3. You understand the licensing terms
|
|
|
|
## Questions?
|
|
|
|
If you have questions about contributing:
|
|
|
|
- **Open an issue** for general questions
|
|
- **Email**: eric@historic.camera or eric@rollei.us
|
|
- **Check existing issues** for similar questions
|
|
|
|
## Acknowledgments
|
|
|
|
Thank you for taking the time to contribute! Your efforts help make this project better for everyone.
|
|
|
|
---
|
|
|
|
**Remember**: This is a working codebase used in production. Please test thoroughly and maintain backward compatibility whenever possible.
|