Delete ANALYSIS.md
This commit is contained in:
-361
@@ -1,361 +0,0 @@
|
||||
# ComfyUI-DiscordSend Codebase Analysis
|
||||
|
||||
## Executive Summary
|
||||
|
||||
ComfyUI-DiscordSend is a well-structured custom node extension (~3,824 lines) that bridges ComfyUI's AI image/video generation with Discord via webhooks. The codebase has been recently modularized (v1.1.0) with clear separation of concerns, comprehensive security measures, and solid testing foundations.
|
||||
|
||||
---
|
||||
|
||||
## Current Architecture Overview
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
comfyui-discordsend/
|
||||
├── __init__.py # Node registration (30 lines)
|
||||
├── discord_image_node.py # Image node (986 lines)
|
||||
├── discord_video_node.py # Video node (1,549 lines)
|
||||
├── utils/
|
||||
│ ├── __init__.py # Public API exports
|
||||
│ ├── sanitizer.py # Security sanitization (269 lines)
|
||||
│ ├── discord_api.py # Webhook client (409 lines)
|
||||
│ ├── github_integration.py # CDN URL archival (137 lines)
|
||||
│ ├── prompt_extractor.py # Workflow extraction (240 lines)
|
||||
│ └── logging_config.py # Structured logging (43 lines)
|
||||
├── tests/
|
||||
│ └── test_utils.py # Unit tests (142 lines)
|
||||
└── requirements.txt # Minimal: requests>=2.25.0
|
||||
```
|
||||
|
||||
### Core Capabilities
|
||||
|
||||
| Feature | Image Node | Video Node |
|
||||
|---------|------------|------------|
|
||||
| Discord Webhook Integration | Yes | Yes |
|
||||
| Batch Processing | Up to 9 images | Single video |
|
||||
| Format Options | PNG, JPEG, WebP | GIF, MP4, WebM, ProRes |
|
||||
| Metadata Embedding | PNG chunks | N/A |
|
||||
| Workflow Export | Yes | Yes |
|
||||
| GitHub CDN Archival | Yes | Yes |
|
||||
| Prompt Extraction | Yes | Yes |
|
||||
|
||||
### Strengths
|
||||
|
||||
1. **Modular Design**: Clean separation between nodes, API layer, and utilities
|
||||
2. **Security-First**: Comprehensive sanitization of webhooks and tokens
|
||||
3. **Minimal Dependencies**: Only `requests>=2.25.0` required
|
||||
4. **Graceful Degradation**: FFmpeg optional with fallbacks
|
||||
5. **ComfyUI Integration**: Proper INPUT_TYPES, UI previews, hidden inputs
|
||||
6. **Test Coverage**: Foundation tests for security-critical code
|
||||
|
||||
### Areas for Improvement
|
||||
|
||||
1. **Node File Complexity**: Both node files are large (986 and 1,549 lines)
|
||||
2. **Duplication**: Shared logic between image/video nodes could be abstracted
|
||||
3. **Test Coverage**: Only utils tested; nodes lack unit tests
|
||||
4. **Error Recovery**: Some edge cases could use more graceful handling
|
||||
5. **Configuration**: Hardcoded limits (25MB, 9 images) could be configurable
|
||||
|
||||
---
|
||||
|
||||
## Refactoring Recommendations
|
||||
|
||||
### Priority 1: Extract Shared Node Logic
|
||||
|
||||
Both nodes share significant patterns that could be consolidated:
|
||||
|
||||
```python
|
||||
# Proposed: utils/node_base.py
|
||||
class DiscordNodeBase:
|
||||
"""Shared functionality for Discord nodes."""
|
||||
|
||||
def validate_webhook(self, url): ...
|
||||
def prepare_discord_message(self, prompts, metadata): ...
|
||||
def handle_github_integration(self, cdn_urls, config): ...
|
||||
def sanitize_workflow(self, workflow): ...
|
||||
```
|
||||
|
||||
**Benefits**: Reduced duplication, easier maintenance, consistent behavior
|
||||
|
||||
### Priority 2: Configuration Management
|
||||
|
||||
```python
|
||||
# Proposed: utils/config.py
|
||||
class DiscordConfig:
|
||||
MAX_FILE_SIZE = 25 * 1024 * 1024 # 25MB
|
||||
MAX_IMAGES_PER_BATCH = 9
|
||||
MAX_MESSAGE_LENGTH = 2000
|
||||
WEBHOOK_TIMEOUT = 30
|
||||
# ...configurable via environment or config file
|
||||
```
|
||||
|
||||
### Priority 3: Expand Test Coverage
|
||||
|
||||
- Add integration tests for node execution
|
||||
- Mock Discord API for end-to-end testing
|
||||
- Test video encoding paths
|
||||
|
||||
### Priority 4: Type Hints
|
||||
|
||||
The codebase lacks comprehensive type hints. Adding them would improve:
|
||||
- IDE support and autocomplete
|
||||
- Static analysis with mypy
|
||||
- Documentation clarity
|
||||
|
||||
---
|
||||
|
||||
## Companion Discord Bot Analysis
|
||||
|
||||
### Feasibility Assessment: **Highly Feasible**
|
||||
|
||||
The current architecture actually makes a companion bot quite natural to implement:
|
||||
|
||||
| Factor | Assessment | Notes |
|
||||
|--------|------------|-------|
|
||||
| **API Abstraction** | Ready | `discord_api.py` already handles Discord communication |
|
||||
| **Sanitization** | Ready | Security layer is mature and reusable |
|
||||
| **Dependencies** | Minimal | Would add `discord.py` or `pycord` |
|
||||
| **Architecture** | Compatible | Modular design allows bot to share utils |
|
||||
|
||||
### What a Companion Bot Could Offer
|
||||
|
||||
#### 1. **Interactive Queue Management**
|
||||
|
||||
```
|
||||
User: /queue status
|
||||
Bot: 📊 Your ComfyUI Queue:
|
||||
• Position 3 of 7
|
||||
• Estimated time: ~4 minutes
|
||||
• Current workflow: "portrait_generation_v2"
|
||||
|
||||
User: /queue cancel 5
|
||||
Bot: ✅ Cancelled job #5 (landscape_batch)
|
||||
```
|
||||
|
||||
Currently, users send images after generation. A bot could provide real-time queue visibility and control directly in Discord.
|
||||
|
||||
#### 2. **Workflow Triggers from Discord**
|
||||
|
||||
```
|
||||
User: /generate portrait --prompt "cyberpunk warrior" --steps 30
|
||||
Bot: 🎨 Queued! Job #42
|
||||
Workflow: portrait_template
|
||||
Estimated: 2 minutes
|
||||
|
||||
[2 minutes later]
|
||||
Bot: ✨ Job #42 Complete! [4 images attached]
|
||||
```
|
||||
|
||||
**Benefits**:
|
||||
- No need to open ComfyUI for simple generations
|
||||
- Mobile-friendly generation triggers
|
||||
- Preset workflows accessible via slash commands
|
||||
|
||||
#### 3. **Prompt Management & Templates**
|
||||
|
||||
```
|
||||
User: /prompt save "hero-shot" "cinematic lighting, dramatic pose, 8k"
|
||||
Bot: 💾 Saved prompt template "hero-shot"
|
||||
|
||||
User: /prompt list
|
||||
Bot: Your templates:
|
||||
• hero-shot: "cinematic lighting..."
|
||||
• anime-style: "anime, cel shaded..."
|
||||
• photorealistic: "RAW photo, 8k..."
|
||||
|
||||
User: /generate using hero-shot --subject "robot warrior"
|
||||
```
|
||||
|
||||
#### 4. **Gallery & History**
|
||||
|
||||
```
|
||||
User: /gallery today
|
||||
Bot: 📸 Today's Generations (23 images)
|
||||
[Thumbnail grid with navigation buttons]
|
||||
|
||||
User: /history #42
|
||||
Bot: Job #42 Details:
|
||||
• Workflow: portrait_v2
|
||||
• Seed: 12345
|
||||
• Steps: 30
|
||||
• [Re-run] [Variations] [Upscale]
|
||||
```
|
||||
|
||||
#### 5. **User Preference Storage**
|
||||
|
||||
```
|
||||
User: /settings default-steps 25
|
||||
Bot: ✅ Default steps set to 25
|
||||
|
||||
User: /settings show
|
||||
Bot: Your Settings:
|
||||
• Default steps: 25
|
||||
• Default sampler: euler_ancestral
|
||||
• Auto-send to #ai-art: enabled
|
||||
• Quality preset: high
|
||||
```
|
||||
|
||||
#### 6. **Batch Operations**
|
||||
|
||||
```
|
||||
User: /batch upscale --channel #raw-outputs --count 10
|
||||
Bot: 🔄 Queued 10 images for upscaling
|
||||
Progress: ████████░░ 8/10
|
||||
```
|
||||
|
||||
#### 7. **Server Administration**
|
||||
|
||||
```
|
||||
Admin: /discordsend config set-channel #ai-art
|
||||
Bot: ✅ Default output channel set to #ai-art
|
||||
|
||||
Admin: /discordsend stats
|
||||
Bot: 📊 Server Statistics (This Month):
|
||||
• Total generations: 1,247
|
||||
• Top user: @alice (342)
|
||||
• Peak hour: 8-9 PM
|
||||
• Avg generation time: 45s
|
||||
```
|
||||
|
||||
### Architecture for Bot Integration
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Discord Server │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────────┐ │
|
||||
│ │ Users │ │ Channels │ │ Slash Commands │ │
|
||||
│ └────┬─────┘ └────┬─────┘ └────────────┬─────────────┘ │
|
||||
└───────┼─────────────┼────────────────────┼──────────────────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Companion Discord Bot │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ Command Handler (slash commands, messages) │ │
|
||||
│ ├─────────────────────────────────────────────────────┤ │
|
||||
│ │ Queue Manager │ Template Store │ User Prefs │ │
|
||||
│ ├─────────────────────────────────────────────────────┤ │
|
||||
│ │ ComfyUI API Client (REST/WebSocket) │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
└────────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ ComfyUI Server │
|
||||
│ ┌─────────────────────────────────────────────────────┐ │
|
||||
│ │ ComfyUI Core + API │ │
|
||||
│ ├─────────────────────────────────────────────────────┤ │
|
||||
│ │ comfyui-discordsend (existing nodes) │ │
|
||||
│ │ • DiscordSendSaveImage │ │
|
||||
│ │ • DiscordSendSaveVideo │ │
|
||||
│ │ • Shared utils (sanitizer, discord_api, etc.) │ │
|
||||
│ └─────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Shared Code Strategy
|
||||
|
||||
```python
|
||||
# The bot could import and reuse existing utilities:
|
||||
from comfyui_discordsend.utils import (
|
||||
sanitize_json_for_export, # Security
|
||||
validate_webhook_url, # Validation
|
||||
DiscordWebhookClient, # API (for fallback)
|
||||
extract_prompts_from_workflow, # Workflow parsing
|
||||
)
|
||||
|
||||
# New bot-specific modules:
|
||||
comfyui_discordsend_bot/
|
||||
├── bot.py # Main bot entry point
|
||||
├── cogs/
|
||||
│ ├── generation.py # /generate, /queue commands
|
||||
│ ├── gallery.py # /gallery, /history commands
|
||||
│ ├── templates.py # /prompt, /workflow commands
|
||||
│ └── admin.py # Server configuration
|
||||
├── comfyui_client.py # ComfyUI API integration
|
||||
├── database/
|
||||
│ ├── models.py # User prefs, templates, history
|
||||
│ └── migrations/
|
||||
└── config.py # Bot configuration
|
||||
```
|
||||
|
||||
### Benefits Summary
|
||||
|
||||
| Benefit | Impact | Complexity |
|
||||
|---------|--------|------------|
|
||||
| Mobile generation access | High | Medium |
|
||||
| Queue visibility | High | Low |
|
||||
| Prompt templates | Medium | Low |
|
||||
| Generation history | Medium | Medium |
|
||||
| Server statistics | Low | Low |
|
||||
| Batch operations | High | Medium |
|
||||
| User preferences | Medium | Low |
|
||||
| Workflow triggers | Very High | High |
|
||||
|
||||
### Recommended Bot Tech Stack
|
||||
|
||||
| Component | Recommendation | Rationale |
|
||||
|-----------|----------------|-----------|
|
||||
| Framework | `discord.py` or `pycord` | Mature, async, slash command support |
|
||||
| Database | SQLite (small), PostgreSQL (large) | User prefs, history, templates |
|
||||
| ComfyUI Integration | REST API + WebSocket | Queue status, generation triggers |
|
||||
| Hosting | Self-hosted alongside ComfyUI | Shared resources, low latency |
|
||||
|
||||
---
|
||||
|
||||
## Implementation Roadmap
|
||||
|
||||
### Phase 1: Foundation (Refactoring)
|
||||
|
||||
1. Extract shared node logic into base class
|
||||
2. Create configuration management module
|
||||
3. Expand test coverage
|
||||
4. Add type hints to public APIs
|
||||
|
||||
### Phase 2: Bot MVP
|
||||
|
||||
1. Set up Discord bot skeleton with slash commands
|
||||
2. Implement `/generate` with basic workflow trigger
|
||||
3. Add `/queue` status commands
|
||||
4. Create simple SQLite storage for user preferences
|
||||
|
||||
### Phase 3: Enhanced Features
|
||||
|
||||
1. Prompt template system
|
||||
2. Generation history and gallery
|
||||
3. Batch operations
|
||||
4. Server administration commands
|
||||
|
||||
### Phase 4: Polish
|
||||
|
||||
1. Comprehensive documentation
|
||||
2. Docker deployment options
|
||||
3. Configuration UI (web dashboard?)
|
||||
4. Community workflow sharing
|
||||
|
||||
---
|
||||
|
||||
## Risk Assessment
|
||||
|
||||
| Risk | Likelihood | Mitigation |
|
||||
|------|------------|------------|
|
||||
| ComfyUI API changes | Medium | Abstract API layer, version pinning |
|
||||
| Discord API rate limits | Low | Implement proper rate limiting |
|
||||
| Security exposure | Medium | Reuse existing sanitization, audit bot commands |
|
||||
| Maintenance burden | Medium | Clear separation between node and bot repos |
|
||||
| User adoption | Unknown | Start with high-value features, gather feedback |
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
|
||||
Adding a companion Discord bot is **highly feasible** and would significantly enhance the value proposition of ComfyUI-DiscordSend. The current modular architecture provides an excellent foundation, with reusable utilities for security, API communication, and workflow handling.
|
||||
|
||||
**Key Recommendation**: Start with a minimal bot that solves one pain point well (e.g., queue visibility or simple generation triggers), then expand based on user feedback. The existing open-source model supports this incremental approach.
|
||||
|
||||
The refactoring suggestions above would prepare the codebase for bot integration while also improving the standalone node quality. Consider tackling Phase 1 refactoring before or in parallel with bot development.
|
||||
|
||||
---
|
||||
|
||||
*Analysis generated: 2026-01-12*
|
||||
*Codebase version: 1.1.0*
|
||||
Reference in New Issue
Block a user