terminusresearch/pseudo-camera-10k-structured-json
pseudo-camera-10k, structured JSON captions The 9,997 training images from bghira/pseudo-camera-10k, recaptioned into the structured JSON caption schema that Ideogram 4 consumes. The images are unchanged: free photographs from world class photographers, Lanczos-resized so the shorter edge is 1024px, nothing upsampled. The original dataset carries short CogVLM prose captions. This one replaces them with one JSON object per image describing the scene at three levels: an overall… See the full description on the dataset page: https://huggingface.co/datasets/terminusresearch/pseudo-camera-10k-structured-json.
pseudo-camera-10k, structured JSON captions
The 9,997 training images from bghira/pseudo-camera-10k, recaptioned into the structured JSON caption schema that Ideogram 4 consumes. The images are unchanged: free photographs from world class photographers, Lanczos-resized so the shorter edge is 1024px, nothing upsampled.
The original dataset carries short CogVLM prose captions. This one replaces them with one JSON object per image describing the scene at three levels: an overall description, a style block, and a compositional breakdown into bounding-boxed elements with per-element colour palettes.
Layout
train/
00/ .. 09/ # ten shards of up to 1,000 images each
<stem>.png
<stem>.txt # single-line JSON caption for the image with the same stemCaptions sit next to their images so the folder works directly with SimpleTuner's textfile caption strategy, which scans instance_data_dir recursively. The shards exist only because the Hub limits a directory to 10,000 files; they carry no meaning.
Caption schema
Every caption is a single-line JSON object with these keys, in this order:
{
"high_level_description": "2-3 sentence description of the whole image",
"style_description": {
"aesthetics": "mood and quality words",
"lighting": "lighting description",
"photo": "camera, lens, perspective and focus notes",
"medium": "photograph",
"color_palette": ["#RRGGBB", "..."]
},
"compositional_deconstruction": {
"background": "what the background contains",
"elements": [
{
"type": "obj",
"bbox": [x0, y0, x1, y1],
"desc": "description of this element",
"color_palette": ["#RRGGBB", "..."]
}
]
}
}Bounding boxes are integer pixel coordinates in the image's native resolution. Elements are listed most salient first. Where an image contains legible text, an element with "type": "text" carries the transcription in a "text" field. Hex colours are uppercase six-digit.
Example, for a baboon portrait in the set:
{"high_level_description": "A close-up portrait of a hamadryas baboon facing the camera, its face and chest illuminated by warm directional light against a mottled rock wall background. The animal has a pale gray mantle of fur framing a bare pink-brown muzzle and dark eyes.",
"style_description": {"aesthetics": "moody, naturalistic, intimate wildlife portrait", "lighting": "warm low-angle side light raking across the face and shoulders, creating deep shadows and a dramatic chiaroscuro effect", "photo": "telephoto close-up, shallow depth of field with softly blurred textured rock backdrop, eye-level frontal perspective, sharp focus on the eyes and muzzle", "medium": "photograph", "color_palette": ["#6B5A4A", "#A6957D", "#8C6B5C", "#4A3B30", "#5F6B45", "#2A211B"]},
"compositional_deconstruction": {"background": "an out-of-focus textured rock or cave wall with patches of moss/lichen in olive green and warm ochre tones, darker and shadowed on the left side",
"elements": [
{"type": "obj", "bbox": [174, 195, 782, 1024], "desc": "hamadryas baboon with a thick pale gray mantle of fur covering its head, shoulders, and chest, facing forward", "color_palette": ["#A6957D", "#8B7A66", "#4A3B30"]},
{"type": "obj", "bbox": [366, 330, 610, 645], "desc": "bare pink-brown muzzle and face of the baboon with a prominent snout, nostrils, and closed mouth", "color_palette": ["#8C6B5C", "#6B4A3C", "#3A2622"]},
{"type": "obj", "bbox": [388, 335, 560, 385], "desc": "dark eyes set beneath a darker gray-black brow band of fur", "color_palette": ["#2A211B", "#4A3B30"]},
{"type": "obj", "bbox": [410, 210, 640, 300], "desc": "dark blackish-gray fur cap on top of the head contrasting with the lighter mantle", "color_palette": ["#2E2A26", "#4A433C"]}
]}}Statistics
How the captions were made
Each image was captioned independently by a vision-language model prompted with the schema above, one image per request so no caption could leak into another. Every output was parsed as strict JSON and run through SimpleTuner's Ideogram caption canonicaliser; anything that failed to parse, was missing the top-level keys, or had non-object entries in elements was discarded and the image was recaptioned until it passed. About 1% of first attempts were rejected this way.
Bounding boxes come from the captioner's own estimate of the region and were not verified against a detector. Treat them as approximate.
Using with SimpleTuner
{
"id": "pseudo-camera-10k-structured",
"type": "local",
"instance_data_dir": "/path/to/train",
"caption_strategy": "textfile",
"disable_multiline_split": true,
"resolution": 1024,
"resolution_type": "pixel_area",
"minimum_image_size": 1024,
"cache_dir_vae": "cache/vae/pseudo-camera-10k-structured"
}For Ideogram 4 training the captions already match the model's schema, so --ideogram_auto_json finds a JSON object and canonicalises it instead of wrapping prose in a placeholder structure. For other model families the JSON string is passed to the text encoder as-is; if you want plain prose instead, read high_level_description out of each file.
Limitations
Natural photographs are noisy and the set does not reflect the diversity of much larger collections. Captions describe only what is visible and avoid identifying people. They are descriptive but not audited image by image, and the style fields are the captioner's interpretation rather than camera metadata.
