Files

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.