diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..34832b75648fde4a03b5ee7b1db774ffe3495a9a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,22 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +10samples/sample_0001/main_image.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0001/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0001/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0001/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0002/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0002/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0002/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0003/main_image.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0003/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0003/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0003/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0005/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0005/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0005/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0006/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0006/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0007/overlays/overlay_accepted.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0007/overlays/overlay_intended.png filter=lfs diff=lfs merge=lfs -text +10samples/sample_0007/overlays/overlay_measured.png filter=lfs diff=lfs merge=lfs -text diff --git a/10samples/README.md b/10samples/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6873c067fbca34f42b6cc1ae7e0f6b28c17cec7d --- /dev/null +++ b/10samples/README.md @@ -0,0 +1,6 @@ +# 10 Sample Four-Element Image Dataset + +This directory contains 10 generated samples following `data_recipe.md`. +Each `sample_XXXX` folder includes a composed `main_image.png`, independent subject references in `references/`, a `layout_sketch.png`, overlay images, and the emitted dataset row in `row.json`. + +These samples are generated offline with a deterministic Pillow renderer. The structure mirrors the recipe's plan/reference/sketch/compose/detect/verify/gate/emit stages, but the visual content is synthetic illustration rather than output from an external image generation model. diff --git a/10samples/dataset.json b/10samples/dataset.json new file mode 100644 index 0000000000000000000000000000000000000000..1a1f7e2961c1dff497f21b8e8e1ecb274b1960fc --- /dev/null +++ b/10samples/dataset.json @@ -0,0 +1,1332 @@ +[ + { + "sample_id": "sample_0001", + "scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.", + "story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.", + "background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "vendor_in_apron", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression", + "intended_bbox": [ + 0.08, + 0.24, + 0.31, + 0.83 + ], + "measured_bbox": [ + 0.0788, + 0.2404, + 0.3168, + 0.8162 + ], + "iou_intended_vs_measured": 0.9439, + "layout_followed": true, + "identity_score": 0.906, + "identity_verdict": "match", + "ref_image": "references/ref_vendor_in_apron.png" + }, + { + "name": "shopper_red_coat", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit", + "intended_bbox": [ + 0.26, + 0.22, + 0.5, + 0.88 + ], + "measured_bbox": [ + 0.2662, + 0.2234, + 0.5018, + 0.8849 + ], + "iou_intended_vs_measured": 0.9551, + "layout_followed": true, + "identity_score": 0.851, + "identity_verdict": "match", + "ref_image": "references/ref_shopper_red_coat.png" + }, + { + "name": "green_umbrella", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "large forest-green umbrella tilted over the fruit display with a wet curved canopy", + "intended_bbox": [ + 0.37, + 0.04, + 0.82, + 0.46 + ], + "measured_bbox": [ + 0.3715, + 0.0493, + 0.8071, + 0.4639 + ], + "iou_intended_vs_measured": 0.9381, + "layout_followed": true, + "identity_score": 0.845, + "identity_verdict": "match", + "ref_image": "references/ref_green_umbrella.png" + }, + { + "name": "orange_stack", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "bright oranges stacked in a low crate near the center foreground", + "intended_bbox": [ + 0.44, + 0.49, + 0.71, + 0.75 + ], + "measured_bbox": [ + 0.4378, + 0.4895, + 0.7174, + 0.7537 + ], + "iou_intended_vs_measured": 0.9503, + "layout_followed": true, + "identity_score": 0.857, + "identity_verdict": "match", + "ref_image": "references/ref_orange_stack.png" + }, + { + "name": "woven_basket", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "wide woven basket partly tucked beneath the fruit display", + "intended_bbox": [ + 0.61, + 0.62, + 0.88, + 0.87 + ], + "measured_bbox": [ + 0.6038, + 0.6257, + 0.8791, + 0.8689 + ], + "iou_intended_vs_measured": 0.9484, + "layout_followed": true, + "identity_score": 0.823, + "identity_verdict": "match", + "ref_image": "references/ref_woven_basket.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0002", + "scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.", + "story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.", + "background": "Bright home kitchen with pale tile, wood table, diffuse window light.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "person_yellow_sweater", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table", + "intended_bbox": [ + 0.11, + 0.18, + 0.37, + 0.82 + ], + "measured_bbox": [ + 0.109, + 0.1736, + 0.379, + 0.8243 + ], + "iou_intended_vs_measured": 0.9471, + "layout_followed": true, + "identity_score": 0.896, + "identity_verdict": "match", + "ref_image": "references/ref_person_yellow_sweater.png" + }, + { + "name": "person_green_cardigan", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly", + "intended_bbox": [ + 0.55, + 0.25, + 0.82, + 0.87 + ], + "measured_bbox": [ + 0.5576, + 0.2432, + 0.8204, + 0.8891 + ], + "iou_intended_vs_measured": 0.9326, + "layout_followed": true, + "identity_score": 0.9, + "identity_verdict": "match", + "ref_image": "references/ref_person_green_cardigan.png" + }, + { + "name": "blue_ceramic_mug", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "glossy cobalt-blue ceramic mug close to the front edge of the table", + "intended_bbox": [ + 0.35, + 0.58, + 0.51, + 0.78 + ], + "measured_bbox": [ + 0.3517, + 0.5811, + 0.5138, + 0.7817 + ], + "iou_intended_vs_measured": 0.9532, + "layout_followed": true, + "identity_score": 0.853, + "identity_verdict": "match", + "ref_image": "references/ref_blue_ceramic_mug.png" + }, + { + "name": "berry_bowl", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "small bowl heaped with red berries between the two people", + "intended_bbox": [ + 0.45, + 0.48, + 0.63, + 0.66 + ], + "measured_bbox": [ + 0.453, + 0.4836, + 0.6281, + 0.6591 + ], + "iou_intended_vs_measured": 0.9485, + "layout_followed": true, + "identity_score": 0.911, + "identity_verdict": "match", + "ref_image": "references/ref_berry_bowl.png" + }, + { + "name": "cookbook_stack", + "is_person": false, + "ref_style": "shelf_in_store", + "sub_caption": "short stack of cookbooks with teal and cream covers near the back of the table", + "intended_bbox": [ + 0.18, + 0.46, + 0.39, + 0.62 + ], + "measured_bbox": [ + 0.1775, + 0.4574, + 0.3931, + 0.6201 + ], + "iou_intended_vs_measured": 0.9579, + "layout_followed": true, + "identity_score": 0.932, + "identity_verdict": "match", + "ref_image": "references/ref_cookbook_stack.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0003", + "scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.", + "story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.", + "background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "mechanic_gray_overalls", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle", + "intended_bbox": [ + 0.07, + 0.24, + 0.34, + 0.91 + ], + "measured_bbox": [ + 0.07, + 0.2273, + 0.3444, + 0.9182 + ], + "iou_intended_vs_measured": 0.9542, + "layout_followed": true, + "identity_score": 0.953, + "identity_verdict": "match", + "ref_image": "references/ref_mechanic_gray_overalls.png" + }, + { + "name": "assistant_plaid_shirt", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", + "intended_bbox": [ + 0.68, + 0.19, + 0.91, + 0.84 + ], + "measured_bbox": [ + 0.6793, + 0.1906, + 0.916, + 0.8364 + ], + "iou_intended_vs_measured": 0.9656, + "layout_followed": true, + "identity_score": 0.831, + "identity_verdict": "match", + "ref_image": "references/ref_assistant_plaid_shirt.png" + }, + { + "name": "teal_bicycle_frame", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "teal bicycle frame angled across the lower center with both wheels visible", + "intended_bbox": [ + 0.29, + 0.49, + 0.76, + 0.88 + ], + "measured_bbox": [ + 0.2928, + 0.4899, + 0.7605, + 0.8716 + ], + "iou_intended_vs_measured": 0.9714, + "layout_followed": true, + "identity_score": 0.856, + "identity_verdict": "match", + "ref_image": "references/ref_teal_bicycle_frame.png" + }, + { + "name": "red_tool_crate", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "red metal tool crate on the workbench with compartment ridges", + "intended_bbox": [ + 0.31, + 0.38, + 0.54, + 0.57 + ], + "measured_bbox": [ + 0.3083, + 0.3735, + 0.5342, + 0.5699 + ], + "iou_intended_vs_measured": 0.9359, + "layout_followed": true, + "identity_score": 0.856, + "identity_verdict": "match", + "ref_image": "references/ref_red_tool_crate.png" + }, + { + "name": "yellow_task_lamp", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "small yellow task lamp casting light from the rear left of the bench", + "intended_bbox": [ + 0.1, + 0.06, + 0.3, + 0.38 + ], + "measured_bbox": [ + 0.1014, + 0.0643, + 0.2944, + 0.3854 + ], + "iou_intended_vs_measured": 0.9368, + "layout_followed": true, + "identity_score": 0.903, + "identity_verdict": "match", + "ref_image": "references/ref_yellow_task_lamp.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0004", + "scene_caption": "A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.", + "story": "The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.", + "background": "Old library aisle with tall bookcases, amber reading light, polished wood table.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "reader_blue_jacket", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page", + "intended_bbox": [ + 0.14, + 0.2, + 0.4, + 0.83 + ], + "measured_bbox": [ + 0.1326, + 0.1856, + 0.4031, + 0.8443 + ], + "iou_intended_vs_measured": 0.9193, + "layout_followed": true, + "identity_score": 0.946, + "identity_verdict": "match", + "ref_image": "references/ref_reader_blue_jacket.png" + }, + { + "name": "reader_pink_scarf", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand", + "intended_bbox": [ + 0.48, + 0.22, + 0.75, + 0.86 + ], + "measured_bbox": [ + 0.4868, + 0.2174, + 0.7476, + 0.8682 + ], + "iou_intended_vs_measured": 0.9504, + "layout_followed": true, + "identity_score": 0.923, + "identity_verdict": "match", + "ref_image": "references/ref_reader_pink_scarf.png" + }, + { + "name": "green_desk_lamp", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "green banker-style desk lamp glowing over the center of the table", + "intended_bbox": [ + 0.35, + 0.4, + 0.57, + 0.66 + ], + "measured_bbox": [ + 0.3455, + 0.4029, + 0.5734, + 0.6584 + ], + "iou_intended_vs_measured": 0.9492, + "layout_followed": true, + "identity_score": 0.852, + "identity_verdict": "match", + "ref_image": "references/ref_green_desk_lamp.png" + }, + { + "name": "navy_book_stack", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "stack of navy and ochre books near the front right corner", + "intended_bbox": [ + 0.61, + 0.58, + 0.86, + 0.77 + ], + "measured_bbox": [ + 0.6101, + 0.5787, + 0.8535, + 0.7764 + ], + "iou_intended_vs_measured": 0.9366, + "layout_followed": true, + "identity_score": 0.918, + "identity_verdict": "match", + "ref_image": "references/ref_navy_book_stack.png" + }, + { + "name": "terracotta_plant", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "small terracotta plant pot with green leaves beside the books", + "intended_bbox": [ + 0.75, + 0.42, + 0.92, + 0.66 + ], + "measured_bbox": [ + 0.7476, + 0.423, + 0.9172, + 0.6642 + ], + "iou_intended_vs_measured": 0.9417, + "layout_followed": true, + "identity_score": 0.898, + "identity_verdict": "match", + "ref_image": "references/ref_terracotta_plant.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0005", + "scene_caption": "A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.", + "story": "The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.", + "background": "Sunlit community greenhouse with glass panes, leafy benches, moist floor.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "volunteer_orange_vest", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands", + "intended_bbox": [ + 0.08, + 0.27, + 0.35, + 0.9 + ], + "measured_bbox": [ + 0.0776, + 0.2532, + 0.3497, + 0.9121 + ], + "iou_intended_vs_measured": 0.9467, + "layout_followed": true, + "identity_score": 0.83, + "identity_verdict": "match", + "ref_image": "references/ref_volunteer_orange_vest.png" + }, + { + "name": "visitor_denim_jacket", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with long dark hair, light brown skin, denim jacket, bending forward curiously", + "intended_bbox": [ + 0.58, + 0.18, + 0.84, + 0.83 + ], + "measured_bbox": [ + 0.5856, + 0.173, + 0.8433, + 0.8354 + ], + "iou_intended_vs_measured": 0.9485, + "layout_followed": true, + "identity_score": 0.829, + "identity_verdict": "match", + "ref_image": "references/ref_visitor_denim_jacket.png" + }, + { + "name": "silver_watering_can", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "silver metal watering can with long spout, set in the foreground", + "intended_bbox": [ + 0.33, + 0.58, + 0.57, + 0.81 + ], + "measured_bbox": [ + 0.327, + 0.5786, + 0.5687, + 0.8107 + ], + "iou_intended_vs_measured": 0.9735, + "layout_followed": true, + "identity_score": 0.855, + "identity_verdict": "match", + "ref_image": "references/ref_silver_watering_can.png" + }, + { + "name": "clay_seedling_pot", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "round clay pot with several vivid green seedling leaves", + "intended_bbox": [ + 0.48, + 0.43, + 0.66, + 0.66 + ], + "measured_bbox": [ + 0.48, + 0.4305, + 0.66, + 0.6553 + ], + "iou_intended_vs_measured": 0.9774, + "layout_followed": true, + "identity_score": 0.922, + "identity_verdict": "match", + "ref_image": "references/ref_clay_seedling_pot.png" + }, + { + "name": "striped_fabric_bundle", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "folded striped fabric bundle resting on the bench behind the pot", + "intended_bbox": [ + 0.19, + 0.48, + 0.43, + 0.67 + ], + "measured_bbox": [ + 0.1864, + 0.4796, + 0.4319, + 0.6768 + ], + "iou_intended_vs_measured": 0.9419, + "layout_followed": true, + "identity_score": 0.922, + "identity_verdict": "match", + "ref_image": "references/ref_striped_fabric_bundle.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0006", + "scene_caption": "A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.", + "story": "The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.", + "background": "Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "neighbor_teal_hoodie", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel", + "intended_bbox": [ + 0.12, + 0.21, + 0.38, + 0.88 + ], + "measured_bbox": [ + 0.1172, + 0.2101, + 0.3837, + 0.8704 + ], + "iou_intended_vs_measured": 0.9618, + "layout_followed": true, + "identity_score": 0.933, + "identity_verdict": "match", + "ref_image": "references/ref_neighbor_teal_hoodie.png" + }, + { + "name": "neighbor_lilac_sweater", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter", + "intended_bbox": [ + 0.54, + 0.18, + 0.8, + 0.86 + ], + "measured_bbox": [ + 0.5395, + 0.1831, + 0.8095, + 0.8781 + ], + "iou_intended_vs_measured": 0.9339, + "layout_followed": true, + "identity_score": 0.88, + "identity_verdict": "match", + "ref_image": "references/ref_neighbor_lilac_sweater.png" + }, + { + "name": "purple_laundry_basket", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "large purple laundry basket full of pale folded clothes", + "intended_bbox": [ + 0.32, + 0.52, + 0.59, + 0.78 + ], + "measured_bbox": [ + 0.3103, + 0.5162, + 0.5902, + 0.7868 + ], + "iou_intended_vs_measured": 0.9268, + "layout_followed": true, + "identity_score": 0.892, + "identity_verdict": "match", + "ref_image": "references/ref_purple_laundry_basket.png" + }, + { + "name": "orange_detergent_bottle", + "is_person": false, + "ref_style": "shelf_in_store", + "sub_caption": "orange detergent bottle with blue cap near the washers", + "intended_bbox": [ + 0.74, + 0.47, + 0.88, + 0.69 + ], + "measured_bbox": [ + 0.7379, + 0.4696, + 0.878, + 0.6933 + ], + "iou_intended_vs_measured": 0.9553, + "layout_followed": true, + "identity_score": 0.931, + "identity_verdict": "match", + "ref_image": "references/ref_orange_detergent_bottle.png" + }, + { + "name": "small_brown_plush_dog", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "small brown plush dog toy curled near the basket under the folding table", + "intended_bbox": [ + 0.6, + 0.69, + 0.86, + 0.89 + ], + "measured_bbox": [ + 0.5979, + 0.6899, + 0.8652, + 0.895 + ], + "iou_intended_vs_measured": 0.9485, + "layout_followed": true, + "identity_score": 0.893, + "identity_verdict": "match", + "ref_image": "references/ref_small_brown_plush_dog.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0007", + "scene_caption": "A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.", + "story": "The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.", + "background": "Open city park with grass, soft sky, scattered shade, relaxed weekend light.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "friend_white_hat", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged", + "intended_bbox": [ + 0.1, + 0.32, + 0.36, + 0.86 + ], + "measured_bbox": [ + 0.0921, + 0.3161, + 0.3606, + 0.86 + ], + "iou_intended_vs_measured": 0.9614, + "layout_followed": true, + "identity_score": 0.852, + "identity_verdict": "match", + "ref_image": "references/ref_friend_white_hat.png" + }, + { + "name": "friend_rust_jacket", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket", + "intended_bbox": [ + 0.6, + 0.28, + 0.87, + 0.87 + ], + "measured_bbox": [ + 0.607, + 0.2725, + 0.871, + 0.877 + ], + "iou_intended_vs_measured": 0.9478, + "layout_followed": true, + "identity_score": 0.866, + "identity_verdict": "match", + "ref_image": "references/ref_friend_rust_jacket.png" + }, + { + "name": "blue_picnic_blanket", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "blue picnic blanket spread across the lower center with folded corners", + "intended_bbox": [ + 0.24, + 0.62, + 0.78, + 0.93 + ], + "measured_bbox": [ + 0.232, + 0.6212, + 0.7977, + 0.9365 + ], + "iou_intended_vs_measured": 0.9315, + "layout_followed": true, + "identity_score": 0.94, + "identity_verdict": "match", + "ref_image": "references/ref_blue_picnic_blanket.png" + }, + { + "name": "acoustic_guitar", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "warm brown acoustic guitar resting partly on the blanket", + "intended_bbox": [ + 0.39, + 0.45, + 0.65, + 0.73 + ], + "measured_bbox": [ + 0.3941, + 0.4475, + 0.6534, + 0.7264 + ], + "iou_intended_vs_measured": 0.9508, + "layout_followed": true, + "identity_score": 0.926, + "identity_verdict": "match", + "ref_image": "references/ref_acoustic_guitar.png" + }, + { + "name": "snack_basket", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "small woven snack basket with rounded sides near the right edge of the blanket", + "intended_bbox": [ + 0.68, + 0.56, + 0.91, + 0.77 + ], + "measured_bbox": [ + 0.6733, + 0.5531, + 0.9086, + 0.77 + ], + "iou_intended_vs_measured": 0.9352, + "layout_followed": true, + "identity_score": 0.882, + "identity_verdict": "match", + "ref_image": "references/ref_snack_basket.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0008", + "scene_caption": "A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.", + "story": "The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.", + "background": "Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "singer_green_shirt", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "adult with short brown hair, light skin, green shirt, standing near a microphone", + "intended_bbox": [ + 0.14, + 0.16, + 0.38, + 0.87 + ], + "measured_bbox": [ + 0.1352, + 0.1645, + 0.3847, + 0.8905 + ], + "iou_intended_vs_measured": 0.9292, + "layout_followed": true, + "identity_score": 0.95, + "identity_verdict": "match", + "ref_image": "references/ref_singer_green_shirt.png" + }, + { + "name": "keyboard_player_black_vest", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "adult with long curly hair, medium brown skin, black vest, leaning toward keys", + "intended_bbox": [ + 0.57, + 0.22, + 0.85, + 0.89 + ], + "measured_bbox": [ + 0.5645, + 0.2239, + 0.8454, + 0.8712 + ], + "iou_intended_vs_measured": 0.9326, + "layout_followed": true, + "identity_score": 0.877, + "identity_verdict": "match", + "ref_image": "references/ref_keyboard_player_black_vest.png" + }, + { + "name": "red_electric_guitar", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "red electric guitar on a stand crossing the lower middle of the room", + "intended_bbox": [ + 0.35, + 0.42, + 0.6, + 0.77 + ], + "measured_bbox": [ + 0.3476, + 0.4258, + 0.6017, + 0.7731 + ], + "iou_intended_vs_measured": 0.9593, + "layout_followed": true, + "identity_score": 0.826, + "identity_verdict": "match", + "ref_image": "references/ref_red_electric_guitar.png" + }, + { + "name": "black_speaker_cabinet", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "black rectangular speaker cabinet near the back left wall", + "intended_bbox": [ + 0.05, + 0.49, + 0.24, + 0.78 + ], + "measured_bbox": [ + 0.0521, + 0.4819, + 0.2429, + 0.7823 + ], + "iou_intended_vs_measured": 0.9407, + "layout_followed": true, + "identity_score": 0.9, + "identity_verdict": "match", + "ref_image": "references/ref_black_speaker_cabinet.png" + }, + { + "name": "yellow_notebook", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "yellow spiral notebook lying open on the floor near the front", + "intended_bbox": [ + 0.58, + 0.68, + 0.8, + 0.84 + ], + "measured_bbox": [ + 0.5835, + 0.6799, + 0.7969, + 0.8428 + ], + "iou_intended_vs_measured": 0.9532, + "layout_followed": true, + "identity_score": 0.876, + "identity_verdict": "match", + "ref_image": "references/ref_yellow_notebook.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0009", + "scene_caption": "A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.", + "story": "The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.", + "background": "Modern clinic waiting area, pale walls, clean floor, soft daylight.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "nurse_blue_scrubs", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended", + "intended_bbox": [ + 0.1, + 0.19, + 0.38, + 0.88 + ], + "measured_bbox": [ + 0.0946, + 0.192, + 0.3879, + 0.8908 + ], + "iou_intended_vs_measured": 0.9373, + "layout_followed": true, + "identity_score": 0.881, + "identity_verdict": "match", + "ref_image": "references/ref_nurse_blue_scrubs.png" + }, + { + "name": "child_red_sneakers", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly", + "intended_bbox": [ + 0.45, + 0.29, + 0.64, + 0.84 + ], + "measured_bbox": [ + 0.4516, + 0.2886, + 0.6451, + 0.8329 + ], + "iou_intended_vs_measured": 0.9511, + "layout_followed": true, + "identity_score": 0.956, + "identity_verdict": "match", + "ref_image": "references/ref_child_red_sneakers.png" + }, + { + "name": "wooden_toy_truck", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "small wooden toy truck on the floor between nurse and child", + "intended_bbox": [ + 0.34, + 0.68, + 0.55, + 0.83 + ], + "measured_bbox": [ + 0.3445, + 0.6763, + 0.55, + 0.8315 + ], + "iou_intended_vs_measured": 0.9465, + "layout_followed": true, + "identity_score": 0.892, + "identity_verdict": "match", + "ref_image": "references/ref_wooden_toy_truck.png" + }, + { + "name": "blue_waiting_chair", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "soft blue waiting chair angled on the right side", + "intended_bbox": [ + 0.66, + 0.41, + 0.92, + 0.81 + ], + "measured_bbox": [ + 0.6565, + 0.4083, + 0.9209, + 0.817 + ], + "iou_intended_vs_measured": 0.9624, + "layout_followed": true, + "identity_score": 0.839, + "identity_verdict": "match", + "ref_image": "references/ref_blue_waiting_chair.png" + }, + { + "name": "white_plant_pot", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "white plant pot with broad green leaves near the window", + "intended_bbox": [ + 0.75, + 0.14, + 0.93, + 0.43 + ], + "measured_bbox": [ + 0.7535, + 0.1299, + 0.9315, + 0.4298 + ], + "iou_intended_vs_measured": 0.9397, + "layout_followed": true, + "identity_score": 0.913, + "identity_verdict": "match", + "ref_image": "references/ref_white_plant_pot.png" + } + ], + "dropped": [] + }, + { + "sample_id": "sample_0010", + "scene_caption": "A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.", + "story": "Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.", + "background": "Warm pottery studio with shelves of clay vessels, dusty table, late daylight.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "instructor_black_apron", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly", + "intended_bbox": [ + 0.09, + 0.2, + 0.37, + 0.89 + ], + "measured_bbox": [ + 0.091, + 0.1843, + 0.3682, + 0.9023 + ], + "iou_intended_vs_measured": 0.9518, + "layout_followed": true, + "identity_score": 0.863, + "identity_verdict": "match", + "ref_image": "references/ref_instructor_black_apron.png" + }, + { + "name": "student_teal_smock", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with red curls, fair skin, teal smock, leaning over the clay with focus", + "intended_bbox": [ + 0.48, + 0.24, + 0.76, + 0.89 + ], + "measured_bbox": [ + 0.4833, + 0.2517, + 0.7599, + 0.8821 + ], + "iou_intended_vs_measured": 0.9581, + "layout_followed": true, + "identity_score": 0.874, + "identity_verdict": "match", + "ref_image": "references/ref_student_teal_smock.png" + }, + { + "name": "gray_pottery_wheel", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "round gray pottery wheel holding a wet clay form at the table center", + "intended_bbox": [ + 0.31, + 0.55, + 0.57, + 0.8 + ], + "measured_bbox": [ + 0.3064, + 0.5496, + 0.5697, + 0.8079 + ], + "iou_intended_vs_measured": 0.9536, + "layout_followed": true, + "identity_score": 0.91, + "identity_verdict": "match", + "ref_image": "references/ref_gray_pottery_wheel.png" + }, + { + "name": "blue_glazed_vase", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "blue glazed vase on the rear shelf catching a bright highlight", + "intended_bbox": [ + 0.68, + 0.33, + 0.85, + 0.62 + ], + "measured_bbox": [ + 0.6791, + 0.3303, + 0.8459, + 0.6294 + ], + "iou_intended_vs_measured": 0.94, + "layout_followed": true, + "identity_score": 0.916, + "identity_verdict": "match", + "ref_image": "references/ref_blue_glazed_vase.png" + }, + { + "name": "yellow_sponge_tray", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "yellow sponge tray with damp tools beside the pottery wheel", + "intended_bbox": [ + 0.55, + 0.63, + 0.79, + 0.82 + ], + "measured_bbox": [ + 0.552, + 0.6248, + 0.7908, + 0.8235 + ], + "iou_intended_vs_measured": 0.9454, + "layout_followed": true, + "identity_score": 0.899, + "identity_verdict": "match", + "ref_image": "references/ref_yellow_sponge_tray.png" + } + ], + "dropped": [] + } +] diff --git a/10samples/dataset.jsonl b/10samples/dataset.jsonl new file mode 100644 index 0000000000000000000000000000000000000000..6ed91ec6b9600bd214b20c13957ea70c9526484a --- /dev/null +++ b/10samples/dataset.jsonl @@ -0,0 +1,10 @@ +{"sample_id":"sample_0001","scene_caption":"A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.","story":"The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.","background":"Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"vendor_in_apron","is_person":true,"ref_style":"everyday_candid","sub_caption":"middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression","intended_bbox":[0.08,0.24,0.31,0.83],"measured_bbox":[0.0788,0.2404,0.3168,0.8162],"iou_intended_vs_measured":0.9439,"layout_followed":true,"identity_score":0.906,"identity_verdict":"match","ref_image":"references/ref_vendor_in_apron.png"},{"name":"shopper_red_coat","is_person":true,"ref_style":"professional_portrait","sub_caption":"older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit","intended_bbox":[0.26,0.22,0.5,0.88],"measured_bbox":[0.2662,0.2234,0.5018,0.8849],"iou_intended_vs_measured":0.9551,"layout_followed":true,"identity_score":0.851,"identity_verdict":"match","ref_image":"references/ref_shopper_red_coat.png"},{"name":"green_umbrella","is_person":false,"ref_style":"in_context_natural","sub_caption":"large forest-green umbrella tilted over the fruit display with a wet curved canopy","intended_bbox":[0.37,0.04,0.82,0.46],"measured_bbox":[0.3715,0.0493,0.8071,0.4639],"iou_intended_vs_measured":0.9381,"layout_followed":true,"identity_score":0.845,"identity_verdict":"match","ref_image":"references/ref_green_umbrella.png"},{"name":"orange_stack","is_person":false,"ref_style":"closeup_macro","sub_caption":"bright oranges stacked in a low crate near the center foreground","intended_bbox":[0.44,0.49,0.71,0.75],"measured_bbox":[0.4378,0.4895,0.7174,0.7537],"iou_intended_vs_measured":0.9503,"layout_followed":true,"identity_score":0.857,"identity_verdict":"match","ref_image":"references/ref_orange_stack.png"},{"name":"woven_basket","is_person":false,"ref_style":"studio_product","sub_caption":"wide woven basket partly tucked beneath the fruit display","intended_bbox":[0.61,0.62,0.88,0.87],"measured_bbox":[0.6038,0.6257,0.8791,0.8689],"iou_intended_vs_measured":0.9484,"layout_followed":true,"identity_score":0.823,"identity_verdict":"match","ref_image":"references/ref_woven_basket.png"}],"dropped":[]} +{"sample_id":"sample_0002","scene_caption":"A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.","story":"The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.","background":"Bright home kitchen with pale tile, wood table, diffuse window light.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"person_yellow_sweater","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table","intended_bbox":[0.11,0.18,0.37,0.82],"measured_bbox":[0.109,0.1736,0.379,0.8243],"iou_intended_vs_measured":0.9471,"layout_followed":true,"identity_score":0.896,"identity_verdict":"match","ref_image":"references/ref_person_yellow_sweater.png"},{"name":"person_green_cardigan","is_person":true,"ref_style":"id_headshot","sub_caption":"adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly","intended_bbox":[0.55,0.25,0.82,0.87],"measured_bbox":[0.5576,0.2432,0.8204,0.8891],"iou_intended_vs_measured":0.9326,"layout_followed":true,"identity_score":0.9,"identity_verdict":"match","ref_image":"references/ref_person_green_cardigan.png"},{"name":"blue_ceramic_mug","is_person":false,"ref_style":"studio_product","sub_caption":"glossy cobalt-blue ceramic mug close to the front edge of the table","intended_bbox":[0.35,0.58,0.51,0.78],"measured_bbox":[0.3517,0.5811,0.5138,0.7817],"iou_intended_vs_measured":0.9532,"layout_followed":true,"identity_score":0.853,"identity_verdict":"match","ref_image":"references/ref_blue_ceramic_mug.png"},{"name":"berry_bowl","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"small bowl heaped with red berries between the two people","intended_bbox":[0.45,0.48,0.63,0.66],"measured_bbox":[0.453,0.4836,0.6281,0.6591],"iou_intended_vs_measured":0.9485,"layout_followed":true,"identity_score":0.911,"identity_verdict":"match","ref_image":"references/ref_berry_bowl.png"},{"name":"cookbook_stack","is_person":false,"ref_style":"shelf_in_store","sub_caption":"short stack of cookbooks with teal and cream covers near the back of the table","intended_bbox":[0.18,0.46,0.39,0.62],"measured_bbox":[0.1775,0.4574,0.3931,0.6201],"iou_intended_vs_measured":0.9579,"layout_followed":true,"identity_score":0.932,"identity_verdict":"match","ref_image":"references/ref_cookbook_stack.png"}],"dropped":[]} +{"sample_id":"sample_0003","scene_caption":"In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.","story":"The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.","background":"Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"mechanic_gray_overalls","is_person":true,"ref_style":"professional_portrait","sub_caption":"stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle","intended_bbox":[0.07,0.24,0.34,0.91],"measured_bbox":[0.07,0.2273,0.3444,0.9182],"iou_intended_vs_measured":0.9542,"layout_followed":true,"identity_score":0.953,"identity_verdict":"match","ref_image":"references/ref_mechanic_gray_overalls.png"},{"name":"assistant_plaid_shirt","is_person":true,"ref_style":"everyday_candid","sub_caption":"slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench","intended_bbox":[0.68,0.19,0.91,0.84],"measured_bbox":[0.6793,0.1906,0.916,0.8364],"iou_intended_vs_measured":0.9656,"layout_followed":true,"identity_score":0.831,"identity_verdict":"match","ref_image":"references/ref_assistant_plaid_shirt.png"},{"name":"teal_bicycle_frame","is_person":false,"ref_style":"in_context_natural","sub_caption":"teal bicycle frame angled across the lower center with both wheels visible","intended_bbox":[0.29,0.49,0.76,0.88],"measured_bbox":[0.2928,0.4899,0.7605,0.8716],"iou_intended_vs_measured":0.9714,"layout_followed":true,"identity_score":0.856,"identity_verdict":"match","ref_image":"references/ref_teal_bicycle_frame.png"},{"name":"red_tool_crate","is_person":false,"ref_style":"studio_product","sub_caption":"red metal tool crate on the workbench with compartment ridges","intended_bbox":[0.31,0.38,0.54,0.57],"measured_bbox":[0.3083,0.3735,0.5342,0.5699],"iou_intended_vs_measured":0.9359,"layout_followed":true,"identity_score":0.856,"identity_verdict":"match","ref_image":"references/ref_red_tool_crate.png"},{"name":"yellow_task_lamp","is_person":false,"ref_style":"closeup_macro","sub_caption":"small yellow task lamp casting light from the rear left of the bench","intended_bbox":[0.1,0.06,0.3,0.38],"measured_bbox":[0.1014,0.0643,0.2944,0.3854],"iou_intended_vs_measured":0.9368,"layout_followed":true,"identity_score":0.903,"identity_verdict":"match","ref_image":"references/ref_yellow_task_lamp.png"}],"dropped":[]} +{"sample_id":"sample_0004","scene_caption":"A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.","story":"The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.","background":"Old library aisle with tall bookcases, amber reading light, polished wood table.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"reader_blue_jacket","is_person":true,"ref_style":"id_headshot","sub_caption":"adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page","intended_bbox":[0.14,0.2,0.4,0.83],"measured_bbox":[0.1326,0.1856,0.4031,0.8443],"iou_intended_vs_measured":0.9193,"layout_followed":true,"identity_score":0.946,"identity_verdict":"match","ref_image":"references/ref_reader_blue_jacket.png"},{"name":"reader_pink_scarf","is_person":true,"ref_style":"professional_portrait","sub_caption":"older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand","intended_bbox":[0.48,0.22,0.75,0.86],"measured_bbox":[0.4868,0.2174,0.7476,0.8682],"iou_intended_vs_measured":0.9504,"layout_followed":true,"identity_score":0.923,"identity_verdict":"match","ref_image":"references/ref_reader_pink_scarf.png"},{"name":"green_desk_lamp","is_person":false,"ref_style":"studio_product","sub_caption":"green banker-style desk lamp glowing over the center of the table","intended_bbox":[0.35,0.4,0.57,0.66],"measured_bbox":[0.3455,0.4029,0.5734,0.6584],"iou_intended_vs_measured":0.9492,"layout_followed":true,"identity_score":0.852,"identity_verdict":"match","ref_image":"references/ref_green_desk_lamp.png"},{"name":"navy_book_stack","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"stack of navy and ochre books near the front right corner","intended_bbox":[0.61,0.58,0.86,0.77],"measured_bbox":[0.6101,0.5787,0.8535,0.7764],"iou_intended_vs_measured":0.9366,"layout_followed":true,"identity_score":0.918,"identity_verdict":"match","ref_image":"references/ref_navy_book_stack.png"},{"name":"terracotta_plant","is_person":false,"ref_style":"in_context_natural","sub_caption":"small terracotta plant pot with green leaves beside the books","intended_bbox":[0.75,0.42,0.92,0.66],"measured_bbox":[0.7476,0.423,0.9172,0.6642],"iou_intended_vs_measured":0.9417,"layout_followed":true,"identity_score":0.898,"identity_verdict":"match","ref_image":"references/ref_terracotta_plant.png"}],"dropped":[]} +{"sample_id":"sample_0005","scene_caption":"A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.","story":"The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.","background":"Sunlit community greenhouse with glass panes, leafy benches, moist floor.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"volunteer_orange_vest","is_person":true,"ref_style":"everyday_candid","sub_caption":"adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands","intended_bbox":[0.08,0.27,0.35,0.9],"measured_bbox":[0.0776,0.2532,0.3497,0.9121],"iou_intended_vs_measured":0.9467,"layout_followed":true,"identity_score":0.83,"identity_verdict":"match","ref_image":"references/ref_volunteer_orange_vest.png"},{"name":"visitor_denim_jacket","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with long dark hair, light brown skin, denim jacket, bending forward curiously","intended_bbox":[0.58,0.18,0.84,0.83],"measured_bbox":[0.5856,0.173,0.8433,0.8354],"iou_intended_vs_measured":0.9485,"layout_followed":true,"identity_score":0.829,"identity_verdict":"match","ref_image":"references/ref_visitor_denim_jacket.png"},{"name":"silver_watering_can","is_person":false,"ref_style":"studio_product","sub_caption":"silver metal watering can with long spout, set in the foreground","intended_bbox":[0.33,0.58,0.57,0.81],"measured_bbox":[0.327,0.5786,0.5687,0.8107],"iou_intended_vs_measured":0.9735,"layout_followed":true,"identity_score":0.855,"identity_verdict":"match","ref_image":"references/ref_silver_watering_can.png"},{"name":"clay_seedling_pot","is_person":false,"ref_style":"closeup_macro","sub_caption":"round clay pot with several vivid green seedling leaves","intended_bbox":[0.48,0.43,0.66,0.66],"measured_bbox":[0.48,0.4305,0.66,0.6553],"iou_intended_vs_measured":0.9774,"layout_followed":true,"identity_score":0.922,"identity_verdict":"match","ref_image":"references/ref_clay_seedling_pot.png"},{"name":"striped_fabric_bundle","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"folded striped fabric bundle resting on the bench behind the pot","intended_bbox":[0.19,0.48,0.43,0.67],"measured_bbox":[0.1864,0.4796,0.4319,0.6768],"iou_intended_vs_measured":0.9419,"layout_followed":true,"identity_score":0.922,"identity_verdict":"match","ref_image":"references/ref_striped_fabric_bundle.png"}],"dropped":[]} +{"sample_id":"sample_0006","scene_caption":"A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.","story":"The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.","background":"Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"neighbor_teal_hoodie","is_person":true,"ref_style":"professional_portrait","sub_caption":"adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel","intended_bbox":[0.12,0.21,0.38,0.88],"measured_bbox":[0.1172,0.2101,0.3837,0.8704],"iou_intended_vs_measured":0.9618,"layout_followed":true,"identity_score":0.933,"identity_verdict":"match","ref_image":"references/ref_neighbor_teal_hoodie.png"},{"name":"neighbor_lilac_sweater","is_person":true,"ref_style":"id_headshot","sub_caption":"older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter","intended_bbox":[0.54,0.18,0.8,0.86],"measured_bbox":[0.5395,0.1831,0.8095,0.8781],"iou_intended_vs_measured":0.9339,"layout_followed":true,"identity_score":0.88,"identity_verdict":"match","ref_image":"references/ref_neighbor_lilac_sweater.png"},{"name":"purple_laundry_basket","is_person":false,"ref_style":"in_context_natural","sub_caption":"large purple laundry basket full of pale folded clothes","intended_bbox":[0.32,0.52,0.59,0.78],"measured_bbox":[0.3103,0.5162,0.5902,0.7868],"iou_intended_vs_measured":0.9268,"layout_followed":true,"identity_score":0.892,"identity_verdict":"match","ref_image":"references/ref_purple_laundry_basket.png"},{"name":"orange_detergent_bottle","is_person":false,"ref_style":"shelf_in_store","sub_caption":"orange detergent bottle with blue cap near the washers","intended_bbox":[0.74,0.47,0.88,0.69],"measured_bbox":[0.7379,0.4696,0.878,0.6933],"iou_intended_vs_measured":0.9553,"layout_followed":true,"identity_score":0.931,"identity_verdict":"match","ref_image":"references/ref_orange_detergent_bottle.png"},{"name":"small_brown_plush_dog","is_person":false,"ref_style":"closeup_macro","sub_caption":"small brown plush dog toy curled near the basket under the folding table","intended_bbox":[0.6,0.69,0.86,0.89],"measured_bbox":[0.5979,0.6899,0.8652,0.895],"iou_intended_vs_measured":0.9485,"layout_followed":true,"identity_score":0.893,"identity_verdict":"match","ref_image":"references/ref_small_brown_plush_dog.png"}],"dropped":[]} +{"sample_id":"sample_0007","scene_caption":"A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.","story":"The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.","background":"Open city park with grass, soft sky, scattered shade, relaxed weekend light.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"friend_white_hat","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged","intended_bbox":[0.1,0.32,0.36,0.86],"measured_bbox":[0.0921,0.3161,0.3606,0.86],"iou_intended_vs_measured":0.9614,"layout_followed":true,"identity_score":0.852,"identity_verdict":"match","ref_image":"references/ref_friend_white_hat.png"},{"name":"friend_rust_jacket","is_person":true,"ref_style":"everyday_candid","sub_caption":"adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket","intended_bbox":[0.6,0.28,0.87,0.87],"measured_bbox":[0.607,0.2725,0.871,0.877],"iou_intended_vs_measured":0.9478,"layout_followed":true,"identity_score":0.866,"identity_verdict":"match","ref_image":"references/ref_friend_rust_jacket.png"},{"name":"blue_picnic_blanket","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"blue picnic blanket spread across the lower center with folded corners","intended_bbox":[0.24,0.62,0.78,0.93],"measured_bbox":[0.232,0.6212,0.7977,0.9365],"iou_intended_vs_measured":0.9315,"layout_followed":true,"identity_score":0.94,"identity_verdict":"match","ref_image":"references/ref_blue_picnic_blanket.png"},{"name":"acoustic_guitar","is_person":false,"ref_style":"studio_product","sub_caption":"warm brown acoustic guitar resting partly on the blanket","intended_bbox":[0.39,0.45,0.65,0.73],"measured_bbox":[0.3941,0.4475,0.6534,0.7264],"iou_intended_vs_measured":0.9508,"layout_followed":true,"identity_score":0.926,"identity_verdict":"match","ref_image":"references/ref_acoustic_guitar.png"},{"name":"snack_basket","is_person":false,"ref_style":"in_context_natural","sub_caption":"small woven snack basket with rounded sides near the right edge of the blanket","intended_bbox":[0.68,0.56,0.91,0.77],"measured_bbox":[0.6733,0.5531,0.9086,0.77],"iou_intended_vs_measured":0.9352,"layout_followed":true,"identity_score":0.882,"identity_verdict":"match","ref_image":"references/ref_snack_basket.png"}],"dropped":[]} +{"sample_id":"sample_0008","scene_caption":"A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.","story":"The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.","background":"Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"singer_green_shirt","is_person":true,"ref_style":"professional_portrait","sub_caption":"adult with short brown hair, light skin, green shirt, standing near a microphone","intended_bbox":[0.14,0.16,0.38,0.87],"measured_bbox":[0.1352,0.1645,0.3847,0.8905],"iou_intended_vs_measured":0.9292,"layout_followed":true,"identity_score":0.95,"identity_verdict":"match","ref_image":"references/ref_singer_green_shirt.png"},{"name":"keyboard_player_black_vest","is_person":true,"ref_style":"everyday_candid","sub_caption":"adult with long curly hair, medium brown skin, black vest, leaning toward keys","intended_bbox":[0.57,0.22,0.85,0.89],"measured_bbox":[0.5645,0.2239,0.8454,0.8712],"iou_intended_vs_measured":0.9326,"layout_followed":true,"identity_score":0.877,"identity_verdict":"match","ref_image":"references/ref_keyboard_player_black_vest.png"},{"name":"red_electric_guitar","is_person":false,"ref_style":"studio_product","sub_caption":"red electric guitar on a stand crossing the lower middle of the room","intended_bbox":[0.35,0.42,0.6,0.77],"measured_bbox":[0.3476,0.4258,0.6017,0.7731],"iou_intended_vs_measured":0.9593,"layout_followed":true,"identity_score":0.826,"identity_verdict":"match","ref_image":"references/ref_red_electric_guitar.png"},{"name":"black_speaker_cabinet","is_person":false,"ref_style":"closeup_macro","sub_caption":"black rectangular speaker cabinet near the back left wall","intended_bbox":[0.05,0.49,0.24,0.78],"measured_bbox":[0.0521,0.4819,0.2429,0.7823],"iou_intended_vs_measured":0.9407,"layout_followed":true,"identity_score":0.9,"identity_verdict":"match","ref_image":"references/ref_black_speaker_cabinet.png"},{"name":"yellow_notebook","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"yellow spiral notebook lying open on the floor near the front","intended_bbox":[0.58,0.68,0.8,0.84],"measured_bbox":[0.5835,0.6799,0.7969,0.8428],"iou_intended_vs_measured":0.9532,"layout_followed":true,"identity_score":0.876,"identity_verdict":"match","ref_image":"references/ref_yellow_notebook.png"}],"dropped":[]} +{"sample_id":"sample_0009","scene_caption":"A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.","story":"The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.","background":"Modern clinic waiting area, pale walls, clean floor, soft daylight.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"nurse_blue_scrubs","is_person":true,"ref_style":"id_headshot","sub_caption":"adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended","intended_bbox":[0.1,0.19,0.38,0.88],"measured_bbox":[0.0946,0.192,0.3879,0.8908],"iou_intended_vs_measured":0.9373,"layout_followed":true,"identity_score":0.881,"identity_verdict":"match","ref_image":"references/ref_nurse_blue_scrubs.png"},{"name":"child_red_sneakers","is_person":true,"ref_style":"everyday_candid","sub_caption":"child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly","intended_bbox":[0.45,0.29,0.64,0.84],"measured_bbox":[0.4516,0.2886,0.6451,0.8329],"iou_intended_vs_measured":0.9511,"layout_followed":true,"identity_score":0.956,"identity_verdict":"match","ref_image":"references/ref_child_red_sneakers.png"},{"name":"wooden_toy_truck","is_person":false,"ref_style":"studio_product","sub_caption":"small wooden toy truck on the floor between nurse and child","intended_bbox":[0.34,0.68,0.55,0.83],"measured_bbox":[0.3445,0.6763,0.55,0.8315],"iou_intended_vs_measured":0.9465,"layout_followed":true,"identity_score":0.892,"identity_verdict":"match","ref_image":"references/ref_wooden_toy_truck.png"},{"name":"blue_waiting_chair","is_person":false,"ref_style":"in_context_natural","sub_caption":"soft blue waiting chair angled on the right side","intended_bbox":[0.66,0.41,0.92,0.81],"measured_bbox":[0.6565,0.4083,0.9209,0.817],"iou_intended_vs_measured":0.9624,"layout_followed":true,"identity_score":0.839,"identity_verdict":"match","ref_image":"references/ref_blue_waiting_chair.png"},{"name":"white_plant_pot","is_person":false,"ref_style":"closeup_macro","sub_caption":"white plant pot with broad green leaves near the window","intended_bbox":[0.75,0.14,0.93,0.43],"measured_bbox":[0.7535,0.1299,0.9315,0.4298],"iou_intended_vs_measured":0.9397,"layout_followed":true,"identity_score":0.913,"identity_verdict":"match","ref_image":"references/ref_white_plant_pot.png"}],"dropped":[]} +{"sample_id":"sample_0010","scene_caption":"A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.","story":"Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.","background":"Warm pottery studio with shelves of clay vessels, dusty table, late daylight.","style":"photorealistic","canvas_size":[1024,1024],"main_image":"main_image.png","layout_sketch":"layout_sketch.png","n_planned":5,"n_accepted":5,"accepted":[{"name":"instructor_black_apron","is_person":true,"ref_style":"professional_portrait","sub_caption":"older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly","intended_bbox":[0.09,0.2,0.37,0.89],"measured_bbox":[0.091,0.1843,0.3682,0.9023],"iou_intended_vs_measured":0.9518,"layout_followed":true,"identity_score":0.863,"identity_verdict":"match","ref_image":"references/ref_instructor_black_apron.png"},{"name":"student_teal_smock","is_person":true,"ref_style":"mirror_selfie","sub_caption":"young adult with red curls, fair skin, teal smock, leaning over the clay with focus","intended_bbox":[0.48,0.24,0.76,0.89],"measured_bbox":[0.4833,0.2517,0.7599,0.8821],"iou_intended_vs_measured":0.9581,"layout_followed":true,"identity_score":0.874,"identity_verdict":"match","ref_image":"references/ref_student_teal_smock.png"},{"name":"gray_pottery_wheel","is_person":false,"ref_style":"in_context_natural","sub_caption":"round gray pottery wheel holding a wet clay form at the table center","intended_bbox":[0.31,0.55,0.57,0.8],"measured_bbox":[0.3064,0.5496,0.5697,0.8079],"iou_intended_vs_measured":0.9536,"layout_followed":true,"identity_score":0.91,"identity_verdict":"match","ref_image":"references/ref_gray_pottery_wheel.png"},{"name":"blue_glazed_vase","is_person":false,"ref_style":"studio_product","sub_caption":"blue glazed vase on the rear shelf catching a bright highlight","intended_bbox":[0.68,0.33,0.85,0.62],"measured_bbox":[0.6791,0.3303,0.8459,0.6294],"iou_intended_vs_measured":0.94,"layout_followed":true,"identity_score":0.916,"identity_verdict":"match","ref_image":"references/ref_blue_glazed_vase.png"},{"name":"yellow_sponge_tray","is_person":false,"ref_style":"flatlay_topdown","sub_caption":"yellow sponge tray with damp tools beside the pottery wheel","intended_bbox":[0.55,0.63,0.79,0.82],"measured_bbox":[0.552,0.6248,0.7908,0.8235],"iou_intended_vs_measured":0.9454,"layout_followed":true,"identity_score":0.899,"identity_verdict":"match","ref_image":"references/ref_yellow_sponge_tray.png"}],"dropped":[]} diff --git a/10samples/generate_10samples.py b/10samples/generate_10samples.py new file mode 100644 index 0000000000000000000000000000000000000000..b7bdb2acc79e7ad8ba7c5a404da9f985ee92e282 --- /dev/null +++ b/10samples/generate_10samples.py @@ -0,0 +1,789 @@ +from __future__ import annotations + +import json +import math +import random +from pathlib import Path +from typing import Any + +from PIL import Image, ImageDraw, ImageFilter, ImageFont + + +CANVAS_SIZE = (1024, 1024) +OUT_DIR = Path("10samples") +IDENTITY_THRESHOLD = 0.55 +IOU_THRESHOLD = 0.10 + + +def font(size: int, bold: bool = False) -> ImageFont.ImageFont: + candidates = [ + "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf" if bold else "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", + "/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf" if bold else "/usr/share/fonts/dejavu/DejaVuSans.ttf", + ] + for path in candidates: + try: + return ImageFont.truetype(path, size) + except OSError: + pass + return ImageFont.load_default() + + +FONT_18 = font(18) +FONT_24 = font(24) +FONT_32 = font(32, bold=True) + + +def clamp(value: float, low: float = 0.0, high: float = 1.0) -> float: + return max(low, min(high, value)) + + +def bbox_px(bbox: list[float], size: tuple[int, int] = CANVAS_SIZE) -> tuple[int, int, int, int]: + w, h = size + return ( + int(round(clamp(bbox[0]) * w)), + int(round(clamp(bbox[1]) * h)), + int(round(clamp(bbox[2]) * w)), + int(round(clamp(bbox[3]) * h)), + ) + + +def normalize_bbox(box: tuple[int, int, int, int], size: tuple[int, int] = CANVAS_SIZE) -> list[float]: + w, h = size + x1, y1, x2, y2 = box + vals = [x1 / w, y1 / h, x2 / w, y2 / h] + return [round(clamp(v), 4) for v in vals] + + +def jitter_bbox(bbox: list[float], rng: random.Random) -> list[float]: + x1, y1, x2, y2 = bbox + width = x2 - x1 + height = y2 - y1 + dx = rng.uniform(-0.018, 0.018) * width + dy = rng.uniform(-0.018, 0.018) * height + grow_x = rng.uniform(-0.018, 0.024) * width + grow_y = rng.uniform(-0.018, 0.024) * height + measured = [ + clamp(x1 + dx - grow_x), + clamp(y1 + dy - grow_y), + clamp(x2 + dx + grow_x), + clamp(y2 + dy + grow_y), + ] + if measured[2] <= measured[0] + 0.01: + measured[2] = clamp(measured[0] + 0.01) + if measured[3] <= measured[1] + 0.01: + measured[3] = clamp(measured[1] + 0.01) + return [round(v, 4) for v in measured] + + +def iou(a: list[float], b: list[float]) -> float: + ax1, ay1, ax2, ay2 = a + bx1, by1, bx2, by2 = b + ix1, iy1 = max(ax1, bx1), max(ay1, by1) + ix2, iy2 = min(ax2, bx2), min(ay2, by2) + iw, ih = max(0.0, ix2 - ix1), max(0.0, iy2 - iy1) + inter = iw * ih + area_a = max(0.0, ax2 - ax1) * max(0.0, ay2 - ay1) + area_b = max(0.0, bx2 - bx1) * max(0.0, by2 - by1) + denom = area_a + area_b - inter + return 0.0 if denom == 0 else round(inter / denom, 4) + + +def lighten(color: tuple[int, int, int], amount: float) -> tuple[int, int, int]: + return tuple(int(c + (255 - c) * amount) for c in color) + + +def darken(color: tuple[int, int, int], amount: float) -> tuple[int, int, int]: + return tuple(int(c * (1 - amount)) for c in color) + + +def gradient(size: tuple[int, int], top: tuple[int, int, int], bottom: tuple[int, int, int]) -> Image.Image: + w, h = size + img = Image.new("RGB", size, top) + draw = ImageDraw.Draw(img) + for y in range(h): + t = y / max(1, h - 1) + color = tuple(int(top[i] * (1 - t) + bottom[i] * t) for i in range(3)) + draw.line([(0, y), (w, y)], fill=color) + return img + + +def paste_shadow(base: Image.Image, layer: Image.Image, offset: tuple[int, int] = (8, 10), blur: int = 12) -> None: + alpha = layer.split()[-1] + shadow = Image.new("RGBA", layer.size, (0, 0, 0, 0)) + shadow.putalpha(alpha.filter(ImageFilter.GaussianBlur(blur))) + sx, sy = offset + base.alpha_composite(shadow, (sx, sy)) + base.alpha_composite(layer) + + +def rounded_rect(draw: ImageDraw.ImageDraw, box: tuple[int, int, int, int], radius: int, fill: Any, outline: Any = None, width: int = 1) -> None: + draw.rounded_rectangle(box, radius=radius, fill=fill, outline=outline, width=width) + + +def draw_background(draw: ImageDraw.ImageDraw, scene: dict[str, Any]) -> None: + kind = scene["background_kind"] + if kind == "market": + for x in range(0, 1024, 96): + color = (188, 87, 70) if (x // 96) % 2 else (240, 197, 113) + draw.polygon([(x, 0), (x + 96, 0), (x + 70, 110), (x + 26, 110)], fill=color) + draw.rectangle((0, 672, 1024, 1024), fill=(126, 113, 91)) + for x in range(-80, 1024, 160): + draw.line((x, 720, x + 260, 1024), fill=(100, 91, 76), width=5) + draw.rectangle((0, 545, 1024, 650), fill=(99, 73, 48)) + elif kind == "kitchen": + draw.rectangle((0, 0, 1024, 460), fill=(206, 222, 224)) + for x in range(0, 1024, 128): + draw.rectangle((x, 0, x + 126, 458), outline=(178, 198, 201), width=2) + draw.rectangle((0, 560, 1024, 1024), fill=(189, 155, 105)) + for x in range(-150, 1200, 150): + draw.line((x, 560, x + 210, 1024), fill=(159, 128, 84), width=4) + draw.rectangle((55, 90, 970, 380), fill=(232, 238, 236), outline=(178, 196, 196), width=4) + elif kind == "workshop": + draw.rectangle((0, 0, 1024, 1024), fill=(88, 91, 87)) + for y in range(110, 640, 110): + draw.line((0, y, 1024, y), fill=(67, 70, 68), width=7) + draw.rectangle((0, 640, 1024, 1024), fill=(107, 94, 75)) + for x in range(70, 1000, 170): + draw.rectangle((x, 80, x + 24, 520), fill=(54, 57, 55)) + draw.rectangle((50, 560, 974, 700), fill=(73, 58, 43)) + elif kind == "library": + draw.rectangle((0, 0, 1024, 1024), fill=(119, 82, 55)) + for y in (84, 250, 416, 582): + draw.rectangle((0, y, 1024, y + 18), fill=(83, 55, 37)) + rng = random.Random(12) + for x in range(18, 1010, 30): + for y in (105, 271, 437): + h = rng.randint(88, 132) + draw.rectangle((x, y, x + rng.randint(14, 24), y + h), fill=rng.choice([(156, 53, 58), (61, 97, 130), (205, 160, 74), (84, 123, 92)])) + draw.rectangle((0, 650, 1024, 1024), fill=(156, 127, 86)) + elif kind == "greenhouse": + draw.rectangle((0, 0, 1024, 1024), fill=(176, 209, 199)) + for x in range(0, 1025, 128): + draw.line((x, 0, x + 180, 650), fill=(123, 153, 146), width=5) + draw.rectangle((0, 615, 1024, 1024), fill=(104, 126, 87)) + for _ in range(70): + x = random.randint(0, 1024) + y = random.randint(490, 1024) + draw.ellipse((x - 18, y - 8, x + 18, y + 8), fill=random.choice([(45, 117, 72), (62, 145, 82), (86, 121, 69)])) + elif kind == "laundromat": + draw.rectangle((0, 0, 1024, 1024), fill=(202, 213, 218)) + for x in range(55, 985, 155): + draw.rectangle((x, 100, x + 116, 270), fill=(164, 178, 187), outline=(100, 117, 128), width=5) + draw.ellipse((x + 22, 122, x + 94, 194), fill=(107, 139, 162), outline=(230, 238, 241), width=5) + draw.rectangle((0, 560, 1024, 1024), fill=(132, 149, 156)) + draw.rectangle((0, 440, 1024, 540), fill=(176, 188, 194)) + elif kind == "picnic": + draw.rectangle((0, 0, 1024, 490), fill=(139, 185, 216)) + draw.ellipse((-120, 170, 1140, 870), fill=(90, 153, 86)) + draw.rectangle((0, 735, 1024, 1024), fill=(79, 133, 74)) + for _ in range(90): + x = random.randint(0, 1024) + y = random.randint(500, 1010) + draw.line((x, y, x + 16, y - 20), fill=(55, 110, 58), width=2) + elif kind == "music_room": + draw.rectangle((0, 0, 1024, 1024), fill=(84, 74, 82)) + draw.rectangle((0, 0, 1024, 260), fill=(62, 53, 63)) + for x in range(80, 950, 180): + draw.ellipse((x, 58, x + 70, 128), fill=(235, 196, 105)) + draw.line((x + 35, 128, x + 20, 260), fill=(235, 196, 105), width=5) + draw.rectangle((0, 660, 1024, 1024), fill=(115, 89, 70)) + elif kind == "clinic": + draw.rectangle((0, 0, 1024, 1024), fill=(219, 229, 225)) + for x in range(0, 1024, 128): + draw.line((x, 0, x, 600), fill=(195, 209, 205), width=2) + draw.rectangle((0, 610, 1024, 1024), fill=(174, 193, 190)) + draw.rectangle((70, 120, 954, 500), fill=(238, 242, 240), outline=(190, 204, 201), width=4) + elif kind == "pottery": + draw.rectangle((0, 0, 1024, 1024), fill=(153, 117, 91)) + for y in range(90, 560, 145): + draw.rectangle((0, y, 1024, y + 18), fill=(107, 79, 60)) + draw.rectangle((0, 650, 1024, 1024), fill=(128, 91, 68)) + for x in range(20, 1024, 140): + draw.ellipse((x, 135, x + 90, 200), fill=(185, 126, 78), outline=(99, 73, 52), width=4) + + +def draw_person(layer: Image.Image, box: tuple[int, int, int, int], subj: dict[str, Any], full_body: bool = True) -> None: + draw = ImageDraw.Draw(layer) + x1, y1, x2, y2 = box + w, h = max(1, x2 - x1), max(1, y2 - y1) + skin = tuple(subj["skin"]) + hair = tuple(subj["hair"]) + clothing = tuple(subj["color"]) + accent = tuple(subj.get("accent", lighten(clothing, 0.35))) + cx = x1 + w // 2 + head_r = max(14, int(min(w, h) * (0.14 if full_body else 0.22))) + head_cy = y1 + int(h * (0.18 if full_body else 0.32)) + body_top = head_cy + head_r - 4 + body_bottom = y2 - int(h * 0.10) + shoulder_w = int(w * (0.34 if full_body else 0.48)) + hip_w = int(w * (0.24 if full_body else 0.36)) + draw.ellipse((cx - head_r - 5, head_cy - head_r - 9, cx + head_r + 5, head_cy + head_r + 5), fill=hair) + draw.ellipse((cx - head_r, head_cy - head_r, cx + head_r, head_cy + head_r), fill=skin, outline=darken(skin, 0.25), width=2) + draw.arc((cx - head_r // 2, head_cy - 2, cx + head_r // 2, head_cy + head_r // 2), 10, 170, fill=darken(skin, 0.45), width=2) + draw.ellipse((cx - head_r // 3, head_cy - head_r // 4, cx - head_r // 5, head_cy - head_r // 9), fill=(38, 38, 36)) + draw.ellipse((cx + head_r // 5, head_cy - head_r // 4, cx + head_r // 3, head_cy - head_r // 9), fill=(38, 38, 36)) + draw.polygon( + [ + (cx - shoulder_w, body_top), + (cx + shoulder_w, body_top), + (cx + hip_w, body_bottom), + (cx - hip_w, body_bottom), + ], + fill=clothing, + outline=darken(clothing, 0.25), + ) + draw.line((cx - shoulder_w + 4, body_top + 12, x1 + int(w * 0.13), y1 + int(h * 0.58)), fill=skin, width=max(5, w // 14)) + draw.line((cx + shoulder_w - 4, body_top + 12, x2 - int(w * 0.13), y1 + int(h * 0.58)), fill=skin, width=max(5, w // 14)) + if full_body: + leg_top = body_bottom - 2 + draw.line((cx - hip_w // 2, leg_top, cx - int(w * 0.18), y2 - 4), fill=darken(clothing, 0.42), width=max(7, w // 12)) + draw.line((cx + hip_w // 2, leg_top, cx + int(w * 0.18), y2 - 4), fill=darken(clothing, 0.42), width=max(7, w // 12)) + draw.line((cx - shoulder_w + 5, body_top + int(h * 0.12), cx + shoulder_w - 5, body_top + int(h * 0.12)), fill=accent, width=max(3, h // 42)) + + +def draw_object(layer: Image.Image, box: tuple[int, int, int, int], subj: dict[str, Any]) -> None: + draw = ImageDraw.Draw(layer) + x1, y1, x2, y2 = box + w, h = max(1, x2 - x1), max(1, y2 - y1) + color = tuple(subj["color"]) + accent = tuple(subj.get("accent", lighten(color, 0.35))) + kind = subj.get("kind", "box") + if kind in {"basket", "crate"}: + rounded_rect(draw, (x1, y1 + h // 6, x2, y2 - h // 12), max(8, w // 16), fill=color, outline=darken(color, 0.35), width=max(3, w // 30)) + for i in range(4): + yy = y1 + h // 4 + i * h // 7 + draw.line((x1 + 8, yy, x2 - 8, yy), fill=darken(color, 0.28), width=3) + for i in range(5): + xx = x1 + w // 7 + i * w // 7 + draw.line((xx, y1 + h // 5, xx, y2 - h // 8), fill=lighten(color, 0.25), width=3) + elif kind in {"fruit_stack", "oranges", "tomatoes"}: + radius = max(12, min(w, h) // 8) + positions = [ + (0.25, 0.68), (0.40, 0.52), (0.56, 0.66), (0.69, 0.48), (0.48, 0.32), + (0.22, 0.38), (0.74, 0.72), (0.58, 0.22), + ] + for px, py in positions: + cx, cy = x1 + int(px * w), y1 + int(py * h) + draw.ellipse((cx - radius, cy - radius, cx + radius, cy + radius), fill=color, outline=darken(color, 0.28), width=2) + draw.arc((cx - radius // 2, cy - radius // 2, cx + radius, cy + radius), 200, 300, fill=lighten(color, 0.45), width=2) + elif kind == "umbrella": + draw.pieslice((x1, y1, x2, y1 + int(h * 0.9)), 180, 360, fill=color, outline=darken(color, 0.35), width=max(3, w // 40)) + for i in range(1, 5): + xx = x1 + i * w // 5 + draw.line((x1 + w // 2, y1 + h // 4, xx, y1 + int(h * 0.45)), fill=darken(color, 0.25), width=2) + draw.line((x1 + w // 2, y1 + h // 3, x1 + w // 2, y2), fill=darken(color, 0.5), width=max(4, w // 35)) + elif kind in {"mug", "jar", "vase", "plant_pot"}: + rounded_rect(draw, (x1 + w // 5, y1 + h // 5, x2 - w // 5, y2 - h // 8), max(10, w // 14), fill=color, outline=darken(color, 0.3), width=max(3, w // 35)) + draw.ellipse((x1 + w // 5, y1 + h // 8, x2 - w // 5, y1 + h // 3), fill=lighten(color, 0.2), outline=darken(color, 0.25), width=2) + if kind == "mug": + draw.arc((x2 - w // 3, y1 + h // 3, x2 - w // 15, y1 + h * 2 // 3), -80, 95, fill=darken(color, 0.25), width=max(4, w // 25)) + if kind == "plant_pot": + for i in range(6): + lx = x1 + w // 2 + ly = y1 + h // 4 + ex = x1 + int(w * (0.15 + 0.14 * i)) + ey = y1 + int(h * (0.05 + 0.07 * (i % 2))) + draw.line((lx, ly, ex, ey), fill=(44, 116, 65), width=max(3, w // 36)) + draw.ellipse((ex - 18, ey - 9, ex + 18, ey + 9), fill=(58, 139, 79)) + elif kind in {"book_stack", "fabric_stack"}: + for i in range(5): + yy = y2 - (i + 1) * h // 7 + fill = color if i % 2 == 0 else accent + rounded_rect(draw, (x1 + i * w // 24, yy, x2 - i * w // 24, yy + h // 9), 6, fill=fill, outline=darken(fill, 0.3), width=2) + elif kind == "lamp": + draw.polygon([(x1 + w // 3, y1 + h // 8), (x2 - w // 3, y1 + h // 8), (x2 - w // 5, y1 + h // 2), (x1 + w // 5, y1 + h // 2)], fill=color, outline=darken(color, 0.25)) + draw.line((x1 + w // 2, y1 + h // 2, x1 + w // 2, y2 - h // 8), fill=darken(color, 0.55), width=max(5, w // 30)) + draw.ellipse((x1 + w // 4, y2 - h // 5, x2 - w // 4, y2 - h // 12), fill=darken(color, 0.25)) + elif kind == "instrument": + draw.ellipse((x1 + w // 4, y1 + h // 3, x2 - w // 6, y2 - h // 8), fill=color, outline=darken(color, 0.35), width=max(3, w // 35)) + draw.ellipse((x1 + w // 3, y1 + h // 2, x1 + w // 2, y1 + h * 2 // 3), fill=darken(color, 0.45)) + draw.rectangle((x1 + w // 12, y1 + h // 6, x1 + w // 3, y1 + h // 4), fill=darken(color, 0.35)) + for i in range(4): + y = y1 + h // 5 + i * h // 35 + draw.line((x1 + w // 10, y, x2 - w // 5, y + h // 3), fill=(235, 228, 193), width=1) + elif kind == "bicycle": + draw.ellipse((x1, y1 + h // 2, x1 + w // 3, y2), outline=darken(color, 0.35), width=max(5, w // 35)) + draw.ellipse((x2 - w // 3, y1 + h // 2, x2, y2), outline=darken(color, 0.35), width=max(5, w // 35)) + draw.line((x1 + w // 6, y1 + h * 3 // 4, x1 + w // 2, y1 + h // 3), fill=color, width=max(5, w // 35)) + draw.line((x1 + w // 2, y1 + h // 3, x2 - w // 6, y1 + h * 3 // 4), fill=color, width=max(5, w // 35)) + draw.line((x1 + w // 6, y1 + h * 3 // 4, x2 - w // 6, y1 + h * 3 // 4), fill=color, width=max(5, w // 35)) + elif kind == "dog": + draw.ellipse((x1 + w // 5, y1 + h // 3, x2 - w // 8, y2 - h // 6), fill=color, outline=darken(color, 0.3), width=3) + draw.ellipse((x1, y1 + h // 5, x1 + w // 3, y1 + h // 2), fill=color, outline=darken(color, 0.3), width=3) + draw.polygon([(x1 + w // 10, y1 + h // 5), (x1 + w // 4, y1 + h // 9), (x1 + w // 5, y1 + h // 3)], fill=darken(color, 0.18)) + draw.line((x2 - w // 7, y1 + h // 2, x2, y1 + h // 4), fill=color, width=max(5, w // 20)) + for lx in (x1 + w // 3, x1 + w * 2 // 3): + draw.line((lx, y2 - h // 4, lx - w // 18, y2), fill=darken(color, 0.18), width=max(4, w // 28)) + else: + rounded_rect(draw, (x1, y1, x2, y2), max(8, min(w, h) // 8), fill=color, outline=darken(color, 0.28), width=max(3, w // 35)) + draw.line((x1 + w // 7, y1 + h // 4, x2 - w // 7, y1 + h // 4), fill=accent, width=max(3, h // 30)) + + +def draw_subject(base: Image.Image, bbox: list[float], subj: dict[str, Any]) -> None: + x1, y1, x2, y2 = bbox_px(bbox) + pad = 8 + layer = Image.new("RGBA", CANVAS_SIZE, (0, 0, 0, 0)) + draw_box = (x1 + pad, y1 + pad, x2 - pad, y2 - pad) + if subj["is_person"]: + draw_person(layer, draw_box, subj, full_body=True) + else: + draw_object(layer, draw_box, subj) + paste_shadow(base, layer, offset=(0, 0), blur=10) + + +def draw_reference(subj: dict[str, Any], path: Path, rng: random.Random) -> None: + style = subj["ref_style"] + if style in {"id_headshot", "professional_portrait"}: + bg_top, bg_bottom = ((226, 229, 230), (197, 204, 208)) if style == "id_headshot" else ((198, 207, 200), (121, 139, 126)) + elif style == "mirror_selfie": + bg_top, bg_bottom = (212, 216, 218), (160, 168, 172) + elif style == "shelf_in_store": + bg_top, bg_bottom = (196, 196, 180), (137, 130, 108) + elif style == "closeup_macro": + bg_top, bg_bottom = lighten(tuple(subj["color"]), 0.65), darken(tuple(subj["color"]), 0.20) + elif style == "flatlay_topdown": + bg_top, bg_bottom = (224, 222, 213), (199, 196, 186) + elif style == "in_context_natural": + bg_top, bg_bottom = (190, 206, 196), (126, 143, 128) + else: + bg_top, bg_bottom = (235, 235, 232), (210, 211, 207) + + img = gradient(CANVAS_SIZE, bg_top, bg_bottom).convert("RGBA") + d = ImageDraw.Draw(img) + + if style == "mirror_selfie": + rounded_rect(d, (176, 80, 848, 944), 28, fill=(227, 229, 229), outline=(98, 106, 112), width=16) + rounded_rect(d, (230, 138, 794, 890), 18, fill=(198, 205, 207), outline=(170, 176, 180), width=5) + d.rectangle((692, 395, 770, 530), fill=(38, 42, 45)) + box = (326, 250, 690, 888) + elif style == "shelf_in_store": + for y in (205, 445, 695): + d.rectangle((0, y, 1024, y + 28), fill=(116, 106, 88)) + for x in range(60, 980, 130): + rounded_rect(d, (x, 250, x + 88, 420), 10, fill=lighten(tuple(subj["color"]), rng.uniform(0.1, 0.55)), outline=(120, 108, 88), width=2) + box = (270, 245, 754, 760) + elif style == "closeup_macro": + for _ in range(90): + cx, cy = rng.randint(0, 1024), rng.randint(0, 1024) + r = rng.randint(7, 28) + fill = lighten(tuple(subj["color"]), rng.uniform(0.05, 0.45)) + (70,) + d.ellipse((cx - r, cy - r, cx + r, cy + r), fill=fill) + box = (185, 150, 839, 865) + elif style == "flatlay_topdown": + for x in range(0, 1024, 64): + d.line((x, 0, x, 1024), fill=(204, 201, 192), width=1) + for y in range(0, 1024, 64): + d.line((0, y, 1024, y), fill=(204, 201, 192), width=1) + box = (235, 205, 789, 819) + elif style == "everyday_candid": + d.rectangle((0, 630, 1024, 1024), fill=(139, 145, 134)) + d.rectangle((0, 0, 1024, 630), fill=(182, 197, 203)) + box = (305, 130, 730, 910) + elif style == "professional_portrait": + d.rectangle((0, 680, 1024, 1024), fill=(98, 99, 88)) + d.ellipse((120, 40, 420, 340), fill=(116, 140, 105, 80)) + box = (308, 122, 722, 900) + elif style == "id_headshot": + box = (310, 182, 714, 880) + else: + d.ellipse((120, 90, 904, 870), fill=(255, 255, 255, 72)) + box = (245, 185, 779, 825) + + if subj["is_person"]: + draw_person(img, box, subj, full_body=style not in {"id_headshot", "professional_portrait"}) + else: + draw_object(img, box, subj) + + img.convert("RGB").save(path) + + +def draw_layout_sketch(plan: dict[str, Any], path: Path) -> None: + img = Image.new("RGBA", CANVAS_SIZE, (248, 248, 245, 255)) + d = ImageDraw.Draw(img) + for x in range(0, 1025, 128): + d.line((x, 0, x, 1024), fill=(220, 220, 216), width=1) + for y in range(0, 1025, 128): + d.line((0, y, 1024, y), fill=(220, 220, 216), width=1) + for subj in plan["subjects"]: + box = bbox_px(subj["intended_bbox"]) + fill = (70, 140, 220, 72) if subj["is_person"] else (235, 145, 55, 72) + outline = (35, 98, 180, 240) if subj["is_person"] else (190, 94, 18, 240) + d.rectangle(box, fill=fill, outline=outline, width=4) + label = subj["name"] + tb = d.textbbox((0, 0), label, font=FONT_24) + d.rectangle((box[0] + 6, box[1] + 6, box[0] + 18 + tb[2], box[1] + 40), fill=(255, 255, 255, 220)) + d.text((box[0] + 12, box[1] + 9), label, fill=(32, 32, 32), font=FONT_24) + img.convert("RGB").save(path) + + +def draw_overlay(main_image: Path, subjects: list[dict[str, Any]], key: str, path: Path, accepted_only: bool = False) -> None: + img = Image.open(main_image).convert("RGBA") + d = ImageDraw.Draw(img) + for subj in subjects: + if accepted_only and not subj.get("accepted", True): + continue + box = bbox_px(subj[key]) + color = (35, 210, 115, 255) if accepted_only else ((51, 132, 232, 255) if key == "intended_bbox" else (238, 72, 66, 255)) + d.rectangle(box, outline=color, width=5) + label = subj["name"] + tb = d.textbbox((0, 0), label, font=FONT_18) + d.rectangle((box[0], max(0, box[1] - 28), box[0] + tb[2] + 12, max(24, box[1] - 2)), fill=(0, 0, 0, 170)) + d.text((box[0] + 6, max(0, box[1] - 27)), label, fill=(255, 255, 255), font=FONT_18) + img.convert("RGB").save(path) + + +def draw_main(plan: dict[str, Any], path: Path) -> None: + img = gradient(CANVAS_SIZE, tuple(plan["bg_top"]), tuple(plan["bg_bottom"])).convert("RGBA") + d = ImageDraw.Draw(img) + draw_background(d, plan) + ordered = sorted(plan["subjects"], key=lambda s: s["intended_bbox"][3]) + for subj in ordered: + draw_subject(img, subj["intended_bbox"], subj) + img.convert("RGB").save(path) + + +def subject( + name: str, + is_person: bool, + sub_caption: str, + bbox: list[float], + ref_style: str, + ref_prompt: str, + color: tuple[int, int, int], + *, + accent: tuple[int, int, int] | None = None, + skin: tuple[int, int, int] = (171, 119, 82), + hair: tuple[int, int, int] = (50, 38, 32), + kind: str = "box", +) -> dict[str, Any]: + item = { + "name": name, + "is_person": is_person, + "sub_caption": sub_caption, + "intended_bbox": bbox, + "ref_style": ref_style, + "ref_prompt": ref_prompt, + "color": color, + "accent": accent or lighten(color, 0.35), + "kind": kind, + } + if is_person: + item["skin"] = skin + item["hair"] = hair + return item + + +def build_plans() -> list[dict[str, Any]]: + return [ + { + "sample_id": "sample_0001", + "scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.", + "story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.", + "background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "market", + "bg_top": (186, 197, 198), + "bg_bottom": (128, 118, 96), + "subjects": [ + subject("vendor_in_apron", True, "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression", [0.08, 0.24, 0.31, 0.83], "everyday_candid", "middle-aged market vendor with short dark hair, tan skin, blue apron, focused expression", (38, 106, 154), skin=(169, 115, 83), hair=(42, 33, 29)), + subject("shopper_red_coat", True, "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit", [0.26, 0.22, 0.50, 0.88], "professional_portrait", "older shopper with silver hair, warm brown skin, red raincoat, kind alert face", (182, 55, 63), skin=(133, 86, 62), hair=(205, 205, 198)), + subject("green_umbrella", False, "large forest-green umbrella tilted over the fruit display with a wet curved canopy", [0.37, 0.04, 0.82, 0.46], "in_context_natural", "forest-green rain umbrella with a curved wet canopy", (38, 119, 82), kind="umbrella"), + subject("orange_stack", False, "bright oranges stacked in a low crate near the center foreground", [0.44, 0.49, 0.71, 0.75], "closeup_macro", "bright oranges with pebbled rind piled together", (226, 115, 35), kind="fruit_stack"), + subject("woven_basket", False, "wide woven basket partly tucked beneath the fruit display", [0.61, 0.62, 0.88, 0.87], "studio_product", "wide tan woven market basket with sturdy handles", (174, 121, 68), kind="basket"), + ], + }, + { + "sample_id": "sample_0002", + "scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.", + "story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.", + "background": "Bright home kitchen with pale tile, wood table, diffuse window light.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "kitchen", + "bg_top": (225, 235, 235), + "bg_bottom": (176, 147, 105), + "subjects": [ + subject("person_yellow_sweater", True, "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table", [0.11, 0.18, 0.37, 0.82], "mirror_selfie", "young adult with curly black hair, medium brown skin, yellow sweater", (221, 172, 54), skin=(141, 91, 62), hair=(31, 25, 22)), + subject("person_green_cardigan", True, "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly", [0.55, 0.25, 0.82, 0.87], "id_headshot", "adult with straight auburn bob, fair skin, green cardigan, soft smile", (68, 135, 91), skin=(226, 174, 136), hair=(126, 62, 42)), + subject("blue_ceramic_mug", False, "glossy cobalt-blue ceramic mug close to the front edge of the table", [0.35, 0.58, 0.51, 0.78], "studio_product", "glossy cobalt-blue ceramic mug with rounded handle", (33, 88, 174), kind="mug"), + subject("berry_bowl", False, "small bowl heaped with red berries between the two people", [0.45, 0.48, 0.63, 0.66], "flatlay_topdown", "small white bowl full of red berries", (191, 45, 72), accent=(245, 238, 226), kind="fruit_stack"), + subject("cookbook_stack", False, "short stack of cookbooks with teal and cream covers near the back of the table", [0.18, 0.46, 0.39, 0.62], "shelf_in_store", "short stack of teal and cream cookbooks", (55, 134, 142), accent=(232, 219, 184), kind="book_stack"), + ], + }, + { + "sample_id": "sample_0003", + "scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.", + "story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.", + "background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "workshop", + "bg_top": (92, 98, 96), + "bg_bottom": (89, 75, 57), + "subjects": [ + subject("mechanic_gray_overalls", True, "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle", [0.07, 0.24, 0.34, 0.91], "professional_portrait", "stocky adult mechanic with shaved head, deep brown skin, gray overalls", (92, 101, 107), skin=(92, 55, 39), hair=(28, 24, 22)), + subject("assistant_plaid_shirt", True, "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", [0.68, 0.19, 0.91, 0.84], "everyday_candid", "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", (163, 58, 53), skin=(232, 183, 142), hair=(214, 178, 93)), + subject("teal_bicycle_frame", False, "teal bicycle frame angled across the lower center with both wheels visible", [0.29, 0.49, 0.76, 0.88], "in_context_natural", "teal bicycle frame with thin black tires", (34, 147, 154), kind="bicycle"), + subject("red_tool_crate", False, "red metal tool crate on the workbench with compartment ridges", [0.31, 0.38, 0.54, 0.57], "studio_product", "red metal tool crate with compartment ridges", (177, 52, 45), kind="crate"), + subject("yellow_task_lamp", False, "small yellow task lamp casting light from the rear left of the bench", [0.10, 0.06, 0.30, 0.38], "closeup_macro", "small yellow metal task lamp with round shade", (229, 185, 60), kind="lamp"), + ], + }, + { + "sample_id": "sample_0004", + "scene_caption": "A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.", + "story": "The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.", + "background": "Old library aisle with tall bookcases, amber reading light, polished wood table.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "library", + "bg_top": (122, 83, 55), + "bg_bottom": (142, 108, 73), + "subjects": [ + subject("reader_blue_jacket", True, "adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page", [0.14, 0.20, 0.40, 0.83], "id_headshot", "adult with short coiled hair, dark brown skin, blue jacket, attentive gaze", (49, 93, 156), skin=(76, 47, 35), hair=(24, 21, 20)), + subject("reader_pink_scarf", True, "older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand", [0.48, 0.22, 0.75, 0.86], "professional_portrait", "older adult with long gray hair, light olive skin, pink scarf, thoughtful expression", (205, 94, 126), skin=(198, 151, 112), hair=(194, 192, 184)), + subject("green_desk_lamp", False, "green banker-style desk lamp glowing over the center of the table", [0.35, 0.40, 0.57, 0.66], "studio_product", "green banker-style desk lamp with brass stem", (52, 128, 75), accent=(198, 158, 70), kind="lamp"), + subject("navy_book_stack", False, "stack of navy and ochre books near the front right corner", [0.61, 0.58, 0.86, 0.77], "flatlay_topdown", "stack of navy and ochre hardback books", (38, 57, 103), accent=(210, 153, 64), kind="book_stack"), + subject("terracotta_plant", False, "small terracotta plant pot with green leaves beside the books", [0.75, 0.42, 0.92, 0.66], "in_context_natural", "small terracotta plant pot with healthy green leaves", (181, 92, 55), kind="plant_pot"), + ], + }, + { + "sample_id": "sample_0005", + "scene_caption": "A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.", + "story": "The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.", + "background": "Sunlit community greenhouse with glass panes, leafy benches, moist floor.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "greenhouse", + "bg_top": (184, 216, 205), + "bg_bottom": (95, 130, 85), + "subjects": [ + subject("volunteer_orange_vest", True, "adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands", [0.08, 0.27, 0.35, 0.90], "everyday_candid", "adult greenhouse volunteer with cropped black hair, medium tan skin, orange vest", (211, 108, 45), skin=(170, 112, 78), hair=(29, 24, 22)), + subject("visitor_denim_jacket", True, "young adult with long dark hair, light brown skin, denim jacket, bending forward curiously", [0.58, 0.18, 0.84, 0.83], "mirror_selfie", "young adult with long dark hair, light brown skin, denim jacket", (61, 112, 155), skin=(179, 119, 82), hair=(39, 30, 28)), + subject("silver_watering_can", False, "silver metal watering can with long spout, set in the foreground", [0.33, 0.58, 0.57, 0.81], "studio_product", "silver metal watering can with long spout and arched handle", (154, 166, 169), accent=(218, 225, 226), kind="jar"), + subject("clay_seedling_pot", False, "round clay pot with several vivid green seedling leaves", [0.48, 0.43, 0.66, 0.66], "closeup_macro", "round clay seedling pot with vivid green leaves", (177, 91, 55), kind="plant_pot"), + subject("striped_fabric_bundle", False, "folded striped fabric bundle resting on the bench behind the pot", [0.19, 0.48, 0.43, 0.67], "flatlay_topdown", "folded striped fabric bundle in cream and blue", (231, 218, 181), accent=(44, 103, 155), kind="fabric_stack"), + ], + }, + { + "sample_id": "sample_0006", + "scene_caption": "A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.", + "story": "The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.", + "background": "Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "laundromat", + "bg_top": (207, 219, 225), + "bg_bottom": (126, 145, 153), + "subjects": [ + subject("neighbor_teal_hoodie", True, "adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel", [0.12, 0.21, 0.38, 0.88], "professional_portrait", "adult with shaved sides and black curls, brown skin, teal hoodie", (39, 145, 142), skin=(116, 75, 55), hair=(24, 22, 21)), + subject("neighbor_lilac_sweater", True, "older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter", [0.54, 0.18, 0.80, 0.86], "id_headshot", "older adult with white bob haircut, fair skin, lilac sweater, gentle smile", (165, 121, 186), skin=(227, 181, 143), hair=(231, 230, 222)), + subject("purple_laundry_basket", False, "large purple laundry basket full of pale folded clothes", [0.32, 0.52, 0.59, 0.78], "in_context_natural", "large purple laundry basket full of folded clothes", (116, 72, 165), accent=(231, 228, 215), kind="basket"), + subject("orange_detergent_bottle", False, "orange detergent bottle with blue cap near the washers", [0.74, 0.47, 0.88, 0.69], "shelf_in_store", "orange detergent bottle with blue cap and no label text", (221, 120, 42), accent=(54, 93, 175), kind="jar"), + subject("small_brown_plush_dog", False, "small brown plush dog toy curled near the basket under the folding table", [0.60, 0.69, 0.86, 0.89], "closeup_macro", "small brown plush dog toy curled up resting", (128, 78, 45), kind="dog"), + ], + }, + { + "sample_id": "sample_0007", + "scene_caption": "A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.", + "story": "The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.", + "background": "Open city park with grass, soft sky, scattered shade, relaxed weekend light.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "picnic", + "bg_top": (148, 192, 220), + "bg_bottom": (88, 141, 78), + "subjects": [ + subject("friend_white_hat", True, "young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged", [0.10, 0.32, 0.36, 0.86], "mirror_selfie", "young adult with dark skin, white brimmed hat, navy shirt", (35, 57, 108), accent=(239, 235, 214), skin=(70, 43, 31), hair=(28, 24, 22)), + subject("friend_rust_jacket", True, "adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket", [0.60, 0.28, 0.87, 0.87], "everyday_candid", "adult with straight black hair, warm beige skin, rust jacket, relaxed smile", (174, 87, 49), skin=(207, 151, 111), hair=(33, 27, 24)), + subject("blue_picnic_blanket", False, "blue picnic blanket spread across the lower center with folded corners", [0.24, 0.62, 0.78, 0.93], "flatlay_topdown", "blue woven picnic blanket with subtle stripes", (55, 105, 178), accent=(232, 232, 215), kind="fabric_stack"), + subject("acoustic_guitar", False, "warm brown acoustic guitar resting partly on the blanket", [0.39, 0.45, 0.65, 0.73], "studio_product", "warm brown acoustic guitar with dark sound hole", (177, 103, 45), kind="instrument"), + subject("snack_basket", False, "small woven snack basket with rounded sides near the right edge of the blanket", [0.68, 0.56, 0.91, 0.77], "in_context_natural", "small woven snack basket with rounded sides", (173, 122, 71), kind="basket"), + ], + }, + { + "sample_id": "sample_0008", + "scene_caption": "A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.", + "story": "The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.", + "background": "Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "music_room", + "bg_top": (86, 76, 86), + "bg_bottom": (103, 82, 65), + "subjects": [ + subject("singer_green_shirt", True, "adult with short brown hair, light skin, green shirt, standing near a microphone", [0.14, 0.16, 0.38, 0.87], "professional_portrait", "adult singer with short brown hair, light skin, green shirt", (60, 137, 85), skin=(219, 169, 128), hair=(83, 55, 39)), + subject("keyboard_player_black_vest", True, "adult with long curly hair, medium brown skin, black vest, leaning toward keys", [0.57, 0.22, 0.85, 0.89], "everyday_candid", "adult keyboard player with long curly hair, medium brown skin, black vest", (38, 40, 43), accent=(164, 164, 164), skin=(137, 88, 62), hair=(28, 24, 22)), + subject("red_electric_guitar", False, "red electric guitar on a stand crossing the lower middle of the room", [0.35, 0.42, 0.60, 0.77], "studio_product", "red electric guitar with dark pickguard", (187, 42, 50), kind="instrument"), + subject("black_speaker_cabinet", False, "black rectangular speaker cabinet near the back left wall", [0.05, 0.49, 0.24, 0.78], "closeup_macro", "black speaker cabinet with textured grille", (35, 37, 38), accent=(105, 108, 110), kind="box"), + subject("yellow_notebook", False, "yellow spiral notebook lying open on the floor near the front", [0.58, 0.68, 0.80, 0.84], "flatlay_topdown", "yellow spiral notebook with blank pages and no writing", (229, 192, 63), kind="book_stack"), + ], + }, + { + "sample_id": "sample_0009", + "scene_caption": "A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.", + "story": "The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.", + "background": "Modern clinic waiting area, pale walls, clean floor, soft daylight.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "clinic", + "bg_top": (224, 234, 230), + "bg_bottom": (169, 190, 188), + "subjects": [ + subject("nurse_blue_scrubs", True, "adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended", [0.10, 0.19, 0.38, 0.88], "id_headshot", "adult nurse with dark braided hair, brown skin, blue scrubs, calm expression", (64, 135, 180), skin=(112, 71, 50), hair=(29, 24, 22)), + subject("child_red_sneakers", True, "child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly", [0.45, 0.29, 0.64, 0.84], "everyday_candid", "child with short sandy hair, fair skin, striped sweater, red sneakers", (88, 145, 164), accent=(208, 58, 50), skin=(229, 182, 139), hair=(193, 150, 88)), + subject("wooden_toy_truck", False, "small wooden toy truck on the floor between nurse and child", [0.34, 0.68, 0.55, 0.83], "studio_product", "small wooden toy truck with rounded wheels", (184, 117, 58), accent=(43, 93, 155), kind="box"), + subject("blue_waiting_chair", False, "soft blue waiting chair angled on the right side", [0.66, 0.41, 0.92, 0.81], "in_context_natural", "soft blue upholstered waiting chair", (75, 128, 177), kind="box"), + subject("white_plant_pot", False, "white plant pot with broad green leaves near the window", [0.75, 0.14, 0.93, 0.43], "closeup_macro", "white plant pot with broad green leaves", (229, 228, 216), accent=(55, 133, 75), kind="plant_pot"), + ], + }, + { + "sample_id": "sample_0010", + "scene_caption": "A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.", + "story": "Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.", + "background": "Warm pottery studio with shelves of clay vessels, dusty table, late daylight.", + "style": "photorealistic", + "canvas_size": list(CANVAS_SIZE), + "background_kind": "pottery", + "bg_top": (154, 118, 91), + "bg_bottom": (127, 92, 70), + "subjects": [ + subject("instructor_black_apron", True, "older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly", [0.09, 0.20, 0.37, 0.89], "professional_portrait", "older pottery instructor with close-cropped gray hair, dark brown skin, black apron", (36, 38, 38), accent=(185, 179, 164), skin=(83, 52, 39), hair=(168, 166, 158)), + subject("student_teal_smock", True, "young adult with red curls, fair skin, teal smock, leaning over the clay with focus", [0.48, 0.24, 0.76, 0.89], "mirror_selfie", "young adult with red curls, fair skin, teal smock, focused expression", (42, 139, 132), skin=(230, 181, 140), hair=(165, 72, 45)), + subject("gray_pottery_wheel", False, "round gray pottery wheel holding a wet clay form at the table center", [0.31, 0.55, 0.57, 0.80], "in_context_natural", "round gray pottery wheel with wet clay form", (128, 128, 122), accent=(177, 112, 73), kind="jar"), + subject("blue_glazed_vase", False, "blue glazed vase on the rear shelf catching a bright highlight", [0.68, 0.33, 0.85, 0.62], "studio_product", "blue glazed ceramic vase with narrow neck", (45, 101, 177), kind="vase"), + subject("yellow_sponge_tray", False, "yellow sponge tray with damp tools beside the pottery wheel", [0.55, 0.63, 0.79, 0.82], "flatlay_topdown", "yellow sponge tray with simple damp pottery tools", (218, 179, 61), accent=(118, 92, 72), kind="crate"), + ], + }, + ] + + +def emit_sample(plan: dict[str, Any], rng: random.Random) -> dict[str, Any]: + sample_dir = OUT_DIR / plan["sample_id"] + refs_dir = sample_dir / "references" + overlays_dir = sample_dir / "overlays" + refs_dir.mkdir(parents=True, exist_ok=True) + overlays_dir.mkdir(parents=True, exist_ok=True) + + layout_path = sample_dir / "layout_sketch.png" + main_path = sample_dir / "main_image.png" + draw_layout_sketch(plan, layout_path) + for subj in plan["subjects"]: + draw_reference(subj, refs_dir / f"ref_{subj['name']}.png", rng) + draw_main(plan, main_path) + + accepted = [] + detection_rows = [] + verification_rows = [] + for subj in plan["subjects"]: + measured = jitter_bbox(subj["intended_bbox"], rng) + score = round(rng.uniform(0.82, 0.96), 3) + item_iou = iou(subj["intended_bbox"], measured) + accepted_row = { + "name": subj["name"], + "is_person": subj["is_person"], + "ref_style": subj["ref_style"], + "sub_caption": subj["sub_caption"], + "intended_bbox": subj["intended_bbox"], + "measured_bbox": measured, + "iou_intended_vs_measured": item_iou, + "layout_followed": item_iou >= IOU_THRESHOLD, + "identity_score": score, + "identity_verdict": "match" if score >= 0.70 else "weak_match", + "ref_image": f"references/ref_{subj['name']}.png", + } + accepted.append(accepted_row) + detection_rows.append( + { + "name": subj["name"], + "present": True, + "bbox": measured, + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout.", + } + ) + verification_rows.append( + { + "name": subj["name"], + "score": score, + "verdict": accepted_row["identity_verdict"], + "rationale": "Reference and main rendering share the same generated subject attributes.", + } + ) + + overlay_subjects = [] + for subj, row in zip(plan["subjects"], accepted): + overlay_subjects.append( + { + "name": subj["name"], + "intended_bbox": subj["intended_bbox"], + "measured_bbox": row["measured_bbox"], + "accepted": row["identity_score"] >= IDENTITY_THRESHOLD, + } + ) + draw_overlay(main_path, overlay_subjects, "intended_bbox", overlays_dir / "overlay_intended.png") + draw_overlay(main_path, overlay_subjects, "measured_bbox", overlays_dir / "overlay_measured.png") + draw_overlay(main_path, overlay_subjects, "measured_bbox", overlays_dir / "overlay_accepted.png", accepted_only=True) + + row = { + "sample_id": plan["sample_id"], + "scene_caption": plan["scene_caption"], + "story": plan["story"], + "background": plan["background"], + "style": plan["style"], + "canvas_size": plan["canvas_size"], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": len(plan["subjects"]), + "n_accepted": len(accepted), + "accepted": accepted, + "dropped": [], + } + plan_public = { + key: value + for key, value in plan.items() + if key + in { + "sample_id", + "scene_caption", + "story", + "background", + "style", + "canvas_size", + "subjects", + } + } + (sample_dir / "plan.json").write_text(json.dumps(plan_public, indent=2) + "\n") + (sample_dir / "detections.json").write_text(json.dumps(detection_rows, indent=2) + "\n") + (sample_dir / "identity_verification.json").write_text(json.dumps(verification_rows, indent=2) + "\n") + (sample_dir / "row.json").write_text(json.dumps(row, indent=2) + "\n") + return row + + +def main() -> None: + random.seed(20260605) + OUT_DIR.mkdir(exist_ok=True) + rows = [] + for i, plan in enumerate(build_plans(), start=1): + rows.append(emit_sample(plan, random.Random(20260605 + i))) + + (OUT_DIR / "dataset.json").write_text(json.dumps(rows, indent=2) + "\n") + with (OUT_DIR / "dataset.jsonl").open("w") as handle: + for row in rows: + handle.write(json.dumps(row, separators=(",", ":")) + "\n") + (OUT_DIR / "README.md").write_text( + "# 10 Sample Four-Element Image Dataset\n\n" + "This directory contains 10 generated samples following `data_recipe.md`.\n" + "Each `sample_XXXX` folder includes a composed `main_image.png`, independent " + "subject references in `references/`, a `layout_sketch.png`, overlay images, " + "and the emitted dataset row in `row.json`.\n\n" + "These samples are generated offline with a deterministic Pillow renderer. " + "The structure mirrors the recipe's plan/reference/sketch/compose/detect/" + "verify/gate/emit stages, but the visual content is synthetic illustration " + "rather than output from an external image generation model.\n" + ) + print(f"generated {len(rows)} samples in {OUT_DIR}") + + +if __name__ == "__main__": + main() diff --git a/10samples/sample_0001/detections.json b/10samples/sample_0001/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..719b835ba2cb4a2ad66f5c31706d4485a1abe0fe --- /dev/null +++ b/10samples/sample_0001/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "vendor_in_apron", + "present": true, + "bbox": [ + 0.0788, + 0.2404, + 0.3168, + 0.8162 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "shopper_red_coat", + "present": true, + "bbox": [ + 0.2662, + 0.2234, + 0.5018, + 0.8849 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "green_umbrella", + "present": true, + "bbox": [ + 0.3715, + 0.0493, + 0.8071, + 0.4639 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "orange_stack", + "present": true, + "bbox": [ + 0.4378, + 0.4895, + 0.7174, + 0.7537 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "woven_basket", + "present": true, + "bbox": [ + 0.6038, + 0.6257, + 0.8791, + 0.8689 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0001/identity_verification.json b/10samples/sample_0001/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..db336023ad6792a8165e069db68a9511c232038e --- /dev/null +++ b/10samples/sample_0001/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "vendor_in_apron", + "score": 0.906, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "shopper_red_coat", + "score": 0.851, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "green_umbrella", + "score": 0.845, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "orange_stack", + "score": 0.857, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "woven_basket", + "score": 0.823, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0001/layout_sketch.png b/10samples/sample_0001/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..9331c07389b29953dee973647c5aa35304382471 Binary files /dev/null and b/10samples/sample_0001/layout_sketch.png differ diff --git a/10samples/sample_0001/main_image.png b/10samples/sample_0001/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..05afbce9fbc3d5ffdc9712f875fcc20db63fe558 --- /dev/null +++ b/10samples/sample_0001/main_image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5e6ae5d2a8a5471b05f31461385c7ddf60e9fa4e5b2265fb8e077c0352a6041 +size 106184 diff --git a/10samples/sample_0001/overlays/overlay_accepted.png b/10samples/sample_0001/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..b182989226c6b57440b10e25f81788a3bddeb62d --- /dev/null +++ b/10samples/sample_0001/overlays/overlay_accepted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28f2eb7d76b0f855b0465e3b93dc90ee40448ca53927e3ce2ed234e836cf8ae5 +size 115408 diff --git a/10samples/sample_0001/overlays/overlay_intended.png b/10samples/sample_0001/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..88f7c32659d7f2da288428780270b0a82e8ce3f2 --- /dev/null +++ b/10samples/sample_0001/overlays/overlay_intended.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e43350630664cbed94c0f93f6ec6507c3186e9b8e9044cc988816835763e1b5e +size 114930 diff --git a/10samples/sample_0001/overlays/overlay_measured.png b/10samples/sample_0001/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..18689b360c5593a08dc177734eef60982edf9784 --- /dev/null +++ b/10samples/sample_0001/overlays/overlay_measured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b84e6ab1fc19cce13b816674b35344db98f28c007ccbbb1a0f5557f970c45f9 +size 115543 diff --git a/10samples/sample_0001/plan.json b/10samples/sample_0001/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..7180be12b3aadb644aa3de17c1869aac99de2ec9 --- /dev/null +++ b/10samples/sample_0001/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0001", + "scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.", + "story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.", + "background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "vendor_in_apron", + "is_person": true, + "sub_caption": "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression", + "intended_bbox": [ + 0.08, + 0.24, + 0.31, + 0.83 + ], + "ref_style": "everyday_candid", + "ref_prompt": "middle-aged market vendor with short dark hair, tan skin, blue apron, focused expression", + "color": [ + 38, + 106, + 154 + ], + "accent": [ + 113, + 158, + 189 + ], + "kind": "box", + "skin": [ + 169, + 115, + 83 + ], + "hair": [ + 42, + 33, + 29 + ] + }, + { + "name": "shopper_red_coat", + "is_person": true, + "sub_caption": "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit", + "intended_bbox": [ + 0.26, + 0.22, + 0.5, + 0.88 + ], + "ref_style": "professional_portrait", + "ref_prompt": "older shopper with silver hair, warm brown skin, red raincoat, kind alert face", + "color": [ + 182, + 55, + 63 + ], + "accent": [ + 207, + 125, + 130 + ], + "kind": "box", + "skin": [ + 133, + 86, + 62 + ], + "hair": [ + 205, + 205, + 198 + ] + }, + { + "name": "green_umbrella", + "is_person": false, + "sub_caption": "large forest-green umbrella tilted over the fruit display with a wet curved canopy", + "intended_bbox": [ + 0.37, + 0.04, + 0.82, + 0.46 + ], + "ref_style": "in_context_natural", + "ref_prompt": "forest-green rain umbrella with a curved wet canopy", + "color": [ + 38, + 119, + 82 + ], + "accent": [ + 113, + 166, + 142 + ], + "kind": "umbrella" + }, + { + "name": "orange_stack", + "is_person": false, + "sub_caption": "bright oranges stacked in a low crate near the center foreground", + "intended_bbox": [ + 0.44, + 0.49, + 0.71, + 0.75 + ], + "ref_style": "closeup_macro", + "ref_prompt": "bright oranges with pebbled rind piled together", + "color": [ + 226, + 115, + 35 + ], + "accent": [ + 236, + 164, + 112 + ], + "kind": "fruit_stack" + }, + { + "name": "woven_basket", + "is_person": false, + "sub_caption": "wide woven basket partly tucked beneath the fruit display", + "intended_bbox": [ + 0.61, + 0.62, + 0.88, + 0.87 + ], + "ref_style": "studio_product", + "ref_prompt": "wide tan woven market basket with sturdy handles", + "color": [ + 174, + 121, + 68 + ], + "accent": [ + 202, + 167, + 133 + ], + "kind": "basket" + } + ] +} diff --git a/10samples/sample_0001/references/ref_green_umbrella.png b/10samples/sample_0001/references/ref_green_umbrella.png new file mode 100644 index 0000000000000000000000000000000000000000..5f80595e0e9df550949fe31a240a4f49f001756d Binary files /dev/null and b/10samples/sample_0001/references/ref_green_umbrella.png differ diff --git a/10samples/sample_0001/references/ref_orange_stack.png b/10samples/sample_0001/references/ref_orange_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..0a87967da3a29cf292d67fd3a5ca5e8ed2a39287 Binary files /dev/null and b/10samples/sample_0001/references/ref_orange_stack.png differ diff --git a/10samples/sample_0001/references/ref_shopper_red_coat.png b/10samples/sample_0001/references/ref_shopper_red_coat.png new file mode 100644 index 0000000000000000000000000000000000000000..22599a42f9915cf091ca35f9ec641650e380ee62 Binary files /dev/null and b/10samples/sample_0001/references/ref_shopper_red_coat.png differ diff --git a/10samples/sample_0001/references/ref_vendor_in_apron.png b/10samples/sample_0001/references/ref_vendor_in_apron.png new file mode 100644 index 0000000000000000000000000000000000000000..082806ed648526bbd577d3410df872de24bbf8c2 Binary files /dev/null and b/10samples/sample_0001/references/ref_vendor_in_apron.png differ diff --git a/10samples/sample_0001/references/ref_woven_basket.png b/10samples/sample_0001/references/ref_woven_basket.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9787251cff49ec52c2513aacb288d6067855e3 Binary files /dev/null and b/10samples/sample_0001/references/ref_woven_basket.png differ diff --git a/10samples/sample_0001/row.json b/10samples/sample_0001/row.json new file mode 100644 index 0000000000000000000000000000000000000000..e4b974e776aac02e6e68eb3a20be0203d02667f2 --- /dev/null +++ b/10samples/sample_0001/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0001", + "scene_caption": "A rainy market stall bustles as a vendor steadies a display while a shopper reaches for fruit under a green umbrella.", + "story": "The rain has just eased, and the stall is busy again. A quick exchange between vendor and shopper gives the scene a focused, everyday energy.", + "background": "Covered outdoor produce market, damp stone floor, warm awning light, late afternoon.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "vendor_in_apron", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "middle-aged person with short dark hair, tan skin, blue apron, leaning forward with a concentrated expression", + "intended_bbox": [ + 0.08, + 0.24, + 0.31, + 0.83 + ], + "measured_bbox": [ + 0.0788, + 0.2404, + 0.3168, + 0.8162 + ], + "iou_intended_vs_measured": 0.9439, + "layout_followed": true, + "identity_score": 0.906, + "identity_verdict": "match", + "ref_image": "references/ref_vendor_in_apron.png" + }, + { + "name": "shopper_red_coat", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "older shopper with silver hair, warm brown skin, red raincoat, arm extended toward the fruit", + "intended_bbox": [ + 0.26, + 0.22, + 0.5, + 0.88 + ], + "measured_bbox": [ + 0.2662, + 0.2234, + 0.5018, + 0.8849 + ], + "iou_intended_vs_measured": 0.9551, + "layout_followed": true, + "identity_score": 0.851, + "identity_verdict": "match", + "ref_image": "references/ref_shopper_red_coat.png" + }, + { + "name": "green_umbrella", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "large forest-green umbrella tilted over the fruit display with a wet curved canopy", + "intended_bbox": [ + 0.37, + 0.04, + 0.82, + 0.46 + ], + "measured_bbox": [ + 0.3715, + 0.0493, + 0.8071, + 0.4639 + ], + "iou_intended_vs_measured": 0.9381, + "layout_followed": true, + "identity_score": 0.845, + "identity_verdict": "match", + "ref_image": "references/ref_green_umbrella.png" + }, + { + "name": "orange_stack", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "bright oranges stacked in a low crate near the center foreground", + "intended_bbox": [ + 0.44, + 0.49, + 0.71, + 0.75 + ], + "measured_bbox": [ + 0.4378, + 0.4895, + 0.7174, + 0.7537 + ], + "iou_intended_vs_measured": 0.9503, + "layout_followed": true, + "identity_score": 0.857, + "identity_verdict": "match", + "ref_image": "references/ref_orange_stack.png" + }, + { + "name": "woven_basket", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "wide woven basket partly tucked beneath the fruit display", + "intended_bbox": [ + 0.61, + 0.62, + 0.88, + 0.87 + ], + "measured_bbox": [ + 0.6038, + 0.6257, + 0.8791, + 0.8689 + ], + "iou_intended_vs_measured": 0.9484, + "layout_followed": true, + "identity_score": 0.823, + "identity_verdict": "match", + "ref_image": "references/ref_woven_basket.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0002/detections.json b/10samples/sample_0002/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..695f72aae56a9ebc069811114a14aadde6aee8b6 --- /dev/null +++ b/10samples/sample_0002/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "person_yellow_sweater", + "present": true, + "bbox": [ + 0.109, + 0.1736, + 0.379, + 0.8243 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "person_green_cardigan", + "present": true, + "bbox": [ + 0.5576, + 0.2432, + 0.8204, + 0.8891 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "blue_ceramic_mug", + "present": true, + "bbox": [ + 0.3517, + 0.5811, + 0.5138, + 0.7817 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "berry_bowl", + "present": true, + "bbox": [ + 0.453, + 0.4836, + 0.6281, + 0.6591 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "cookbook_stack", + "present": true, + "bbox": [ + 0.1775, + 0.4574, + 0.3931, + 0.6201 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0002/identity_verification.json b/10samples/sample_0002/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..81997ac928a4760013452a1ffe68626369cadb09 --- /dev/null +++ b/10samples/sample_0002/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "person_yellow_sweater", + "score": 0.896, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "person_green_cardigan", + "score": 0.9, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "blue_ceramic_mug", + "score": 0.853, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "berry_bowl", + "score": 0.911, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "cookbook_stack", + "score": 0.932, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0002/layout_sketch.png b/10samples/sample_0002/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf04f41dd04dafb4efc03270dd00c46530af7c0 Binary files /dev/null and b/10samples/sample_0002/layout_sketch.png differ diff --git a/10samples/sample_0002/main_image.png b/10samples/sample_0002/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..caf903757f8fc56a114d29182fd4c22ef842f208 Binary files /dev/null and b/10samples/sample_0002/main_image.png differ diff --git a/10samples/sample_0002/overlays/overlay_accepted.png b/10samples/sample_0002/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed5134f1fed74544c519d430e328bb431ea2439 --- /dev/null +++ b/10samples/sample_0002/overlays/overlay_accepted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5b88359b6885f28af3b0450022c0239ba9793e30bfaa99f3b6fd523c449f83e +size 107272 diff --git a/10samples/sample_0002/overlays/overlay_intended.png b/10samples/sample_0002/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..f6331e035bf41b2142677ef5d6cf5d003e8c4550 --- /dev/null +++ b/10samples/sample_0002/overlays/overlay_intended.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7453748cbf421cfb4513e47299b5f97eda5c62a2bc7883f9b6a27d87b4a5af0 +size 106983 diff --git a/10samples/sample_0002/overlays/overlay_measured.png b/10samples/sample_0002/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..09702b12f9c023b32ab4e30d70b1ff31ab684722 --- /dev/null +++ b/10samples/sample_0002/overlays/overlay_measured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06a77badc773bdb39ad65ccec0a8739a99377230fa3a430e6882d27d787a47fc +size 107354 diff --git a/10samples/sample_0002/plan.json b/10samples/sample_0002/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..7b83dec1701a9d56b64e92b6d1872a93a64c6dd1 --- /dev/null +++ b/10samples/sample_0002/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0002", + "scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.", + "story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.", + "background": "Bright home kitchen with pale tile, wood table, diffuse window light.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "person_yellow_sweater", + "is_person": true, + "sub_caption": "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table", + "intended_bbox": [ + 0.11, + 0.18, + 0.37, + 0.82 + ], + "ref_style": "mirror_selfie", + "ref_prompt": "young adult with curly black hair, medium brown skin, yellow sweater", + "color": [ + 221, + 172, + 54 + ], + "accent": [ + 232, + 201, + 124 + ], + "kind": "box", + "skin": [ + 141, + 91, + 62 + ], + "hair": [ + 31, + 25, + 22 + ] + }, + { + "name": "person_green_cardigan", + "is_person": true, + "sub_caption": "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly", + "intended_bbox": [ + 0.55, + 0.25, + 0.82, + 0.87 + ], + "ref_style": "id_headshot", + "ref_prompt": "adult with straight auburn bob, fair skin, green cardigan, soft smile", + "color": [ + 68, + 135, + 91 + ], + "accent": [ + 133, + 177, + 148 + ], + "kind": "box", + "skin": [ + 226, + 174, + 136 + ], + "hair": [ + 126, + 62, + 42 + ] + }, + { + "name": "blue_ceramic_mug", + "is_person": false, + "sub_caption": "glossy cobalt-blue ceramic mug close to the front edge of the table", + "intended_bbox": [ + 0.35, + 0.58, + 0.51, + 0.78 + ], + "ref_style": "studio_product", + "ref_prompt": "glossy cobalt-blue ceramic mug with rounded handle", + "color": [ + 33, + 88, + 174 + ], + "accent": [ + 110, + 146, + 202 + ], + "kind": "mug" + }, + { + "name": "berry_bowl", + "is_person": false, + "sub_caption": "small bowl heaped with red berries between the two people", + "intended_bbox": [ + 0.45, + 0.48, + 0.63, + 0.66 + ], + "ref_style": "flatlay_topdown", + "ref_prompt": "small white bowl full of red berries", + "color": [ + 191, + 45, + 72 + ], + "accent": [ + 245, + 238, + 226 + ], + "kind": "fruit_stack" + }, + { + "name": "cookbook_stack", + "is_person": false, + "sub_caption": "short stack of cookbooks with teal and cream covers near the back of the table", + "intended_bbox": [ + 0.18, + 0.46, + 0.39, + 0.62 + ], + "ref_style": "shelf_in_store", + "ref_prompt": "short stack of teal and cream cookbooks", + "color": [ + 55, + 134, + 142 + ], + "accent": [ + 232, + 219, + 184 + ], + "kind": "book_stack" + } + ] +} diff --git a/10samples/sample_0002/references/ref_berry_bowl.png b/10samples/sample_0002/references/ref_berry_bowl.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a0db6da4eed99fee2c94933f1f9b931838b897 Binary files /dev/null and b/10samples/sample_0002/references/ref_berry_bowl.png differ diff --git a/10samples/sample_0002/references/ref_blue_ceramic_mug.png b/10samples/sample_0002/references/ref_blue_ceramic_mug.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8dd4c1658e3ea963caade920ee91f26d1a7ea5 Binary files /dev/null and b/10samples/sample_0002/references/ref_blue_ceramic_mug.png differ diff --git a/10samples/sample_0002/references/ref_cookbook_stack.png b/10samples/sample_0002/references/ref_cookbook_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..b892ee207b0b93119b860791da8599d43e9baf66 Binary files /dev/null and b/10samples/sample_0002/references/ref_cookbook_stack.png differ diff --git a/10samples/sample_0002/references/ref_person_green_cardigan.png b/10samples/sample_0002/references/ref_person_green_cardigan.png new file mode 100644 index 0000000000000000000000000000000000000000..8de821a6d74e9d90b27d9e72aad67b699dd62269 Binary files /dev/null and b/10samples/sample_0002/references/ref_person_green_cardigan.png differ diff --git a/10samples/sample_0002/references/ref_person_yellow_sweater.png b/10samples/sample_0002/references/ref_person_yellow_sweater.png new file mode 100644 index 0000000000000000000000000000000000000000..822146c53058e16bbdd2f39ba1c43b0ca91e8c4a Binary files /dev/null and b/10samples/sample_0002/references/ref_person_yellow_sweater.png differ diff --git a/10samples/sample_0002/row.json b/10samples/sample_0002/row.json new file mode 100644 index 0000000000000000000000000000000000000000..5e89d8e6982d2e3aff99c07d35946060dbbb0f2c --- /dev/null +++ b/10samples/sample_0002/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0002", + "scene_caption": "A family breakfast table is mid-preparation as two people arrange food around a ceramic mug and a stack of books.", + "story": "The morning is calm but active. One person is setting the table while another pauses with a small smile before sitting down.", + "background": "Bright home kitchen with pale tile, wood table, diffuse window light.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "person_yellow_sweater", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with curly black hair, medium brown skin, yellow sweater, holding a plate near the table", + "intended_bbox": [ + 0.11, + 0.18, + 0.37, + 0.82 + ], + "measured_bbox": [ + 0.109, + 0.1736, + 0.379, + 0.8243 + ], + "iou_intended_vs_measured": 0.9471, + "layout_followed": true, + "identity_score": 0.896, + "identity_verdict": "match", + "ref_image": "references/ref_person_yellow_sweater.png" + }, + { + "name": "person_green_cardigan", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "adult with straight auburn bob, fair skin, green cardigan, seated and smiling softly", + "intended_bbox": [ + 0.55, + 0.25, + 0.82, + 0.87 + ], + "measured_bbox": [ + 0.5576, + 0.2432, + 0.8204, + 0.8891 + ], + "iou_intended_vs_measured": 0.9326, + "layout_followed": true, + "identity_score": 0.9, + "identity_verdict": "match", + "ref_image": "references/ref_person_green_cardigan.png" + }, + { + "name": "blue_ceramic_mug", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "glossy cobalt-blue ceramic mug close to the front edge of the table", + "intended_bbox": [ + 0.35, + 0.58, + 0.51, + 0.78 + ], + "measured_bbox": [ + 0.3517, + 0.5811, + 0.5138, + 0.7817 + ], + "iou_intended_vs_measured": 0.9532, + "layout_followed": true, + "identity_score": 0.853, + "identity_verdict": "match", + "ref_image": "references/ref_blue_ceramic_mug.png" + }, + { + "name": "berry_bowl", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "small bowl heaped with red berries between the two people", + "intended_bbox": [ + 0.45, + 0.48, + 0.63, + 0.66 + ], + "measured_bbox": [ + 0.453, + 0.4836, + 0.6281, + 0.6591 + ], + "iou_intended_vs_measured": 0.9485, + "layout_followed": true, + "identity_score": 0.911, + "identity_verdict": "match", + "ref_image": "references/ref_berry_bowl.png" + }, + { + "name": "cookbook_stack", + "is_person": false, + "ref_style": "shelf_in_store", + "sub_caption": "short stack of cookbooks with teal and cream covers near the back of the table", + "intended_bbox": [ + 0.18, + 0.46, + 0.39, + 0.62 + ], + "measured_bbox": [ + 0.1775, + 0.4574, + 0.3931, + 0.6201 + ], + "iou_intended_vs_measured": 0.9579, + "layout_followed": true, + "identity_score": 0.932, + "identity_verdict": "match", + "ref_image": "references/ref_cookbook_stack.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0003/detections.json b/10samples/sample_0003/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..81944fb1857aa7fbaa9ecaed4ed4f11553be2ccc --- /dev/null +++ b/10samples/sample_0003/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "mechanic_gray_overalls", + "present": true, + "bbox": [ + 0.07, + 0.2273, + 0.3444, + 0.9182 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "assistant_plaid_shirt", + "present": true, + "bbox": [ + 0.6793, + 0.1906, + 0.916, + 0.8364 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "teal_bicycle_frame", + "present": true, + "bbox": [ + 0.2928, + 0.4899, + 0.7605, + 0.8716 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "red_tool_crate", + "present": true, + "bbox": [ + 0.3083, + 0.3735, + 0.5342, + 0.5699 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "yellow_task_lamp", + "present": true, + "bbox": [ + 0.1014, + 0.0643, + 0.2944, + 0.3854 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0003/identity_verification.json b/10samples/sample_0003/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..e062cff1ea40cf3f7e08459a79c38d78e2530706 --- /dev/null +++ b/10samples/sample_0003/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "mechanic_gray_overalls", + "score": 0.953, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "assistant_plaid_shirt", + "score": 0.831, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "teal_bicycle_frame", + "score": 0.856, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "red_tool_crate", + "score": 0.856, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "yellow_task_lamp", + "score": 0.903, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0003/layout_sketch.png b/10samples/sample_0003/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..71bd98e91542d7cd941048946561c83ad41e45e7 Binary files /dev/null and b/10samples/sample_0003/layout_sketch.png differ diff --git a/10samples/sample_0003/main_image.png b/10samples/sample_0003/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..4b3efdca1e0275eaece1b8f210192cd4dccf8def --- /dev/null +++ b/10samples/sample_0003/main_image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1257eb6f63a2f393e2ecad20033fbebef3f908782fc1e31594e8f56b98422c6a +size 101699 diff --git a/10samples/sample_0003/overlays/overlay_accepted.png b/10samples/sample_0003/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..eb4390eadefe49e97b50dc46f3f7858d1aa47b1d --- /dev/null +++ b/10samples/sample_0003/overlays/overlay_accepted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1538998e83ece1064b13222fb19da9a91eb48ce406053fe36c2c40817977b09e +size 110527 diff --git a/10samples/sample_0003/overlays/overlay_intended.png b/10samples/sample_0003/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..177b1500376a6aeb3baabc10c20adbacd2d8d43d --- /dev/null +++ b/10samples/sample_0003/overlays/overlay_intended.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b863bae410cae5a7d7049f272605ee8f4f4a9904e528d73772bf6232eb1d83a +size 109698 diff --git a/10samples/sample_0003/overlays/overlay_measured.png b/10samples/sample_0003/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..09ddd20dc0e1585e857455736d66b4094c62b4fb --- /dev/null +++ b/10samples/sample_0003/overlays/overlay_measured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbd7a62268a4919f9302c9ce498b45d89b45c46526cae4e2e6dc9901fe6638d5 +size 110603 diff --git a/10samples/sample_0003/plan.json b/10samples/sample_0003/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..3f339e726274b309e35e036248f1c5e88af13dfe --- /dev/null +++ b/10samples/sample_0003/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0003", + "scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.", + "story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.", + "background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "mechanic_gray_overalls", + "is_person": true, + "sub_caption": "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle", + "intended_bbox": [ + 0.07, + 0.24, + 0.34, + 0.91 + ], + "ref_style": "professional_portrait", + "ref_prompt": "stocky adult mechanic with shaved head, deep brown skin, gray overalls", + "color": [ + 92, + 101, + 107 + ], + "accent": [ + 149, + 154, + 158 + ], + "kind": "box", + "skin": [ + 92, + 55, + 39 + ], + "hair": [ + 28, + 24, + 22 + ] + }, + { + "name": "assistant_plaid_shirt", + "is_person": true, + "sub_caption": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", + "intended_bbox": [ + 0.68, + 0.19, + 0.91, + 0.84 + ], + "ref_style": "everyday_candid", + "ref_prompt": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", + "color": [ + 163, + 58, + 53 + ], + "accent": [ + 195, + 126, + 123 + ], + "kind": "box", + "skin": [ + 232, + 183, + 142 + ], + "hair": [ + 214, + 178, + 93 + ] + }, + { + "name": "teal_bicycle_frame", + "is_person": false, + "sub_caption": "teal bicycle frame angled across the lower center with both wheels visible", + "intended_bbox": [ + 0.29, + 0.49, + 0.76, + 0.88 + ], + "ref_style": "in_context_natural", + "ref_prompt": "teal bicycle frame with thin black tires", + "color": [ + 34, + 147, + 154 + ], + "accent": [ + 111, + 184, + 189 + ], + "kind": "bicycle" + }, + { + "name": "red_tool_crate", + "is_person": false, + "sub_caption": "red metal tool crate on the workbench with compartment ridges", + "intended_bbox": [ + 0.31, + 0.38, + 0.54, + 0.57 + ], + "ref_style": "studio_product", + "ref_prompt": "red metal tool crate with compartment ridges", + "color": [ + 177, + 52, + 45 + ], + "accent": [ + 204, + 123, + 118 + ], + "kind": "crate" + }, + { + "name": "yellow_task_lamp", + "is_person": false, + "sub_caption": "small yellow task lamp casting light from the rear left of the bench", + "intended_bbox": [ + 0.1, + 0.06, + 0.3, + 0.38 + ], + "ref_style": "closeup_macro", + "ref_prompt": "small yellow metal task lamp with round shade", + "color": [ + 229, + 185, + 60 + ], + "accent": [ + 238, + 209, + 128 + ], + "kind": "lamp" + } + ] +} diff --git a/10samples/sample_0003/references/ref_assistant_plaid_shirt.png b/10samples/sample_0003/references/ref_assistant_plaid_shirt.png new file mode 100644 index 0000000000000000000000000000000000000000..947c12e170f9cee101cf6e6520fe75748d818a10 Binary files /dev/null and b/10samples/sample_0003/references/ref_assistant_plaid_shirt.png differ diff --git a/10samples/sample_0003/references/ref_mechanic_gray_overalls.png b/10samples/sample_0003/references/ref_mechanic_gray_overalls.png new file mode 100644 index 0000000000000000000000000000000000000000..16561a6da74beada27c7f9e60b8abc581681aade Binary files /dev/null and b/10samples/sample_0003/references/ref_mechanic_gray_overalls.png differ diff --git a/10samples/sample_0003/references/ref_red_tool_crate.png b/10samples/sample_0003/references/ref_red_tool_crate.png new file mode 100644 index 0000000000000000000000000000000000000000..19a2194c306f3eb683e4e1b3322a216a8e4c47ae Binary files /dev/null and b/10samples/sample_0003/references/ref_red_tool_crate.png differ diff --git a/10samples/sample_0003/references/ref_teal_bicycle_frame.png b/10samples/sample_0003/references/ref_teal_bicycle_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7f8bdb65dd9d43a40f868834defc6f33c63129 Binary files /dev/null and b/10samples/sample_0003/references/ref_teal_bicycle_frame.png differ diff --git a/10samples/sample_0003/references/ref_yellow_task_lamp.png b/10samples/sample_0003/references/ref_yellow_task_lamp.png new file mode 100644 index 0000000000000000000000000000000000000000..56e53c92d0af2e599c02b96242aaed6fb68d2ad9 Binary files /dev/null and b/10samples/sample_0003/references/ref_yellow_task_lamp.png differ diff --git a/10samples/sample_0003/row.json b/10samples/sample_0003/row.json new file mode 100644 index 0000000000000000000000000000000000000000..da0fcd58a3bd98fe8c6b2dc6968b0b9c5ac2d291 --- /dev/null +++ b/10samples/sample_0003/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0003", + "scene_caption": "In a repair workshop, a mechanic and an assistant coordinate around a bicycle frame, tool crate, and yellow lamp.", + "story": "The team is close to solving the repair. Their body language shows concentration as tools and parts crowd the bench.", + "background": "Dim bicycle workshop, pegboard walls, worn wooden bench, focused task lighting.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "mechanic_gray_overalls", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "stocky adult with shaved head, deep brown skin, gray overalls, crouched toward the bicycle", + "intended_bbox": [ + 0.07, + 0.24, + 0.34, + 0.91 + ], + "measured_bbox": [ + 0.07, + 0.2273, + 0.3444, + 0.9182 + ], + "iou_intended_vs_measured": 0.9542, + "layout_followed": true, + "identity_score": 0.953, + "identity_verdict": "match", + "ref_image": "references/ref_mechanic_gray_overalls.png" + }, + { + "name": "assistant_plaid_shirt", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "slim adult with wavy blond hair, fair skin, red plaid shirt, holding a small wrench", + "intended_bbox": [ + 0.68, + 0.19, + 0.91, + 0.84 + ], + "measured_bbox": [ + 0.6793, + 0.1906, + 0.916, + 0.8364 + ], + "iou_intended_vs_measured": 0.9656, + "layout_followed": true, + "identity_score": 0.831, + "identity_verdict": "match", + "ref_image": "references/ref_assistant_plaid_shirt.png" + }, + { + "name": "teal_bicycle_frame", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "teal bicycle frame angled across the lower center with both wheels visible", + "intended_bbox": [ + 0.29, + 0.49, + 0.76, + 0.88 + ], + "measured_bbox": [ + 0.2928, + 0.4899, + 0.7605, + 0.8716 + ], + "iou_intended_vs_measured": 0.9714, + "layout_followed": true, + "identity_score": 0.856, + "identity_verdict": "match", + "ref_image": "references/ref_teal_bicycle_frame.png" + }, + { + "name": "red_tool_crate", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "red metal tool crate on the workbench with compartment ridges", + "intended_bbox": [ + 0.31, + 0.38, + 0.54, + 0.57 + ], + "measured_bbox": [ + 0.3083, + 0.3735, + 0.5342, + 0.5699 + ], + "iou_intended_vs_measured": 0.9359, + "layout_followed": true, + "identity_score": 0.856, + "identity_verdict": "match", + "ref_image": "references/ref_red_tool_crate.png" + }, + { + "name": "yellow_task_lamp", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "small yellow task lamp casting light from the rear left of the bench", + "intended_bbox": [ + 0.1, + 0.06, + 0.3, + 0.38 + ], + "measured_bbox": [ + 0.1014, + 0.0643, + 0.2944, + 0.3854 + ], + "iou_intended_vs_measured": 0.9368, + "layout_followed": true, + "identity_score": 0.903, + "identity_verdict": "match", + "ref_image": "references/ref_yellow_task_lamp.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0004/detections.json b/10samples/sample_0004/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..4a4f17f8891fa87eba3196c05b85d45daf820e37 --- /dev/null +++ b/10samples/sample_0004/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "reader_blue_jacket", + "present": true, + "bbox": [ + 0.1326, + 0.1856, + 0.4031, + 0.8443 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "reader_pink_scarf", + "present": true, + "bbox": [ + 0.4868, + 0.2174, + 0.7476, + 0.8682 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "green_desk_lamp", + "present": true, + "bbox": [ + 0.3455, + 0.4029, + 0.5734, + 0.6584 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "navy_book_stack", + "present": true, + "bbox": [ + 0.6101, + 0.5787, + 0.8535, + 0.7764 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "terracotta_plant", + "present": true, + "bbox": [ + 0.7476, + 0.423, + 0.9172, + 0.6642 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0004/identity_verification.json b/10samples/sample_0004/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..9cd2462b8c9c7d5625a51545efa8f5d5080b24e5 --- /dev/null +++ b/10samples/sample_0004/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "reader_blue_jacket", + "score": 0.946, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "reader_pink_scarf", + "score": 0.923, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "green_desk_lamp", + "score": 0.852, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "navy_book_stack", + "score": 0.918, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "terracotta_plant", + "score": 0.898, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0004/layout_sketch.png b/10samples/sample_0004/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..34527250deb03b93856de2a9091b815c852f9ed6 Binary files /dev/null and b/10samples/sample_0004/layout_sketch.png differ diff --git a/10samples/sample_0004/main_image.png b/10samples/sample_0004/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..0ee10d62881883cc2f6f1db8555e9189c9680697 Binary files /dev/null and b/10samples/sample_0004/main_image.png differ diff --git a/10samples/sample_0004/overlays/overlay_accepted.png b/10samples/sample_0004/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ff8791d440f5ebf947b7e77ca97af03629f1ea Binary files /dev/null and b/10samples/sample_0004/overlays/overlay_accepted.png differ diff --git a/10samples/sample_0004/overlays/overlay_intended.png b/10samples/sample_0004/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..2f89ef23f86f7388055c6ddcc6010c0286f2764d Binary files /dev/null and b/10samples/sample_0004/overlays/overlay_intended.png differ diff --git a/10samples/sample_0004/overlays/overlay_measured.png b/10samples/sample_0004/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..d68daed451216b1353e62fa6285d47f5ed59f535 Binary files /dev/null and b/10samples/sample_0004/overlays/overlay_measured.png differ diff --git a/10samples/sample_0004/plan.json b/10samples/sample_0004/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..171c8f6e6336e754a3f5f418b1732c4e83ae22e1 --- /dev/null +++ b/10samples/sample_0004/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0004", + "scene_caption": "A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.", + "story": "The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.", + "background": "Old library aisle with tall bookcases, amber reading light, polished wood table.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "reader_blue_jacket", + "is_person": true, + "sub_caption": "adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page", + "intended_bbox": [ + 0.14, + 0.2, + 0.4, + 0.83 + ], + "ref_style": "id_headshot", + "ref_prompt": "adult with short coiled hair, dark brown skin, blue jacket, attentive gaze", + "color": [ + 49, + 93, + 156 + ], + "accent": [ + 121, + 149, + 190 + ], + "kind": "box", + "skin": [ + 76, + 47, + 35 + ], + "hair": [ + 24, + 21, + 20 + ] + }, + { + "name": "reader_pink_scarf", + "is_person": true, + "sub_caption": "older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand", + "intended_bbox": [ + 0.48, + 0.22, + 0.75, + 0.86 + ], + "ref_style": "professional_portrait", + "ref_prompt": "older adult with long gray hair, light olive skin, pink scarf, thoughtful expression", + "color": [ + 205, + 94, + 126 + ], + "accent": [ + 222, + 150, + 171 + ], + "kind": "box", + "skin": [ + 198, + 151, + 112 + ], + "hair": [ + 194, + 192, + 184 + ] + }, + { + "name": "green_desk_lamp", + "is_person": false, + "sub_caption": "green banker-style desk lamp glowing over the center of the table", + "intended_bbox": [ + 0.35, + 0.4, + 0.57, + 0.66 + ], + "ref_style": "studio_product", + "ref_prompt": "green banker-style desk lamp with brass stem", + "color": [ + 52, + 128, + 75 + ], + "accent": [ + 198, + 158, + 70 + ], + "kind": "lamp" + }, + { + "name": "navy_book_stack", + "is_person": false, + "sub_caption": "stack of navy and ochre books near the front right corner", + "intended_bbox": [ + 0.61, + 0.58, + 0.86, + 0.77 + ], + "ref_style": "flatlay_topdown", + "ref_prompt": "stack of navy and ochre hardback books", + "color": [ + 38, + 57, + 103 + ], + "accent": [ + 210, + 153, + 64 + ], + "kind": "book_stack" + }, + { + "name": "terracotta_plant", + "is_person": false, + "sub_caption": "small terracotta plant pot with green leaves beside the books", + "intended_bbox": [ + 0.75, + 0.42, + 0.92, + 0.66 + ], + "ref_style": "in_context_natural", + "ref_prompt": "small terracotta plant pot with healthy green leaves", + "color": [ + 181, + 92, + 55 + ], + "accent": [ + 206, + 149, + 125 + ], + "kind": "plant_pot" + } + ] +} diff --git a/10samples/sample_0004/references/ref_green_desk_lamp.png b/10samples/sample_0004/references/ref_green_desk_lamp.png new file mode 100644 index 0000000000000000000000000000000000000000..e80b085a473d72aef710abc54bf9e18b9c0408a9 Binary files /dev/null and b/10samples/sample_0004/references/ref_green_desk_lamp.png differ diff --git a/10samples/sample_0004/references/ref_navy_book_stack.png b/10samples/sample_0004/references/ref_navy_book_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..a065e97d1f91e7280790d757084f923b4f8081de Binary files /dev/null and b/10samples/sample_0004/references/ref_navy_book_stack.png differ diff --git a/10samples/sample_0004/references/ref_reader_blue_jacket.png b/10samples/sample_0004/references/ref_reader_blue_jacket.png new file mode 100644 index 0000000000000000000000000000000000000000..cd9c090d5e93f95f046a308b8ec528e56f6282ae Binary files /dev/null and b/10samples/sample_0004/references/ref_reader_blue_jacket.png differ diff --git a/10samples/sample_0004/references/ref_reader_pink_scarf.png b/10samples/sample_0004/references/ref_reader_pink_scarf.png new file mode 100644 index 0000000000000000000000000000000000000000..e2743d7be58048ef1266429be319881033056e1f Binary files /dev/null and b/10samples/sample_0004/references/ref_reader_pink_scarf.png differ diff --git a/10samples/sample_0004/references/ref_terracotta_plant.png b/10samples/sample_0004/references/ref_terracotta_plant.png new file mode 100644 index 0000000000000000000000000000000000000000..aff1210189c31184e7c716f32d7c45bae87c691b Binary files /dev/null and b/10samples/sample_0004/references/ref_terracotta_plant.png differ diff --git a/10samples/sample_0004/row.json b/10samples/sample_0004/row.json new file mode 100644 index 0000000000000000000000000000000000000000..0b5399c9594e84bdf389b89c29e3dcf499ea7c56 --- /dev/null +++ b/10samples/sample_0004/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0004", + "scene_caption": "A quiet library study table holds a focused pair of readers, a green desk lamp, a book stack, and a terracotta plant pot.", + "story": "The moment is hushed and intent. One reader marks a page while the other leans in to compare notes.", + "background": "Old library aisle with tall bookcases, amber reading light, polished wood table.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "reader_blue_jacket", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "adult with short coiled hair, dark brown skin, blue jacket, leaning over an open page", + "intended_bbox": [ + 0.14, + 0.2, + 0.4, + 0.83 + ], + "measured_bbox": [ + 0.1326, + 0.1856, + 0.4031, + 0.8443 + ], + "iou_intended_vs_measured": 0.9193, + "layout_followed": true, + "identity_score": 0.946, + "identity_verdict": "match", + "ref_image": "references/ref_reader_blue_jacket.png" + }, + { + "name": "reader_pink_scarf", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "older adult with long gray hair, light olive skin, pink scarf, seated with a pencil in hand", + "intended_bbox": [ + 0.48, + 0.22, + 0.75, + 0.86 + ], + "measured_bbox": [ + 0.4868, + 0.2174, + 0.7476, + 0.8682 + ], + "iou_intended_vs_measured": 0.9504, + "layout_followed": true, + "identity_score": 0.923, + "identity_verdict": "match", + "ref_image": "references/ref_reader_pink_scarf.png" + }, + { + "name": "green_desk_lamp", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "green banker-style desk lamp glowing over the center of the table", + "intended_bbox": [ + 0.35, + 0.4, + 0.57, + 0.66 + ], + "measured_bbox": [ + 0.3455, + 0.4029, + 0.5734, + 0.6584 + ], + "iou_intended_vs_measured": 0.9492, + "layout_followed": true, + "identity_score": 0.852, + "identity_verdict": "match", + "ref_image": "references/ref_green_desk_lamp.png" + }, + { + "name": "navy_book_stack", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "stack of navy and ochre books near the front right corner", + "intended_bbox": [ + 0.61, + 0.58, + 0.86, + 0.77 + ], + "measured_bbox": [ + 0.6101, + 0.5787, + 0.8535, + 0.7764 + ], + "iou_intended_vs_measured": 0.9366, + "layout_followed": true, + "identity_score": 0.918, + "identity_verdict": "match", + "ref_image": "references/ref_navy_book_stack.png" + }, + { + "name": "terracotta_plant", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "small terracotta plant pot with green leaves beside the books", + "intended_bbox": [ + 0.75, + 0.42, + 0.92, + 0.66 + ], + "measured_bbox": [ + 0.7476, + 0.423, + 0.9172, + 0.6642 + ], + "iou_intended_vs_measured": 0.9417, + "layout_followed": true, + "identity_score": 0.898, + "identity_verdict": "match", + "ref_image": "references/ref_terracotta_plant.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0005/detections.json b/10samples/sample_0005/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..38e67ae89afc76eeafd50fc2f420862022af8fed --- /dev/null +++ b/10samples/sample_0005/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "volunteer_orange_vest", + "present": true, + "bbox": [ + 0.0776, + 0.2532, + 0.3497, + 0.9121 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "visitor_denim_jacket", + "present": true, + "bbox": [ + 0.5856, + 0.173, + 0.8433, + 0.8354 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "silver_watering_can", + "present": true, + "bbox": [ + 0.327, + 0.5786, + 0.5687, + 0.8107 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "clay_seedling_pot", + "present": true, + "bbox": [ + 0.48, + 0.4305, + 0.66, + 0.6553 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "striped_fabric_bundle", + "present": true, + "bbox": [ + 0.1864, + 0.4796, + 0.4319, + 0.6768 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0005/identity_verification.json b/10samples/sample_0005/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..06d8f49182bb0d1570287e7450fc7f792310412f --- /dev/null +++ b/10samples/sample_0005/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "volunteer_orange_vest", + "score": 0.83, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "visitor_denim_jacket", + "score": 0.829, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "silver_watering_can", + "score": 0.855, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "clay_seedling_pot", + "score": 0.922, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "striped_fabric_bundle", + "score": 0.922, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0005/layout_sketch.png b/10samples/sample_0005/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..ada626bd4d937d687caaa58c8d0607db6ebb433f Binary files /dev/null and b/10samples/sample_0005/layout_sketch.png differ diff --git a/10samples/sample_0005/main_image.png b/10samples/sample_0005/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..24c0c300a3a788511cf454b2b577890b3ecd950b Binary files /dev/null and b/10samples/sample_0005/main_image.png differ diff --git a/10samples/sample_0005/overlays/overlay_accepted.png b/10samples/sample_0005/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..f6453388207d3d01072108365b7c0d42a35ef856 --- /dev/null +++ b/10samples/sample_0005/overlays/overlay_accepted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70c7a5f7a9d9f58b3d1315c71c2535847d0465a4a7d112f700bf483cb6a7ee33 +size 107044 diff --git a/10samples/sample_0005/overlays/overlay_intended.png b/10samples/sample_0005/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..428a8291511c467444e42308b28c326158d4f71c --- /dev/null +++ b/10samples/sample_0005/overlays/overlay_intended.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:246153a5fdfd5fc9a57bfd20c837985da4eaa2038f9d0eb3d595aa4ff3db38db +size 106764 diff --git a/10samples/sample_0005/overlays/overlay_measured.png b/10samples/sample_0005/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..a71b239af3aa2b9249854450bbfdf8eb458ec8b0 --- /dev/null +++ b/10samples/sample_0005/overlays/overlay_measured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac6e07998bcd8b90148dc8827ccb4c9d72e0e35cd902439ced8587ef11a5b03 +size 107141 diff --git a/10samples/sample_0005/plan.json b/10samples/sample_0005/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..46adbd80afbf990384dea15b4a9eb01011907bb7 --- /dev/null +++ b/10samples/sample_0005/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0005", + "scene_caption": "A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.", + "story": "The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.", + "background": "Sunlit community greenhouse with glass panes, leafy benches, moist floor.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "volunteer_orange_vest", + "is_person": true, + "sub_caption": "adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands", + "intended_bbox": [ + 0.08, + 0.27, + 0.35, + 0.9 + ], + "ref_style": "everyday_candid", + "ref_prompt": "adult greenhouse volunteer with cropped black hair, medium tan skin, orange vest", + "color": [ + 211, + 108, + 45 + ], + "accent": [ + 226, + 159, + 118 + ], + "kind": "box", + "skin": [ + 170, + 112, + 78 + ], + "hair": [ + 29, + 24, + 22 + ] + }, + { + "name": "visitor_denim_jacket", + "is_person": true, + "sub_caption": "young adult with long dark hair, light brown skin, denim jacket, bending forward curiously", + "intended_bbox": [ + 0.58, + 0.18, + 0.84, + 0.83 + ], + "ref_style": "mirror_selfie", + "ref_prompt": "young adult with long dark hair, light brown skin, denim jacket", + "color": [ + 61, + 112, + 155 + ], + "accent": [ + 128, + 162, + 190 + ], + "kind": "box", + "skin": [ + 179, + 119, + 82 + ], + "hair": [ + 39, + 30, + 28 + ] + }, + { + "name": "silver_watering_can", + "is_person": false, + "sub_caption": "silver metal watering can with long spout, set in the foreground", + "intended_bbox": [ + 0.33, + 0.58, + 0.57, + 0.81 + ], + "ref_style": "studio_product", + "ref_prompt": "silver metal watering can with long spout and arched handle", + "color": [ + 154, + 166, + 169 + ], + "accent": [ + 218, + 225, + 226 + ], + "kind": "jar" + }, + { + "name": "clay_seedling_pot", + "is_person": false, + "sub_caption": "round clay pot with several vivid green seedling leaves", + "intended_bbox": [ + 0.48, + 0.43, + 0.66, + 0.66 + ], + "ref_style": "closeup_macro", + "ref_prompt": "round clay seedling pot with vivid green leaves", + "color": [ + 177, + 91, + 55 + ], + "accent": [ + 204, + 148, + 125 + ], + "kind": "plant_pot" + }, + { + "name": "striped_fabric_bundle", + "is_person": false, + "sub_caption": "folded striped fabric bundle resting on the bench behind the pot", + "intended_bbox": [ + 0.19, + 0.48, + 0.43, + 0.67 + ], + "ref_style": "flatlay_topdown", + "ref_prompt": "folded striped fabric bundle in cream and blue", + "color": [ + 231, + 218, + 181 + ], + "accent": [ + 44, + 103, + 155 + ], + "kind": "fabric_stack" + } + ] +} diff --git a/10samples/sample_0005/references/ref_clay_seedling_pot.png b/10samples/sample_0005/references/ref_clay_seedling_pot.png new file mode 100644 index 0000000000000000000000000000000000000000..4731f55302f781b7c7ea1419ab1bc1b2bff85d56 Binary files /dev/null and b/10samples/sample_0005/references/ref_clay_seedling_pot.png differ diff --git a/10samples/sample_0005/references/ref_silver_watering_can.png b/10samples/sample_0005/references/ref_silver_watering_can.png new file mode 100644 index 0000000000000000000000000000000000000000..10694ad55f1db14135195bd506c6557483f2fb25 Binary files /dev/null and b/10samples/sample_0005/references/ref_silver_watering_can.png differ diff --git a/10samples/sample_0005/references/ref_striped_fabric_bundle.png b/10samples/sample_0005/references/ref_striped_fabric_bundle.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6d9f208071b7412fcf3224e0309811d266ce51 Binary files /dev/null and b/10samples/sample_0005/references/ref_striped_fabric_bundle.png differ diff --git a/10samples/sample_0005/references/ref_visitor_denim_jacket.png b/10samples/sample_0005/references/ref_visitor_denim_jacket.png new file mode 100644 index 0000000000000000000000000000000000000000..226517dc0b3ea6622751d43a64ef469076d33f4e Binary files /dev/null and b/10samples/sample_0005/references/ref_visitor_denim_jacket.png differ diff --git a/10samples/sample_0005/references/ref_volunteer_orange_vest.png b/10samples/sample_0005/references/ref_volunteer_orange_vest.png new file mode 100644 index 0000000000000000000000000000000000000000..882ffe8a901408648979307d8bbf912b2ba62f38 Binary files /dev/null and b/10samples/sample_0005/references/ref_volunteer_orange_vest.png differ diff --git a/10samples/sample_0005/row.json b/10samples/sample_0005/row.json new file mode 100644 index 0000000000000000000000000000000000000000..43784ab92eea0e8e2203042afdaa21fa237eda11 --- /dev/null +++ b/10samples/sample_0005/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0005", + "scene_caption": "A greenhouse volunteer and visitor examine seedlings around a watering can, clay pot, and striped fabric bundle.", + "story": "The air is humid and bright after watering. The two people appear absorbed in choosing which seedlings to move next.", + "background": "Sunlit community greenhouse with glass panes, leafy benches, moist floor.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "volunteer_orange_vest", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "adult with cropped black hair, medium tan skin, orange vest, kneeling with careful hands", + "intended_bbox": [ + 0.08, + 0.27, + 0.35, + 0.9 + ], + "measured_bbox": [ + 0.0776, + 0.2532, + 0.3497, + 0.9121 + ], + "iou_intended_vs_measured": 0.9467, + "layout_followed": true, + "identity_score": 0.83, + "identity_verdict": "match", + "ref_image": "references/ref_volunteer_orange_vest.png" + }, + { + "name": "visitor_denim_jacket", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with long dark hair, light brown skin, denim jacket, bending forward curiously", + "intended_bbox": [ + 0.58, + 0.18, + 0.84, + 0.83 + ], + "measured_bbox": [ + 0.5856, + 0.173, + 0.8433, + 0.8354 + ], + "iou_intended_vs_measured": 0.9485, + "layout_followed": true, + "identity_score": 0.829, + "identity_verdict": "match", + "ref_image": "references/ref_visitor_denim_jacket.png" + }, + { + "name": "silver_watering_can", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "silver metal watering can with long spout, set in the foreground", + "intended_bbox": [ + 0.33, + 0.58, + 0.57, + 0.81 + ], + "measured_bbox": [ + 0.327, + 0.5786, + 0.5687, + 0.8107 + ], + "iou_intended_vs_measured": 0.9735, + "layout_followed": true, + "identity_score": 0.855, + "identity_verdict": "match", + "ref_image": "references/ref_silver_watering_can.png" + }, + { + "name": "clay_seedling_pot", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "round clay pot with several vivid green seedling leaves", + "intended_bbox": [ + 0.48, + 0.43, + 0.66, + 0.66 + ], + "measured_bbox": [ + 0.48, + 0.4305, + 0.66, + 0.6553 + ], + "iou_intended_vs_measured": 0.9774, + "layout_followed": true, + "identity_score": 0.922, + "identity_verdict": "match", + "ref_image": "references/ref_clay_seedling_pot.png" + }, + { + "name": "striped_fabric_bundle", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "folded striped fabric bundle resting on the bench behind the pot", + "intended_bbox": [ + 0.19, + 0.48, + 0.43, + 0.67 + ], + "measured_bbox": [ + 0.1864, + 0.4796, + 0.4319, + 0.6768 + ], + "iou_intended_vs_measured": 0.9419, + "layout_followed": true, + "identity_score": 0.922, + "identity_verdict": "match", + "ref_image": "references/ref_striped_fabric_bundle.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0006/detections.json b/10samples/sample_0006/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..c20fa88fa56d4f23e276287fe86b790c1e21f8bf --- /dev/null +++ b/10samples/sample_0006/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "neighbor_teal_hoodie", + "present": true, + "bbox": [ + 0.1172, + 0.2101, + 0.3837, + 0.8704 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "neighbor_lilac_sweater", + "present": true, + "bbox": [ + 0.5395, + 0.1831, + 0.8095, + 0.8781 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "purple_laundry_basket", + "present": true, + "bbox": [ + 0.3103, + 0.5162, + 0.5902, + 0.7868 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "orange_detergent_bottle", + "present": true, + "bbox": [ + 0.7379, + 0.4696, + 0.878, + 0.6933 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "small_brown_plush_dog", + "present": true, + "bbox": [ + 0.5979, + 0.6899, + 0.8652, + 0.895 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0006/identity_verification.json b/10samples/sample_0006/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..bafc428515c8596d44f0fbb126c4874f59be5efb --- /dev/null +++ b/10samples/sample_0006/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "neighbor_teal_hoodie", + "score": 0.933, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "neighbor_lilac_sweater", + "score": 0.88, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "purple_laundry_basket", + "score": 0.892, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "orange_detergent_bottle", + "score": 0.931, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "small_brown_plush_dog", + "score": 0.893, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0006/layout_sketch.png b/10samples/sample_0006/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..3b12ce965dd279c1f86ddf9c91f10d260e7f3bd1 Binary files /dev/null and b/10samples/sample_0006/layout_sketch.png differ diff --git a/10samples/sample_0006/main_image.png b/10samples/sample_0006/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..8ccd8a7be359b4692db00787a1fd0f415619eb88 Binary files /dev/null and b/10samples/sample_0006/main_image.png differ diff --git a/10samples/sample_0006/overlays/overlay_accepted.png b/10samples/sample_0006/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c7d1b202350ae19e7beb14c13c39dfbb213c0a --- /dev/null +++ b/10samples/sample_0006/overlays/overlay_accepted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f72b2fe0a6122029dcb013447acdc950f3e35fb5395054ae92ace5e15660d104 +size 100191 diff --git a/10samples/sample_0006/overlays/overlay_intended.png b/10samples/sample_0006/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..c30135eb4aebf9de2b4c0975e7a6aad2c3e5e758 Binary files /dev/null and b/10samples/sample_0006/overlays/overlay_intended.png differ diff --git a/10samples/sample_0006/overlays/overlay_measured.png b/10samples/sample_0006/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..d158af240fe780a2fe066d7cde4923dd1d730545 --- /dev/null +++ b/10samples/sample_0006/overlays/overlay_measured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9de308a13b9a3bea029ceabb94dbb65919d81c93d7c00f8b0b128b715370c004 +size 100129 diff --git a/10samples/sample_0006/plan.json b/10samples/sample_0006/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..2718b3984eab852d34eb4d6c7bcc2f2029fc1d8e --- /dev/null +++ b/10samples/sample_0006/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0006", + "scene_caption": "A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.", + "story": "The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.", + "background": "Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "neighbor_teal_hoodie", + "is_person": true, + "sub_caption": "adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel", + "intended_bbox": [ + 0.12, + 0.21, + 0.38, + 0.88 + ], + "ref_style": "professional_portrait", + "ref_prompt": "adult with shaved sides and black curls, brown skin, teal hoodie", + "color": [ + 39, + 145, + 142 + ], + "accent": [ + 114, + 183, + 181 + ], + "kind": "box", + "skin": [ + 116, + 75, + 55 + ], + "hair": [ + 24, + 22, + 21 + ] + }, + { + "name": "neighbor_lilac_sweater", + "is_person": true, + "sub_caption": "older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter", + "intended_bbox": [ + 0.54, + 0.18, + 0.8, + 0.86 + ], + "ref_style": "id_headshot", + "ref_prompt": "older adult with white bob haircut, fair skin, lilac sweater, gentle smile", + "color": [ + 165, + 121, + 186 + ], + "accent": [ + 196, + 167, + 210 + ], + "kind": "box", + "skin": [ + 227, + 181, + 143 + ], + "hair": [ + 231, + 230, + 222 + ] + }, + { + "name": "purple_laundry_basket", + "is_person": false, + "sub_caption": "large purple laundry basket full of pale folded clothes", + "intended_bbox": [ + 0.32, + 0.52, + 0.59, + 0.78 + ], + "ref_style": "in_context_natural", + "ref_prompt": "large purple laundry basket full of folded clothes", + "color": [ + 116, + 72, + 165 + ], + "accent": [ + 231, + 228, + 215 + ], + "kind": "basket" + }, + { + "name": "orange_detergent_bottle", + "is_person": false, + "sub_caption": "orange detergent bottle with blue cap near the washers", + "intended_bbox": [ + 0.74, + 0.47, + 0.88, + 0.69 + ], + "ref_style": "shelf_in_store", + "ref_prompt": "orange detergent bottle with blue cap and no label text", + "color": [ + 221, + 120, + 42 + ], + "accent": [ + 54, + 93, + 175 + ], + "kind": "jar" + }, + { + "name": "small_brown_plush_dog", + "is_person": false, + "sub_caption": "small brown plush dog toy curled near the basket under the folding table", + "intended_bbox": [ + 0.6, + 0.69, + 0.86, + 0.89 + ], + "ref_style": "closeup_macro", + "ref_prompt": "small brown plush dog toy curled up resting", + "color": [ + 128, + 78, + 45 + ], + "accent": [ + 172, + 139, + 118 + ], + "kind": "dog" + } + ] +} diff --git a/10samples/sample_0006/references/ref_neighbor_lilac_sweater.png b/10samples/sample_0006/references/ref_neighbor_lilac_sweater.png new file mode 100644 index 0000000000000000000000000000000000000000..82d5606038b211038109ce69ccde93de73925726 Binary files /dev/null and b/10samples/sample_0006/references/ref_neighbor_lilac_sweater.png differ diff --git a/10samples/sample_0006/references/ref_neighbor_teal_hoodie.png b/10samples/sample_0006/references/ref_neighbor_teal_hoodie.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cf738f3f22f946b5bb296e87544b6ba163aa5d Binary files /dev/null and b/10samples/sample_0006/references/ref_neighbor_teal_hoodie.png differ diff --git a/10samples/sample_0006/references/ref_orange_detergent_bottle.png b/10samples/sample_0006/references/ref_orange_detergent_bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..f7bda016d5e425729339c5a07ccc4044a00f108b Binary files /dev/null and b/10samples/sample_0006/references/ref_orange_detergent_bottle.png differ diff --git a/10samples/sample_0006/references/ref_purple_laundry_basket.png b/10samples/sample_0006/references/ref_purple_laundry_basket.png new file mode 100644 index 0000000000000000000000000000000000000000..d709db387b007269d26f738b0f1075be32245a88 Binary files /dev/null and b/10samples/sample_0006/references/ref_purple_laundry_basket.png differ diff --git a/10samples/sample_0006/references/ref_small_brown_plush_dog.png b/10samples/sample_0006/references/ref_small_brown_plush_dog.png new file mode 100644 index 0000000000000000000000000000000000000000..2341c8f349dbd82678b066bdf29c22e759597e78 Binary files /dev/null and b/10samples/sample_0006/references/ref_small_brown_plush_dog.png differ diff --git a/10samples/sample_0006/row.json b/10samples/sample_0006/row.json new file mode 100644 index 0000000000000000000000000000000000000000..7509bbdd4f1a393ceb2c467885175d4c23594190 --- /dev/null +++ b/10samples/sample_0006/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0006", + "scene_caption": "A laundromat scene catches two neighbors folding clothes beside a purple basket, detergent bottle, and a small plush dog toy.", + "story": "The dryers are humming while the neighbors trade a quick laugh. The toy sits half under the table, making the practical errand feel friendly.", + "background": "Clean neighborhood laundromat, rows of washers, cool fluorescent light, folding counter.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "neighbor_teal_hoodie", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "adult with shaved sides and black curls, brown skin, teal hoodie, folding a towel", + "intended_bbox": [ + 0.12, + 0.21, + 0.38, + 0.88 + ], + "measured_bbox": [ + 0.1172, + 0.2101, + 0.3837, + 0.8704 + ], + "iou_intended_vs_measured": 0.9618, + "layout_followed": true, + "identity_score": 0.933, + "identity_verdict": "match", + "ref_image": "references/ref_neighbor_teal_hoodie.png" + }, + { + "name": "neighbor_lilac_sweater", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "older adult with white bob haircut, fair skin, lilac sweater, smiling toward the counter", + "intended_bbox": [ + 0.54, + 0.18, + 0.8, + 0.86 + ], + "measured_bbox": [ + 0.5395, + 0.1831, + 0.8095, + 0.8781 + ], + "iou_intended_vs_measured": 0.9339, + "layout_followed": true, + "identity_score": 0.88, + "identity_verdict": "match", + "ref_image": "references/ref_neighbor_lilac_sweater.png" + }, + { + "name": "purple_laundry_basket", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "large purple laundry basket full of pale folded clothes", + "intended_bbox": [ + 0.32, + 0.52, + 0.59, + 0.78 + ], + "measured_bbox": [ + 0.3103, + 0.5162, + 0.5902, + 0.7868 + ], + "iou_intended_vs_measured": 0.9268, + "layout_followed": true, + "identity_score": 0.892, + "identity_verdict": "match", + "ref_image": "references/ref_purple_laundry_basket.png" + }, + { + "name": "orange_detergent_bottle", + "is_person": false, + "ref_style": "shelf_in_store", + "sub_caption": "orange detergent bottle with blue cap near the washers", + "intended_bbox": [ + 0.74, + 0.47, + 0.88, + 0.69 + ], + "measured_bbox": [ + 0.7379, + 0.4696, + 0.878, + 0.6933 + ], + "iou_intended_vs_measured": 0.9553, + "layout_followed": true, + "identity_score": 0.931, + "identity_verdict": "match", + "ref_image": "references/ref_orange_detergent_bottle.png" + }, + { + "name": "small_brown_plush_dog", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "small brown plush dog toy curled near the basket under the folding table", + "intended_bbox": [ + 0.6, + 0.69, + 0.86, + 0.89 + ], + "measured_bbox": [ + 0.5979, + 0.6899, + 0.8652, + 0.895 + ], + "iou_intended_vs_measured": 0.9485, + "layout_followed": true, + "identity_score": 0.893, + "identity_verdict": "match", + "ref_image": "references/ref_small_brown_plush_dog.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0007/detections.json b/10samples/sample_0007/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..0f45dff03deee58ebb29b6f82b7a25b09452f66d --- /dev/null +++ b/10samples/sample_0007/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "friend_white_hat", + "present": true, + "bbox": [ + 0.0921, + 0.3161, + 0.3606, + 0.86 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "friend_rust_jacket", + "present": true, + "bbox": [ + 0.607, + 0.2725, + 0.871, + 0.877 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "blue_picnic_blanket", + "present": true, + "bbox": [ + 0.232, + 0.6212, + 0.7977, + 0.9365 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "acoustic_guitar", + "present": true, + "bbox": [ + 0.3941, + 0.4475, + 0.6534, + 0.7264 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "snack_basket", + "present": true, + "bbox": [ + 0.6733, + 0.5531, + 0.9086, + 0.77 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0007/identity_verification.json b/10samples/sample_0007/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..4458737f5ebac7bdb166136d490329e5894c1319 --- /dev/null +++ b/10samples/sample_0007/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "friend_white_hat", + "score": 0.852, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "friend_rust_jacket", + "score": 0.866, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "blue_picnic_blanket", + "score": 0.94, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "acoustic_guitar", + "score": 0.926, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "snack_basket", + "score": 0.882, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0007/layout_sketch.png b/10samples/sample_0007/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d7c296e608fdec5d2e044696175f102e235576 Binary files /dev/null and b/10samples/sample_0007/layout_sketch.png differ diff --git a/10samples/sample_0007/main_image.png b/10samples/sample_0007/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..15e368ced3b64e45607cee2a6ce0f892f5cc78bc Binary files /dev/null and b/10samples/sample_0007/main_image.png differ diff --git a/10samples/sample_0007/overlays/overlay_accepted.png b/10samples/sample_0007/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..44427b5bc31b268029a76f6b94b9f795987e13e3 --- /dev/null +++ b/10samples/sample_0007/overlays/overlay_accepted.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06a9d1eea409a0bfa2a377006d2fe573fb0721083a9c6d1d802a985c1ee65fba +size 101986 diff --git a/10samples/sample_0007/overlays/overlay_intended.png b/10samples/sample_0007/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..2e83aab157b2d5806d6598f9d4fbb7bbd0c7dc06 --- /dev/null +++ b/10samples/sample_0007/overlays/overlay_intended.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ed2e176b25adde563019f538e4a5999453aae9539b6634925027daa564a267d +size 102453 diff --git a/10samples/sample_0007/overlays/overlay_measured.png b/10samples/sample_0007/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..b29b26a86afcddecb4e142cf92922804f6d08fce --- /dev/null +++ b/10samples/sample_0007/overlays/overlay_measured.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef4eb0d7eadea8d6f5189381dd0e61f255d994977f7c8ee377ac23fce24e44f7 +size 102163 diff --git a/10samples/sample_0007/plan.json b/10samples/sample_0007/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..16ee865e327ec7403f1980a9323926c1bc138ff0 --- /dev/null +++ b/10samples/sample_0007/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0007", + "scene_caption": "A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.", + "story": "The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.", + "background": "Open city park with grass, soft sky, scattered shade, relaxed weekend light.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "friend_white_hat", + "is_person": true, + "sub_caption": "young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged", + "intended_bbox": [ + 0.1, + 0.32, + 0.36, + 0.86 + ], + "ref_style": "mirror_selfie", + "ref_prompt": "young adult with dark skin, white brimmed hat, navy shirt", + "color": [ + 35, + 57, + 108 + ], + "accent": [ + 239, + 235, + 214 + ], + "kind": "box", + "skin": [ + 70, + 43, + 31 + ], + "hair": [ + 28, + 24, + 22 + ] + }, + { + "name": "friend_rust_jacket", + "is_person": true, + "sub_caption": "adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket", + "intended_bbox": [ + 0.6, + 0.28, + 0.87, + 0.87 + ], + "ref_style": "everyday_candid", + "ref_prompt": "adult with straight black hair, warm beige skin, rust jacket, relaxed smile", + "color": [ + 174, + 87, + 49 + ], + "accent": [ + 202, + 145, + 121 + ], + "kind": "box", + "skin": [ + 207, + 151, + 111 + ], + "hair": [ + 33, + 27, + 24 + ] + }, + { + "name": "blue_picnic_blanket", + "is_person": false, + "sub_caption": "blue picnic blanket spread across the lower center with folded corners", + "intended_bbox": [ + 0.24, + 0.62, + 0.78, + 0.93 + ], + "ref_style": "flatlay_topdown", + "ref_prompt": "blue woven picnic blanket with subtle stripes", + "color": [ + 55, + 105, + 178 + ], + "accent": [ + 232, + 232, + 215 + ], + "kind": "fabric_stack" + }, + { + "name": "acoustic_guitar", + "is_person": false, + "sub_caption": "warm brown acoustic guitar resting partly on the blanket", + "intended_bbox": [ + 0.39, + 0.45, + 0.65, + 0.73 + ], + "ref_style": "studio_product", + "ref_prompt": "warm brown acoustic guitar with dark sound hole", + "color": [ + 177, + 103, + 45 + ], + "accent": [ + 204, + 156, + 118 + ], + "kind": "instrument" + }, + { + "name": "snack_basket", + "is_person": false, + "sub_caption": "small woven snack basket with rounded sides near the right edge of the blanket", + "intended_bbox": [ + 0.68, + 0.56, + 0.91, + 0.77 + ], + "ref_style": "in_context_natural", + "ref_prompt": "small woven snack basket with rounded sides", + "color": [ + 173, + 122, + 71 + ], + "accent": [ + 201, + 168, + 135 + ], + "kind": "basket" + } + ] +} diff --git a/10samples/sample_0007/references/ref_acoustic_guitar.png b/10samples/sample_0007/references/ref_acoustic_guitar.png new file mode 100644 index 0000000000000000000000000000000000000000..3c86ae61b9228b5f67709fef3ee029368162e7b1 Binary files /dev/null and b/10samples/sample_0007/references/ref_acoustic_guitar.png differ diff --git a/10samples/sample_0007/references/ref_blue_picnic_blanket.png b/10samples/sample_0007/references/ref_blue_picnic_blanket.png new file mode 100644 index 0000000000000000000000000000000000000000..659d84bb174b83f8e7c5addbbfd5f9d4c6847077 Binary files /dev/null and b/10samples/sample_0007/references/ref_blue_picnic_blanket.png differ diff --git a/10samples/sample_0007/references/ref_friend_rust_jacket.png b/10samples/sample_0007/references/ref_friend_rust_jacket.png new file mode 100644 index 0000000000000000000000000000000000000000..456c8fd83bd97818b9b1fdac6d8dbc2c1dc7bfad Binary files /dev/null and b/10samples/sample_0007/references/ref_friend_rust_jacket.png differ diff --git a/10samples/sample_0007/references/ref_friend_white_hat.png b/10samples/sample_0007/references/ref_friend_white_hat.png new file mode 100644 index 0000000000000000000000000000000000000000..bf30f4c8888792a4cb267d7499d0010ed78ac67d Binary files /dev/null and b/10samples/sample_0007/references/ref_friend_white_hat.png differ diff --git a/10samples/sample_0007/references/ref_snack_basket.png b/10samples/sample_0007/references/ref_snack_basket.png new file mode 100644 index 0000000000000000000000000000000000000000..937c9c2593dafb0fd58c6bebc11befdc08fab5f4 Binary files /dev/null and b/10samples/sample_0007/references/ref_snack_basket.png differ diff --git a/10samples/sample_0007/row.json b/10samples/sample_0007/row.json new file mode 100644 index 0000000000000000000000000000000000000000..c822dd970f796eb5ef0c90f17f03a67cec898c09 --- /dev/null +++ b/10samples/sample_0007/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0007", + "scene_caption": "A park picnic unfolds as two friends unpack food around a blue blanket, a guitar, and a woven snack basket.", + "story": "The friends are settling into an easy afternoon. One gestures toward the snacks while the other keeps a hand on the guitar.", + "background": "Open city park with grass, soft sky, scattered shade, relaxed weekend light.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "friend_white_hat", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with dark skin, white brimmed hat, navy shirt, seated cross-legged", + "intended_bbox": [ + 0.1, + 0.32, + 0.36, + 0.86 + ], + "measured_bbox": [ + 0.0921, + 0.3161, + 0.3606, + 0.86 + ], + "iou_intended_vs_measured": 0.9614, + "layout_followed": true, + "identity_score": 0.852, + "identity_verdict": "match", + "ref_image": "references/ref_friend_white_hat.png" + }, + { + "name": "friend_rust_jacket", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "adult with straight black hair, warm beige skin, rust jacket, reaching toward the basket", + "intended_bbox": [ + 0.6, + 0.28, + 0.87, + 0.87 + ], + "measured_bbox": [ + 0.607, + 0.2725, + 0.871, + 0.877 + ], + "iou_intended_vs_measured": 0.9478, + "layout_followed": true, + "identity_score": 0.866, + "identity_verdict": "match", + "ref_image": "references/ref_friend_rust_jacket.png" + }, + { + "name": "blue_picnic_blanket", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "blue picnic blanket spread across the lower center with folded corners", + "intended_bbox": [ + 0.24, + 0.62, + 0.78, + 0.93 + ], + "measured_bbox": [ + 0.232, + 0.6212, + 0.7977, + 0.9365 + ], + "iou_intended_vs_measured": 0.9315, + "layout_followed": true, + "identity_score": 0.94, + "identity_verdict": "match", + "ref_image": "references/ref_blue_picnic_blanket.png" + }, + { + "name": "acoustic_guitar", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "warm brown acoustic guitar resting partly on the blanket", + "intended_bbox": [ + 0.39, + 0.45, + 0.65, + 0.73 + ], + "measured_bbox": [ + 0.3941, + 0.4475, + 0.6534, + 0.7264 + ], + "iou_intended_vs_measured": 0.9508, + "layout_followed": true, + "identity_score": 0.926, + "identity_verdict": "match", + "ref_image": "references/ref_acoustic_guitar.png" + }, + { + "name": "snack_basket", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "small woven snack basket with rounded sides near the right edge of the blanket", + "intended_bbox": [ + 0.68, + 0.56, + 0.91, + 0.77 + ], + "measured_bbox": [ + 0.6733, + 0.5531, + 0.9086, + 0.77 + ], + "iou_intended_vs_measured": 0.9352, + "layout_followed": true, + "identity_score": 0.882, + "identity_verdict": "match", + "ref_image": "references/ref_snack_basket.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0008/detections.json b/10samples/sample_0008/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..f84ccf09541475022a8edbc73fbbf80e16c6282b --- /dev/null +++ b/10samples/sample_0008/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "singer_green_shirt", + "present": true, + "bbox": [ + 0.1352, + 0.1645, + 0.3847, + 0.8905 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "keyboard_player_black_vest", + "present": true, + "bbox": [ + 0.5645, + 0.2239, + 0.8454, + 0.8712 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "red_electric_guitar", + "present": true, + "bbox": [ + 0.3476, + 0.4258, + 0.6017, + 0.7731 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "black_speaker_cabinet", + "present": true, + "bbox": [ + 0.0521, + 0.4819, + 0.2429, + 0.7823 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "yellow_notebook", + "present": true, + "bbox": [ + 0.5835, + 0.6799, + 0.7969, + 0.8428 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0008/identity_verification.json b/10samples/sample_0008/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..9b576302d089c7f6ada598de3b0112f792ca3c3a --- /dev/null +++ b/10samples/sample_0008/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "singer_green_shirt", + "score": 0.95, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "keyboard_player_black_vest", + "score": 0.877, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "red_electric_guitar", + "score": 0.826, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "black_speaker_cabinet", + "score": 0.9, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "yellow_notebook", + "score": 0.876, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0008/layout_sketch.png b/10samples/sample_0008/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..01696795ef3cc3506de7bfe52e2c2d8eaa8fce43 Binary files /dev/null and b/10samples/sample_0008/layout_sketch.png differ diff --git a/10samples/sample_0008/main_image.png b/10samples/sample_0008/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..f37187ad7b6db41eb3a6206f38584a267fb8b1c0 Binary files /dev/null and b/10samples/sample_0008/main_image.png differ diff --git a/10samples/sample_0008/overlays/overlay_accepted.png b/10samples/sample_0008/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..8801c5d887a3a4c79b28069d1105a1c02ce55490 Binary files /dev/null and b/10samples/sample_0008/overlays/overlay_accepted.png differ diff --git a/10samples/sample_0008/overlays/overlay_intended.png b/10samples/sample_0008/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..3657d4d3d0d7e6159068204e4cfca2cfe4939bc3 Binary files /dev/null and b/10samples/sample_0008/overlays/overlay_intended.png differ diff --git a/10samples/sample_0008/overlays/overlay_measured.png b/10samples/sample_0008/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..29b4c241deabb1be578322f42b6f266ebd9aa434 Binary files /dev/null and b/10samples/sample_0008/overlays/overlay_measured.png differ diff --git a/10samples/sample_0008/plan.json b/10samples/sample_0008/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..664e08a205f5b140bcc850058dbccc70c3299215 --- /dev/null +++ b/10samples/sample_0008/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0008", + "scene_caption": "A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.", + "story": "The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.", + "background": "Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "singer_green_shirt", + "is_person": true, + "sub_caption": "adult with short brown hair, light skin, green shirt, standing near a microphone", + "intended_bbox": [ + 0.14, + 0.16, + 0.38, + 0.87 + ], + "ref_style": "professional_portrait", + "ref_prompt": "adult singer with short brown hair, light skin, green shirt", + "color": [ + 60, + 137, + 85 + ], + "accent": [ + 128, + 178, + 144 + ], + "kind": "box", + "skin": [ + 219, + 169, + 128 + ], + "hair": [ + 83, + 55, + 39 + ] + }, + { + "name": "keyboard_player_black_vest", + "is_person": true, + "sub_caption": "adult with long curly hair, medium brown skin, black vest, leaning toward keys", + "intended_bbox": [ + 0.57, + 0.22, + 0.85, + 0.89 + ], + "ref_style": "everyday_candid", + "ref_prompt": "adult keyboard player with long curly hair, medium brown skin, black vest", + "color": [ + 38, + 40, + 43 + ], + "accent": [ + 164, + 164, + 164 + ], + "kind": "box", + "skin": [ + 137, + 88, + 62 + ], + "hair": [ + 28, + 24, + 22 + ] + }, + { + "name": "red_electric_guitar", + "is_person": false, + "sub_caption": "red electric guitar on a stand crossing the lower middle of the room", + "intended_bbox": [ + 0.35, + 0.42, + 0.6, + 0.77 + ], + "ref_style": "studio_product", + "ref_prompt": "red electric guitar with dark pickguard", + "color": [ + 187, + 42, + 50 + ], + "accent": [ + 210, + 116, + 121 + ], + "kind": "instrument" + }, + { + "name": "black_speaker_cabinet", + "is_person": false, + "sub_caption": "black rectangular speaker cabinet near the back left wall", + "intended_bbox": [ + 0.05, + 0.49, + 0.24, + 0.78 + ], + "ref_style": "closeup_macro", + "ref_prompt": "black speaker cabinet with textured grille", + "color": [ + 35, + 37, + 38 + ], + "accent": [ + 105, + 108, + 110 + ], + "kind": "box" + }, + { + "name": "yellow_notebook", + "is_person": false, + "sub_caption": "yellow spiral notebook lying open on the floor near the front", + "intended_bbox": [ + 0.58, + 0.68, + 0.8, + 0.84 + ], + "ref_style": "flatlay_topdown", + "ref_prompt": "yellow spiral notebook with blank pages and no writing", + "color": [ + 229, + 192, + 63 + ], + "accent": [ + 238, + 214, + 130 + ], + "kind": "book_stack" + } + ] +} diff --git a/10samples/sample_0008/references/ref_black_speaker_cabinet.png b/10samples/sample_0008/references/ref_black_speaker_cabinet.png new file mode 100644 index 0000000000000000000000000000000000000000..b00232b60c7c18bdab4956dfa782abb2922ce139 Binary files /dev/null and b/10samples/sample_0008/references/ref_black_speaker_cabinet.png differ diff --git a/10samples/sample_0008/references/ref_keyboard_player_black_vest.png b/10samples/sample_0008/references/ref_keyboard_player_black_vest.png new file mode 100644 index 0000000000000000000000000000000000000000..15c095995a1a385469fb02565c93574d82c8fb18 Binary files /dev/null and b/10samples/sample_0008/references/ref_keyboard_player_black_vest.png differ diff --git a/10samples/sample_0008/references/ref_red_electric_guitar.png b/10samples/sample_0008/references/ref_red_electric_guitar.png new file mode 100644 index 0000000000000000000000000000000000000000..dc0e23e7bf98a02e4a1ddbff9b471742bb05e38a Binary files /dev/null and b/10samples/sample_0008/references/ref_red_electric_guitar.png differ diff --git a/10samples/sample_0008/references/ref_singer_green_shirt.png b/10samples/sample_0008/references/ref_singer_green_shirt.png new file mode 100644 index 0000000000000000000000000000000000000000..2e069b6609fd03980bde441f3261586be77cf10a Binary files /dev/null and b/10samples/sample_0008/references/ref_singer_green_shirt.png differ diff --git a/10samples/sample_0008/references/ref_yellow_notebook.png b/10samples/sample_0008/references/ref_yellow_notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..9d889a1df7d2fb1b3be1b8dd33cb6e23d9383e68 Binary files /dev/null and b/10samples/sample_0008/references/ref_yellow_notebook.png differ diff --git a/10samples/sample_0008/row.json b/10samples/sample_0008/row.json new file mode 100644 index 0000000000000000000000000000000000000000..cf53c33259c1227da985a7e951460d7c3447f122 --- /dev/null +++ b/10samples/sample_0008/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0008", + "scene_caption": "A small rehearsal room shows a singer and keyboard player surrounded by a red guitar, black speaker, and yellow notebook.", + "story": "The group is between takes, listening for the next cue. The instruments crowd the room in a way that feels intimate and purposeful.", + "background": "Cozy music practice room, dark acoustic wall panels, amber lamps, polished floor.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "singer_green_shirt", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "adult with short brown hair, light skin, green shirt, standing near a microphone", + "intended_bbox": [ + 0.14, + 0.16, + 0.38, + 0.87 + ], + "measured_bbox": [ + 0.1352, + 0.1645, + 0.3847, + 0.8905 + ], + "iou_intended_vs_measured": 0.9292, + "layout_followed": true, + "identity_score": 0.95, + "identity_verdict": "match", + "ref_image": "references/ref_singer_green_shirt.png" + }, + { + "name": "keyboard_player_black_vest", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "adult with long curly hair, medium brown skin, black vest, leaning toward keys", + "intended_bbox": [ + 0.57, + 0.22, + 0.85, + 0.89 + ], + "measured_bbox": [ + 0.5645, + 0.2239, + 0.8454, + 0.8712 + ], + "iou_intended_vs_measured": 0.9326, + "layout_followed": true, + "identity_score": 0.877, + "identity_verdict": "match", + "ref_image": "references/ref_keyboard_player_black_vest.png" + }, + { + "name": "red_electric_guitar", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "red electric guitar on a stand crossing the lower middle of the room", + "intended_bbox": [ + 0.35, + 0.42, + 0.6, + 0.77 + ], + "measured_bbox": [ + 0.3476, + 0.4258, + 0.6017, + 0.7731 + ], + "iou_intended_vs_measured": 0.9593, + "layout_followed": true, + "identity_score": 0.826, + "identity_verdict": "match", + "ref_image": "references/ref_red_electric_guitar.png" + }, + { + "name": "black_speaker_cabinet", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "black rectangular speaker cabinet near the back left wall", + "intended_bbox": [ + 0.05, + 0.49, + 0.24, + 0.78 + ], + "measured_bbox": [ + 0.0521, + 0.4819, + 0.2429, + 0.7823 + ], + "iou_intended_vs_measured": 0.9407, + "layout_followed": true, + "identity_score": 0.9, + "identity_verdict": "match", + "ref_image": "references/ref_black_speaker_cabinet.png" + }, + { + "name": "yellow_notebook", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "yellow spiral notebook lying open on the floor near the front", + "intended_bbox": [ + 0.58, + 0.68, + 0.8, + 0.84 + ], + "measured_bbox": [ + 0.5835, + 0.6799, + 0.7969, + 0.8428 + ], + "iou_intended_vs_measured": 0.9532, + "layout_followed": true, + "identity_score": 0.876, + "identity_verdict": "match", + "ref_image": "references/ref_yellow_notebook.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0009/detections.json b/10samples/sample_0009/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..4ce637a20a2d44e80dd13b71d45bb7399ad3f0dc --- /dev/null +++ b/10samples/sample_0009/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "nurse_blue_scrubs", + "present": true, + "bbox": [ + 0.0946, + 0.192, + 0.3879, + 0.8908 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "child_red_sneakers", + "present": true, + "bbox": [ + 0.4516, + 0.2886, + 0.6451, + 0.8329 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "wooden_toy_truck", + "present": true, + "bbox": [ + 0.3445, + 0.6763, + 0.55, + 0.8315 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "blue_waiting_chair", + "present": true, + "bbox": [ + 0.6565, + 0.4083, + 0.9209, + 0.817 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "white_plant_pot", + "present": true, + "bbox": [ + 0.7535, + 0.1299, + 0.9315, + 0.4298 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0009/identity_verification.json b/10samples/sample_0009/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..6e91eab8a15da13261ae15d188debfddbfba6621 --- /dev/null +++ b/10samples/sample_0009/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "nurse_blue_scrubs", + "score": 0.881, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "child_red_sneakers", + "score": 0.956, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "wooden_toy_truck", + "score": 0.892, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "blue_waiting_chair", + "score": 0.839, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "white_plant_pot", + "score": 0.913, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0009/layout_sketch.png b/10samples/sample_0009/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..d3de73bc24728043f7eb19b769faa8e2f8e31065 Binary files /dev/null and b/10samples/sample_0009/layout_sketch.png differ diff --git a/10samples/sample_0009/main_image.png b/10samples/sample_0009/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..e62d0e5e87dd519c1372ab5715669cf1d2bd3baf Binary files /dev/null and b/10samples/sample_0009/main_image.png differ diff --git a/10samples/sample_0009/overlays/overlay_accepted.png b/10samples/sample_0009/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..a4eb7e0e6f2feaf0acc4a10fba1bc19aaba6af5c Binary files /dev/null and b/10samples/sample_0009/overlays/overlay_accepted.png differ diff --git a/10samples/sample_0009/overlays/overlay_intended.png b/10samples/sample_0009/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..96c483ae302825d7e2449fa130c066cd755cb266 Binary files /dev/null and b/10samples/sample_0009/overlays/overlay_intended.png differ diff --git a/10samples/sample_0009/overlays/overlay_measured.png b/10samples/sample_0009/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..d8cc4507d3c8cf5d5d1c3bd36df3b17fcb5d1b94 Binary files /dev/null and b/10samples/sample_0009/overlays/overlay_measured.png differ diff --git a/10samples/sample_0009/plan.json b/10samples/sample_0009/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..88b00a6666002235b445c857fedbc324e4e17683 --- /dev/null +++ b/10samples/sample_0009/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0009", + "scene_caption": "A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.", + "story": "The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.", + "background": "Modern clinic waiting area, pale walls, clean floor, soft daylight.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "nurse_blue_scrubs", + "is_person": true, + "sub_caption": "adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended", + "intended_bbox": [ + 0.1, + 0.19, + 0.38, + 0.88 + ], + "ref_style": "id_headshot", + "ref_prompt": "adult nurse with dark braided hair, brown skin, blue scrubs, calm expression", + "color": [ + 64, + 135, + 180 + ], + "accent": [ + 130, + 177, + 206 + ], + "kind": "box", + "skin": [ + 112, + 71, + 50 + ], + "hair": [ + 29, + 24, + 22 + ] + }, + { + "name": "child_red_sneakers", + "is_person": true, + "sub_caption": "child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly", + "intended_bbox": [ + 0.45, + 0.29, + 0.64, + 0.84 + ], + "ref_style": "everyday_candid", + "ref_prompt": "child with short sandy hair, fair skin, striped sweater, red sneakers", + "color": [ + 88, + 145, + 164 + ], + "accent": [ + 208, + 58, + 50 + ], + "kind": "box", + "skin": [ + 229, + 182, + 139 + ], + "hair": [ + 193, + 150, + 88 + ] + }, + { + "name": "wooden_toy_truck", + "is_person": false, + "sub_caption": "small wooden toy truck on the floor between nurse and child", + "intended_bbox": [ + 0.34, + 0.68, + 0.55, + 0.83 + ], + "ref_style": "studio_product", + "ref_prompt": "small wooden toy truck with rounded wheels", + "color": [ + 184, + 117, + 58 + ], + "accent": [ + 43, + 93, + 155 + ], + "kind": "box" + }, + { + "name": "blue_waiting_chair", + "is_person": false, + "sub_caption": "soft blue waiting chair angled on the right side", + "intended_bbox": [ + 0.66, + 0.41, + 0.92, + 0.81 + ], + "ref_style": "in_context_natural", + "ref_prompt": "soft blue upholstered waiting chair", + "color": [ + 75, + 128, + 177 + ], + "accent": [ + 138, + 172, + 204 + ], + "kind": "box" + }, + { + "name": "white_plant_pot", + "is_person": false, + "sub_caption": "white plant pot with broad green leaves near the window", + "intended_bbox": [ + 0.75, + 0.14, + 0.93, + 0.43 + ], + "ref_style": "closeup_macro", + "ref_prompt": "white plant pot with broad green leaves", + "color": [ + 229, + 228, + 216 + ], + "accent": [ + 55, + 133, + 75 + ], + "kind": "plant_pot" + } + ] +} diff --git a/10samples/sample_0009/references/ref_blue_waiting_chair.png b/10samples/sample_0009/references/ref_blue_waiting_chair.png new file mode 100644 index 0000000000000000000000000000000000000000..70ad00830fdea2cb06f2aa55ef960d7123c09b82 Binary files /dev/null and b/10samples/sample_0009/references/ref_blue_waiting_chair.png differ diff --git a/10samples/sample_0009/references/ref_child_red_sneakers.png b/10samples/sample_0009/references/ref_child_red_sneakers.png new file mode 100644 index 0000000000000000000000000000000000000000..3dfa11ae25a5f57a7d86b01b231d51122d088415 Binary files /dev/null and b/10samples/sample_0009/references/ref_child_red_sneakers.png differ diff --git a/10samples/sample_0009/references/ref_nurse_blue_scrubs.png b/10samples/sample_0009/references/ref_nurse_blue_scrubs.png new file mode 100644 index 0000000000000000000000000000000000000000..70bfdd8b9f18e68970bafdadf58b55ccbf2a331e Binary files /dev/null and b/10samples/sample_0009/references/ref_nurse_blue_scrubs.png differ diff --git a/10samples/sample_0009/references/ref_white_plant_pot.png b/10samples/sample_0009/references/ref_white_plant_pot.png new file mode 100644 index 0000000000000000000000000000000000000000..d55b5116361ae04fea83f97c3d9da784ec953d57 Binary files /dev/null and b/10samples/sample_0009/references/ref_white_plant_pot.png differ diff --git a/10samples/sample_0009/references/ref_wooden_toy_truck.png b/10samples/sample_0009/references/ref_wooden_toy_truck.png new file mode 100644 index 0000000000000000000000000000000000000000..941d8325794df9fff71fc11986627c7689f2370c Binary files /dev/null and b/10samples/sample_0009/references/ref_wooden_toy_truck.png differ diff --git a/10samples/sample_0009/row.json b/10samples/sample_0009/row.json new file mode 100644 index 0000000000000000000000000000000000000000..451d0a7ca66619ca20b7867de4a023d06365fd1e --- /dev/null +++ b/10samples/sample_0009/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0009", + "scene_caption": "A clinic waiting room has a nurse guiding a child beside a toy truck, plant pot, and soft blue chair.", + "story": "The visit is nearly over, and the nurse is making the child comfortable. The toys and bright chair soften the clinical setting.", + "background": "Modern clinic waiting area, pale walls, clean floor, soft daylight.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "nurse_blue_scrubs", + "is_person": true, + "ref_style": "id_headshot", + "sub_caption": "adult with dark braided hair, brown skin, blue scrubs, kneeling with one hand extended", + "intended_bbox": [ + 0.1, + 0.19, + 0.38, + 0.88 + ], + "measured_bbox": [ + 0.0946, + 0.192, + 0.3879, + 0.8908 + ], + "iou_intended_vs_measured": 0.9373, + "layout_followed": true, + "identity_score": 0.881, + "identity_verdict": "match", + "ref_image": "references/ref_nurse_blue_scrubs.png" + }, + { + "name": "child_red_sneakers", + "is_person": true, + "ref_style": "everyday_candid", + "sub_caption": "child with short sandy hair, fair skin, striped sweater, red sneakers, standing shyly", + "intended_bbox": [ + 0.45, + 0.29, + 0.64, + 0.84 + ], + "measured_bbox": [ + 0.4516, + 0.2886, + 0.6451, + 0.8329 + ], + "iou_intended_vs_measured": 0.9511, + "layout_followed": true, + "identity_score": 0.956, + "identity_verdict": "match", + "ref_image": "references/ref_child_red_sneakers.png" + }, + { + "name": "wooden_toy_truck", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "small wooden toy truck on the floor between nurse and child", + "intended_bbox": [ + 0.34, + 0.68, + 0.55, + 0.83 + ], + "measured_bbox": [ + 0.3445, + 0.6763, + 0.55, + 0.8315 + ], + "iou_intended_vs_measured": 0.9465, + "layout_followed": true, + "identity_score": 0.892, + "identity_verdict": "match", + "ref_image": "references/ref_wooden_toy_truck.png" + }, + { + "name": "blue_waiting_chair", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "soft blue waiting chair angled on the right side", + "intended_bbox": [ + 0.66, + 0.41, + 0.92, + 0.81 + ], + "measured_bbox": [ + 0.6565, + 0.4083, + 0.9209, + 0.817 + ], + "iou_intended_vs_measured": 0.9624, + "layout_followed": true, + "identity_score": 0.839, + "identity_verdict": "match", + "ref_image": "references/ref_blue_waiting_chair.png" + }, + { + "name": "white_plant_pot", + "is_person": false, + "ref_style": "closeup_macro", + "sub_caption": "white plant pot with broad green leaves near the window", + "intended_bbox": [ + 0.75, + 0.14, + 0.93, + 0.43 + ], + "measured_bbox": [ + 0.7535, + 0.1299, + 0.9315, + 0.4298 + ], + "iou_intended_vs_measured": 0.9397, + "layout_followed": true, + "identity_score": 0.913, + "identity_verdict": "match", + "ref_image": "references/ref_white_plant_pot.png" + } + ], + "dropped": [] +} diff --git a/10samples/sample_0010/detections.json b/10samples/sample_0010/detections.json new file mode 100644 index 0000000000000000000000000000000000000000..f1b60b4594d48beb143301ad5b3d1d1b56b7306f --- /dev/null +++ b/10samples/sample_0010/detections.json @@ -0,0 +1,62 @@ +[ + { + "name": "instructor_black_apron", + "present": true, + "bbox": [ + 0.091, + 0.1843, + 0.3682, + 0.9023 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "student_teal_smock", + "present": true, + "bbox": [ + 0.4833, + 0.2517, + 0.7599, + 0.8821 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "gray_pottery_wheel", + "present": true, + "bbox": [ + 0.3064, + 0.5496, + 0.5697, + 0.8079 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "blue_glazed_vase", + "present": true, + "bbox": [ + 0.6791, + 0.3303, + 0.8459, + 0.6294 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + }, + { + "name": "yellow_sponge_tray", + "present": true, + "bbox": [ + 0.552, + 0.6248, + 0.7908, + 0.8235 + ], + "confidence": "high", + "notes": "Synthetic renderer places this subject directly from the planned layout." + } +] diff --git a/10samples/sample_0010/identity_verification.json b/10samples/sample_0010/identity_verification.json new file mode 100644 index 0000000000000000000000000000000000000000..c8976aeb32e69a0b35c8d6da54a97ca68545bf16 --- /dev/null +++ b/10samples/sample_0010/identity_verification.json @@ -0,0 +1,32 @@ +[ + { + "name": "instructor_black_apron", + "score": 0.863, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "student_teal_smock", + "score": 0.874, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "gray_pottery_wheel", + "score": 0.91, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "blue_glazed_vase", + "score": 0.916, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + }, + { + "name": "yellow_sponge_tray", + "score": 0.899, + "verdict": "match", + "rationale": "Reference and main rendering share the same generated subject attributes." + } +] diff --git a/10samples/sample_0010/layout_sketch.png b/10samples/sample_0010/layout_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..291897767aa42f956415e2b14f71d7f6edf00287 Binary files /dev/null and b/10samples/sample_0010/layout_sketch.png differ diff --git a/10samples/sample_0010/main_image.png b/10samples/sample_0010/main_image.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9c3b4e6ad08a55664d15bb26ed8f84f94f780f Binary files /dev/null and b/10samples/sample_0010/main_image.png differ diff --git a/10samples/sample_0010/overlays/overlay_accepted.png b/10samples/sample_0010/overlays/overlay_accepted.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8b53dbe5b9bc1f8cf2680970480f4b4d3c733e Binary files /dev/null and b/10samples/sample_0010/overlays/overlay_accepted.png differ diff --git a/10samples/sample_0010/overlays/overlay_intended.png b/10samples/sample_0010/overlays/overlay_intended.png new file mode 100644 index 0000000000000000000000000000000000000000..a16e81a24e3f82e1640cd587334f64dcd7b215d6 Binary files /dev/null and b/10samples/sample_0010/overlays/overlay_intended.png differ diff --git a/10samples/sample_0010/overlays/overlay_measured.png b/10samples/sample_0010/overlays/overlay_measured.png new file mode 100644 index 0000000000000000000000000000000000000000..00ce74be10adc415373b65a8bedeb9fbfa33e404 Binary files /dev/null and b/10samples/sample_0010/overlays/overlay_measured.png differ diff --git a/10samples/sample_0010/plan.json b/10samples/sample_0010/plan.json new file mode 100644 index 0000000000000000000000000000000000000000..871e41a6857bf198c022de35bfa0f8c4f6bfbf7f --- /dev/null +++ b/10samples/sample_0010/plan.json @@ -0,0 +1,153 @@ +{ + "sample_id": "sample_0010", + "scene_caption": "A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.", + "story": "Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.", + "background": "Warm pottery studio with shelves of clay vessels, dusty table, late daylight.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "subjects": [ + { + "name": "instructor_black_apron", + "is_person": true, + "sub_caption": "older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly", + "intended_bbox": [ + 0.09, + 0.2, + 0.37, + 0.89 + ], + "ref_style": "professional_portrait", + "ref_prompt": "older pottery instructor with close-cropped gray hair, dark brown skin, black apron", + "color": [ + 36, + 38, + 38 + ], + "accent": [ + 185, + 179, + 164 + ], + "kind": "box", + "skin": [ + 83, + 52, + 39 + ], + "hair": [ + 168, + 166, + 158 + ] + }, + { + "name": "student_teal_smock", + "is_person": true, + "sub_caption": "young adult with red curls, fair skin, teal smock, leaning over the clay with focus", + "intended_bbox": [ + 0.48, + 0.24, + 0.76, + 0.89 + ], + "ref_style": "mirror_selfie", + "ref_prompt": "young adult with red curls, fair skin, teal smock, focused expression", + "color": [ + 42, + 139, + 132 + ], + "accent": [ + 116, + 179, + 175 + ], + "kind": "box", + "skin": [ + 230, + 181, + 140 + ], + "hair": [ + 165, + 72, + 45 + ] + }, + { + "name": "gray_pottery_wheel", + "is_person": false, + "sub_caption": "round gray pottery wheel holding a wet clay form at the table center", + "intended_bbox": [ + 0.31, + 0.55, + 0.57, + 0.8 + ], + "ref_style": "in_context_natural", + "ref_prompt": "round gray pottery wheel with wet clay form", + "color": [ + 128, + 128, + 122 + ], + "accent": [ + 177, + 112, + 73 + ], + "kind": "jar" + }, + { + "name": "blue_glazed_vase", + "is_person": false, + "sub_caption": "blue glazed vase on the rear shelf catching a bright highlight", + "intended_bbox": [ + 0.68, + 0.33, + 0.85, + 0.62 + ], + "ref_style": "studio_product", + "ref_prompt": "blue glazed ceramic vase with narrow neck", + "color": [ + 45, + 101, + 177 + ], + "accent": [ + 118, + 154, + 204 + ], + "kind": "vase" + }, + { + "name": "yellow_sponge_tray", + "is_person": false, + "sub_caption": "yellow sponge tray with damp tools beside the pottery wheel", + "intended_bbox": [ + 0.55, + 0.63, + 0.79, + 0.82 + ], + "ref_style": "flatlay_topdown", + "ref_prompt": "yellow sponge tray with simple damp pottery tools", + "color": [ + 218, + 179, + 61 + ], + "accent": [ + 118, + 92, + 72 + ], + "kind": "crate" + } + ] +} diff --git a/10samples/sample_0010/references/ref_blue_glazed_vase.png b/10samples/sample_0010/references/ref_blue_glazed_vase.png new file mode 100644 index 0000000000000000000000000000000000000000..68380780dc8375f6e56780a5092b59e53416ff0a Binary files /dev/null and b/10samples/sample_0010/references/ref_blue_glazed_vase.png differ diff --git a/10samples/sample_0010/references/ref_gray_pottery_wheel.png b/10samples/sample_0010/references/ref_gray_pottery_wheel.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d6c71f2e7ad5eaa0fe90351fffad872ad7cecb Binary files /dev/null and b/10samples/sample_0010/references/ref_gray_pottery_wheel.png differ diff --git a/10samples/sample_0010/references/ref_instructor_black_apron.png b/10samples/sample_0010/references/ref_instructor_black_apron.png new file mode 100644 index 0000000000000000000000000000000000000000..ccef7ea914afb311ae453d98961ea3694eec6252 Binary files /dev/null and b/10samples/sample_0010/references/ref_instructor_black_apron.png differ diff --git a/10samples/sample_0010/references/ref_student_teal_smock.png b/10samples/sample_0010/references/ref_student_teal_smock.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8b99c93c4bf4e009659d3dff2c892d8e8d37aa Binary files /dev/null and b/10samples/sample_0010/references/ref_student_teal_smock.png differ diff --git a/10samples/sample_0010/references/ref_yellow_sponge_tray.png b/10samples/sample_0010/references/ref_yellow_sponge_tray.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a8ffb48c468604879cfb86605af278a20abc59 Binary files /dev/null and b/10samples/sample_0010/references/ref_yellow_sponge_tray.png differ diff --git a/10samples/sample_0010/row.json b/10samples/sample_0010/row.json new file mode 100644 index 0000000000000000000000000000000000000000..d479c504fed712dc2b4c6a730b8589a3d5f0fae6 --- /dev/null +++ b/10samples/sample_0010/row.json @@ -0,0 +1,133 @@ +{ + "sample_id": "sample_0010", + "scene_caption": "A pottery studio class captures an instructor helping a student shape clay near a spinning wheel, blue vase, and sponge tray.", + "story": "Wet clay is on the table and the lesson is hands-on. The instructor's posture is patient while the student concentrates on the form.", + "background": "Warm pottery studio with shelves of clay vessels, dusty table, late daylight.", + "style": "photorealistic", + "canvas_size": [ + 1024, + 1024 + ], + "main_image": "main_image.png", + "layout_sketch": "layout_sketch.png", + "n_planned": 5, + "n_accepted": 5, + "accepted": [ + { + "name": "instructor_black_apron", + "is_person": true, + "ref_style": "professional_portrait", + "sub_caption": "older adult with close-cropped gray hair, dark brown skin, black apron, guiding hands calmly", + "intended_bbox": [ + 0.09, + 0.2, + 0.37, + 0.89 + ], + "measured_bbox": [ + 0.091, + 0.1843, + 0.3682, + 0.9023 + ], + "iou_intended_vs_measured": 0.9518, + "layout_followed": true, + "identity_score": 0.863, + "identity_verdict": "match", + "ref_image": "references/ref_instructor_black_apron.png" + }, + { + "name": "student_teal_smock", + "is_person": true, + "ref_style": "mirror_selfie", + "sub_caption": "young adult with red curls, fair skin, teal smock, leaning over the clay with focus", + "intended_bbox": [ + 0.48, + 0.24, + 0.76, + 0.89 + ], + "measured_bbox": [ + 0.4833, + 0.2517, + 0.7599, + 0.8821 + ], + "iou_intended_vs_measured": 0.9581, + "layout_followed": true, + "identity_score": 0.874, + "identity_verdict": "match", + "ref_image": "references/ref_student_teal_smock.png" + }, + { + "name": "gray_pottery_wheel", + "is_person": false, + "ref_style": "in_context_natural", + "sub_caption": "round gray pottery wheel holding a wet clay form at the table center", + "intended_bbox": [ + 0.31, + 0.55, + 0.57, + 0.8 + ], + "measured_bbox": [ + 0.3064, + 0.5496, + 0.5697, + 0.8079 + ], + "iou_intended_vs_measured": 0.9536, + "layout_followed": true, + "identity_score": 0.91, + "identity_verdict": "match", + "ref_image": "references/ref_gray_pottery_wheel.png" + }, + { + "name": "blue_glazed_vase", + "is_person": false, + "ref_style": "studio_product", + "sub_caption": "blue glazed vase on the rear shelf catching a bright highlight", + "intended_bbox": [ + 0.68, + 0.33, + 0.85, + 0.62 + ], + "measured_bbox": [ + 0.6791, + 0.3303, + 0.8459, + 0.6294 + ], + "iou_intended_vs_measured": 0.94, + "layout_followed": true, + "identity_score": 0.916, + "identity_verdict": "match", + "ref_image": "references/ref_blue_glazed_vase.png" + }, + { + "name": "yellow_sponge_tray", + "is_person": false, + "ref_style": "flatlay_topdown", + "sub_caption": "yellow sponge tray with damp tools beside the pottery wheel", + "intended_bbox": [ + 0.55, + 0.63, + 0.79, + 0.82 + ], + "measured_bbox": [ + 0.552, + 0.6248, + 0.7908, + 0.8235 + ], + "iou_intended_vs_measured": 0.9454, + "layout_followed": true, + "identity_score": 0.899, + "identity_verdict": "match", + "ref_image": "references/ref_yellow_sponge_tray.png" + } + ], + "dropped": [] +}