Files

97 lines
3.8 KiB
Python

"""
Download Tools - ComfyUI Custom Node Package
Description: Media downloading nodes for ComfyUI. Supports downloading from 1000+ websites
including Instagram, Reddit, Twitter, YouTube, TikTok, and more using gallery-dl and yt-dlp.
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 uses the following third-party 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
- browser-cookie3 (GNU GPL v3) for cookie extraction
See CREDITS.md for complete list of dependencies and their licenses.
"""
import os
import sys
import importlib.util
from pathlib import Path
# Initialize node mappings
NODE_CLASS_MAPPINGS = {}
NODE_DISPLAY_NAME_MAPPINGS = {}
# Get the nodes directory
def get_nodes_dir():
"""Get the absolute path to the nodes directory."""
return os.path.join(os.path.dirname(__file__), "nodes")
# Dynamically load all node modules from the nodes directory
def load_nodes():
"""Load all Python modules from the nodes directory."""
nodes_dir = get_nodes_dir()
if not os.path.exists(nodes_dir):
print(f"[Download Tools] Warning: nodes directory not found at {nodes_dir}")
return
# Add nodes directory to Python path
if nodes_dir not in sys.path:
sys.path.insert(0, nodes_dir)
# Import each Python file in the nodes directory
for filename in os.listdir(nodes_dir):
if filename.endswith(".py") and not filename.startswith("_"):
module_name = filename[:-3]
try:
# Import the module using importlib
module_path = os.path.join(nodes_dir, filename)
print(f"[Download Tools] Loading node: {module_name}")
# Use importlib for safe module loading
spec = importlib.util.spec_from_file_location(
f'download_tools.nodes.{module_name}',
module_path
)
module = importlib.util.module_from_spec(spec)
sys.modules[spec.name] = module
spec.loader.exec_module(module)
# Extract NODE_CLASS_MAPPINGS and NODE_DISPLAY_NAME_MAPPINGS
if hasattr(module, 'NODE_CLASS_MAPPINGS'):
NODE_CLASS_MAPPINGS.update(module.NODE_CLASS_MAPPINGS)
print(f"[Download Tools] ✓ Registered classes from {module_name}: {list(module.NODE_CLASS_MAPPINGS.keys())}")
if hasattr(module, 'NODE_DISPLAY_NAME_MAPPINGS'):
NODE_DISPLAY_NAME_MAPPINGS.update(module.NODE_DISPLAY_NAME_MAPPINGS)
except Exception as e:
print(f"[Download Tools] Error loading {module_name}: {e}")
import traceback
traceback.print_exc()
# Load all nodes
load_nodes()
# Print summary
print(f"[Download Tools] Loaded {len(NODE_CLASS_MAPPINGS)} node(s):")
for node_name in NODE_CLASS_MAPPINGS.keys():
display_name = NODE_DISPLAY_NAME_MAPPINGS.get(node_name, node_name)
print(f" - {display_name} ({node_name})")
# Export for ComfyUI
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']