Files

398 lines
12 KiB
Markdown

# Metadata Structure Reference
This document provides a comprehensive reference for the metadata structure used in the Metadata System for ComfyUI. It details the fields, their meanings, and their organization.
## Overview
The metadata is organized into a structured hierarchy with four main sections:
- **basic**: Essential information such as title, description, and keywords
- **analysis**: Image analysis results including technical and aesthetic measures
- **ai_info**: AI generation information including model, prompt, and workflow data
- **regions**: Information about specific regions in the image (faces, objects)
## Basic Section
The `basic` section contains essential information about the image:
```json
"basic": {
"title": "Mountain Landscape",
"description": "AI generated mountain landscape with snow and trees",
"keywords": ["mountains", "landscape", "snow", "trees", "AI generated"],
"rating": 4,
"creator": "John Doe",
"rights": "Copyright © 2025 John Doe",
"create_date": "2025-03-15T12:34:56"
}
```
### Field Descriptions
| Field | Type | Description |
|-------|------|-------------|
| `title` | String | The title or name of the image |
| `description` | String | Detailed description or caption for the image |
| `keywords` | Array | Tags or keywords that describe the image content |
| `rating` | Integer | User-assigned rating (1-5 stars) |
| `creator` | String | Name of the image creator or photographer |
| `rights` | String | Copyright or licensing information |
| `create_date` | String | Creation date in ISO 8601 format |
## Analysis Section
The `analysis` section contains image analysis results:
```json
"analysis": {
"technical": {
"blur": {
"score": 0.92,
"higher_better": true,
"timestamp": "2025-03-15T12:34:56"
},
"noise": {
"score": 0.08,
"higher_better": false,
"timestamp": "2025-03-15T12:34:56"
},
"dimensions": {
"width": 512,
"height": 512,
"ratio": 1.0
},
"artifacts": {
"detected": false,
"score": 0.03
}
},
"aesthetic": {
"composition": 7.8,
"color_harmony": 8.2,
"overall": 7.9,
"timestamp": "2025-03-15T12:34:56"
},
"pyiqa": {
"niqe": {
"score": 3.45,
"higher_better": false,
"range": [0, 25],
"timestamp": "2025-03-15T12:34:56"
},
"musiq": {
"score": 78.2,
"higher_better": true,
"range": [0, 100],
"timestamp": "2025-03-15T12:34:56"
},
"clipiqa": {
"score": 0.82,
"higher_better": true,
"range": [0, 1],
"timestamp": "2025-03-15T12:34:56"
}
},
"classification": {
"style": {
"value": "photorealistic",
"confidence": 0.87,
"timestamp": "2025-03-15T12:34:56"
},
"content_type": {
"value": "landscape",
"confidence": 0.94,
"timestamp": "2025-03-15T12:34:56"
},
"has_text": {
"value": false,
"confidence": 0.98,
"timestamp": "2025-03-15T12:34:56"
}
},
"eiqa": {
"color": {
"dominant_colors": [
{
"name": "forest_green",
"hex": "#228B22",
"percentage": 0.35
},
{
"name": "snow",
"hex": "#FFFAFA",
"percentage": 0.28
},
{
"name": "sky_blue",
"hex": "#87CEEB",
"percentage": 0.25
}
],
"harmony": {
"type": "complementary",
"score": 0.85,
"is_harmonious": true
},
"characteristics": {
"temperature": "cool",
"contrast": "high",
"saturation": "medium"
}
}
}
}
```
### Technical Subsection
| Field | Type | Description |
|-------|------|-------------|
| `blur` | Object | Blur detection metrics |
| `blur.score` | Number | Blur score (higher values mean sharper for most detectors) |
| `blur.higher_better` | Boolean | Whether higher score means better quality |
| `noise` | Object | Noise detection metrics |
| `noise.score` | Number | Noise score (lower usually better) |
| `noise.higher_better` | Boolean | Whether higher score means better quality |
| `dimensions` | Object | Image dimension information |
| `dimensions.width` | Integer | Image width in pixels |
| `dimensions.height` | Integer | Image height in pixels |
| `dimensions.ratio` | Number | Aspect ratio (width/height) |
### Aesthetic Subsection
| Field | Type | Description |
|-------|------|-------------|
| `composition` | Number | Composition quality score (0-10) |
| `color_harmony` | Number | Color harmony score (0-10) |
| `overall` | Number | Overall aesthetic score (0-10) |
### PyIQA Subsection
Contains scores from various Image Quality Assessment (IQA) models:
| Field | Type | Description |
|-------|------|-------------|
| `niqe` | Object | Natural Image Quality Evaluator scores |
| `musiq` | Object | Multi-scale Image Quality Transformer scores |
| `clipiqa` | Object | CLIP-based Image Quality Assessment scores |
Each IQA model entry includes:
- `score`: The quality score
- `higher_better`: Whether higher scores mean better quality
- `range`: The score range as [min, max]
- `timestamp`: When the analysis was performed
### Classification Subsection
| Field | Type | Description |
|-------|------|-------------|
| `style` | Object | Detected image style information |
| `content_type` | Object | Detected content type |
| `has_text` | Object | Text detection results |
Classification entries include:
- `value`: The detected classification
- `confidence`: Confidence score (0-1)
- `timestamp`: When the classification was performed
### EIQA Color Subsection
| Field | Type | Description |
|-------|------|-------------|
| `dominant_colors` | Array | List of dominant colors in the image |
| `harmony` | Object | Color harmony analysis |
| `characteristics` | Object | General color characteristics |
## AI Info Section
The `ai_info` section contains information about AI generation:
```json
"ai_info": {
"generation": {
"model": "stable-diffusion-v1-5",
"prompt": "majestic mountains with snow caps, trees in foreground, clear blue sky",
"negative_prompt": "ugly, blurry, low quality, deformed",
"sampler": "euler_a",
"steps": 30,
"cfg_scale": 7.5,
"seed": 1234567890,
"width": 512,
"height": 512,
"batch_size": 1,
"loras": [
{
"name": "landscape_lora",
"strength": 0.8
}
],
"timestamp": "2025-03-15T12:34:56"
},
"workflow": {
"nodes": {
"1": {
"class_type": "KSampler",
"inputs": {
"seed": 1234567890,
"steps": 30,
"cfg": 7.5,
"sampler_name": "euler_a",
"scheduler": "normal",
"denoise": 1.0
}
},
"2": {
"class_type": "CLIPTextEncode",
"inputs": {
"text": "majestic mountains with snow caps, trees in foreground, clear blue sky"
}
},
"3": {
"class_type": "CLIPTextEncode",
"inputs": {
"text": "ugly, blurry, low quality, deformed"
},
"is_negative": true
}
// More nodes...
}
}
}
```
### Generation Subsection
| Field | Type | Description |
|-------|------|-------------|
| `model` | String | Base model name/identifier |
| `prompt` | String | Main generation prompt |
| `negative_prompt` | String | Negative prompt for undesired elements |
| `sampler` | String | Sampling algorithm used |
| `steps` | Integer | Number of sampling steps |
| `cfg_scale` | Number | Classifier-free guidance scale |
| `seed` | Number | Generation seed value |
| `width` | Integer | Generated image width |
| `height` | Integer | Generated image height |
| `loras` | Array | LoRA models used in generation |
### Workflow Subsection
Contains the complete ComfyUI workflow data, including:
- Node definitions and connections
- Model parameters and settings
- Processing pipeline structure
This preserves the entire generation process for reproducibility.
## Regions Section
The `regions` section contains information about specific regions in the image:
```json
"regions": {
"faces": [
{
"type": "Face",
"name": "Person 1",
"area": {
"x": 0.2,
"y": 0.3,
"w": 0.1,
"h": 0.15
},
"extensions": {
"eiqa": {
"face_analysis": {
"gender": "female",
"age": 28,
"emotion": "happy",
"scores": {
"confidence": 0.94,
"quality": 0.87
}
}
}
}
}
],
"areas": [
{
"type": "Object",
"name": "Mountain",
"area": {
"x": 0.1,
"y": 0.2,
"w": 0.8,
"h": 0.5
}
}
],
"summary": {
"face_count": 1,
"detector_type": "deepface"
}
}
```
### Faces Subsection
Contains detected faces with:
- `type`: Face region type
- `name`: Face identifier/name
- `area`: Position and size (normalized 0-1 coordinates)
- `extensions`: Additional analysis data
### Areas Subsection
Contains other detected regions with:
- `type`: Area/object type
- `name`: Area identifier/name
- `area`: Position and size (normalized 0-1 coordinates)
### Summary Subsection
Contains summary statistics about detected regions.
## Additional Metadata Formats
### XMP Format
The metadata system complies with XMP (Extensible Metadata Platform) standards:
- **Dublin Core (dc) Namespace**: For basic properties (title, description)
- **XMP Basic (xmp) Namespace**: For general properties (rating, dates)
- **MWG Regions (mwg-rs) Namespace**: For face/area information
- **Custom Namespaces**: For AI and analysis data
### Exif Format
Embeds metadata in EXIF headers for formats that support it:
- Title → Exif.Image.ImageDescription
- Description → Exif.Photo.UserComment
- Rating → Exif.Image.Rating
### IPTC Format
Uses IPTC fields for maximum compatibility:
- Title → Iptc.Application2.ObjectName
- Description → Iptc.Application2.Caption
- Keywords → Iptc.Application2.Keywords
## Storage Strategy
The system uses a multi-target storage approach:
1. **Embedded Metadata**: Directly inside image files where supported
2. **XMP Sidecar Files**: Standard `.xmp` files alongside images
3. **Text Files**: Both machine-readable and human-readable formats
4. **Database Storage**: Structured SQLite database for advanced queries
This ensures maximum compatibility and accessibility across different workflows and applications.
## Schema Evolution
The metadata schema is designed for easy extension:
- **New Analysis Types**: Can be added under the `analysis` section
- **New AI Models**: Supported through the flexible `generation` structure
- **Custom Fields**: Can be added at any level without breaking compatibility