Files

150 lines
5.1 KiB
Python

"""
Init
Description: ComfyUI custom node for PDF tools and media processing
Author: Eric Hiss (GitHub: EricRollei)
Contact: eric@historic.camera, eric@rollei.us
License: Dual License (Non-Commercial and Commercial Use)
Copyright (c) 2025 Eric Hiss. All rights reserved.
Dual License:
1. Non-Commercial Use: This software is licensed under the terms of the
Creative Commons Attribution-NonCommercial 4.0 International License.
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/
2. Commercial Use: For commercial use, a separate license is required.
Please contact Eric Hiss at eric@historic.camera or eric@rollei.us for licensing options.
Dependencies:
This code depends on several third-party libraries, each with its own license.
See CREDITS.md for a comprehensive list of dependencies and their licenses.
Third-party code:
- See CREDITS.md for complete list of dependencies
"""
"""
PDF Tools - ComfyUI Custom Node Package
Description: Main initialization module for PDF Tools custom nodes package.
Loads and registers all PDF processing, media downloading, and AI vision nodes for ComfyUI.
Author: Eric Hiss (GitHub: EricRollei)
Contact: eric@historic.camera, eric@rollei.us
License: Dual License (Non-Commercial and Commercial Use)
Copyright (c) 2025 Eric Hiss. All rights reserved.
Dual License:
1. Non-Commercial Use: This software is licensed under the terms of the
Creative Commons Attribution-NonCommercial 4.0 International License.
To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/4.0/
2. Commercial Use: For commercial use, a separate license is required.
Please contact Eric Hiss at eric@historic.camera or eric@rollei.us for licensing options.
Dependencies:
This package integrates multiple third-party libraries and tools:
- gallery-dl (GNU GPL v2) by Mike Fährmann: https://github.com/mikf/gallery-dl
- yt-dlp (Unlicense/Public Domain): https://github.com/yt-dlp/yt-dlp
- Florence-2 models (MIT License) by Microsoft
- SAM2 models (Apache 2.0) by Meta AI
- Surya OCR (GNU GPL v3) by Vik Paruchuri
- PyMuPDF/fitz (AGPL v3/Commercial) by Artifex Software
See CREDITS.md for complete list of dependencies and their licenses.
"""
# PDF-tools/__init__.py
import importlib.util
import os
import sys
import shutil
# Add this import for ComfyUI paths
try:
import folder_paths
except ImportError:
folder_paths = None
# Import the new Florence2RectangleDetector
try:
from .florence2_scripts.florence2_detector import Florence2RectangleDetector, BoundingBox
except ImportError:
print("Florence2RectangleDetector not available")
try:
from .sam2_scripts.sam2_florence_segmentation import SAM2FlorenceSegmenter
except ImportError:
print("SAM2FlorenceSegmenter not available")
try:
from .sam2_scripts.sam2_integration import SAM2FlorenceIntegration
except ImportError:
print("SAM2FlorenceIntegration not available")
try:
from .sam2_scripts.modeling_florence2 import Florence2LanguageForConditionalGeneration
except ImportError:
print("Florence2LanguageForConditionalGeneration not available")
try:
from .florence2_scripts.modern_image_enhancer import ModernImageEnhancer
except ImportError:
print("ModernImageEnhancer not available")
# Initialize node mappings
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
# Get the nodes directory
def get_nodes_dir(subpath=None, mkdir=False):
dir = os.path.dirname(__file__)
if subpath is not None:
dir = os.path.join(dir, subpath)
dir = os.path.abspath(dir)
if mkdir and not os.path.exists(dir):
os.makedirs(dir)
return dir
# Import nodes from the nodes directory
nodes_dir = get_nodes_dir("nodes")
for file in os.listdir(nodes_dir):
if not file.endswith(".py") or file.startswith("__"):
continue
# Skip downloader nodes - they are now in the download-tools package
if file.endswith("_downloader.py"):
print(f"Skipping {file} (moved to download-tools package)")
continue
name = os.path.splitext(file)[0]
try:
# Import the module
imported_module = importlib.import_module(".nodes.{}".format(name), __name__)
# Extract and update node mappings
if hasattr(imported_module, 'NODE_CLASS_MAPPINGS'):
NODE_CLASS_MAPPINGS.update(imported_module.NODE_CLASS_MAPPINGS)
print(f"Added {len(imported_module.NODE_CLASS_MAPPINGS)} node classes from {name}")
if hasattr(imported_module, 'NODE_DISPLAY_NAME_MAPPINGS'):
NODE_DISPLAY_NAME_MAPPINGS.update(imported_module.NODE_DISPLAY_NAME_MAPPINGS)
print(f"Loaded node module: {name}")
except Exception as e:
print(f"Error loading node module {name}: {str(e)}")
import traceback
traceback.print_exc()
# Print summary
print(f"Total nodes loaded: {len(NODE_CLASS_MAPPINGS)}")
for node_name in NODE_CLASS_MAPPINGS.keys():
print(f" - {node_name}")
# Version info
__version__ = "0.1.0"
__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "Florence2RectangleDetector", "BoundingBox"]