Node Header Updates: - Add proper attribution headers to 10+ key nodes - Include original paper citations with BibTeX - Document dependencies and licenses for each algorithm - Fix corrupted docstring in advanced_film_grain_node.py New Documentation Files: - CONTRIBUTING.md: Complete contribution guidelines - Code of conduct and expectations - Development setup instructions - Code style guidelines and templates - Pull request process - License agreement terms - Attribution requirements - CITATION.cff: Machine-readable citation format - GitHub displays 'Cite this repository' button - Includes all major research papers implemented - Properly formatted for academic use - .zenodo.json: Zenodo/DOI integration - Enables automatic DOI assignment on release - Links to all related research papers - Documents dependencies and relationships - CONTRIBUTORS.md: Recognition of contributors - Credits all algorithm authors - Acknowledges third-party libraries - Template for future contributors - Special thanks section Updated Nodes: - DnCNN, SCUNet, SwinIR, NAFNet (AI models) - BM3D GPU (algorithm implementation) - Wavelet, NLM, Richardson-Lucy, Wiener (traditional) - Advanced Film Grain, Frequency Enhancement - DeepInv (external service integration)
411 lines
9.8 KiB
Markdown
411 lines
9.8 KiB
Markdown
# Contributing to Eric's Image Processing Nodes
|
|
|
|
Thank you for your interest in contributing to this project! This document provides guidelines for contributing code, documentation, and other improvements.
|
|
|
|
## Table of Contents
|
|
|
|
- [Code of Conduct](#code-of-conduct)
|
|
- [How Can I Contribute?](#how-can-i-contribute)
|
|
- [Development Setup](#development-setup)
|
|
- [Code Style Guidelines](#code-style-guidelines)
|
|
- [License Agreement](#license-agreement)
|
|
- [Pull Request Process](#pull-request-process)
|
|
- [Attribution Requirements](#attribution-requirements)
|
|
|
|
## Code of Conduct
|
|
|
|
### Our Pledge
|
|
|
|
We are committed to providing a welcoming and inclusive environment for all contributors, regardless of experience level, gender identity, sexual orientation, disability, personal appearance, race, ethnicity, age, religion, or nationality.
|
|
|
|
### Expected Behavior
|
|
|
|
- Be respectful and constructive in discussions
|
|
- Provide helpful feedback
|
|
- Focus on the code and ideas, not the person
|
|
- Be patient with newcomers
|
|
- Give credit where it's due
|
|
|
|
### Unacceptable Behavior
|
|
|
|
- Harassment, discrimination, or offensive comments
|
|
- Trolling or deliberately inflammatory behavior
|
|
- Publishing others' private information without permission
|
|
- Any conduct that would be considered inappropriate in a professional setting
|
|
|
|
## How Can I Contribute?
|
|
|
|
### Reporting Bugs
|
|
|
|
**Before submitting a bug report:**
|
|
|
|
1. Check the existing [GitHub Issues](https://github.com/EricRollei/Eric_Image_Processing_Nodes/issues)
|
|
2. Test with the latest version
|
|
3. Ensure it's not a ComfyUI issue (try with vanilla ComfyUI)
|
|
|
|
**When submitting a bug report, include:**
|
|
|
|
- ComfyUI version
|
|
- Python version
|
|
- Operating system
|
|
- GPU/CUDA version (if using GPU features)
|
|
- Complete error message and traceback
|
|
- Minimal reproducible example
|
|
- Screenshots or workflow JSON if applicable
|
|
|
|
### Suggesting Enhancements
|
|
|
|
We welcome suggestions for new features! Please include:
|
|
|
|
- Clear description of the feature
|
|
- Use case and motivation
|
|
- Example of how it would work
|
|
- Any relevant research papers or algorithms
|
|
- Whether you're willing to implement it yourself
|
|
|
|
### Contributing Code
|
|
|
|
We welcome contributions of:
|
|
|
|
- **New Nodes**: Additional image processing algorithms
|
|
- **Bug Fixes**: Corrections to existing code
|
|
- **Performance Improvements**: Optimizations
|
|
- **Documentation**: Improvements to guides and examples
|
|
- **Tests**: Unit tests and integration tests
|
|
- **Examples**: Sample workflows and use cases
|
|
|
|
## Development Setup
|
|
|
|
### 1. Fork and Clone
|
|
|
|
```bash
|
|
# Fork the repository on GitHub, then clone your fork:
|
|
git clone https://github.com/YOUR_USERNAME/Eric_Image_Processing_Nodes.git
|
|
cd Eric_Image_Processing_Nodes
|
|
```
|
|
|
|
### 2. Set Up Development Environment
|
|
|
|
```bash
|
|
# Create a virtual environment
|
|
python -m venv .venv
|
|
|
|
# Activate it
|
|
# Windows:
|
|
.venv\Scripts\activate
|
|
# Linux/Mac:
|
|
source .venv/bin/activate
|
|
|
|
# Install dependencies
|
|
pip install -r requirements.txt
|
|
|
|
# Install development dependencies
|
|
pip install pytest black flake8 mypy
|
|
```
|
|
|
|
### 3. Install Pre-commit Hooks (Optional but Recommended)
|
|
|
|
```bash
|
|
pip install pre-commit
|
|
pre-commit install
|
|
```
|
|
|
|
### 4. Link to ComfyUI
|
|
|
|
```bash
|
|
# Create a symlink in ComfyUI's custom_nodes directory
|
|
# Windows (run as administrator):
|
|
mklink /D "C:\path\to\ComfyUI\custom_nodes\Eric_Image_Processing_Nodes" "C:\path\to\your\clone"
|
|
|
|
# Linux/Mac:
|
|
ln -s /path/to/your/clone /path/to/ComfyUI/custom_nodes/Eric_Image_Processing_Nodes
|
|
```
|
|
|
|
## Code Style Guidelines
|
|
|
|
### Python Style
|
|
|
|
We follow **PEP 8** with some modifications:
|
|
|
|
```python
|
|
# Line length: 100 characters (not 79)
|
|
# Use 4 spaces for indentation (no tabs)
|
|
# Use double quotes for strings (unless single quotes avoid escaping)
|
|
```
|
|
|
|
### File Header Template
|
|
|
|
All new node files must include a proper header:
|
|
|
|
```python
|
|
"""
|
|
[Node Name] for ComfyUI
|
|
[Brief description]
|
|
|
|
Author: Eric Hiss (GitHub: EricRollei)
|
|
License: See LICENSE file in repository root
|
|
|
|
[If using external algorithm/model:]
|
|
Original Algorithm:
|
|
Paper: [Title]
|
|
Authors: [Authors]
|
|
Source: [URL]
|
|
License: [License]
|
|
|
|
Citation:
|
|
@[type]{[key],
|
|
title={[Title]},
|
|
author={[Authors]},
|
|
year={[Year]}
|
|
}
|
|
|
|
Dependencies:
|
|
- Library (License)
|
|
- Library (License)
|
|
"""
|
|
```
|
|
|
|
### Node Structure
|
|
|
|
Follow the established pattern:
|
|
|
|
```python
|
|
class YourNode(BaseImageProcessingNode):
|
|
"""
|
|
Detailed docstring explaining:
|
|
- What the node does
|
|
- When to use it
|
|
- Key parameters
|
|
- Typical use cases
|
|
"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"image": ("IMAGE",),
|
|
# ... other inputs
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("IMAGE",)
|
|
RETURN_NAMES = ("processed_image",)
|
|
FUNCTION = "process"
|
|
CATEGORY = "Eric's Image Processing/Your Category"
|
|
|
|
def process(self, image, **kwargs):
|
|
# Process logic here
|
|
pass
|
|
```
|
|
|
|
### Processing Script Structure
|
|
|
|
Keep processing logic separate from node code:
|
|
|
|
```python
|
|
# scripts/your_algorithm.py
|
|
"""
|
|
Pure processing functions (no ComfyUI dependencies)
|
|
Can be tested standalone
|
|
"""
|
|
|
|
def your_algorithm(image_np: np.ndarray, **params) -> np.ndarray:
|
|
"""
|
|
Process image with your algorithm.
|
|
|
|
Args:
|
|
image_np: Input image as numpy array [H, W, C] with values 0-255
|
|
**params: Algorithm parameters
|
|
|
|
Returns:
|
|
Processed image as numpy array [H, W, C] with values 0-255
|
|
"""
|
|
# Ensure contiguous array for OpenCV compatibility
|
|
image_np = np.ascontiguousarray(image_np)
|
|
|
|
# Your processing logic
|
|
|
|
# Ensure output is contiguous
|
|
result = np.ascontiguousarray(result)
|
|
return result
|
|
```
|
|
|
|
### Testing
|
|
|
|
Add tests for new functionality:
|
|
|
|
```python
|
|
# tests/test_your_node.py
|
|
import pytest
|
|
import numpy as np
|
|
from scripts.your_algorithm import your_algorithm
|
|
|
|
def test_your_algorithm_basic():
|
|
"""Test basic functionality"""
|
|
image = np.random.randint(0, 255, (100, 100, 3), dtype=np.uint8)
|
|
result = your_algorithm(image)
|
|
assert result.shape == image.shape
|
|
assert result.dtype == np.uint8
|
|
|
|
def test_your_algorithm_edge_cases():
|
|
"""Test edge cases"""
|
|
# Test with all black
|
|
black = np.zeros((100, 100, 3), dtype=np.uint8)
|
|
result = your_algorithm(black)
|
|
assert result is not None
|
|
```
|
|
|
|
## License Agreement
|
|
|
|
### By Contributing, You Agree That:
|
|
|
|
1. **Your contributions will be licensed** under the same dual license as the project:
|
|
- Non-commercial: CC BY-NC 4.0
|
|
- Commercial: Separate license required (contact eric@historic.camera)
|
|
|
|
2. **You have the right to contribute** the code (it's your original work or you have permission)
|
|
|
|
3. **You will provide proper attribution** for any:
|
|
- External algorithms or models used
|
|
- Research papers implemented
|
|
- Third-party code adapted
|
|
- Dependencies added
|
|
|
|
4. **You grant the project maintainer** (Eric Hiss) the right to:
|
|
- Include your contribution in the project
|
|
- Modify your contribution as needed
|
|
- Relicense your contribution if the project license changes
|
|
|
|
### For Significant Contributions
|
|
|
|
For major contributions (new models, significant features), please:
|
|
|
|
1. Add your name to the CONTRIBUTORS list
|
|
2. Include your email for attribution (optional)
|
|
3. Document your contribution in the commit message
|
|
|
|
## Pull Request Process
|
|
|
|
### 1. Create a Branch
|
|
|
|
```bash
|
|
git checkout -b feature/your-feature-name
|
|
# or
|
|
git checkout -b fix/bug-description
|
|
```
|
|
|
|
### 2. Make Your Changes
|
|
|
|
- Follow the code style guidelines
|
|
- Add proper headers to new files
|
|
- Update documentation as needed
|
|
- Add tests for new functionality
|
|
- Ensure all tests pass
|
|
|
|
### 3. Commit Your Changes
|
|
|
|
Use clear, descriptive commit messages:
|
|
|
|
```bash
|
|
git commit -m "Add [Feature]: Brief description
|
|
|
|
- Detailed point 1
|
|
- Detailed point 2
|
|
- References #issue-number if applicable"
|
|
```
|
|
|
|
### 4. Push to Your Fork
|
|
|
|
```bash
|
|
git push origin feature/your-feature-name
|
|
```
|
|
|
|
### 5. Submit Pull Request
|
|
|
|
On GitHub:
|
|
|
|
1. Go to your fork
|
|
2. Click "New Pull Request"
|
|
3. Select your branch
|
|
4. Fill out the PR template:
|
|
- Description of changes
|
|
- Motivation and context
|
|
- Testing performed
|
|
- Screenshots if UI changes
|
|
- Checklist items completed
|
|
|
|
### 6. Code Review
|
|
|
|
- Respond to review comments
|
|
- Make requested changes
|
|
- Update the PR
|
|
- Be patient and respectful
|
|
|
|
### 7. Merge
|
|
|
|
Once approved, the maintainer will merge your PR. Thank you! 🎉
|
|
|
|
## Attribution Requirements
|
|
|
|
### When Adding External Algorithms
|
|
|
|
You **must** include:
|
|
|
|
1. **Original paper citation** in docstring
|
|
2. **Source repository link** if applicable
|
|
3. **License information** of the original work
|
|
4. **Author credits**
|
|
5. **Link to pretrained weights** if used
|
|
|
|
### When Adding Dependencies
|
|
|
|
Update these files:
|
|
|
|
1. `requirements.txt` - Add the dependency
|
|
2. `LICENSE` - Add dependency license info
|
|
3. `Docs/MODEL_WEIGHTS.md` - If models are involved
|
|
4. File header - List new dependencies
|
|
|
|
### Example Attribution
|
|
|
|
```python
|
|
"""
|
|
Original Algorithm:
|
|
Paper: "Algorithm Name"
|
|
Authors: Smith et al., Conference 2023
|
|
Source: https://github.com/author/repo
|
|
License: MIT License
|
|
Pretrained weights: https://github.com/author/repo/releases
|
|
|
|
Citation:
|
|
@inproceedings{smith2023algorithm,
|
|
title={Algorithm Name},
|
|
author={Smith, John and Doe, Jane},
|
|
booktitle={Conference},
|
|
year={2023}
|
|
}
|
|
|
|
Implementation Notes:
|
|
[Your modifications or adaptations]
|
|
|
|
Contributed by: [Your Name] (GitHub: @yourusername)
|
|
Date: [Month Year]
|
|
"""
|
|
```
|
|
|
|
## Questions?
|
|
|
|
- **Issues**: Use [GitHub Issues](https://github.com/EricRollei/Eric_Image_Processing_Nodes/issues) for questions
|
|
- **Discussions**: Use [GitHub Discussions](https://github.com/EricRollei/Eric_Image_Processing_Nodes/discussions) for general discussions
|
|
- **Email**: For private matters, contact eric@historic.camera
|
|
|
|
## Recognition
|
|
|
|
Contributors will be acknowledged in:
|
|
|
|
- The CONTRIBUTORS file
|
|
- Release notes
|
|
- Documentation credits section
|
|
|
|
Thank you for contributing! Your work helps the ComfyUI community! 🚀
|