docs: update CLAUDE.md as implementation checkpoint

Streamlined context file for Phase 1 implementation start:
- Current commit reference
- 8-phase implementation table with status
- Target file structure
- 9 canonical categories
- Key design decisions summary
- Quick reference for resuming work

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
slahiri
2025-12-27 02:35:43 +05:30
co-authored by Claude Opus 4.5
parent 7f1186d412
commit 7f4989f145
+100 -140
View File
@@ -1,157 +1,117 @@
# ComfyUI-AI-Photography-Toolkit
## Project Overview
A ComfyUI custom node toolkit for AI-powered image analysis and prompt generation. Provides multi-model tagging, VLM captioning, and prompt enhancement.
## Current State (Dec 2024)
## Current Version
- Branch: `dev/4.3.0`
- Tag: `v4.3.0`
**Branch**: `dev/4.3.0`
**Commit**: `7f1186d` - feat: add prompt composition pipeline and tokenization spec
## Architecture
### Active Task: Prompt Composition Rewrite
### Core Components
```
core/
├── models/ # VLM caption models
│ ├── florence.py # Florence-2 PromptGen (uses kijai's bundled impl)
│ ├── qwen.py # Qwen2-VL
│ └── base.py # BaseCaptionModel
├── taggers/ # Image analysis taggers
│ ├── wd14.py # WD14 tagger (ONNX)
│ ├── joytag.py # JoyTag (ONNX, 448x448)
│ ├── nudenet.py # NudeNet v2
│ ├── iqa.py # NIMA/MUSIQ/BRISQUE quality
│ ├── saliency.py # DINOv2 + CV fallback
│ ├── composition.py # CADB composition
│ ├── fashion/ # Fashion composite tagger
│ │ ├── fashion_clip.py
│ │ ├── yolov8_clothing.py
│ │ ├── yolos_fashionpedia.py
│ │ ├── segformer_clothes.py
│ │ └── wargon_classifier.py
│ └── pose/ # Pose composite tagger
│ └── mediapipe_pose.py
├── tagging_pipeline.py # Orchestrates all taggers
└── config/ # Model configs (YAML)
```
### Nodes
- `SID_TaggerConfig` - Configure taggers and thresholds
- `SID_ZImagePromptGenerator` - Main prompt generation node
## Key Technical Decisions
### Florence-2 Loading (transformers 4.50+)
- Uses kijai's `comfyui-florence2` bundled implementation
- Must register both model AND processor classes in sys.modules
- See `_load_kijai_florence_class()` and `_register_processor_from_model()`
### Dependency Management
- Standard `requirements.txt` approach (ComfyUI-Manager compatible)
- No auto-install code - removed all subprocess/pip machinery
- torch/torchvision NOT in requirements (user installs with correct CUDA)
### JSON Output Format
```json
{
"module_name": {
"tags": ["tag1", "tag2", "tag3"],
"attributes": { "count": 3, "model": "...", ... }
}
}
```
## Recent Fixes (Dec 2024)
1. **Florence-2 processor loading** - Register `Florence2Processor` from model's local `processing_florence2.py`
2. **Saliency without opencv-contrib** - Uses edge + color contrast fallback, DINOv2 uses feature norms not attention
3. **JoyTag ONNX** - Fixed to use correct 448x448 input size
4. **Removed RAM++** - Incompatible with transformers 4.50+ (`apply_chunking_to_forward` removed)
5. **WD14 model list** - Fixed invalid `wd-vit-large-tagger-v3`, added `wd-v1-4-vit-tagger-v2`
## Available WD14 Models
- wd-swinv2-tagger-v3 (default, best)
- wd-vit-tagger-v3
- wd-convnext-tagger-v3
- wd-eva02-large-tagger-v3
- wd-v1-4-moat-tagger-v2
- wd-v1-4-swinv2-tagger-v2
- wd-v1-4-convnext-tagger-v2
- wd-v1-4-vit-tagger-v2
## Fashion Vocabulary
Expanded to include 50+ ethnic/traditional wear terms:
- Indian: sari, lehenga, salwar kameez, kurta, sherwani, dupatta
- Middle Eastern: abaya, hijab, thobe, kaftan
- Asian: kimono, hanbok, cheongsam, ao dai
See `core/taggers/vocabularies.json` for full list.
## Known Limitations
- FashionCLIP trained on Western fashion - ethnic wear detection may be limited
- MediaPipe pose may fail on some systems (reinstall mediapipe)
- CADB composition model unavailable (uses fallback CV analysis)
## Development Commands
```bash
# Clone on new machine
git clone git@github.com:slahiri/ComfyUI-AI-Photography-Toolkit.git
cd ComfyUI-AI-Photography-Toolkit
git checkout dev/4.3.0
# Install dependencies (in ComfyUI venv)
pip install -r requirements.txt
```
## File Locations
- Models: `D:\ComfyUI\models\LLM\` (Florence, Qwen)
- Taggers: `D:\ComfyUI\models\taggers\` (WD14, JoyTag)
- Config: `core/config/*.yaml`
- Vocabularies: `core/taggers/vocabularies.json`
## Active Development: Prompt Composition Rewrite
**Status**: In Progress (Dec 2024)
The `SID_PromptCompose` node is being rewritten with a new tokenization → classification → assembly pipeline.
### Documentation
| Document | Purpose |
|----------|---------|
| [docs/image_tokenization_spec.md](docs/image_tokenization_spec.md) | Full technical specification (Phases 1-6) |
| [docs/implementation_plan.md](docs/implementation_plan.md) | Implementation roadmap with task checkboxes |
### Quick Summary
Rewriting the `SID_PromptCompose` node with a new tokenization → classification → assembly pipeline.
**Problem**: Current `StandardGenerator` produces broken output:
- Grammar errors ("her eyes are brown eyes")
- Meta-commentary not filtered ("in the middle of the image")
- Missing content, redundant phrases
**Solution**: New pipeline with:
1. **Tokenization** - Extract from all metadata sources into `ImageToken` format
2. **Classification** - 5-layer cascade assigns tokens to 9 canonical categories
3. **Assembly (Rule-Based)** - Templates + phrase mappings + grammar rules
4. **Assembly (LLM)** - Optional enhancement using LLM providers
**Solution**: 8-phase implementation plan
### Modes
- `Standard` → Rule-based assembly (fast, free, deterministic)
- `Enhance with AI` → LLM-based assembly (higher quality, costs money)
## Documentation
| Document | Purpose |
|----------|---------|
| [docs/image_tokenization_spec.md](docs/image_tokenization_spec.md) | Full technical specification (Phases 1-7) |
| [docs/implementation_plan.md](docs/implementation_plan.md) | Implementation roadmap with task checkboxes |
## Implementation Phases
| Phase | Description | Priority | Status |
|-------|-------------|----------|--------|
| 1 | Core Infrastructure (ImageToken, TokenType, categories) | HIGH | Not Started |
| 2 | Tokenization (extractors for taggers, analyzers, captions) | HIGH | Not Started |
| 3 | Classification (5-layer cascade) | HIGH | Not Started |
| 4 | Rule-Based Assembly (templates, phrase mappings) | HIGH | Not Started |
| 5 | LLM Assembly (enhancement mode) | MEDIUM | Not Started |
| 6 | Validation (quality scoring) | LOW | Not Started |
| 7 | Integration (replace StandardGenerator) | HIGH | Not Started |
| 8 | Token Grounding Visualization | LOW | Not Started |
**MVP**: Phases 1-4, 7 (18-26 hours)
**Full**: All phases (31-46 hours)
## Target File Structure
### Key Files (New Structure)
```
core/compose/
├── tokenizer/ # Phase 1-2: Extract and normalize tokens
├── classifier/ # Phase 3: Assign to canonical categories
├── assembler/ # Phase 5-6: Rule-based and LLM assembly
├── validator/ # Quality validation (optional)
└── pipeline.py # Main orchestrator
├── tokenizer/
│ ├── __init__.py
│ ├── base.py # ImageToken, TokenType enum
│ ├── tagger_extractor.py # wd14, pixai, joytag, nudenet
│ ├── analyzer_extractor.py # photography, iqa, composition
│ ├── caption_extractor.py # florence captions
│ └── normalizer.py # deduplication, confidence
├── classifier/
│ ├── __init__.py
│ ├── base.py # TokenClassification
│ ├── categories.py # 9 canonical categories
│ ├── deterministic.py # Layer 1-2
│ └── dictionary.py # Layer 3
├── assembler/
│ ├── __init__.py
│ ├── base.py
│ ├── rule_based.py # Standard mode
│ ├── llm_based.py # Enhance with AI mode
│ ├── templates.py
│ └── phrase_mappings.py
├── validator/ # Optional
├── grounding/ # Phase 8, optional
└── pipeline.py # Main orchestrator
```
**Resume Work**: Start with [implementation_plan.md](docs/implementation_plan.md)
## 9 Canonical Categories
1. Quality Boosters
2. Subject
3. Subject Details (hair, eyes, face, body, clothing, skin)
4. Action/Pose
5. Environment/Scene
6. Lighting
7. Style/Medium
8. Composition
9. Technical Parameters
## Modes
- `Standard` → Rule-based assembly (fast, free, deterministic)
- `Enhance with AI` → LLM-based assembly (higher quality, API costs)
## Key Design Decisions
1. **ImageToken** - Unified format: text, confidence, source, token_type, metadata
2. **5-Layer Classification** - Deterministic → Source routing → Dictionary → Embeddings → Uncategorized
3. **META Filtering** - Remove "the image shows", "in the middle of" patterns
4. **Phrase Mappings** - "1girl" → "a woman", "cowboy shot" → "framed from mid-thigh up"
## Resume Work
1. Read [docs/implementation_plan.md](docs/implementation_plan.md)
2. Check task checkboxes for current progress
3. Continue from next uncompleted phase
4. Test incrementally after each phase
## Quick Reference
### Current Compose Location
- `core/compose/` - Existing implementation (to be replaced)
- `core/compose/standard.py` - Broken StandardGenerator
- `core/compose/llm.py` - LLM generator (reusable)
### Metadata Sources
- **Taggers**: wd14, pixai, joytag, nudenet
- **Analyzers**: photography, iqa, composition, saliency
- **Captions**: florence_caption, florence_description, florence_analyze, vlm_description
### Test Command
```bash
python -m pytest tests/compose/ -v
```