{
  "original_bytes_preserved": true,
  "images": [
    {
      "canonical_recipe_key": "tuwo-shinkafa",
      "live_post_id": "recipe-ng-traditional-20261004-tuwo-shinkafa",
      "asset": {
        "relative_path": "assets/photos/tuwo-shinkafa.jpg",
        "sha256": "9616b78a70f09265639233a7c5f3563f4ebfd958b1eebf9b0a49cba18cba4cb5",
        "width": 3120,
        "height": 4160,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 3401938,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Linason Blessing",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Tuwo_shincafa.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/a2/Tuwo_shincafa.jpg",
        "source_file_name": "Tuwo_shincafa.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/a/a2/Tuwo_shincafa.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "A close-up of cooked white rice mash on a metal plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Tuwo_shincafa.jpg by Linason Blessing, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Tuwo shinkafa rice mash on a metal plate",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "A close-up of cooked white rice mash on a metal plate. Rice texture remains visible; documentary lighting and tight crop.",
        "A close-up of cooked white rice mash on a metal plate. Rice texture remains visible; documentary lighting and tight crop.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "More visibly grainy and loosely mashed than canonical smooth beaten finish; close crop, documentary phone-photo quality."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "9616b78a70f09265639233a7c5f3563f4ebfd958b1eebf9b0a49cba18cba4cb5",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Off-white soft cohesive rice mash on a metal plate, with discernible grains and a spoon."
      },
      "visual_spec": {
        "visible_food_spec": "A single rounded portion of soft, mashed short-grain rice swallow, worked until the grains merge, with gentle spoon-fold marks; serve alone on a plain plate.",
        "texture_and_color": "Off-white, moist, softly cohesive and mostly smooth with only a very faint rice texture.",
        "key_negative_constraints": "No loose rice grains, rice pilaf, soup, vegetables, sauce or garnish; do not turn it into a glossy translucent jelly.",
        "do_not_confuse_with": [
          "Separate-grain boiled rice",
          "white pounded yam or cassava fufu"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/tuwo-shinkafa.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "tuwo-masara",
      "live_post_id": "recipe-ng-traditional-20261004-tuwo-masara",
      "asset": {
        "relative_path": "assets/photos/tuwo-masara.jpg",
        "sha256": "fbb17777bb9eb78b2523fb97e3c8e58b1473ed11a82402a9a30c0899032a1d65",
        "width": 1920,
        "height": 2560,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 714368,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Salma kyari",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Tuwo_masara_da_miyan_ayoyo.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/1/1e/Tuwo_masara_da_miyan_ayoyo.jpg",
        "source_file_name": "Tuwo_masara_da_miyan_ayoyo.jpg",
        "license": "CC0 1.0",
        "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/1/1e/Tuwo_masara_da_miyan_ayoyo.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "A served maize swallow largely covered with green ayoyo soup",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Tuwo_masara_da_miyan_ayoyo.jpg by Salma kyari, via Wikimedia Commons, CC0 1.0",
      "ai_disclosure": null,
      "alt_text": "Tuwo masara partly covered with ayoyo soup",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "A served maize swallow largely covered with green ayoyo soup. Swallow is only partly visible; another image emphasizing the swallow is preferable.",
        "A served maize swallow largely covered with green ayoyo soup. Swallow is only partly visible; another image emphasizing the swallow is preferable.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Most of the maize swallow is obscured by ayoyo soup; image must be captioned as the served combination, not plain isolated tuwo. Soft focus and tight crop."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "fbb17777bb9eb78b2523fb97e3c8e58b1473ed11a82402a9a30c0899032a1d65",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Pale swallow portions partly visible around a thick coating of green-brown leafy soup."
      },
      "visual_spec": {
        "visible_food_spec": "A rounded portion of thoroughly cooked maize-meal swallow, shaped with a damp spoon; choose white maize meal for this image and serve alone.",
        "texture_and_color": "Pale cream, firm but yielding, matte-to-moist surface with a fine cooked maize texture.",
        "key_negative_constraints": "No uncooked grits, whole sweetcorn kernels, separate rice, soup or garnish; do not make it translucent.",
        "do_not_confuse_with": [
          "Tuwo shinkafa rice swallow",
          "semolina",
          "yellow translucent usi"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/tuwo-masara.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "miyan-kuka",
      "live_post_id": "recipe-ng-traditional-20261004-miyan-kuka",
      "asset": {
        "relative_path": "assets/photos/miyan-kuka.jpg",
        "sha256": "569c61d54e4d38db3f5558444da05c4437fd7f2f25aa4b161d1ab82a95d78359",
        "width": 1280,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 173661,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Sadeeq Abubakar taiger",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Miyan_kuka_01.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/7/7d/Miyan_kuka_01.jpg",
        "source_file_name": "Miyan_kuka_01.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/7/7d/Miyan_kuka_01.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Pot of dark brown-green soup with a ladle",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Miyan_kuka_01.jpg by Sadeeq Abubakar taiger, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "A pot of dark green-brown miyan kuka",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Pot of dark brown-green soup with a ladle. Title identifies miyan kuka; meat detail is not visible; documentary photograph rather than styled plated dish.",
        "Pot of dark brown-green soup with a ladle. Title identifies miyan kuka; meat detail is not visible; documentary photograph rather than styled plated dish.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source-supported named soup, but no meat/fish detail is visible and exact composition cannot be independently established from pixels. Documentary cooking-pot view."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "569c61d54e4d38db3f5558444da05c4437fd7f2f25aa4b161d1ab82a95d78359",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Pot of dark green-brown smooth soup with a ladle, fine specks and few visible solids."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of baobab-leaf-powder soup with a smooth continuous leaf-thickened base, cooked beef pieces and small deboned smoked-fish pieces partly visible.",
        "texture_and_color": "Deep muted olive-green to green-brown; fine even leaf powder, glossy and slightly stretchy, fluid enough to flow.",
        "key_negative_constraints": "No whole baobab leaves, chopped leafy heap, okra pods or slices, egusi curds, tomato chunks or white cream; no swallow in frame.",
        "do_not_confuse_with": [
          "Ewedu with visible chopped jute",
          "leafy efo riro",
          "okra soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/miyan-kuka.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "miyan-taushe",
      "live_post_id": "recipe-ng-traditional-20261004-miyan-taushe",
      "asset": {
        "relative_path": "assets/photos/miyan-taushe.jpg",
        "sha256": "15f5e9baf15c2b95aba3de30f81014547e51364f829222438d59ad42f7be117e",
        "width": 1280,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 177445,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aykunya13",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Miyan_taushe_02.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/0/08/Miyan_taushe_02.jpg",
        "source_file_name": "Miyan_taushe_02.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/0/08/Miyan_taushe_02.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Pot of golden-brown soup with a yellow ladle and chopped greens",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Miyan_taushe_02.jpg by Aykunya13, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Miyan taushe soup in a cooking pot",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Pot of golden-brown soup with a yellow ladle and chopped greens. Title identifies miyan taushe; individual pumpkin/beef pieces are not discernible.",
        "Pot of golden-brown soup with a yellow ladle and chopped greens. Title identifies miyan taushe; individual pumpkin/beef pieces are not discernible.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source-supported named dish; individual pumpkin or protein pieces are not discernible. Do not claim the photograph demonstrates all canonical ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "15f5e9baf15c2b95aba3de30f81014547e51364f829222438d59ad42f7be117e",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Pot of golden-brown thick soup with fine green flecks and a yellow serving spoon."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of pumpkin-and-groundnut soup with some soft pumpkin cubes surviving in the partially mashed base, beef cubes, deboned smoked fish and sliced cooked sorrel.",
        "texture_and_color": "Warm orange-gold to orange-brown, creamy groundnut body, soft pumpkin pieces and visible dark-green sorrel strips.",
        "key_negative_constraints": "No cream swirl, croutons, pumpkin seeds sprinkled on top, whole peanuts as garnish or decorative raw herbs.",
        "do_not_confuse_with": [
          "Miyan gyada peanut soup without pumpkin",
          "smooth western pumpkin puree"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/miyan-taushe.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "miyan-gyada",
      "live_post_id": "recipe-ng-traditional-20261004-miyan-gyada",
      "asset": {
        "relative_path": "assets/ai/miyan-gyada.png",
        "sha256": "557ba2372517b19f9c56880b204904a91d031c2432486ba4b708614309d17b67",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2524144,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T12:41:58.157538+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: individual square Nigerian recipe reference image, to be labeled AI-generated illustration in accompanying metadata\nPrimary request: Make one faithful realistic food illustration of Miyan Gyada, the northern Nigerian roasted-groundnut, beef, pepper and spinach soup described below. Depict the cooked dish only, a single serving in a simple off-white shallow ceramic bowl on a neutral warm gray tabletop.\nRecipe-specific appearance: A rich but pourable warm orange-tan roasted-peanut soup, with natural fine groundnut texture. Several modest stewed beef cubes partially submerged; cooked chopped dark-green spinach distributed THROUGH the soup, not arranged as a fresh garnish. Blended tomato, red bell pepper, Scotch bonnet and onion are fully cooked into the broth, not visible raw. Subtle palm-oil sheen, no large oil slick. Ground dawadawa is incorporated invisibly.\nComposition: Close three-quarter overhead view, whole bowl and modest surrounding table visible, appetizing soft diffuse daylight, centered single dish, realistic modest home-cooked presentation.\nConstraints: Recipe has beef, finely ground roasted peanuts, chopped cooked spinach, blended tomatoes and peppers, onion, palm oil, ground dawadawa, salt and water only. No whole peanuts, rice, pasta, croutons, cream, raw leaves, sliced chiles, garnish, utensils, side dishes, table props, hands or people. Not peanut butter in a bowl; clearly a cooked African beef soup. No text, caption, logo, watermark, collage or grid. Produce one image only; not an asserted photograph of an actual cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://cookpad.com/ng/recipes/11968574-groundnut-soupmiyan-gyada",
          "https://www.allnigerianrecipes.com/soups/groundnut-soup/",
          "https://www.bbcgoodfoodme.com/recipes/miyan-gyada-mutton-peanut-butter-soup/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-0927467a-675f-4fa9-bdb0-d55b2ac0462b.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels. Warm orange-tan groundnut soup with distinct beef cubes, distributed cooked chopped spinach and subtle oil sheen; no whole nuts, raw garnish or unlisted side dishes.",
          "spec_cross_check": "Cross-checked with visible_food_spec, texture_and_color and negative constraints in visual_specs.json; compatible.",
          "limitations": "Generated pixels permit only a visual compatibility check; exact leaf species, meat species, hidden groundnut formulation, taste and kitchen-tested fidelity cannot be certified.",
          "independent_review": "A second visual reviewer reported no obvious ingredient-whitelist or texture violations across all three assets; Kunun Gyada smoothness and soup distinctions confirmed as visually compatible."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: individual square Nigerian recipe reference image, to be labeled AI-generated illustration in accompanying metadata\nPrimary request: Make one faithful realistic food illustration of Miyan Gyada, the northern Nigerian roasted-groundnut, beef, pepper and spinach soup described below. Depict the cooked dish only, a single serving in a simple off-white shallow ceramic bowl on a neutral warm gray tabletop.\nRecipe-specific appearance: A rich but pourable warm orange-tan roasted-peanut soup, with natural fine groundnut texture. Several modest stewed beef cubes partially submerged; cooked chopped dark-green spinach distributed THROUGH the soup, not arranged as a fresh garnish. Blended tomato, red bell pepper, Scotch bonnet and onion are fully cooked into the broth, not visible raw. Subtle palm-oil sheen, no large oil slick. Ground dawadawa is incorporated invisibly.\nComposition: Close three-quarter overhead view, whole bowl and modest surrounding table visible, appetizing soft diffuse daylight, centered single dish, realistic modest home-cooked presentation.\nConstraints: Recipe has beef, finely ground roasted peanuts, chopped cooked spinach, blended tomatoes and peppers, onion, palm oil, ground dawadawa, salt and water only. No whole peanuts, rice, pasta, croutons, cream, raw leaves, sliced chiles, garnish, utensils, side dishes, table props, hands or people. Not peanut butter in a bowl; clearly a cooked African beef soup. No text, caption, logo, watermark, collage or grid. Produce one image only; not an asserted photograph of an actual cooked or tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No openly licensed exact Hausa groundnut soup image verified. Commons Groundnut soup.jpg exists but uses bitterleaf rather than spinach, and no matching exact northern form was confirmed; do not substitute a generic peanut soup."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of Miyan Gyada, an orange-tan beef and groundnut soup with cooked spinach in a plain bowl.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Groundnut-bodied orange-tan soup with beef and broader wilted spinach pieces; no obvious added foods.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "557ba2372517b19f9c56880b204904a91d031c2432486ba4b708614309d17b67",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of finely ground roasted-groundnut soup in a reduced tomato-pepper base with beef cubes and chopped wilted spinach folded throughout.",
        "texture_and_color": "Warm tan-orange to russet, smooth nut-thickened spoonable broth with dark-green spinach and brown beef.",
        "key_negative_constraints": "No pumpkin chunks, smoked fish, sesame seed topping, whole peanuts or large egusi curds; no cream or garnish.",
        "do_not_confuse_with": [
          "Miyan taushe pumpkin soup",
          "sesame beniseed soup",
          "egusi with large curds"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/miyan-gyada.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "masa-rice-cakes",
      "live_post_id": "recipe-ng-traditional-20261004-masa-rice-cakes",
      "asset": {
        "relative_path": "assets/photos/masa-rice-cakes.jpg",
        "sha256": "28eeb24ddd0928b14fb8b8fb9be6501ae5f6a66aee333c882bd2e854fe3db8bf",
        "width": 4160,
        "height": 3120,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2552086,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Zmu'az4Z",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Cooked_masa.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/8/82/Cooked_masa.jpg",
        "source_file_name": "Cooked_masa.jpg",
        "license": "CC BY 4.0",
        "license_url": "https://creativecommons.org/licenses/by/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/8/82/Cooked_masa.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Close-up of lightly browned round rice cakes; strong exact-dish image",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Cooked_masa.jpg by Zmu'az4Z, via Wikimedia Commons, CC BY 4.0",
      "ai_disclosure": null,
      "alt_text": "Lightly browned masa rice cakes",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Close-up of lightly browned round rice cakes; strong exact-dish image. No topping or soup shown.",
        "Close-up of lightly browned round rice cakes; strong exact-dish image. No topping or soup shown.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "No consequential visible mismatch; rice formulation remains source-dependent."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "28eeb24ddd0928b14fb8b8fb9be6501ae5f6a66aee333c882bd2e854fe3db8bf",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Small rounded pan-cooked cakes with ivory sides and irregular golden-brown circular faces; no additional food."
      },
      "visual_spec": {
        "visible_food_spec": "Several small rounded rice cakes cooked in individual pan wells, showing browned domed sides; one split cake reveals a set porous rice-batter interior.",
        "texture_and_color": "Patchy golden-brown exterior around an ivory spongy interior; rounded, lightly crisp outside and airy within.",
        "key_negative_constraints": "No flat crepes, doughnut holes, sugar dusting, syrup, berries, sauce, onion pieces or leaf wrapping.",
        "do_not_confuse_with": [
          "Sinasir flat rice pancakes",
          "puff puff deep-fried wheat balls"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/masa-rice-cakes.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "sinasir",
      "live_post_id": "recipe-ng-traditional-20261004-sinasir",
      "asset": {
        "relative_path": "assets/photos/sinasir.jpg",
        "sha256": "04e5199d67c5569d347f4e13b57b0cc51724bf6e30b0121577bde3301279bc62",
        "width": 720,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 272835,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Halima Waziri",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Rice_Sinasir.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/6/61/Rice_Sinasir.jpg",
        "source_file_name": "Rice_Sinasir.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/6/61/Rice_Sinasir.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Folded rice pancakes with browned surfaces on a white plate; exact title and shape match",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Rice_Sinasir.jpg by Halima Waziri, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Folded sinasir rice pancakes with golden pan marks",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Folded rice pancakes with browned surfaces on a white plate; exact title and shape match. Phone snapshot and low lighting.",
        "Folded rice pancakes with browned surfaces on a white plate; exact title and shape match. Phone snapshot and low lighting.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Darker browning and folded presentation, compatible with named rice pancakes; low light and soft image quality."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "04e5199d67c5569d347f4e13b57b0cc51724bf6e30b0121577bde3301279bc62",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Folded flat pale pancakes with mottled golden-brown pan marks on a plate."
      },
      "visual_spec": {
        "visible_food_spec": "A short overlapping stack of small flat rice pancakes, made from aerated rice batter with finely diced onion and cooked on both sides.",
        "texture_and_color": "Creamy white surfaces with tiny pores and restrained pale-golden pan marks; soft, flat and flexible.",
        "key_negative_constraints": "No rounded balls, thick browned pancake stack, honey, syrup, berries, butter, sugar dusting or accompanying stew.",
        "do_not_confuse_with": [
          "Masa rounded pan-well cakes",
          "wheat breakfast pancakes",
          "injera"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/sinasir.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "dan-wake",
      "live_post_id": "recipe-ng-traditional-20261004-dan-wake",
      "asset": {
        "relative_path": "assets/photos/dan-wake.jpg",
        "sha256": "893613e92c8695f32a78cef8ccc675c66bbc3c7fe7ac8ebcd85bff9cf913fc6b",
        "width": 912,
        "height": 1080,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 132048,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "YusufuAM",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Dan_Wake.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/9/93/Dan_Wake.jpg",
        "source_file_name": "Dan_Wake.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/9/93/Dan_Wake.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Overhead arrangement of dumplings with boiled eggs, vegetables, oil and seasoning on artificial grass",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Dan_Wake.jpg by YusufuAM, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Dan wake dumplings with separate vegetables, eggs and condiments",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Overhead arrangement of dumplings with boiled eggs, vegetables, oil and seasoning on artificial grass. Dumplings are gray rather than garnished in the central bowl.",
        "Overhead arrangement of dumplings with boiled eggs, vegetables, oil and seasoning on artificial grass. Dumplings are gray rather than garnished in the central bowl.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Egg slices and additional serving condiments exceed canonical topping list but are separate accompaniments. Image clearly includes the named dumplings; caption accompaniments rather than claiming exact recipe plating."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "893613e92c8695f32a78cef8ccc675c66bbc3c7fe7ac8ebcd85bff9cf913fc6b",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Grey irregular small dumplings in a main bowl, with separate vegetables, boiled egg slices, oil and seasonings."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of small irregular spoon-dropped bean-and-cassava dumplings tinted by baobab powder, tossed in a light oil-and-cayenne coating, with diced tomato, cucumber and thin red onion.",
        "texture_and_color": "Dull grey-green to olive-brown dumplings, smooth and slightly dimpled, moist but drained; bright fresh salad pieces.",
        "key_negative_constraints": "No boiled egg, cabbage, lettuce, meat, creamy dressing, pool of soup or uniform Italian pasta shapes.",
        "do_not_confuse_with": [
          "Pasta gnocchi",
          "white yam dumplings",
          "soup-based okoho"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/dan-wake.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "dambu-shinkafa",
      "live_post_id": "recipe-ng-traditional-20261004-dambu-shinkafa",
      "asset": {
        "relative_path": "assets/photos/dambu-shinkafa.jpg",
        "sha256": "f632427144e0facc511165bc8ecdda73e25257f673360f87e24a2edae59e36e2",
        "width": 689,
        "height": 794,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 208553,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Hajjare",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:A_Northern_Nigeria_food_called_Dambun_shinkafa_11.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/c/c9/A_Northern_Nigeria_food_called_Dambun_shinkafa_11.jpg",
        "source_file_name": "A_Northern_Nigeria_food_called_Dambun_shinkafa_11.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/c/c9/A_Northern_Nigeria_food_called_Dambun_shinkafa_11.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Cooked yellow-orange rice granules with groundnuts, onion and greens in a pot",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "A_Northern_Nigeria_food_called_Dambun_shinkafa_11.jpg by Hajjare, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Dambu shinkafa with groundnuts, greens and red onion",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Cooked yellow-orange rice granules with groundnuts, onion and greens in a pot. Original is only 689 by 794 pixels and visibly sharpened.",
        "Cooked yellow-orange rice granules with groundnuts, onion and greens in a pot. Original is only 689 by 794 pixels and visibly sharpened.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Warmer coloring and larger onion/groundnut pieces than the canonical version. Small original and strongly sharpened appearance; no whole long-grain rice or unrelated dish structure."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "f632427144e0facc511165bc8ecdda73e25257f673360f87e24a2edae59e36e2",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Yellow-orange coarse rice-grit mixture with green leaf fragments, whole or coarse peanuts and sliced red onion."
      },
      "visual_spec": {
        "visible_food_spec": "A loose mound of steamed coarse broken rice with small cooked groundnut pieces, tender moringa leaves, fine onion, chilli and sliced spring onion distributed through it.",
        "texture_and_color": "Off-white granular rice flecked green and tan; fluffy, separate coarse grains with light oil sheen.",
        "key_negative_constraints": "No long rice grains, couscous wheat grains, carrots, peas, sweetcorn, meat, raisins or watery porridge.",
        "do_not_confuse_with": [
          "Plain brabisko",
          "whole long-grain fried rice",
          "fonio gwate porridge"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/dambu-shinkafa.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "fura-da-nono",
      "live_post_id": "recipe-ng-traditional-20261004-fura-da-nono",
      "asset": {
        "relative_path": "assets/photos/fura-da-nono.jpg",
        "sha256": "49f9bb06870f509688a65d1e753e0d3504e48bdf65fff5363b8646459167fa63",
        "width": 1872,
        "height": 4160,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1832189,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Tolba2020",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Nono_da_Fura.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/e/e0/Nono_da_Fura.jpg",
        "source_file_name": "Nono_da_Fura.jpg",
        "license": "CC0 1.0",
        "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/e/e0/Nono_da_Fura.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Bowl of milky fura with spoon visible",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Nono_da_Fura.jpg by Tolba2020, via Wikimedia Commons, CC0 1.0",
      "ai_disclosure": null,
      "alt_text": "A bowl of fura da nono with a spoon",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Bowl of milky fura with spoon visible. Narrow portrait orientation, dim light and soft focus; useful documentary backup only.",
        "Bowl of milky fura with spoon visible. Narrow portrait orientation, dim light and soft focus; useful documentary backup only.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Narrow dim soft-focused phone photograph; coarse millet specks remain, rather than the most finely blended canonical finish."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "49f9bb06870f509688a65d1e753e0d3504e48bdf65fff5363b8646459167fa63",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Bowl of creamy beige milk-based drink with small brownish millet bits and a spoon."
      },
      "visual_spec": {
        "visible_food_spec": "A simple glass or small bowl of cooled cooked millet blended thoroughly into plain cultured milk; the millet is dispersed through the drink.",
        "texture_and_color": "Opaque off-white to light grey-beige, thick and lightly grainy with very fine spice flecks.",
        "key_negative_constraints": "No intact millet balls, ice cream, fruit, honey drizzle, mint, straw decoration or raw millet sprinkled over the drink.",
        "do_not_confuse_with": [
          "Whole fura balls served beside milk",
          "tiger-nut milk",
          "plain yogurt"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/fura-da-nono.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "beef-suya",
      "live_post_id": "recipe-ng-demo-20261001-musa-suya",
      "asset": {
        "relative_path": "assets/photos/beef-suya.jpg",
        "sha256": "d82eb7da914c11be87b2a32d775a15ab59b5d16452bfb9d77679b84daa621df0",
        "width": 6000,
        "height": 4000,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 8963639,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Wikipedianaija",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Steak_Suya.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/5/51/Steak_Suya.jpg",
        "source_file_name": "Steak Suya.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Own work (per the Steak Suya.jpg Commons file page)",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/5/51/Steak_Suya.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Spice-coated beef suya slices with red-onion rings, served on paper",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Steak Suya.jpg by Wikipedianaija, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Spice-coated beef suya slices with red onion and salad garnish",
      "caveats": [
        "Beef-only suya, served off skewers with raw onion and salad garnish; no chicken shown.",
        "Beef-only replacement for rejected beef-and-chicken image. Suya is sliced and served off skewers with onion and pale salad garnish; not a photo of the exact written preparation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source explicitly identifies beef-only replacement. Off-skewer serving and pale salad garnish differ from canonical skewer/tomato presentation; no visible mixed chicken pieces."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "d82eb7da914c11be87b2a32d775a15ab59b5d16452bfb9d77679b84daa621df0",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Larger individual inspection: thin browned beef-like slices with dry granular suya spice, red-onion rings and pale shredded salad behind them on paper."
      },
      "visual_spec": {
        "visible_food_spec": "Thin, spread-out grilled beef strips threaded loosely on skewers, dry-coated in reddish-brown peanut yaji, served with the listed sliced red onion and tomato.",
        "texture_and_color": "Brown grilled beef with modest charred edges and a dry granular red-brown spice crust.",
        "key_negative_constraints": "No bell-pepper chunks threaded onto skewers, chicken, whole peanuts, cucumber, parsley or glossy barbecue sauce.",
        "do_not_confuse_with": [
          "Asun goat cubes",
          "thick kebab chunks",
          "saucy beef skewers"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/beef-suya.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "miyan-zogale",
      "live_post_id": "recipe-ng-traditional-20261004-miyan-zogale",
      "asset": {
        "relative_path": "assets/ai/miyan-zogale.png",
        "sha256": "2a9649ffe2bebed66d8bcd4685ea86aa2fed984cc236265373df19b51b2f9305",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2527904,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T12:42:49.081237+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: individual square Nigerian recipe reference image, labeled AI-generated illustration in accompanying metadata\nPrimary request: One faithful realistic food illustration of Miyan Zogale, specifically a northern Nigerian moringa-leaf beef soup using the tomato-and-groundnut version below. A single simple off-white ceramic bowl on a neutral warm gray tabletop.\nRecipe-specific appearance: Abundant tender cooked moringa leaflets throughout a loose, lightly groundnut-thickened reddish-brown tomato/beef broth, with several modest stewed beef cubes partly submerged. Moringa has small oval leaflets, cooked and wilted dark olive-green, with no stems; not large spinach ribbons, not curly kale, not fresh garnish. The loose savory broth remains clearly visible between leaflets and beef, with a fine subtle raw-groundnut-meal body and slight palm-oil sheen. It should be markedly more leaf-forward and less creamy than roasted-peanut soup. Tomatoes are blended and cooked, onion and Scotch bonnet softened and incorporated, ground dawadawa invisible.\nComposition: Close three-quarter overhead view, centered entire single bowl with modest surrounding table, soft diffuse natural daylight, honest modest home-cooked appearance.\nConstraints: Ingredients only stewed beef, cooked moringa leaves, finely ground groundnuts, blended tomatoes, onion, Scotch bonnet, palm oil, ground dawadawa, salt and water. No whole nuts, raw leaves or stems, no ornamental garnish, no giant spinach leaves, no rice, cream, noodles or vegetables not listed. No utensils, sides, props, hands or people. No text, labels, logo, watermark, collage or grid. One image only, not a claim of an actual photographed or kitchen-tested recipe.",
        "source_recipe_reference_urls": [
          "https://allnigerianfoods.com/miyan-zogale-2/",
          "https://www.nigeriagalleria.com/Health_Lifestyle/Recipe/Soups/Miyan-Zogale_Soup.html"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-196adaf3-b482-4898-b5d1-7a51144804eb.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels. Leaf-rich reddish-brown soup with cooked small green leaflets, beef cubes and visible loose broth; less creamy than Miyan Gyada. Moringa species is specified in the prompt, not botanically authenticated by an AI image.",
          "spec_cross_check": "Cross-checked with visible_food_spec, texture_and_color and negative constraints in visual_specs.json; compatible.",
          "limitations": "Generated pixels permit only a visual compatibility check; exact leaf species, meat species, hidden groundnut formulation, taste and kitchen-tested fidelity cannot be certified.",
          "independent_review": "A second visual reviewer reported no obvious ingredient-whitelist or texture violations across all three assets; Kunun Gyada smoothness and soup distinctions confirmed as visually compatible."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: individual square Nigerian recipe reference image, labeled AI-generated illustration in accompanying metadata\nPrimary request: One faithful realistic food illustration of Miyan Zogale, specifically a northern Nigerian moringa-leaf beef soup using the tomato-and-groundnut version below. A single simple off-white ceramic bowl on a neutral warm gray tabletop.\nRecipe-specific appearance: Abundant tender cooked moringa leaflets throughout a loose, lightly groundnut-thickened reddish-brown tomato/beef broth, with several modest stewed beef cubes partly submerged. Moringa has small oval leaflets, cooked and wilted dark olive-green, with no stems; not large spinach ribbons, not curly kale, not fresh garnish. The loose savory broth remains clearly visible between leaflets and beef, with a fine subtle raw-groundnut-meal body and slight palm-oil sheen. It should be markedly more leaf-forward and less creamy than roasted-peanut soup. Tomatoes are blended and cooked, onion and Scotch bonnet softened and incorporated, ground dawadawa invisible.\nComposition: Close three-quarter overhead view, centered entire single bowl with modest surrounding table, soft diffuse natural daylight, honest modest home-cooked appearance.\nConstraints: Ingredients only stewed beef, cooked moringa leaves, finely ground groundnuts, blended tomatoes, onion, Scotch bonnet, palm oil, ground dawadawa, salt and water. No whole nuts, raw leaves or stems, no ornamental garnish, no giant spinach leaves, no rice, cream, noodles or vegetables not listed. No utensils, sides, props, hands or people. No text, labels, logo, watermark, collage or grid. One image only, not a claim of an actual photographed or kitchen-tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No genuine openly licensed exact-dish photograph verified. Former Commons upload Miyan Zogale (Moringa Soup).jpg was deleted for suspected copyright violation and excluded.",
            "A second upload, File:Miyar zogale.jpg, was also deleted for a copyright violation. Excluded rather than reusing mirrored versions."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of Miyan Zogale, a leaf-rich beef and moringa soup with tomato and groundnuts in a plain bowl.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Leaf-dense groundnut/tomato broth with beef, visibly different from miyan gyada. Exact leaf species cannot be proven from image alone.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "2a9649ffe2bebed66d8bcd4685ea86aa2fed984cc236265373df19b51b2f9305",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of groundnut-thickened beef soup containing abundant tender small moringa leaflets, cooked in tomato, onion and palm oil.",
        "texture_and_color": "Muted orange-brown nut broth densely flecked with small dark-green moringa leaves; beef cubes visible.",
        "key_negative_constraints": "No raw salad cucumber or carrot, whole peanuts, pumpkin, fish, spinach-like broad leaves or cream.",
        "do_not_confuse_with": [
          "Miyan gyada made with broader spinach",
          "dry kwadon zogale salad"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/miyan-zogale.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "kunun-gyada",
      "live_post_id": "recipe-ng-traditional-20261004-kunun-gyada",
      "asset": {
        "relative_path": "assets/ai/kunun-gyada.png",
        "sha256": "9cc9ea96348a684374a49f318b2d606cffb86ca451c37fdf5b805eace53ba180",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1912347,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T12:43:39.076933+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: individual square Nigerian recipe reference image, labeled AI-generated illustration in accompanying metadata\nPrimary request: A single faithful realistic food illustration of Kunun Gyada, the northern Nigerian smooth warm groundnut-and-rice gruel in this specific recipe. Serve it in one simple off-white ceramic bowl on a neutral warm gray tabletop.\nRecipe-specific appearance: Very pale warm ivory-beige, milky peanut gruel, smooth and pourable with a gentle soft sheen and subtle fine creamy texture. Groundnuts are blended with water and fully STRAINED to make milk. Soaked short-grain rice is blended VERY FINELY, then simmered in the peanut milk until smooth, not gritty. Small amount of strained tamarind is fully mixed in; it adds at most a faint beige tint, no dark streaks or pulp. The surface is plain and nearly smooth with a few barely visible natural tiny bubbles and soft fluid undulation, no solid toppings. Light breakfast gruel rather than a firm pudding. Fill bowl moderately high; show credible thin-milky porridge body without over-thick peaks.\nComposition: Close three-quarter overhead view of the entire bowl, centered, modest neutral surrounding table, soft diffuse daylight, realistic quiet home-cooked food aesthetic.\nConstraints: Show only the finished gruel; NO visible whole rice grains, no peanuts or crushed nuts, no peanut butter dollop, no cinnamon, spices, garnish, tamarind chunks or swirls, no green leaves, no dairy cream dollops, no butter, no meat or savory soup appearance. No cup handle, spoon, sides, props, hands or people. No text, captions, label, logo, watermark, collage or grid. One image only; this is an AI illustration rather than documentary evidence of an actual cooked recipe.",
        "source_recipe_reference_urls": [
          "https://www.allnigerianrecipes.com/drinks/kunun-gyada/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-2587dcc5-ba76-4202-b1cf-458e76e85ead.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels. Pale ivory-beige smooth milky gruel, subtle fine surface and tiny bubbles; no visible whole rice grains, peanuts, garnish or savory components. Matches finely blended rice and strained groundnut-milk preparation.",
          "spec_cross_check": "Cross-checked with visible_food_spec, texture_and_color and negative constraints in visual_specs.json; compatible.",
          "limitations": "Generated pixels permit only a visual compatibility check; exact leaf species, meat species, hidden groundnut formulation, taste and kitchen-tested fidelity cannot be certified.",
          "independent_review": "A second visual reviewer reported no obvious ingredient-whitelist or texture violations across all three assets; Kunun Gyada smoothness and soup distinctions confirmed as visually compatible."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: individual square Nigerian recipe reference image, labeled AI-generated illustration in accompanying metadata\nPrimary request: A single faithful realistic food illustration of Kunun Gyada, the northern Nigerian smooth warm groundnut-and-rice gruel in this specific recipe. Serve it in one simple off-white ceramic bowl on a neutral warm gray tabletop.\nRecipe-specific appearance: Very pale warm ivory-beige, milky peanut gruel, smooth and pourable with a gentle soft sheen and subtle fine creamy texture. Groundnuts are blended with water and fully STRAINED to make milk. Soaked short-grain rice is blended VERY FINELY, then simmered in the peanut milk until smooth, not gritty. Small amount of strained tamarind is fully mixed in; it adds at most a faint beige tint, no dark streaks or pulp. The surface is plain and nearly smooth with a few barely visible natural tiny bubbles and soft fluid undulation, no solid toppings. Light breakfast gruel rather than a firm pudding. Fill bowl moderately high; show credible thin-milky porridge body without over-thick peaks.\nComposition: Close three-quarter overhead view of the entire bowl, centered, modest neutral surrounding table, soft diffuse daylight, realistic quiet home-cooked food aesthetic.\nConstraints: Show only the finished gruel; NO visible whole rice grains, no peanuts or crushed nuts, no peanut butter dollop, no cinnamon, spices, garnish, tamarind chunks or swirls, no green leaves, no dairy cream dollops, no butter, no meat or savory soup appearance. No cup handle, spoon, sides, props, hands or people. No text, captions, label, logo, watermark, collage or grid. One image only; this is an AI illustration rather than documentary evidence of an actual cooked recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "Photographs found on commercial stock service and Google Arts & Culture/Centenary Project; neither supplied a verified open reuse license. No substitute or download used."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of Kunun Gyada, a smooth pale groundnut-and-rice gruel in a plain bowl.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Plain smooth pale beige gruel, without intact rice grains or whole nut garnish.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "9cc9ea96348a684374a49f318b2d606cffb86ca451c37fdf5b805eace53ba180",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A small bowl or cup of smooth warm groundnut-milk porridge thickened with finely blended rice and a little strained tamarind.",
        "texture_and_color": "Pale ivory to light beige, opaque and smooth, gently pourable without intact grains.",
        "key_negative_constraints": "No whole rice grains, whole peanuts, millet balls, dairy toppings, cinnamon stick, fruit or decorative nuts.",
        "do_not_confuse_with": [
          "Fura da nono with cultured milk and millet",
          "tiger-nut drink"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/kunun-gyada.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "gwate-acha",
      "live_post_id": "recipe-ng-traditional-20261004-gwate-acha",
      "asset": {
        "relative_path": "assets/photos/gwate-acha.jpg",
        "sha256": "61453165b4e04ddf375f4610d5eb9e47d7701900ce0eb2a5e8618a7cc612f89f",
        "width": 2256,
        "height": 3120,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2830889,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Wakalogue",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Gwote.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/5/57/Gwote.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Gwote.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Own work by named uploader; file-specific license read from current Wikimedia Commons HTML page on 2026-10-04",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/5/57/Gwote.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Fonio-and-vegetable gwate in a serving tub with two ladles",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Gwote.jpg by Wakalogue, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Gwate acha porridge with greens in a serving container",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Documentary bulk-serving photo; visible thick grain-and-leaf porridge. Source explicitly identifies acha/fonio. Not a photograph of our exact formulation.",
        "File description explicitly identifies acha/fonio with vegetables, confirming the exact grain variant. Pixels not yet inspected.",
        "Original download paused per upload server HTTP429 Retry-After; no attempt made during pause.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Fonio-and-vegetable gwate in a serving tub with two ladles",
        "Documentary bulk-service presentation and low contrast; source identifies fonio/acha, grain species not independently provable by pixels."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "61453165b4e04ddf375f4610d5eb9e47d7701900ce0eb2a5e8618a7cc612f89f",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Loose grain porridge in a large serving container with fine small grains, dark cooked greens and several serving utensils."
      },
      "visual_spec": {
        "visible_food_spec": "A spoonable fonio porridge with tiny cooked acha grains, crushed groundnuts, chopped cooked tomato and red pepper, spinach and softened onion.",
        "texture_and_color": "Moist loose beige-to-light-red porridge, tiny visible grains, green leaf pieces and small nut fragments.",
        "key_negative_constraints": "No rice-sized grains, dry fluffy couscous, palm-oil slick, meat, fish, cream or whole peanuts on top.",
        "do_not_confuse_with": [
          "Dry dambu shinkafa",
          "couscous salad",
          "millet swallow"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/gwate-acha.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "brabisko",
      "live_post_id": "recipe-ng-traditional-20261004-brabisko",
      "asset": {
        "relative_path": "assets/ai/brabisko.png",
        "sha256": "a6ce0d55d737a6b555c8ed992f7a149f18ab6bd94c56684b430d9790d42628ae",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2201135,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen tool",
        "model": "Not reported by generator",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: AI-generated illustrative recipe image for a Nigerian recipe collection; this is a visual illustration, not evidence of a cooked or tested recipe. Subject: Brabisko, the Kanuri-associated rice-grits version in this recipe. A single shallow off-white ceramic bowl holds a fluffy mound of cooked coarse broken NON-PARBOILED RICE GRITS, steamed then finished gently with water, neutral oil and salt. Close-up texture is essential: soft, separate, opaque creamy-white irregular rice fragments, roughly couscous-sized, some tiny angular broken-rice edges, modest natural variation, lightly moist but not sticky or porridge-like. Absolutely do not depict yellow wheat couscous, long-grain rice, millet, maize, flour paste, vegetables, meat, or garnishes. Scene: bowl alone on a neutral light stone tabletop with no other food or ingredients. Style: realistic editorial food illustration with natural soft window light, appetizing restrained colors, true food texture, no excessive polish. Composition: square image, three-quarter overhead close view, whole bowl inside frame, dish fills most of image. Constraints: no side dish, sauce, soup, herb garnish, cutlery, napkin, hands, text, logos, watermarks, collage or inset; generate exactly one image.",
        "source_recipe_reference_urls": [
          "https://cookpad.com/ng-ha/recipes/15960192-biskin-shinkafa-brabisko",
          "https://cookpad.com/eng/recipes/15854014",
          "https://www.harvestplus.org/wp-content/uploads/2023/01/HarvestPlus-Recipe-Book.pdf"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-0693ebe1-571f-42e3-a802-e0d03bf1c121.png",
        "source_visual_review": {
          "status": "passed independent appearance review",
          "method": "Inspected full generated pixels in tool output",
          "notes": "Creamy-white coarse irregular broken-rice granules in a bowl; plain cooked rice-grit appearance, no wheat-couscous yellow, garnish or side food. A few elongated fragments appear; majority is small broken granules.",
          "unresolved_caveats": [],
          "independent_reviewer": "prepare_recipe_image_specs",
          "independent_review_note": "Acceptable heterogeneous broken rice; minority longer fragments do not require regeneration."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: AI-generated illustrative recipe image for a Nigerian recipe collection; this is a visual illustration, not evidence of a cooked or tested recipe. Subject: Brabisko, the Kanuri-associated rice-grits version in this recipe. A single shallow off-white ceramic bowl holds a fluffy mound of cooked coarse broken NON-PARBOILED RICE GRITS, steamed then finished gently with water, neutral oil and salt. Close-up texture is essential: soft, separate, opaque creamy-white irregular rice fragments, roughly couscous-sized, some tiny angular broken-rice edges, modest natural variation, lightly moist but not sticky or porridge-like. Absolutely do not depict yellow wheat couscous, long-grain rice, millet, maize, flour paste, vegetables, meat, or garnishes. Scene: bowl alone on a neutral light stone tabletop with no other food or ingredients. Style: realistic editorial food illustration with natural soft window light, appetizing restrained colors, true food texture, no excessive polish. Composition: square image, three-quarter overhead close view, whole bowl inside frame, dish fills most of image. Constraints: no side dish, sauce, soup, herb garnish, cutlery, napkin, hands, text, logos, watermarks, collage or inset; generate exactly one image.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No verifiable openly licensed photograph of the exact rice-based version found in Commons/public searches; generic couscous is not an acceptable exact-dish substitute."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration: Plain brabisko made from coarse broken rice",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Predominantly coarse off-white broken rice. Minority elongated fragments remain, consistent with nonuniform broken rice; no unlisted foods.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "a6ce0d55d737a6b555c8ed992f7a149f18ab6bd94c56684b430d9790d42628ae",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A plain mound of steamed and gently finished coarse broken-rice grits, about couscous-sized, fluffed with a small amount of neutral oil and salt only.",
        "texture_and_color": "Off-white to pale cream, moist separate irregular rice granules; neither porridge nor whole rice grains.",
        "key_negative_constraints": "No carrot, peas, raisins, moringa, groundnuts, meat, sauce, green garnish or yellow spice coloring; no full-length rice grains.",
        "do_not_confuse_with": [
          "Wheat couscous",
          "vegetable dambu shinkafa",
          "millet brabisko"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/brabisko.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "okoho-soup",
      "live_post_id": "recipe-ng-traditional-20261004-okoho-soup",
      "asset": {
        "relative_path": "assets/ai/okoho-soup.png",
        "sha256": "6585fbdb576b6984cb235e7735b1ff50389372eed5406c227a1ea446765314e6",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2267014,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T13:21:38.924525+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue reference image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of Okoho Soup, specifically the oil-free Idoma-inspired canonical home recipe described here. Depict a modest single serving in one plain off-white ceramic bowl on a neutral warm gray tabletop.\nDefining cooked soup: Light brown to grey-beige, slightly translucent, very glossy, flowing but VISCOUS drawing broth made from strained culinary okoho stem extract and beef stock. Its slippery mucilaginous character is visible as gentle cohesive glossy sheets and thick liquid clinging around the solids, not opaque cream or watery soup. Every stem fibre, bark fragment and stick has been removed; no plant material is visible.\nSolids: Several irregular boneless stewed BEEF CUBES, dark brown and tender with natural fibers; a few small distinct thoroughly DEBONED SMOKED-FISH PIECES, dark smoky outer flesh and gray-tan flaky inner texture, no head, spine, fin or bones; and distinct pale beige TEASPOON-SIZED EGUSI DUMPLINGS made of ground melon seed, ground crayfish and water. The small dumplings are rounded but irregular, about 1.5-2 cm, with gently granular meal texture, intact rather than crumbled throughout. The broth is clearly visible between these moderate numbers of solids. Ground okpehe and pounded chilli are incorporated subtly, not decorative toppings.\nExact visible formulation: Only okoho extract, beef, deboned smoked dried fish, small ground-egusi dumplings, ground crayfish, pounded Scotch bonnet, ground okpehe, salt and water. NO ADDED OIL and no oil slick; only natural broth gloss. No onions in this recipe.\nComposition: Three-quarter close overhead view with whole bowl and modest margin visible, soft diffuse natural daylight, restrained realistic food color and irregular home-cooked texture. One original illustration, not documentary evidence of an actual cooked dish.\nCritical exclusions: No green leaves or leafy puree, no spinach, ewedu or okra, no orange/red palm oil, no tomato, no bark, stem fibres or sticks, no whole fish or bony cuts, no raw meat, no giant yam/fufu dumplings or potato pieces, no eggs, cream, garnish, rice, pounded yam or other side. No utensils, extra dishes, scattered ingredients, people or hands. No text, caption, label, logo, watermark, border, collage or grid. One image only.",
        "source_recipe_reference_urls": [
          "https://articles.connectnigeria.com/recipe-for-the-idoma-delicacy-okoho-soup/",
          "https://trustradio.com.ng/en/okoho-soup-blend-of-tasty-idoma-cuisine-and-identity",
          "https://www.youtube.com/watch?v=PkroRh7rjZM"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-f53a87d5-8045-4620-a426-f66c5d86433c.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Final edited image visually inspected against full canonical recipe and visual specs. Glossy light-brown broth, irregular beef-like cubes, distinct flaky deboned smoked-fish-like pieces, and seven small granular rounded egusi-like dumplings. No visible greens, orange palm oil, stems, onions, tomatoes, okra or garnish.",
          "limitations": "Generated pixels permit only a visual compatibility check; actual draw behavior/viscosity, absolute dumpling size without scale reference, stem botanical identity, meat/fish species, hidden ingredients and kitchen-tested fidelity cannot be certified.",
          "independent_review": "Independent reviewer accepts v2 for limited appearance QA: dumplings now read as small spoon-formed balls, generally below beef-piece size rather than dominating mounds. Seven versus suggested eight to ten is immaterial because source recipe does not specify a plated count. Exact centimetres cannot be established without scale. Broth/proteins remain visually compatible; not proof of actual formulation."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue reference image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of Okoho Soup, specifically the oil-free Idoma-inspired canonical home recipe described here. Depict a modest single serving in one plain off-white ceramic bowl on a neutral warm gray tabletop.\nDefining cooked soup: Light brown to grey-beige, slightly translucent, very glossy, flowing but VISCOUS drawing broth made from strained culinary okoho stem extract and beef stock. Its slippery mucilaginous character is visible as gentle cohesive glossy sheets and thick liquid clinging around the solids, not opaque cream or watery soup. Every stem fibre, bark fragment and stick has been removed; no plant material is visible.\nSolids: Several irregular boneless stewed BEEF CUBES, dark brown and tender with natural fibers; a few small distinct thoroughly DEBONED SMOKED-FISH PIECES, dark smoky outer flesh and gray-tan flaky inner texture, no head, spine, fin or bones; and distinct pale beige TEASPOON-SIZED EGUSI DUMPLINGS made of ground melon seed, ground crayfish and water. The small dumplings are rounded but irregular, about 1.5-2 cm, with gently granular meal texture, intact rather than crumbled throughout. The broth is clearly visible between these moderate numbers of solids. Ground okpehe and pounded chilli are incorporated subtly, not decorative toppings.\nExact visible formulation: Only okoho extract, beef, deboned smoked dried fish, small ground-egusi dumplings, ground crayfish, pounded Scotch bonnet, ground okpehe, salt and water. NO ADDED OIL and no oil slick; only natural broth gloss. No onions in this recipe.\nComposition: Three-quarter close overhead view with whole bowl and modest margin visible, soft diffuse natural daylight, restrained realistic food color and irregular home-cooked texture. One original illustration, not documentary evidence of an actual cooked dish.\nCritical exclusions: No green leaves or leafy puree, no spinach, ewedu or okra, no orange/red palm oil, no tomato, no bark, stem fibres or sticks, no whole fish or bony cuts, no raw meat, no giant yam/fufu dumplings or potato pieces, no eggs, cream, garnish, rice, pounded yam or other side. No utensils, extra dishes, scattered ingredients, people or hands. No text, caption, label, logo, watermark, border, collage or grid. One image only.",
          "refinement_prompt": "Use case: precise-object-edit\nEdit target: The provided AI-generated Okoho Soup illustration.\nMake ONE narrowly targeted correction only: replace the four oversized pale beige egusi dumpling mounds with about eight to ten SMALL rounded irregular teaspoon-sized egusi dumplings. Each new dumpling must be about HALF the diameter of the current large dumplings and plainly smaller than the beef cubes. Preserve the natural granular ground-melon-seed texture, pale beige cooked color and glossy broth coating. Distribute them naturally through the same bowl with broth visible between them, using approximately the same overall dumpling-food area, rather than adding a huge quantity of dumplings. These are small seed-meal dumplings, not potato, bread, yam or fufu.\nPreserve everything else closely: the plain neutral bowl and table, framing and daylight, glossy light-brown slightly translucent thick/drawing broth, existing dark tender beef cubes, existing flaky deboned smoked-fish pieces, soup color and liquid level. No new ingredients, greens, oil slick, onion, garnish or props. No text, labels, logo, watermark, border or collage. Keep realistic cooked food texture. This remains an AI-generated recipe illustration, not a claim of an actual cooked photograph."
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": [
            {
              "pageURL": "https://commons.wikimedia.org/wiki/File:Okoho_and_Onihi.jpg",
              "source_file_url": "https://upload.wikimedia.org/wikipedia/commons/2/22/Okoho_and_Onihi.jpg",
              "creator": "Patrotic9gerian",
              "license": "CC BY-SA 4.0",
              "status": "pending_variant_review",
              "sha256": "8f2c2ad8be12050bb867306588198347451956e5d8a5156a2edb5fbdc54e4634",
              "exclusion_reason": null,
              "variant_caveats": [
                "Low-resolution documentary meal,480×288. Brown okoho soup at left visibly contains a bone-in leg/drumstick-shaped piece, unlike canonical cubed beef; pale onihi swallow at right is an accompaniment. Not a photo of our exact formulation."
              ]
            }
          ]
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of light-brown Okoho soup with beef cubes, deboned smoked fish pieces and rounded egusi dumplings.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Refined egusi dumplings now read as small spoon-formed granular balls, generally smaller than beef cubes, in a glossy light-brown broth with flaky deboned smoked fish. No visible palm oil, leaves, stems or bones. Actual centimetres and viscosity cannot be proven from a still image.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "6585fbdb576b6984cb235e7735b1ff50389372eed5406c227a1ea446765314e6",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of oil-free okoho-stem-extract draw soup with beef cubes, deboned smoked-fish pieces and distinct small egusi dumplings; all plant stem fibres have been removed.",
        "texture_and_color": "Light brown to grey-beige, glossy viscous broth with pale beige rounded egusi dumplings and darker meat; slightly translucent between solids.",
        "key_negative_constraints": "No green leafy puree, palm-oil orange slick, visible bark or sticks, okra, tomato chunks or large yam dumplings.",
        "do_not_confuse_with": [
          "Egusi soup with crumbled curds",
          "okra soup",
          "green ewedu"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/okoho-soup.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "beniseed-soup",
      "live_post_id": "recipe-ng-traditional-20261004-beniseed-soup",
      "asset": {
        "relative_path": "assets/photos/beniseed-soup.jpg",
        "sha256": "1d5ecfdede456af6fe77bc82d0806ef6d82260b3b071ba83055da664a99b165f",
        "width": 720,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 125046,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aderiqueza",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Beniseed_Soup.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/c/c2/Beniseed_Soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Beniseed_Soup.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Own work by named uploader; file-specific license read from current Wikimedia Commons HTML page on 2026-10-04",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/c/c2/Beniseed_Soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Three containers of sesame soup with greens and large meat or fish pieces",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Beniseed_Soup.jpg by Aderiqueza, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Containers of beniseed soup with greens and meat or fish",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Specific source identifies beniseed/sesame. Coarse seed texture, red oil and greens are visible; protein cuts differ from the written recipe.",
        "File description explicitly identifies sesame-seed soup; dish name is exact. Pixels not yet inspected. Small portrait original.",
        "Original download paused per upload server HTTP429 Retry-After; no attempt made during pause.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Three containers of sesame soup with greens and large meat or fish pieces",
        "Source identifies sesame/beniseed; coarser texture, oil color and assorted cuts differ from canonical neutral-oil beef-and-smoked-fish formulation. No visible basis to substitute its identity with another seed soup."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "1d5ecfdede456af6fe77bc82d0806ef6d82260b3b071ba83055da664a99b165f",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Three containers of coarse pale seed-thickened soup with greens, red oil and large dark meat or fish pieces."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of lightly toasted finely ground sesame soup with beef, deboned smoked fish, spinach and sliced sorrel in a tomato-pepper base cooked with neutral oil.",
        "texture_and_color": "Warm tan to light rust-brown, finely granular creamy seed body with green leaf pieces.",
        "key_negative_constraints": "No crabs, prawns, clams, shellfish, whole sesame garnish, pumpkin, thick palm-oil slick or large egusi curds.",
        "do_not_confuse_with": [
          "Peanut miyan gyada",
          "chunky egusi soup",
          "the seafood-only reference variant"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/beniseed-soup.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "kwadon-zogale",
      "live_post_id": "recipe-ng-traditional-20261004-kwadon-zogale",
      "asset": {
        "relative_path": "assets/photos/kwadon-zogale.jpg",
        "sha256": "31b941fb592cc05b05585e50ab05c40633384f607c2a461be287f10a3a5ace51",
        "width": 750,
        "height": 882,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 723088,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Saudarh2",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Kwadon_zogale.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/8/81/Kwadon_zogale.jpg",
        "source_file_name": "Kwadon_zogale.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0/",
        "license_verified": true,
        "source_claim": "Uploader identifies it as own work; license read on Wikimedia Commons file page or its indexed file-page content",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/8/81/Kwadon_zogale.jpg",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Close view of moringa-leaf salad with tomato/cucumber and groundnut-cake dressing on white plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Kwadon_zogale.jpg by Saudarh2, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Kwadon zogale leaf salad with vegetables and groundnut dressing",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Close view of moringa-leaf salad with tomato/cucumber and groundnut-cake dressing on white plate. Good subject match; some thick stems visible.",
        "Close view of moringa-leaf salad with tomato/cucumber and groundnut-cake dressing on white plate. Good subject match; some thick stems visible.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Several stems remain and leaves look less finely prepared; compatible named salad variant, not a soup. No claim of exact stem-removal method."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "31b941fb592cc05b05585e50ab05c40633384f607c2a461be287f10a3a5ace51",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Leaf-dense moringa-style salad with cucumber, tomato and tan groundnut-crumb dressing."
      },
      "visual_spec": {
        "visible_food_spec": "A drained moringa salad with tender cooked leaflets, diced tomato and cucumber, thin red onion and grated carrot, lightly bound by a crumbly kuli-kuli dressing.",
        "texture_and_color": "Predominantly muted dark green, with red tomato, pale-green cucumber, orange carrot and tan groundnut crumbs; moist but not soupy.",
        "key_negative_constraints": "No broth, beef, fish, boiled egg, whole lettuce leaves, mayonnaise or giant intact kuli-kuli pieces.",
        "do_not_confuse_with": [
          "Miyan zogale soup",
          "raw lettuce salad"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/kwadon-zogale.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "alkubus",
      "live_post_id": "recipe-ng-traditional-20261004-alkubus",
      "asset": {
        "relative_path": "assets/ai/alkubus.png",
        "sha256": "5f2cf1fb20ea9603493035931b1c75d385048b96851527b11a103c4563393bad",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2313711,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen tool",
        "model": "Not reported by generator",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: AI-generated illustrative recipe image for a Nigerian recipe collection; this is a visual illustration, not evidence of a cooked or tested recipe. Subject: Hausa-associated Alkubus, soft yeast-raised wheat bread STEAMED in individual lightly oiled small moulds. Show five small unmoulded steamed bread portions on a plain off-white ceramic plate, each a squat subtly tapering cylinder with a softly rounded top, about the size of a small ramekin. One portion at the front is torn open to reveal the soft aerated yeast-bread crumb. Recipe uses 300 g plain wheat flour and 100 g whole-wheat flour with yeast, a little sugar, salt and water. Essential texture/color: pale cream to light beige bread with subtle whole-wheat bran flecks, soft matte moist outer skin and gentle pores, NO browned crust. The torn bread interior is tender, airy and slightly irregular, not a dense rubbery rice cake. Scene: plate alone on a neutral light stone tabletop. Style: realistic editorial food illustration, soft natural window light and believable food texture. Composition: square image, three-quarter overhead close view, entire plate in frame with clear view of unmoulded shape and interior crumb. Constraints: STEAMED wheat bread, never fried or baked bread; no browning, no doughnut holes, no fillings, no icing, no raw flour coating, no sauce, soup, stew, side dish, herb garnish, cutlery, napkin, hands, text, logos, watermarks, collage or inset. Generate exactly one image.",
        "source_recipe_reference_urls": [
          "https://cookpad.com/eng/recipes/25723568",
          "https://afrifoodnetwork.com/recipes/main-course-recipes/alkubus-recipe/",
          "https://www.youtube.com/watch?v=cGhJCd6mLk4"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-40597631-9660-4a1d-a1eb-d99f81b72bf0.png",
        "source_visual_review": {
          "status": "passed independent appearance review",
          "method": "Inspected full generated pixels in tool output",
          "notes": "Pale beige individually moulded steamed wheat bread, bran flecks, moist unbrowned skin; front portion opened to reveal airy yeast crumb. No fried crust, garnish, sauce or filling. Four portions are shown, with one torn into halves.",
          "unresolved_caveats": [],
          "independent_reviewer": "prepare_recipe_image_specs"
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: AI-generated illustrative recipe image for a Nigerian recipe collection; this is a visual illustration, not evidence of a cooked or tested recipe. Subject: Hausa-associated Alkubus, soft yeast-raised wheat bread STEAMED in individual lightly oiled small moulds. Show five small unmoulded steamed bread portions on a plain off-white ceramic plate, each a squat subtly tapering cylinder with a softly rounded top, about the size of a small ramekin. One portion at the front is torn open to reveal the soft aerated yeast-bread crumb. Recipe uses 300 g plain wheat flour and 100 g whole-wheat flour with yeast, a little sugar, salt and water. Essential texture/color: pale cream to light beige bread with subtle whole-wheat bran flecks, soft matte moist outer skin and gentle pores, NO browned crust. The torn bread interior is tender, airy and slightly irregular, not a dense rubbery rice cake. Scene: plate alone on a neutral light stone tabletop. Style: realistic editorial food illustration, soft natural window light and believable food texture. Composition: square image, three-quarter overhead close view, entire plate in frame with clear view of unmoulded shape and interior crumb. Constraints: STEAMED wheat bread, never fried or baked bread; no browning, no doughnut holes, no fillings, no icing, no raw flour coating, no sauce, soup, stew, side dish, herb garnish, cutlery, napkin, hands, text, logos, watermarks, collage or inset. Generate exactly one image.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No verifiable openly licensed exact-dish photograph found in Commons/public searches. Generic steamed buns are not a substitute.",
            "Wikibooks Alkubus article has a misleading illustrative photo: 10 Steamed Bread - Congee Village House.jpg, a different Chinese-style steamed-bread image. Rejected as a culturally/culinarily mismatched substitute."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration: Pale steamed alkubus breads with a soft wheat crumb",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Cup-shaped pale steamed whole-wheat-flecked breads with porous exposed crumb and no browned crust.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "5f2cf1fb20ea9603493035931b1c75d385048b96851527b11a103c4563393bad",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "Small unmoulded steamed wheat-and-whole-wheat breads from plain round cups; show one torn open to reveal a soft aerated crumb.",
        "texture_and_color": "Pale cream-beige with subtle whole-wheat speckles, a moist unbrowned surface and porous bread interior.",
        "key_negative_constraints": "No browned crust, icing, raisins, carrots, onion topping, fillings or sauce; no green leaf wrapper.",
        "do_not_confuse_with": [
          "Baked dinner rolls",
          "rice masa",
          "steamed bean moi moi"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/alkubus.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "dambu-nama",
      "live_post_id": "recipe-ng-traditional-20261004-dambu-nama",
      "asset": {
        "relative_path": "assets/ai/dambu-nama.png",
        "sha256": "b3057c21ef7d26758e98c4d213f97a2b806d576a7d1447f5345f17a2a6607ff6",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2698795,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen tool",
        "model": "Not reported by generator",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: AI-generated illustrative recipe image for a Nigerian recipe collection; this is a visual illustration, not evidence of a cooked or tested recipe. Subject: Dambu Nama, northern Nigerian Hausa/Fulani-style beef floss. A single shallow off-white ceramic bowl contains a generous loose mound of very finely shredded cooked lean beef. The beef was simmered until tender with onion, garlic, ginger and salt, pounded and separated into fine fibres, coated with peanut-based yaji suya spice and a little cayenne, then slowly pan-fried in groundnut oil until lightly browned and loose. Essential close-up texture: irregular tangled wispy meat fibres and thin short strands, airy fluffy shredded beef floss, dry-looking lightly crisp edges, natural medium warm brown to reddish-brown color from seasoning, some fine spice granules, no sauce or liquid. It must be unmistakably fibrous shredded MEAT, not rice, couscous, noodles, cereal, minced-meat pellets, long strips of jerky or chunks of steak. Scene: bowl alone on a neutral light stone tabletop. Style: realistic editorial food illustration with soft natural window light, restrained appetizing color and convincing fine fibre detail. Composition: square close-up, three-quarter overhead view, bowl contained within the frame, food dominates. Constraints: no whole peanuts, raw onions, peppers, herb garnish, vegetables, rice, side dishes, sauces, cutlery, napkin, hands, text, logo, watermark, collage or inset. Generate exactly one image.",
        "source_recipe_reference_urls": [
          "https://www.afrolems.com/2014/05/27/dambu-nama/",
          "https://www.youtube.com/watch?v=_9VI82CsPqE",
          "https://agriculture.gov.ng/wp-content/uploads/2024/06/ANRIN-PROCESSING-MANUAL-Corrected_0332571.pdf",
          "https://www.foodsafety.gov/food-safety-charts/cold-food-storage-charts"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-70fdc29b-54e6-487f-977f-96d8ebed52d1.png",
        "source_visual_review": {
          "status": "passed independent appearance review after targeted refinement",
          "method": "Inspected full generated pixels in tool output",
          "notes": "Fine short dry rust-brown beef floss and small airy fibrous clumps now dominate, replacing broad pulled-beef ribbons. No sauce or extraneous ingredients. Bowl, lighting and neutral composition preserved.",
          "unresolved_caveats": [],
          "independent_reviewer": "prepare_recipe_image_specs",
          "independent_review_note": "Predominantly fine dry short floss fibres, airy loose pile, no broad meat ribbons or added garnish. Use revised asset; old asset superseded."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: AI-generated illustrative recipe image for a Nigerian recipe collection; this is a visual illustration, not evidence of a cooked or tested recipe. Subject: Dambu Nama, northern Nigerian Hausa/Fulani-style beef floss. A single shallow off-white ceramic bowl contains a generous loose mound of very finely shredded cooked lean beef. The beef was simmered until tender with onion, garlic, ginger and salt, pounded and separated into fine fibres, coated with peanut-based yaji suya spice and a little cayenne, then slowly pan-fried in groundnut oil until lightly browned and loose. Essential close-up texture: irregular tangled wispy meat fibres and thin short strands, airy fluffy shredded beef floss, dry-looking lightly crisp edges, natural medium warm brown to reddish-brown color from seasoning, some fine spice granules, no sauce or liquid. It must be unmistakably fibrous shredded MEAT, not rice, couscous, noodles, cereal, minced-meat pellets, long strips of jerky or chunks of steak. Scene: bowl alone on a neutral light stone tabletop. Style: realistic editorial food illustration with soft natural window light, restrained appetizing color and convincing fine fibre detail. Composition: square close-up, three-quarter overhead view, bowl contained within the frame, food dominates. Constraints: no whole peanuts, raw onions, peppers, herb garnish, vegetables, rice, side dishes, sauces, cutlery, napkin, hands, text, logo, watermark, collage or inset. Generate exactly one image.",
          "refinement_prompt": "Use case: precise-object-edit. Edit only the texture and strand size of the dambu nama beef in the referenced image. Keep the same northern Nigerian dish identity, bowl, neutral tabletop, camera framing, natural lighting, warm brown/rust seasoning colors, and absence of any other foods. The current image has far too many broad pulled-beef ribbons. Replace ALL those big flat strips and thick bundles with an airy loose mound of very fine, short, completely separated cooked BEEF FLOSS fibres, as if the tender cooked beef was thoroughly pounded and teased apart before frying. Hundreds of hair-fine irregular meat fibres and wisps should dominate the surface, mixed with tiny soft fluffy fibrous clumps; little dry granular yaji spice clings to fibres. Very dry-looking and lightly crisp, fluffy and delicate; no wet sauce, no thick or long meat strips, no ribbon-like shredded beef, no chunks, no cubes, no jerky. It should resemble genuine fine northern Nigerian dambun nama meat floss, NOT pulled beef. Preserve its meat identity: not noodles, vermicelli, cereal, rice, powder, moss, hair or cotton candy. Keep all other visual elements unchanged. No garnish, extra ingredients, sides, whole peanuts, onions, herbs, text, logos, watermark or collage. This is an AI-generated illustrative recipe image, not a photograph of a tested recipe. Produce one edited image."
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No verifiable openly licensed beef-floss photograph found. Academic paper uses noncommercial/no-derivatives license and different meats; commercial recipe photographs lack verified open grants."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration: Loose fine strands of seasoned dambu nama beef",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Refined output is dominated by fine dry short floss fibres with no broad pulled-meat ribbons, wet sauce or added garnish.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "b3057c21ef7d26758e98c4d213f97a2b806d576a7d1447f5345f17a2a6607ff6",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A loose pile of finely pounded and separated cooked beef fibres, lightly pan-fried with yaji and a small amount of oil.",
        "texture_and_color": "Rusty brown to golden brown, dry-looking airy fine fibres with subtle spice granules, not wet sauce.",
        "key_negative_constraints": "No cubes, thick strips, skewers, visible vegetables, sugary glaze, sesame or long unshredded meat pieces.",
        "do_not_confuse_with": [
          "Chunky asun",
          "jerky strips",
          "minced beef"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/dambu-nama.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "amala-isu",
      "live_post_id": "recipe-ng-traditional-20261004-amala-isu",
      "asset": {
        "relative_path": "assets/photos/amala-isu.png",
        "sha256": "612377ee6b5df4017aaa0448d4a54571eeea69b50d8f6da618ef88f5bbbc1ff6",
        "width": 543,
        "height": 415,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGBA",
        "frame_count": 1,
        "byte_size": 550773,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Jostbrain",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Amala_ati_Ewedu_and_Ogunfe.png",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Amala_ati_Ewedu_and_Ogunfe.png?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Amala_ati_Ewedu_and_Ogunfe.png",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Amala_ati_Ewedu_and_Ogunfe.png?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Grey-brown yam amala partly covered with ewedu and red pepper stew",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Amala_ati_Ewedu_and_Ogunfe.png by Jostbrain, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Amala served with red stew and green soup",
      "caveats": [
        "Photograph includes amala, ewedu and goat-meat accompaniment; dark yam amala identity must be checked visually.",
        "Meal includes ewedu and meat stew; dark yam-flour swallow is visible at the plate edge. Companion soups are not included in the swallow recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Grey-brown yam amala partly covered with ewedu and red pepper stew",
        "Amala is only partly exposed and appears relatively pale under the photo lighting; named source identity supports it, but multiple accompaniments must remain in caption."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "612377ee6b5df4017aaa0448d4a54571eeea69b50d8f6da618ef88f5bbbc1ff6",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Grey-brown smooth swallow portions around a serving of red stew and green soup on a metal plate."
      },
      "visual_spec": {
        "visible_food_spec": "A soft smooth mound of yam-flour amala, shaped with a wet spoon and carrying broad folding marks.",
        "texture_and_color": "Uniform medium-to-dark brown with a moist satin surface and dense cohesive body.",
        "key_negative_constraints": "No white dough, loose flour, grainy rice, jelly translucency, soup poured on top or garnish.",
        "do_not_confuse_with": [
          "White pounded yam",
          "pale cassava fufu",
          "light amala lafun"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/amala-isu.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ewedu",
      "live_post_id": "recipe-ng-traditional-20261004-ewedu",
      "asset": {
        "relative_path": "assets/photos/ewedu.jpg",
        "sha256": "c76643b7a841907d43fc6550488f0a1e8152649810a26b6ee1a654ba34fc2a34",
        "width": 1280,
        "height": 576,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 61107,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Mayejiro",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Ewedu_soup_with_swallow.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/d/db/Ewedu_soup_with_swallow.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ewedu_soup_with_swallow.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/d/db/Ewedu_soup_with_swallow.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Dark green ewedu soup with meat, served beside two pale swallow portions",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ewedu_soup_with_swallow.jpg by Mayejiro, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ewedu with a stew topping and pale swallow portions",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Soup is source-identified ewedu; small low-contrast image includes meat/stew and a separate white swallow, unlike a plain bowl of this recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Dark green ewedu soup with meat, served beside two pale swallow portions",
        "Ewedu is low-contrast and a minority of the wide image; cannot call this an isolated plain ewedu preparation. Companion food and bottle dominate composition."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "c76643b7a841907d43fc6550488f0a1e8152649810a26b6ee1a654ba34fc2a34",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Small dark-green soup portion with a red-orange meat or stew topping, beside two pale swallow portions on a tray."
      },
      "visual_spec": {
        "visible_food_spec": "A small shallow bowl of finely broken-down cooked jute-leaf soup with tiny retained leaf fragments and a few iru pieces.",
        "texture_and_color": "Muted leafy green, glossy mucilaginous body with small leafy flecks; loose enough to ladle.",
        "key_negative_constraints": "No meat, fish chunks, okra slices, large leaf strips, tomato-red sauce, cream or egusi curds; no amala in frame.",
        "do_not_confuse_with": [
          "Fine-powder brown-green miyan kuka",
          "chunky leafy efo riro"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ewedu.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "gbegiri",
      "live_post_id": "recipe-ng-traditional-20261004-gbegiri",
      "asset": {
        "relative_path": "assets/photos/gbegiri.jpg",
        "sha256": "5576b9ae724be2ecb1d9ba86e793595318e30d063a4603c48c2acaef5f4768e1",
        "width": 3072,
        "height": 4080,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2193314,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Bamjos",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Gb%C3%A8g%C3%ACr%C3%AC_soup.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Gb%C3%A8g%C3%ACr%C3%AC_soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Gbègìrì_soup.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work (per the Gbègìrì soup.jpg Commons file page)",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/4/4f/Gb%C3%A8g%C3%ACr%C3%AC_soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Smooth yellow gbegiri bean soup with red pepper stew and a meat piece in a white plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Gbègìrì_soup.jpg by Bamjos, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Smooth golden gbegiri with a red stew and meat topping",
      "caveats": [
        "Smooth yellow bean soup served with pepper stew and a meat piece; no amala shown.",
        "Smooth bean-soup texture matches recipe form. Red stew and meat are serving additions; flash lighting produces strong highlights.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Correct smooth bean-puree form now visible. Red stew/meat are accompaniments and direct flash washes out some detail; do not caption as plain soup only."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "5576b9ae724be2ecb1d9ba86e793595318e30d063a4603c48c2acaef5f4768e1",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Larger individual inspection: a broad pool of smooth golden-yellow soup with red stew and a single meat piece in the centre."
      },
      "visual_spec": {
        "visible_food_spec": "A small bowl of peeled-bean puree soup, smoothly blended and tinted by red palm oil and ground pepper.",
        "texture_and_color": "Warm yellow-orange to ochre, smooth pourable consistency without intact beans.",
        "key_negative_constraints": "No whole beans, beef, fish chunks, leafy greens, black sauce topping, cream swirl or croutons.",
        "do_not_confuse_with": [
          "Thick ewa agoyin mash with dark topping",
          "pumpkin soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/gbegiri.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "efo-riro",
      "live_post_id": "recipe-ng-demo-20261001-chidi-efo-riro",
      "asset": {
        "relative_path": "assets/photos/efo-riro.jpg",
        "sha256": "f19c0f6700384696756bf0d6a1184bf84c5bfba9eafe37c65281d3678b79a18a",
        "width": 1080,
        "height": 810,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 138290,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Bukky658",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Efo_riro.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/6/6a/Efo_riro.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Efo_riro.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/6/6a/Efo_riro.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Leafy efo riro with fish pieces in a white bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Efo_riro.jpg by Bukky658, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Efo riro leafy stew with meat or fish",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Visible leafy stew and fish match dish identity; greens and proteins in this documentary photo may differ from the written recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Leafy efo riro with fish pieces in a white bowl",
        "More leaves and visible stems, with less obvious red pepper base than the canonical version; recognizably source-identified leafy stew, no clear off-dish form."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "f19c0f6700384696756bf0d6a1184bf84c5bfba9eafe37c65281d3678b79a18a",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Dense chopped green vegetable stew with small brown meat or fish pieces and orange-red oil glints, on a plate."
      },
      "visual_spec": {
        "visible_food_spec": "A rich, reduced vegetable stew with chopped cooked shoko leaves, beef cubes and deboned smoked-mackerel pieces in coarse red-pepper and onion sauce.",
        "texture_and_color": "Dense dark-green leaf folds contrasting with deep red-orange pepper base and small oil pools; moist but not brothy.",
        "key_negative_constraints": "No tomatoes or tomato chunks, whole fish, shell-on seafood, egusi curds, cream, carrots or excessive broth.",
        "do_not_confuse_with": [
          "Edikang ikong without red-pepper base",
          "watery spinach soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/efo-riro.jpg",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "ofada-rice-ayamase",
      "live_post_id": "recipe-ng-traditional-20261004-ofada-rice-ayamase",
      "asset": {
        "relative_path": "assets/ai/ofada-rice-ayamase.png",
        "sha256": "3afb375959b9c60a39b25a0651a6dbbb20a207ca42dab9ae41a1538ee8539561",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2558990,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T13:04:49.746711+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of a complete serving of Ofada Rice with Ayamase, specifically this home recipe with UNBLEACHED RED PALM OIL and boneless stewing BEEF. Show both the cooked rice and its sauce side-by-side in one simple off-white shallow ceramic plate.\nRice: A modest mound of tender but separate cream-to-light-tan Ofada rice grains, irregular local rice with subtle grain variation, plainly boiled and drained, not orange jollof rice or white elongated basmati. No additions or garnishes on the rice.\nAyamase: Beside the rice, a generous portion of concentrated, coarsely blended cooked GREEN bell pepper, green Scotch bonnet, softened onion and iru sauce, with small irregular 2 cm tender browned beef cubes. The green peppers are slowly fried until their color is MUTED OLIVE-BROWN, never neon or bright emerald. The UNBLEACHED red palm oil gives a distinct warm orange-red oily tint and a light oil separation around the olive-brown chunky sauce. Preserve the coarse pepper body and modest oil sheen, not a smooth tomato sauce. The sauce touches the edge of the rice but leaves most grains plainly visible. Small iru flecks are naturally mixed in, not sprinkled decoratively.\nRecipe-specific constraints: Only Ofada rice, beef, green peppers, green chillies, onion, red palm oil, iru, water and salt are visible. OMIT the optional eggs entirely. No fish, offal, tripe, ponmo, mixed assorted meats, tomato or red bell-pepper chunks, standard bright red tomato stew, cream, salad, plantain, herbs, garnish, raw pepper rings, or unlisted accompaniment. No bleached or colorless oil appearance. No banana-leaf liner or props.\nScene and framing: One complete serving in one plain neutral plate, centered with full vessel and modest margin visible on a neutral warm gray tabletop, three-quarter close overhead view, soft diffuse natural daylight, realistic cooked textures and accurate restrained food colors.\nNo utensils, extra dishes, scattered ingredients, hands or people. No text, caption, logo, watermark, border, collage or grid. One original illustration only, not documentary evidence of an actual photographed or kitchen-tested dish.",
        "source_recipe_reference_urls": [
          "https://9jafoodie.com/ayamase-ofada-stewsauce/",
          "https://www.allnigerianrecipes.com/stews/ofada-stew/",
          "https://www.allnigerianrecipes.com/v/ofada-rice/",
          "https://nico.gov.ng/cuisines-in-nigeria/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-f7cce54c-9433-499e-994b-7b9630720510.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels against complete canonical recipe and visual specs. Separate pale cream/tan rice grains are served beside a coarse olive-brown pepper-and-onion sauce with browned meat cubes and visible orange-red oil separation, compatible with the unbleached-palm-oil home formulation. No visible egg, fish, offal, tomato, salad, plantain or garnish. Both rice and stew are included, rather than a sauce-only image.",
          "limitations": "Generated pixels permit only a visual compatibility check; rice cultivar, meat species, precise pepper composition, iru, oil processing, flavor and kitchen-tested fidelity cannot be certified.",
          "independent_review": "Independent reviewer passed a limited visual check: complete rice-and-sauce composition, cream/tan separate rice, coarse olive-brown green-pepper sauce with orange palm-oil sheen and beef-like cubes. No obvious fish, offal, egg or unlisted garnish. Appearance suitability only, not proof of rice cultivar, meat species or oil processing."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of a complete serving of Ofada Rice with Ayamase, specifically this home recipe with UNBLEACHED RED PALM OIL and boneless stewing BEEF. Show both the cooked rice and its sauce side-by-side in one simple off-white shallow ceramic plate.\nRice: A modest mound of tender but separate cream-to-light-tan Ofada rice grains, irregular local rice with subtle grain variation, plainly boiled and drained, not orange jollof rice or white elongated basmati. No additions or garnishes on the rice.\nAyamase: Beside the rice, a generous portion of concentrated, coarsely blended cooked GREEN bell pepper, green Scotch bonnet, softened onion and iru sauce, with small irregular 2 cm tender browned beef cubes. The green peppers are slowly fried until their color is MUTED OLIVE-BROWN, never neon or bright emerald. The UNBLEACHED red palm oil gives a distinct warm orange-red oily tint and a light oil separation around the olive-brown chunky sauce. Preserve the coarse pepper body and modest oil sheen, not a smooth tomato sauce. The sauce touches the edge of the rice but leaves most grains plainly visible. Small iru flecks are naturally mixed in, not sprinkled decoratively.\nRecipe-specific constraints: Only Ofada rice, beef, green peppers, green chillies, onion, red palm oil, iru, water and salt are visible. OMIT the optional eggs entirely. No fish, offal, tripe, ponmo, mixed assorted meats, tomato or red bell-pepper chunks, standard bright red tomato stew, cream, salad, plantain, herbs, garnish, raw pepper rings, or unlisted accompaniment. No bleached or colorless oil appearance. No banana-leaf liner or props.\nScene and framing: One complete serving in one plain neutral plate, centered with full vessel and modest margin visible on a neutral warm gray tabletop, three-quarter close overhead view, soft diffuse natural daylight, realistic cooked textures and accurate restrained food colors.\nNo utensils, extra dishes, scattered ingredients, hands or people. No text, caption, logo, watermark, border, collage or grid. One original illustration only, not documentary evidence of an actual photographed or kitchen-tested dish.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": [
            {
              "pageURL": "https://commons.wikimedia.org/wiki/File:Ofada_Stew_(Ayamase_stew).jpg",
              "source_file_url": "https://upload.wikimedia.org/wikipedia/commons/4/49/Ofada_Stew_%28Ayamase_stew%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
              "creator": "Aderiqueza",
              "license": "CC BY-SA 4.0",
              "status": "rejected_as_complete_recipe_image",
              "sha256": "f5d5f1dcf45d8e892aa832ccc548803d61de8fc94e3c6321e8360cd5a3790dbd",
              "exclusion_reason": null,
              "variant_caveats": [
                "Photo shows the ayamase component only; rice is absent. Dark red-brown oil-rich sauce and assorted protein differ from the written home version; do not label as complete rice serving."
              ]
            }
          ]
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of pale Ofada rice beside olive-brown green-pepper beef ayamase with an orange-red unbleached palm-oil tint.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "AI illustration passed an independent limited visible-formulation check; this does not prove actual cooking, hidden ingredients or the oil-processing method."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "3afb375959b9c60a39b25a0651a6dbbb20a207ca42dab9ae41a1538ee8539561",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "Tender separate Ofada rice grains served beside chunky green-pepper and beef sauce made with unbleached red palm oil; include no optional egg.",
        "texture_and_color": "Cream-to-light-tan rice; concentrated olive-brown pepper sauce with visible orange-red oil tint and small beef cubes.",
        "key_negative_constraints": "No bleaching-white oil, neon green sauce, tomato chunks, assorted offal, tripe, ponmo, boiled egg, plantain or salad.",
        "do_not_confuse_with": [
          "Classic bleached-palm-oil ayamase",
          "red tomato stew",
          "jollof rice"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/ofada-rice-ayamase.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "asaro",
      "live_post_id": "recipe-ng-demo-20261001-sade-asaro",
      "asset": {
        "relative_path": "assets/photos/asaro.jpg",
        "sha256": "0f601a40a770e3924456c52801ebc4509ef1e84308085ef11d9ae3bc0b56c3bd",
        "width": 3024,
        "height": 4032,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1300867,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Oyebolaesther",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Asaro_(_Yam_Porridge).jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/7/74/Asaro_%28_Yam_Porridge%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Asaro_(_Yam_Porridge).jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/7/74/Asaro_%28_Yam_Porridge%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Orange-red yam porridge with yam chunks, peppers, onion and protein on a white plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Asaro_(_Yam_Porridge).jpg by Oyebolaesther, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Asaro yam pottage with onion and pepper pieces",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Named asaro photograph, consistent soft chunky yam texture. Garnishes and protein pieces differ from exact recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Orange-red yam porridge with yam chunks, peppers, onion and protein on a white plate",
        "Visible pepper strips differ from canonical blended pepper base; compatible named pottage variation. No cubed-water-yam versus grated-dumpling confusion."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "0f601a40a770e3924456c52801ebc4509ef1e84308085ef11d9ae3bc0b56c3bd",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Orange yam pottage with soft irregular yam chunks and mash, onion slivers and visible red and green pepper pieces."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of thick yam pottage with recognizable soft white-yam cubes partly mashed into the pepper-and-palm-oil sauce, with small smoked-mackerel flakes; omit optional greens.",
        "texture_and_color": "Orange-red to warm orange, creamy mashed-yam body with irregular intact cubes and fish flakes.",
        "key_negative_constraints": "No uniform dumplings, sweet potato, whole fish, large meat pieces, spinach garnish or watery broth.",
        "do_not_confuse_with": [
          "Ikokore grated water-yam dumplings",
          "sweet-potato stew"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/asaro.jpg",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "ewa-agoyin",
      "live_post_id": "recipe-ng-traditional-20261004-ewa-agoyin",
      "asset": {
        "relative_path": "assets/ai/ewa-agoyin.png",
        "sha256": "0e7005cad9d10aa6d602bd1cacd03d45c44d213a13c46afa7420d0e67d29eef5",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2428770,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Ewa Agoyin, showing only this exact cooked formulation: a generous mound of thoroughly mashed honey beans in one plain neutral off-white shallow ceramic bowl, with a small spoonful of concentrated dark red-brown slow-fried dried-pepper and onion sauce on top. The beans were simmered until extremely soft then thoroughly mashed with a little cooking liquid. They must visibly be pale tan creamy coarse bean mash: moist, loose, soft, with uneven mashed texture and occasional tiny soft skin fragments, but no visible intact whole beans and no round bean field. The bean mash dominates roughly 80 percent of the food surface so its identity is unmistakable. The modest sauce topping is deeply cooked coarse dried red-pepper paste and deep golden-brown caramelized finely sliced onion, dark reddish brown rather than burnt black, with a small visible sheen of separated red palm oil. It is a small amount atop the mash, not a pool covering the whole bowl. No tomato, no raw pepper or onion, no fresh salsa, fish, meat, skin, eggs, plantain, bread, rice, greens, garnish or whole crayfish. This is not ordinary whole-bean pottage or watery smooth gbegiri soup. Landscape 4:3, close three-quarter overhead view, complete bowl visible with modest margin, warm plain neutral tabletop, soft natural side daylight, realistic ordinary cooked texture. No people, utensils, extra dishes, styling props, text, logos, borders or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://cheflolaskitchen.com/ewa-agoyin/",
          "https://www.allnigerianrecipes.com/beans/ewa-agoyin/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-ba319cbc-92fe-4a6a-8048-a4ebd24671be.png",
        "source_visual_review": "PASS as illustrative fallback: creamy pale tan coarse thoroughly mashed beans form the dominant visible portion, topped with dark red-brown slow-fried pepper-and-onion sauce and reddish palm-oil sheen. No mostly intact beans, watery soup, fish, meat, cow skin, plantain, bread, eggs, tomato salsa or fresh garnish.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Ewa Agoyin, showing only this exact cooked formulation: a generous mound of thoroughly mashed honey beans in one plain neutral off-white shallow ceramic bowl, with a small spoonful of concentrated dark red-brown slow-fried dried-pepper and onion sauce on top. The beans were simmered until extremely soft then thoroughly mashed with a little cooking liquid. They must visibly be pale tan creamy coarse bean mash: moist, loose, soft, with uneven mashed texture and occasional tiny soft skin fragments, but no visible intact whole beans and no round bean field. The bean mash dominates roughly 80 percent of the food surface so its identity is unmistakable. The modest sauce topping is deeply cooked coarse dried red-pepper paste and deep golden-brown caramelized finely sliced onion, dark reddish brown rather than burnt black, with a small visible sheen of separated red palm oil. It is a small amount atop the mash, not a pool covering the whole bowl. No tomato, no raw pepper or onion, no fresh salsa, fish, meat, skin, eggs, plantain, bread, rice, greens, garnish or whole crayfish. This is not ordinary whole-bean pottage or watery smooth gbegiri soup. Landscape 4:3, close three-quarter overhead view, complete bowl visible with modest margin, warm plain neutral tabletop, soft natural side daylight, realistic ordinary cooked texture. No people, utensils, extra dishes, styling props, text, logos, borders or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact plant species, hidden ingredients, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": [
            {
              "pageURL": "https://commons.wikimedia.org/wiki/File:Ewa_Aganyin.jpg",
              "source_file_url": "https://upload.wikimedia.org/wikipedia/commons/0/07/Ewa_Aganyin.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
              "creator": "Aderiqueza",
              "license": "CC BY-SA 4.0",
              "status": "rejected_candidate_seek_alternative",
              "sha256": "22202ee73889ad0b37a92bc60dccacca740fde9c97c35776ecaf659cf111a1a6",
              "exclusion_reason": "Current photo shows whole beans and large cow-skin pieces. Recipe calls for mashed beans; seek a better named-dish photo.",
              "variant_caveats": [
                "Current photo shows whole beans and large cow-skin pieces. Recipe calls for mashed beans; seek a better named-dish photo."
              ]
            }
          ]
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of creamy mashed ewa agoyin beans with dark fried pepper-and-onion sauce",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Moist pale-tan coarsely mashed beans dominate beneath concentrated dark red-brown fried pepper/onion topping and reddish oil; no whole-bean substitute or fish, plantain, meat or other added side.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "0e7005cad9d10aa6d602bd1cacd03d45c44d213a13c46afa7420d0e67d29eef5",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A mound of very soft thoroughly mashed honey beans with a small spoonful of deeply fried onion-and-dried-pepper sauce on top.",
        "texture_and_color": "Pale tan creamy coarse bean mash beneath concentrated dark red-brown sauce and reddish palm oil.",
        "key_negative_constraints": "No mostly intact firm beans, watery yellow soup, fresh tomato salsa, eggs, bread, plantain or meat.",
        "do_not_confuse_with": [
          "Gbegiri smooth orange soup",
          "ordinary whole-bean pottage"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/ewa-agoyin.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "moi-moi",
      "live_post_id": "recipe-ng-demo-20261001-emeka-moi-moi",
      "asset": {
        "relative_path": "assets/photos/moi-moi.webp",
        "sha256": "1de502990c5ad39d1e098fc12da09a884c80756590dcee312ef4552179ccbf3d",
        "width": 809,
        "height": 1080,
        "mime_type": "image/webp",
        "image_format": "WEBP",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 93138,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "MOIBARDE",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Moi-moi_with_stew.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/2/2e/Moi-moi_with_stew.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Moi-moi_with_stew.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/demo/moi-moi.webp",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized proportionally to 809x1080 pixels; converted to WebP at quality 87; no cropping or content edits.",
        "modifications": "Prior source/site changes: Resized proportionally to 809x1080 pixels; converted to WebP at quality 87; no cropping or content edits. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Yellow-orange moi-moi portions with a visible egg center and red stew on a plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Moi-moi_with_stew.jpg by MOIBARDE, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Egg-filled moi moi served with a separate red stew",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Egg-filled moi-moi is a serving variant; adjacent red stew is not part of the pudding recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Yellow-orange moi-moi portions with a visible egg center and red stew on a plate",
        "Pudding shape differs from cup-steamed canonical recipe and separate stew is not part of it; the egg-filled moi moi is clear and prominent."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "1de502990c5ad39d1e098fc12da09a884c80756590dcee312ef4552179ccbf3d",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Orange-tan steamed bean pudding parcels, one cut showing white boiled egg, beside a large red fish/meat stew portion."
      },
      "visual_spec": {
        "visible_food_spec": "Unmoulded steamed bean puddings made with red pepper and onion; cut one to show its required half-boiled-egg filling.",
        "texture_and_color": "Soft pale orange to terracotta-tan, moist fine-grained set bean texture with white-and-yellow cooked egg inside.",
        "key_negative_constraints": "No leaf wrapping, whole fish, corned beef, sausage, sweetcorn kernels, browned crust or exterior egg garnish.",
        "do_not_confuse_with": [
          "Plain white ekuru",
          "yellow Bambara okpa",
          "fresh-corn abari"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/moi-moi.webp",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "akara",
      "live_post_id": "recipe-ng-demo-20261001-ife-akara",
      "asset": {
        "relative_path": "assets/photos/akara.jpg",
        "sha256": "b2d35888c4dd8c2af7893d9c236d39d048303da0efabc23b5b3018ea4e10e049",
        "width": 732,
        "height": 488,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 75625,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "AkinkuotuFunmi",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Beans_Ball-Akara.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/b/bb/Beans_Ball-Akara.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Beans_Ball-Akara.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/b/bb/Beans_Ball-Akara.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Golden irregular bean fritters on a plate, matching akara; original source visually inspected.",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Beans_Ball-Akara.jpg by AkinkuotuFunmi, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Golden akara bean fritters",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Named akara photograph; shows plain fritters, not a kitchen test of the written recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Golden irregular bean fritters on a plate, matching akara; original source visually inspected.",
        "No consequential visible mismatch; bean versus yam content relies partly on source identity."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "b2d35888c4dd8c2af7893d9c236d39d048303da0efabc23b5b3018ea4e10e049",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Golden-orange rounded and slightly flattened craggy fried bean fritters, with no side foods."
      },
      "visual_spec": {
        "visible_food_spec": "A small group of irregular rounded deep-fried dehulled-bean fritters, one broken to show the pale aerated centre and tiny onion or chilli flecks.",
        "texture_and_color": "Golden-brown crisp craggy exterior, creamy-white airy set interior.",
        "key_negative_constraints": "No syrup, powdered sugar, sauce, flour-dough stretch, boiled egg or perfectly identical spheres.",
        "do_not_confuse_with": [
          "Smooth puff puff wheat dough balls",
          "grated-water-yam ojojo"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/akara.jpg",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "ikokore",
      "live_post_id": "recipe-ng-traditional-20261004-ikokore",
      "asset": {
        "relative_path": "assets/ai/ikokore.png",
        "sha256": "fa7118c6e5c1e7b6dafeada6e1a47d557c24a33f4ea65b0d95c7768e0d9712f1",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2521324,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng editorial recipe illustration. Create a single realistic food photograph-style image illustrating Ikokore, Ijebu water-yam pottage, based on these exact ingredients and method. In one plain shallow off-white ceramic bowl: irregular soft small dumplings made by dropping heaped teaspoonfuls of finely grated sticky water-yam paste into peppery broth; dumplings have set and some gently break down to thicken the surrounding orange-red palm-oil broth. Several tender small stewing-beef chunks and modest irregular deboned smoked-fish flakes are integrated among the dumplings. The red-bell-pepper, Scotch-bonnet, onion, ground crayfish and optional iru seasoning are cooked into the sauce, not raw garnishes. The result is thick and spoonable, with recognizably intact irregular water-yam dumplings, not neat cubes of white yam, not rice, pasta, mashed potatoes or a smooth generic soup. Natural cooked surface texture, appetizing warm orange-red hue and restrained palm-oil sheen. Landscape 4:3 composition, bowl centered fully visible in a clean close three-quarter overhead view on a warm neutral plain tabletop, soft natural side light, simple editorial styling. No people, hands, utensils, side dishes, props, herbs, fresh garnish, whole peppers, extra ingredients, lettering, words, logo or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked recipe.",
        "source_recipe_reference_urls": [
          "https://cheflolaskitchen.com/ikokore/",
          "https://ounjealadun.com/2017/02/23/ikokore-ifokore/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-a7246f8a-fdcc-44c5-9a6d-a72a3ffbfa50.png",
        "source_visual_review": "PASS as illustrative fallback: irregular set water-yam dumplings, thick orange-red pepper/palm-oil broth, small beef and smoked-fish pieces. No neat yam cubes, noodles, garnish or sides. Dumpling scale and texture are illustrative; this does not document a tested recipe.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng editorial recipe illustration. Create a single realistic food photograph-style image illustrating Ikokore, Ijebu water-yam pottage, based on these exact ingredients and method. In one plain shallow off-white ceramic bowl: irregular soft small dumplings made by dropping heaped teaspoonfuls of finely grated sticky water-yam paste into peppery broth; dumplings have set and some gently break down to thicken the surrounding orange-red palm-oil broth. Several tender small stewing-beef chunks and modest irregular deboned smoked-fish flakes are integrated among the dumplings. The red-bell-pepper, Scotch-bonnet, onion, ground crayfish and optional iru seasoning are cooked into the sauce, not raw garnishes. The result is thick and spoonable, with recognizably intact irregular water-yam dumplings, not neat cubes of white yam, not rice, pasta, mashed potatoes or a smooth generic soup. Natural cooked surface texture, appetizing warm orange-red hue and restrained palm-oil sheen. Landscape 4:3 composition, bowl centered fully visible in a clean close three-quarter overhead view on a warm neutral plain tabletop, soft natural side light, simple editorial styling. No people, hands, utensils, side dishes, props, herbs, fresh garnish, whole peppers, extra ingredients, lettering, words, logo or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact plant/protein species, hidden ingredients, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No reliably licensed finished-dish photo found in focused public-source search."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of Ikokore with irregular water-yam dumplings, beef and smoked fish in orange-red palm-oil pottage",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Irregular soft yam-paste dumplings in thick orange sauce, beef and smoked fish; no obvious unlisted garnish.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "fa7118c6e5c1e7b6dafeada6e1a47d557c24a33f4ea65b0d95c7768e0d9712f1",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "Water-yam pottage made from irregular spoonfuls of finely grated yam paste set as small soft dumplings in pepper-palm-oil broth, with beef and deboned smoked fish.",
        "texture_and_color": "Cream-to-orange irregular dumplings in thickened orange-brown sauce with darker meat and fish.",
        "key_negative_constraints": "No neat cubed yam, sweet potato, noodle shapes, leafy garnish, cream or whole fish.",
        "do_not_confuse_with": [
          "Asaro with cut white-yam cubes",
          "plain boiled gnocchi"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/ikokore.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ojojo",
      "live_post_id": "recipe-ng-traditional-20261004-ojojo",
      "asset": {
        "relative_path": "assets/photos/ojojo.jpg",
        "sha256": "9f0bf4995e4dabebc32cc97c080c4a3a605b1fc4fbd4f415895efdf17b2512dd",
        "width": 720,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 324889,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aderiqueza",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:%E1%BB%8C%CC%80j%E1%BB%8D%CC%80j%E1%BB%8D%CC%80_(Yam_Fritters).jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/1/15/%E1%BB%8C%CC%80j%E1%BB%8D%CC%80j%E1%BB%8D%CC%80_%28Yam_Fritters%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ọ̀jọ̀jọ̀_(Yam_Fritters).jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/1/15/%E1%BB%8C%CC%80j%E1%BB%8D%CC%80j%E1%BB%8D%CC%80_%28Yam_Fritters%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Brown yam fritters on a small plate beside a bowl of yellow pap",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ọ̀jọ̀jọ̀_(Yam_Fritters).jpg by Aderiqueza, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ojojo yam fritters beside yellow pap",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source names ojojo yam fritters. Pap and a milk tin are visible accompaniments, not part of this fritter recipe; fritters are irregular and deeply browned.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "The named yam fritters are a small part of a breakfast arrangement, not isolated recipe plating. Pap and milk are accompaniments outside the canonical recipe."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "9f0bf4995e4dabebc32cc97c080c4a3a605b1fc4fbd4f415895efdf17b2512dd",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Small plate of irregular golden-to-deep-brown fritters, some broken pale interiors visible, next to a large bowl of yellow pap and a milk tin."
      },
      "visual_spec": {
        "visible_food_spec": "Small irregular rounded fritters formed from finely grated water yam, onion and chilli; one opened piece shows a moist fibrous cooked-yam centre.",
        "texture_and_color": "Golden to deep-golden lightly craggy exterior, off-white tender slightly fibrous interior.",
        "key_negative_constraints": "No whole sweetcorn, potato fries, sugar dusting, syrup, cheese or spongy wheat dough interior.",
        "do_not_confuse_with": [
          "Akara bean fritters",
          "smooth puff puff wheat balls"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ojojo.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "adalu",
      "live_post_id": "recipe-ng-traditional-20261004-adalu",
      "asset": {
        "relative_path": "assets/photos/adalu.jpg",
        "sha256": "67f56eda5d998bcc1d6475ffed87cccf58f2e645c1588ec75268caaa5f9ee415",
        "width": 3264,
        "height": 2448,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2412072,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Nancy Nwachukwu",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Beans_and_Corn_(maize)_porridge.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/8/8b/Beans_and_Corn_%28maize%29_porridge.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Beans_and_Corn_(maize)_porridge.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/8/8b/Beans_and_Corn_%28maize%29_porridge.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Beans-and-maize porridge in a pot with a serving spoon",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Beans_and_Corn_(maize)_porridge.jpg by Nancy Nwachukwu, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Adalu beans-and-corn pottage in a serving dish",
      "caveats": [
        "Visible cooked beans and yellow maize kernels in a thick porridge match adalu; colour and consistency may vary.",
        "Visible cooked beans and yellow maize kernels in a thick porridge match adalu; colour and consistency may vary.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "No consequential visible mismatch; documentary presentation clearly exposes beans-and-corn composition."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "67f56eda5d998bcc1d6475ffed87cccf58f2e645c1588ec75268caaa5f9ee415",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Thick tan-orange pottage with many intact yellow maize kernels and tender brown beans in a serving dish, with a spoon."
      },
      "visual_spec": {
        "visible_food_spec": "A soft thick beans-and-sweetcorn pottage with most cooked beans and yellow kernels still whole in a creamy palm-oil-tinted base.",
        "texture_and_color": "Warm orange-brown beans with yellow corn, glossy soft spoonable body.",
        "key_negative_constraints": "No meat, fish chunks, whole corn cobs, leafy greens, carrots, separate tomato topping or watery broth.",
        "do_not_confuse_with": [
          "Plain bean porridge",
          "ewa agoyin mash",
          "sweetcorn soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/adalu.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "egusi-soup-yoruba-style",
      "live_post_id": "recipe-ng-traditional-20261004-egusi-soup-yoruba-style",
      "asset": {
        "relative_path": "assets/photos/egusi-soup-yoruba-style.jpg",
        "sha256": "251fc5bb1934ed7e970379f14117f506811621c241375b527499d0873f455018",
        "width": 3021,
        "height": 3430,
        "mime_type": "image/mpo",
        "image_format": "MPO",
        "color_mode": "RGB",
        "frame_count": 2,
        "byte_size": 3032272,
        "downloaded_or_generated_bytes_preserved": true,
        "browser_integration_note": "Original JPEG-based MPO container preserved, including its auxiliary frame. Primary color frame was used for visual review. Verify browser rendering and platform MIME compatibility before integration; no conversion was performed."
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Ogundele1",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Semo_and_Egusi.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Semo_and_Egusi.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Semo_and_Egusi.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Semo_and_Egusi.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Yellow egusi curds and leafy greens with a large protein piece beside three white semovita portions",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Semo_and_Egusi.jpg by Ogundele1, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Egusi soup with leafy greens and meat, served with swallow",
      "caveats": [
        "Source explicitly documents Yoruba-community egusi. Visible curds and greens fit; semovita and large assorted protein are serving variations, not part of the exact recipe.",
        "Source explicitly documents Yoruba-community egusi. Visible curds and greens fit; semovita and large assorted protein are serving variations, not part of the exact recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Original JPEG-based MPO container preserved, including its auxiliary frame. Primary color frame was used for visual review. Verify browser rendering and platform MIME compatibility before integration; no conversion was performed.",
        "Defining curd-based soup texture matches this recipe form. Larger assorted meat cuts and semovita serving are variations; exact regional seasonings cannot be certified from image."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "251fc5bb1934ed7e970379f14117f506811621c241375b527499d0873f455018",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Pale yellow crumbly egusi curds and chopped dark greens in red-orange sauce, with large brown protein pieces and separate pale swallow portions."
      },
      "visual_spec": {
        "visible_food_spec": "A thick spoonable egusi soup with distinct pale seed curds formed from spoon-dropped paste, chopped cooked greens, beef and smoked fish in a pepper-palm-oil base.",
        "texture_and_color": "Yellow-beige crumbly curds, dark-green leaves and brown protein in a red-orange oily sauce.",
        "key_negative_constraints": "No smooth pureed soup, giant spherical dumplings, whole melon seeds, okra, boiled egg or cream.",
        "do_not_confuse_with": [
          "Smooth peanut or sesame soup",
          "ofe onugbu without curds"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/egusi-soup-yoruba-style.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "nigerian-jollof-rice",
      "live_post_id": "recipe-ng-demo-20261001-amina-jollof",
      "asset": {
        "relative_path": "assets/photos/nigerian-jollof-rice.jpg",
        "sha256": "deb6037e6ce887ecec9ad1c19c2ab2f4a6e3a38680143a6872e7087a68c81fd4",
        "width": 1280,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 247062,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Adewuyi Israel",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Nigerian_jollof.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/1/1a/Nigerian_jollof.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Nigerian_jollof.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/jollof.jpg",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized and cropped for display. Image remains under its original license.",
        "modifications": "Prior source/site changes: Resized and cropped for display. Image remains under its original license. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Dark orange-brown Nigerian jollof rice beside a glazed meat portion",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Nigerian_jollof.jpg by Adewuyi Israel, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Jollof rice with a sauced meat accompaniment",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Photo is low-lit and includes a meat side; rice shade and serving differ from the exact written formulation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Dark orange-brown Nigerian jollof rice beside a glazed meat portion",
        "Darker color and extra meat or other mixed pieces are a serving variation; photo is not the plain rice-only canonical formulation. Dim image limits fine grain detail."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "deb6037e6ce887ecec9ad1c19c2ab2f4a6e3a38680143a6872e7087a68c81fd4",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Orange-brown cooked rice with darker mixed pieces and a large sauced meat portion alongside, photographed in low light."
      },
      "visual_spec": {
        "visible_food_spec": "A generous mound of cooked long-grain parboiled rice, every grain coated in reduced tomato-pepper sauce, fluffed after steaming; all bay leaves removed.",
        "texture_and_color": "Even orange-red to brick orange, distinct elongated grains with a light oil sheen, tender but not mushy.",
        "key_negative_constraints": "No peas, carrots, sweetcorn, shrimp, chicken pieces, fried plantain, cucumber, parsley, visible bay leaves or separate sauce.",
        "do_not_confuse_with": [
          "White rice with red stew poured on top",
          "yellow fried rice",
          "pilaf"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/nigerian-jollof-rice.jpg",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "dodo",
      "live_post_id": "recipe-ng-demo-20261001-emeka-dodo",
      "asset": {
        "relative_path": "assets/photos/dodo.webp",
        "sha256": "860e3eaa1e230f4b53649b368b843d036b7c40ddb0f36639111fbdb695f02db4",
        "width": 900,
        "height": 1200,
        "mime_type": "image/webp",
        "image_format": "WEBP",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 330778,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Setor33",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Dodo_fried.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/1/10/Dodo_fried.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Dodo_fried.jpg",
        "license": "CC0",
        "license_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/demo/dodo.webp",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized proportionally to 900x1200 pixels; converted to WebP at quality 87; no cropping or content edits.",
        "modifications": "Prior source/site changes: Resized proportionally to 900x1200 pixels; converted to WebP at quality 87; no cropping or content edits. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Attribution recommended for provenance; CC0 does not require it"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Golden fried ripe-plantain slices with browned edges",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Dodo_fried.jpg by Setor33, via Wikimedia Commons, CC0",
      "ai_disclosure": null,
      "alt_text": "Golden fried dodo plantain slices",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Ripe plantain slices match dodo; slice thickness varies.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Golden fried ripe-plantain slices with browned edges",
        "Close crop and strong warm lighting, but named fried-plantain form is clear."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "860e3eaa1e230f4b53649b368b843d036b7c40ddb0f36639111fbdb695f02db4",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Thick diagonal yellow-gold fried plantain slices with brown caramelized patches and no other food."
      },
      "visual_spec": {
        "visible_food_spec": "A small plate of ripe plantain slices cut diagonally about one centimetre thick and fried until tender, golden brown with caramelized patches.",
        "texture_and_color": "Golden-yellow centres and deeper amber-brown edges, glossy but drained, soft thick slices.",
        "key_negative_constraints": "No whole uncut plantains, thin chips, banana dessert, sugar, syrup, herbs, rice or sauce.",
        "do_not_confuse_with": [
          "Whole roasted boli",
          "thin crunchy plantain chips"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/dodo.webp",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "puff-puff",
      "live_post_id": "recipe-ng-demo-20261001-femi-puff-puff",
      "asset": {
        "relative_path": "assets/photos/puff-puff.jpg",
        "sha256": "341b33cee317389f26cb492c77eb8661ac40bc4c25f1dc5b81f9363ea43b4407",
        "width": 604,
        "height": 604,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 128536,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Afrolems ; cropped by Off-shell",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Nigerian-puff-puff-recipe_cropped.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/a3/Nigerian-puff-puff-recipe_cropped.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Nigerian-puff-puff-recipe_cropped.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Cropped version ofFile:Nigerian-puff-puff-recipe.jpg",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/a/a3/Nigerian-puff-puff-recipe_cropped.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Three golden fried dough balls dusted with sugar on a dark plate; consistent with puff-puff.",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Nigerian-puff-puff-recipe_cropped.jpg by Afrolems ; cropped by Off-shell, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Sugar-dusted puff puff on a dark plate",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Photograph shows sugar-dusted puff-puff; sugar coating is a serving variation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Three golden fried dough balls dusted with sugar on a dark plate; consistent with puff-puff.",
        "Visible finishing sugar is not specified in canonical finishing steps; still recognizably the named dish. Caption the sugar-dusted presentation."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "341b33cee317389f26cb492c77eb8661ac40bc4c25f1dc5b81f9363ea43b4407",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Three golden-brown rounded fried dough balls dusted with granulated sugar on a dark plate."
      },
      "visual_spec": {
        "visible_food_spec": "Several rounded spoon-dropped yeast-raised wheat dough balls, one torn to reveal the springy aerated interior.",
        "texture_and_color": "Even golden-brown lightly wrinkled crust, pale cream elastic airy crumb; natural minor shape variation.",
        "key_negative_constraints": "No sugar dusting, syrup, jam, chocolate, sprinkles, holes, savoury vegetable flecks or filling.",
        "do_not_confuse_with": [
          "Craggy bean akara",
          "compact maize-groundnut donkwa"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/puff-puff.jpg",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "chin-chin",
      "live_post_id": "recipe-ng-demo-20261001-tunde-chin-chin",
      "asset": {
        "relative_path": "assets/photos/chin-chin.webp",
        "sha256": "9d89df3e8512d7ad8ddddb41b539e2273e65f425e1fd771690daef0ee400d72d",
        "width": 900,
        "height": 675,
        "mime_type": "image/webp",
        "image_format": "WEBP",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 101674,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Kaldari",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Bowl_of_chin-chin.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/d/d0/Bowl_of_chin-chin.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Bowl_of_chin-chin.jpg",
        "license": "CC0",
        "license_url": "http://creativecommons.org/publicdomain/zero/1.0/deed.en",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/demo/chin-chin.webp",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized proportionally to 900x675 pixels; converted to WebP at quality 87; no cropping or content edits.",
        "modifications": "Prior source/site changes: Resized proportionally to 900x675 pixels; converted to WebP at quality 87; no cropping or content edits. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Attribution recommended for provenance; CC0 does not require it"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "A bowl of light-brown rectangular chin-chin pieces on a wooden table",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Bowl_of_chin-chin.jpg by Kaldari, via Wikimedia Commons, CC0",
      "ai_disclosure": null,
      "alt_text": "Chin chin cut into golden rectangular pieces",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Long rectangular pieces rather than this recipe’s small squares; same fried-dough snack.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "A bowl of light-brown rectangular chin-chin pieces on a wooden table",
        "Long rectangles rather than canonical one-centimetre squares; recognisable chin chin shape variant rather than maize kokoro cylinders."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "9d89df3e8512d7ad8ddddb41b539e2273e65f425e1fd771690daef0ee400d72d",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Bowl of matte golden fried dough pieces cut mostly into long short rectangular sticks."
      },
      "visual_spec": {
        "visible_food_spec": "A pile of small crisp fried dough squares about one centimetre wide and four to five millimetres thick, with naturally puffed uneven edges.",
        "texture_and_color": "Pale golden to honey-gold, dry crisp surfaces and small cut faces.",
        "key_negative_constraints": "No large spheres, glaze, sugar dusting, chocolate, multicolored sprinkles or nuts.",
        "do_not_confuse_with": [
          "Puff puff balls",
          "large cookies",
          "fried croutons"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/chin-chin.webp",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "boli",
      "live_post_id": "recipe-ng-traditional-20261004-boli",
      "asset": {
        "relative_path": "assets/photos/boli.png",
        "sha256": "e54a6d7983ae041ca5793afcf60466e8ac8281a5d0d843f28a37883b278f9a04",
        "width": 544,
        "height": 448,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGBA",
        "frame_count": 1,
        "byte_size": 645034,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Jostbrain",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Boli_and_Groundnut.png",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/a4/Boli_and_Groundnut.png?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Boli_and_Groundnut.png",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/a/a4/Boli_and_Groundnut.png?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Whole roasted plantains on a grill beside shelled groundnuts on paper",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Boli_and_Groundnut.png by Jostbrain, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Boli plantains roasting beside groundnuts",
      "caveats": [
        "Roasted plantains and groundnuts directly match named dish; photo shows street-side preparation rather than a plated home serving.",
        "Roasted plantains and groundnuts directly match named dish; photo shows street-side preparation rather than a plated home serving.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Street-side preparation scene rather than a plated finished serving; several plantains are less browned and still cooking. Main food and companion groundnuts match named dish."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "e54a6d7983ae041ca5793afcf60466e8ac8281a5d0d843f28a37883b278f9a04",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Whole peeled plantains roasting on a metal grid, several with brown char patches, with a pile of groundnuts at the side."
      },
      "visual_spec": {
        "visible_food_spec": "Two or three whole peeled ripe plantains roasted until tender, with irregular dark-brown roasting patches, and a modest pile of shelled roasted groundnuts beside them.",
        "texture_and_color": "Yellow-gold flesh, brown roasted patches and lightly wrinkled exterior; dry tan and reddish-brown peanuts.",
        "key_negative_constraints": "No fish, pepper sauce, salad, charred black skin, plantain chips, syrup or sliced plantain coins.",
        "do_not_confuse_with": [
          "Diagonal fried dodo slices",
          "unpeeled bananas",
          "grilled fish platter"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/boli.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "kokoro",
      "live_post_id": "recipe-ng-traditional-20261004-kokoro",
      "asset": {
        "relative_path": "assets/ai/kokoro.png",
        "sha256": "7c588ebb0055f278278a728778b3d38ad6d1045f11084d63b7c8f2ed794b7389",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2260394,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Kokoro, this exact all-maize formulation: a modest small pile of slender hand-rolled fried cornmeal snack sticks on one plain off-white ceramic small plate. Each narrow stick is approximately eight to ten centimetres long and six to eight millimetres thick, thin roundish cylinders with naturally tapered and slightly uneven ends, about the proportions of a slim pencil. They are golden beige, dry, finely grainy and crisp from deep-frying, with slightly irregular hand-rolled surfaces and occasional tiny shallow natural cracks. This is a cooked maize-meal dough shaped into straight or gently curved slender sticks, containing a little sugar, ginger and salt dissolved inside, with no visible coatings. The ingredient list contains no peanuts or groundnuts, and there must be no nuts anywhere in the image. No ring shapes, kuli-kuli, loop shapes, ridged churro extrusion, soft bread, baguettes, thick breadsticks, sesame, seeds, sugar coating, powdered sugar, dipping sauce, herbs or other garnish. Landscape 4:3, centered small plate fully visible with a generous modest margin, close three-quarter overhead view on a plain warm neutral tabletop, soft natural side daylight, natural muted golden food color and realistic crisp texture. No people, hands, utensils, props, extra dishes, scattered ingredients, text, logos, borders or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://www.nigerianfoodtv.com/kokoro-recipe-nigerian-snacks/",
          "https://www.nigella.com/recipes/guests/kokoro-crunchy-corn-sticks",
          "https://nico.gov.ng/cuisines-in-nigeria/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-19fa501f-f2ab-40a0-9dd9-c1f1f311857e.png",
        "source_visual_review": "PASS as illustrative fallback after refinement: narrower mostly straight hand-rolled tapered maize sticks, consistent crisp granular surface, no puffed dough lumps, rings, nuts, sugar coating, seeds, dipping sauce or garnish",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Kokoro, this exact all-maize formulation: a modest small pile of slender hand-rolled fried cornmeal snack sticks on one plain off-white ceramic small plate. Each narrow stick is approximately eight to ten centimetres long and six to eight millimetres thick, thin roundish cylinders with naturally tapered and slightly uneven ends, about the proportions of a slim pencil. They are golden beige, dry, finely grainy and crisp from deep-frying, with slightly irregular hand-rolled surfaces and occasional tiny shallow natural cracks. This is a cooked maize-meal dough shaped into straight or gently curved slender sticks, containing a little sugar, ginger and salt dissolved inside, with no visible coatings. The ingredient list contains no peanuts or groundnuts, and there must be no nuts anywhere in the image. No ring shapes, kuli-kuli, loop shapes, ridged churro extrusion, soft bread, baguettes, thick breadsticks, sesame, seeds, sugar coating, powdered sugar, dipping sauce, herbs or other garnish. Landscape 4:3, centered small plate fully visible with a generous modest margin, close three-quarter overhead view on a plain warm neutral tabletop, soft natural side daylight, natural muted golden food color and realistic crisp texture. No people, hands, utensils, props, extra dishes, scattered ingredients, text, logos, borders or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
          "refinement_prompt": "Use case: precise-object-edit. Refine only the Kokoro sticks in this image to match the recipe's crisp slender maize sticks. Narrow every stick's thickness by about 25 percent while keeping their current lengths, so most are thin cylinders about pencil thickness with a length-to-thickness ratio around 13 to 16. They should be mostly straight with slight hand-rolled taper and subtly uneven tapered ends. Make surfaces noticeably drier, matte, finely maize-grainy and crisp after cooling. Remove inflated doughy blisters and oily glossy bubbles. Do not make them soft bread or puffed fried dough. Preserve warm golden-beige color, overall small pile composition, ceramic plate, plain warm neutral background, camera angle, lighting and 4:3 landscape size. No rings, nuts, sesame, sugar coating, dips, toppings, garnish, new objects, text or watermark. Original AI-generated recipe illustration, not a real cooked-recipe photograph."
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact size, hidden flour/ingredient composition, absence of allergen cross-contact, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": "Source photograph and description include groundnuts; canonical recipe is maize-only. Image review approved exact AI fallback.",
          "research_notes": [],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of slender golden hand-rolled kokoro maize snack sticks",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Refined sticks are narrow, mostly straight with hand-rolled tapered ends, golden crisp-looking fine-granular surface, no rings, nuts, coatings or added foods.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "7c588ebb0055f278278a728778b3d38ad6d1045f11084d63b7c8f2ed794b7389",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A small pile of slender hand-rolled fried maize sticks, roughly eight to ten centimetres long and no thicker than eight millimetres, with tapered uneven ends.",
        "texture_and_color": "Golden beige, dry finely grainy and crisp; thin cylinders, not soft bread.",
        "key_negative_constraints": "No ring shapes, ridged churro extrusion, sugar coating, dipping sauce, sesame or long thick baguette shapes.",
        "do_not_confuse_with": [
          "Kuli-kuli rings",
          "churros",
          "fried wheat breadsticks"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/kokoro.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "asun",
      "live_post_id": "recipe-ng-traditional-20261004-asun",
      "asset": {
        "relative_path": "assets/ai/asun.png",
        "sha256": "76369d52655f56cdf2f8566259c8b0505408a18aed9212fd4b860de29fa919a1",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2519549,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T12:46:45.099845+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: Individual square recipe reference asset, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of Asun, specifically a Nigerian home-method dish of tender braised then briefly grilled goat pieces tossed with cooked Scotch bonnet and onion.\nSubject and method: A modest serving of small irregular 3 cm BONeless goat meat chunks, braised tender and lightly browned at the edges under a home grill, then tossed with a coarse red-orange blend of Scotch bonnet chillies and onion. Visible softened onion slivers distributed among the meat. A light oil sheen and moist coarse pepper fragments cling to the browned meat; very little free liquid. Cut meat texture should look cooked and tender, with natural fibers and irregular browned edges, not blackened or dry. All ingredients are cooked, no raw garnish.\nScene and framing: One plain off-white shallow ceramic bowl on a simple neutral warm gray tabletop. Three-quarter close overhead view, entire vessel visible with a modest margin, soft diffuse daylight and accurate muted food color.\nRecipe ingredients: Boneless goat meat, onion, Scotch bonnet, neutral oil, water and salt. Skin-on goat is optional, so some natural cooked skin may remain but do not invent bones or large hide sections.\nConstraints: This is goat asun, not beef suya. No skewers, thin beef strips, satay spice powder or peanuts. No bell-pepper chunks, tomatoes, watery broth, thick tomato sauce, curry, leafy herbs, parsley, spring onions, raw onion rings, decorative chilli slices, rice, other sides, utensils, table props, hands or people. No burnt black meat, no whole goat head. No text, label, logo, watermark, border, collage or grid. One original image only; not documentary evidence of an actual photographed or kitchen-tested dish.",
        "source_recipe_reference_urls": [
          "https://9jafoodie.com/nigerian-asun-smoked-goat-recipe/",
          "https://www.myactivekitchen.com/2016127nigerian-asun-spicy-smoked-goat-meat-recipe/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-ea81fa3e-4fc2-46dc-a285-d9e67f54865c.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels against the complete canonical recipe and visual specs. Browned irregular meat chunks with softened onion slivers and coarse red-orange pepper coating; little free liquid and no garnish, skewers, thin suya strips, rice or apparent unlisted ingredients. Texture is compatible with tender braised then grilled meat. Meat species and hidden ingredient composition cannot be certified from generated pixels.",
          "not_kitchen_or_species_verified": true,
          "independent_review": "Second reviewer passed a limited visual check: browned irregular meat pieces, coarse red chilli coating and cooked onion with minimal liquid; no visible off-recipe garnish or substitute dish structure. Meat species cannot be proven from pixels."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: Individual square recipe reference asset, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of Asun, specifically a Nigerian home-method dish of tender braised then briefly grilled goat pieces tossed with cooked Scotch bonnet and onion.\nSubject and method: A modest serving of small irregular 3 cm BONeless goat meat chunks, braised tender and lightly browned at the edges under a home grill, then tossed with a coarse red-orange blend of Scotch bonnet chillies and onion. Visible softened onion slivers distributed among the meat. A light oil sheen and moist coarse pepper fragments cling to the browned meat; very little free liquid. Cut meat texture should look cooked and tender, with natural fibers and irregular browned edges, not blackened or dry. All ingredients are cooked, no raw garnish.\nScene and framing: One plain off-white shallow ceramic bowl on a simple neutral warm gray tabletop. Three-quarter close overhead view, entire vessel visible with a modest margin, soft diffuse daylight and accurate muted food color.\nRecipe ingredients: Boneless goat meat, onion, Scotch bonnet, neutral oil, water and salt. Skin-on goat is optional, so some natural cooked skin may remain but do not invent bones or large hide sections.\nConstraints: This is goat asun, not beef suya. No skewers, thin beef strips, satay spice powder or peanuts. No bell-pepper chunks, tomatoes, watery broth, thick tomato sauce, curry, leafy herbs, parsley, spring onions, raw onion rings, decorative chilli slices, rice, other sides, utensils, table props, hands or people. No burnt black meat, no whole goat head. No text, label, logo, watermark, border, collage or grid. One original image only; not documentary evidence of an actual photographed or kitchen-tested dish.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": "Commons description has missing formal author/source information; raw malformed fields indicate Afrolems and uploader Atimukoh, but provenance unresolved. Image review approved AI fallback; excluded from deliverable.",
          "research_notes": [],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of Asun, browned goat pieces with a coarse cooked pepper coating and softened onion slices in a plain bowl.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Browned irregular meat pieces with coarse cooked red chilli and softened onion, minimal free liquid; no obvious unlisted garnish.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "76369d52655f56cdf2f8566259c8b0505408a18aed9212fd4b860de29fa919a1",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "Bite-sized boneless goat pieces, first tender-cooked then browned under a grill and tossed in coarse cooked Scotch bonnet and onion, with the listed softened onion slices.",
        "texture_and_color": "Brown meat with lightly charred edges and a coarse red-orange pepper coating, little free liquid.",
        "key_negative_constraints": "No skewers, beef strips, bell-pepper chunks, tomato sauce, parsley, rice, whole goat head or watery broth.",
        "do_not_confuse_with": [
          "Beef suya skewers",
          "pepper soup",
          "tomato-based goat stew"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/asun.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ekuru",
      "live_post_id": "recipe-ng-traditional-20261004-ekuru",
      "asset": {
        "relative_path": "assets/photos/ekuru.jpg",
        "sha256": "f80a94bc519d863c3e1b3bf129b04afaf578fac5d4833abe244f06babe9ed520",
        "width": 2976,
        "height": 3968,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 3110241,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Adefanike",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Ekuru.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/e/e4/Ekuru.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ekuru.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/e/e4/Ekuru.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Ekuru bean pudding with red pepper sauce and fish beside a pale mound of eko",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ekuru.jpg by Adefanike, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ekuru bean pudding with fish sauce and a pale eko accompaniment",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source describes ekuru bean pudding with sauce and fish, optionally served with eko. Photo includes pale eko accompaniment and sauce-coated yellow-beige ekuru portion; not the exact recipe serving.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source explicitly identifies ekuru with sauce and fish plus eko. Keep component identities correct: pale dome is eko accompaniment, beige sauce-coated pieces are ekuru. No basis to relabel it moi moi solely from sauce color."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "f80a94bc519d863c3e1b3bf129b04afaf578fac5d4833abe244f06babe9ed520",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "A plate with pale smooth eko dome, sauce-coated beige bean-pudding pieces, dark fried sauce and a piece of fish."
      },
      "visual_spec": {
        "visible_food_spec": "Broken pieces of plain white steamed bean pudding, visibly airy, with a separate small pool or bowl of cooked dark-red dried-pepper-and-onion sauce; omit optional smoked fish.",
        "texture_and_color": "Ivory white moist porous bean pieces beside deep-red oily pepper sauce.",
        "key_negative_constraints": "No red or orange bean pudding, egg filling, palm oil inside the white pudding, sweetcorn, fish or leaf wrapper.",
        "do_not_confuse_with": [
          "Orange moi moi with egg",
          "yellow okpa",
          "mashed ewa agoyin"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ekuru.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ofe-onugbu",
      "live_post_id": "recipe-ng-traditional-20261004-ofe-onugbu",
      "asset": {
        "relative_path": "assets/photos/ofe-onugbu.jpg",
        "sha256": "40add1e2209b2b83192e68a3f99a85f6da596c710756fd86057a723057f814f2",
        "width": 4128,
        "height": 3096,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 4359700,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Asuzu Obinna Justin",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Onugbu_Soup_in_Pot2.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/1/11/Onugbu_Soup_in_Pot2.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Onugbu_Soup_in_Pot2.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/1/11/Onugbu_Soup_in_Pot2.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "A pot of thick yellow-brown bitterleaf soup with chopped greens, protein pieces and a metal ladle",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Onugbu_Soup_in_Pot2.jpg by Asuzu Obinna Justin, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ofe onugbu bitterleaf soup in a cooking pot",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source specifically names Onugbu/bitterleaf soup; creamy thickened broth and chopped bitterleaf form match. Protein cuts and pot serving differ from the exact recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Visible leaf sizes vary and protein cuts are irregular rather than uniform cubes; no obvious egusi curds or alternate soup structure. Documentary pot view; exact leaf species remains source-supported."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "40add1e2209b2b83192e68a3f99a85f6da596c710756fd86057a723057f814f2",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual larger inspection: thick ochre-brown soup in a pot with many dark chopped leaf shreds, meat/fish pieces and a serving spoon lifting leaf-rich soup."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of cocoyam-thickened bitterleaf soup with cooked beef, deboned smoked fish and finely chopped washed bitterleaf throughout; cocoyam paste fully dispersed.",
        "texture_and_color": "Warm ochre-orange broth, smooth thickened body and many dark small leaf shreds.",
        "key_negative_constraints": "No cocoyam chunks, egusi curds, spinach salad leaves, tomato pieces, cream or white yam cubes.",
        "do_not_confuse_with": [
          "Oha soup with larger torn leaves",
          "egusi curds",
          "fine-pureed black soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ofe-onugbu.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "oha-soup",
      "live_post_id": "recipe-ng-traditional-20261004-oha-soup",
      "asset": {
        "relative_path": "assets/photos/oha-soup.jpg",
        "sha256": "36a4ada2b6c657426a6c752e873976e3ee55bd8bc5c5f1b01a9b4b65da437e7f",
        "width": 479,
        "height": 640,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 166146,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aderiqueza",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Oha_Soup.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/7/73/Oha_Soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Oha_Soup.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/7/73/Oha_Soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Oha leaf soup with assorted protein pieces in a white bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Oha_Soup.jpg by Aderiqueza, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Oha soup with cooked leaves and assorted meat or fish",
      "caveats": [
        "Source names oha; broad leaves and palm-oil broth fit. Large skin/meat/fish cuts are documentary serving variations.",
        "Source names oha; broad leaves and palm-oil broth fit. Large skin/meat/fish cuts are documentary serving variations.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Much larger and more assorted protein cuts and a redder thinner-looking base than the canonical version; source identifies Oha and leaves have appropriate torn-leaf form. Do not claim beef-only exact recipe plating."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "36a4ada2b6c657426a6c752e873976e3ee55bd8bc5c5f1b01a9b4b65da437e7f",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: reddish-brown soup with broad cooked green leaf pieces over a pile of large assorted protein pieces, including a dark skin-like piece."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of smoothly cocoyam-thickened soup containing visible bite-sized torn oha leaf pieces added late, beef and deboned smoked fish.",
        "texture_and_color": "Golden orange-brown base with distinct softened broad green-to-olive leaf pieces.",
        "key_negative_constraints": "No long finely shredded okazi, powdered leaf puree, egusi curds, raw lettuce, tomato chunks or visible cocoyam pieces.",
        "do_not_confuse_with": [
          "Fine-shredded bitterleaf soup",
          "efo riro",
          "pureed Edo black soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/oha-soup.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ofe-nsala",
      "live_post_id": "recipe-ng-traditional-20261004-ofe-nsala",
      "asset": {
        "relative_path": "assets/ai/ofe-nsala.png",
        "sha256": "3b82194d94ce3ecea9eca874dba08dc5dd0036e0f97b35255c6f5b91076d7088",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2347754,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T13:26:58.538560+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of Ofe Nsala (White Soup), the Igbo CATFISH-and-YAM formulation described here. Show a modest serving in one simple off-white shallow ceramic bowl on a neutral warm gray tabletop.\nCooked subject: Two or three substantial catfish CROSS-CUT STEAKS, gently simmered and clearly cooked, partly submerged in a pale cream to light grey-beige opaque soup. Catfish steaks have recognizable smooth dark-grey scaleless skin forming an irregular band around moist ivory flaking flesh, with the natural central bone or cross-section shape of a steak. Not whole fish, fillets, salmon, beef or assorted meats. The fish is intact enough to identify as cross-cut steaks, but has realistic softened cooked texture and slight natural flaking.\nBroth: Lightly thickened with thoroughly mashed WHITE YAM that has fully dispersed into the liquid. Smooth, gently spoon-coating but still loose/pourable opaque broth. No intact yam cubes or dumplings. Ground dried crayfish and crushed Scotch bonnet form only tiny subtle incorporated specks. Include just a FEW very fine cooked dark-green UTAZI leaf slivers distributed sparingly throughout, because the entire four-serving pot uses only one teaspoon. No decorative mound of herbs or large leaves.\nExact ingredients: Catfish steaks, dispersed yam paste, ground dried crayfish, crushed Scotch bonnet, sparse fine utazi, water and salt. No added oil; specifically NO palm oil, orange-red oil slick or tomato. Optional ground ogiri seasoning or stock cube would be dissolved invisibly.\nFraming and light: Centered one bowl, whole vessel visible with a modest margin. Close three-quarter overhead angle, soft diffuse daylight, accurate restrained pale food color and honest home-cooked texture.\nCritical exclusions: No red/orange soup, clear watery pepper soup, coconut milk, dairy cream swirl, tomato chunks, onions, beef, chicken, assorted meats, intact yam pieces, large leafy greens, parsley, cilantro, raw chili garnish, rice, pounded-yam side or other accompaniment. No utensils, props, extra dishes, hands or people. No text, label, caption, logo, watermark, border, collage or grid. One original AI illustration only, not documentary evidence of an actual cooked or kitchen-tested recipe.",
        "source_recipe_reference_urls": [
          "https://www.allnigerianrecipes.com/soups/ofe-nsala/",
          "https://allnigerianfoods.com/nsala-soup/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-67e44fdb-3ed7-4434-99e3-f783be78daee.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels against complete canonical recipe and visual specs. Three cooked fish cross-cut steaks with smooth dark-grey skin, ivory flaking flesh and natural central bone appearance, in pale opaque lightly thickened broth with sparse fine green slivers and incorporated seasoning flecks. No visible beef, other meats, whole fish, yam cubes, palm oil, red/orange slick, tomato or garnish.",
          "limitations": "Generated pixels permit only a visual compatibility check; fish species, utazi botanical identity, actual yam thickening, hidden ingredients, precise doneness and kitchen-tested fidelity cannot be certified.",
          "independent_review": "Independent reviewer passed limited visual QA: pale opaque thickened broth, three grey-skinned cross-cut white-fleshed fish steaks, sparse fine leaf slivers, no yam cubes, palm oil or other meats. Exact catfish species and thickener cannot be certified from pixels, but required visible form is compatible."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of Ofe Nsala (White Soup), the Igbo CATFISH-and-YAM formulation described here. Show a modest serving in one simple off-white shallow ceramic bowl on a neutral warm gray tabletop.\nCooked subject: Two or three substantial catfish CROSS-CUT STEAKS, gently simmered and clearly cooked, partly submerged in a pale cream to light grey-beige opaque soup. Catfish steaks have recognizable smooth dark-grey scaleless skin forming an irregular band around moist ivory flaking flesh, with the natural central bone or cross-section shape of a steak. Not whole fish, fillets, salmon, beef or assorted meats. The fish is intact enough to identify as cross-cut steaks, but has realistic softened cooked texture and slight natural flaking.\nBroth: Lightly thickened with thoroughly mashed WHITE YAM that has fully dispersed into the liquid. Smooth, gently spoon-coating but still loose/pourable opaque broth. No intact yam cubes or dumplings. Ground dried crayfish and crushed Scotch bonnet form only tiny subtle incorporated specks. Include just a FEW very fine cooked dark-green UTAZI leaf slivers distributed sparingly throughout, because the entire four-serving pot uses only one teaspoon. No decorative mound of herbs or large leaves.\nExact ingredients: Catfish steaks, dispersed yam paste, ground dried crayfish, crushed Scotch bonnet, sparse fine utazi, water and salt. No added oil; specifically NO palm oil, orange-red oil slick or tomato. Optional ground ogiri seasoning or stock cube would be dissolved invisibly.\nFraming and light: Centered one bowl, whole vessel visible with a modest margin. Close three-quarter overhead angle, soft diffuse daylight, accurate restrained pale food color and honest home-cooked texture.\nCritical exclusions: No red/orange soup, clear watery pepper soup, coconut milk, dairy cream swirl, tomato chunks, onions, beef, chicken, assorted meats, intact yam pieces, large leafy greens, parsley, cilantro, raw chili garnish, rice, pounded-yam side or other accompaniment. No utensils, props, extra dishes, hands or people. No text, label, caption, logo, watermark, border, collage or grid. One original AI illustration only, not documentary evidence of an actual cooked or kitchen-tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of pale Ofe Nsala with cooked grey-skinned catfish steaks and sparse fine utazi leaf slivers.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Pale opaque thickened broth with three grey-skinned cross-cut fish steaks and sparse fine leaf slivers; no yam cubes, palm-oil coloring or other meats. Exact fish species and yam thickener cannot be established solely from pixels.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "3b82194d94ce3ecea9eca874dba08dc5dd0036e0f97b35255c6f5b91076d7088",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Pale opaque thickened broth with three grey-skinned cross-cut fish steaks and sparse fine leaf slivers; no yam cubes, palm-oil coloring or other meats. Exact fish species and yam thickener cannot be established solely from pixels."
      },
      "visual_spec": {
        "visible_food_spec": "Catfish steaks in a pale soup lightly thickened with completely dispersed mashed white yam, with sparse finely sliced utazi and ground seasonings.",
        "texture_and_color": "Pale cream to light grey-beige opaque broth, grey-skinned catfish steaks and a few dark-green leaf slivers.",
        "key_negative_constraints": "No palm oil or orange-red oil slick, tomato, beef, yam cubes, cream swirl, abundant leafy greens or whole fish.",
        "do_not_confuse_with": [
          "Clear catfish pepper soup",
          "orange palm-fruit banga soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/ofe-nsala.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ofe-okazi",
      "live_post_id": "recipe-ng-traditional-20261004-ofe-okazi",
      "asset": {
        "relative_path": "assets/ai/ofe-okazi.png",
        "sha256": "2d3437e558675a6a0b177a93a1d086c6afa001559c7f0ea8a0ebe505282a7996",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2423938,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of this exact formulation of Ofe Okazi, achi-thickened leaf soup. One unpatterned neutral off-white ceramic bowl contains an orange-brown silky spoonable palm-oil soup base thickened with fully dissolved ground achi. Throughout the visible orange-brown base are distinct very narrow dark-green threads of cooked okazi leaves, cut extremely finely into short slender ribbons, not pounded or pureed. Tender medium-small stewing-beef pieces and irregular deboned smoked-fish pieces partly emerge. Ground dried crayfish and Scotch bonnet are cooked into the sauce. Only okazi is used as the leafy vegetable. The achi thickener is smooth and has no visible grains, curds or seeds. Keep ample smooth orange-brown sauce visible between narrow leaf threads and protein pieces. This is not Afang: do not depict a dense dark mound of pounded greens or waterleaf. No waterleaf, spinach, large torn oha leaves, egusi curds, whole seeds, dry leaves, leaf garnish or any other unlisted ingredient. Landscape 4:3, close three-quarter overhead view, complete bowl visible with modest margin, simple warm neutral tabletop, soft natural side daylight, accurate muted food color and realistic cooked texture. No people, utensils, styling ingredients, extra dishes, swallow, text, logos, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of a cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://www.nigerianfoodtv.com/how-to-cook-okazi-soup-ukazi-soup/",
          "https://www.interesjournals.org/articles/recipe-standardization-and-potential-nutrient-contribution-of-ukazi-soup-commonly-consumed-in-umuahia-abia-state-nigeria-90979.html"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-80469927-46cc-4636-b35b-66ff7a11ac89.png",
        "source_visual_review": "PASS as illustrative fallback: orange-brown silky thickened base with many fine sliced dark-green threads, beef and smoked-fish pieces. Smooth sauce visible between leaf ribbons, no Afang-style pounded/waterleaf mound, egusi curds, large torn leaves or added garnish.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of this exact formulation of Ofe Okazi, achi-thickened leaf soup. One unpatterned neutral off-white ceramic bowl contains an orange-brown silky spoonable palm-oil soup base thickened with fully dissolved ground achi. Throughout the visible orange-brown base are distinct very narrow dark-green threads of cooked okazi leaves, cut extremely finely into short slender ribbons, not pounded or pureed. Tender medium-small stewing-beef pieces and irregular deboned smoked-fish pieces partly emerge. Ground dried crayfish and Scotch bonnet are cooked into the sauce. Only okazi is used as the leafy vegetable. The achi thickener is smooth and has no visible grains, curds or seeds. Keep ample smooth orange-brown sauce visible between narrow leaf threads and protein pieces. This is not Afang: do not depict a dense dark mound of pounded greens or waterleaf. No waterleaf, spinach, large torn oha leaves, egusi curds, whole seeds, dry leaves, leaf garnish or any other unlisted ingredient. Landscape 4:3, close three-quarter overhead view, complete bowl visible with modest margin, simple warm neutral tabletop, soft natural side daylight, accurate muted food color and realistic cooked texture. No people, utensils, styling ingredients, extra dishes, swallow, text, logos, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of a cooked or tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact plant/protein species, hidden ingredients, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "Available okazi/Afang photos do not establish the achi-thickened Igbo form required by this recipe; no substitution."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of achi-thickened ofe okazi with fine leaf strips, beef and smoked fish",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Orange-brown achi-like thickened base, narrow sliced leaf threads, beef and smoked fish; no pounded waterleaf heap or egusi curds.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "2d3437e558675a6a0b177a93a1d086c6afa001559c7f0ea8a0ebe505282a7996",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of achi-thickened palm-oil soup with very finely sliced cooked okazi ribbons, beef and deboned smoked fish; no other leafy vegetable.",
        "texture_and_color": "Orange-brown silky spoonable base containing distinct narrow dark-green leaf threads.",
        "key_negative_constraints": "No waterleaf, spinach, large torn oha leaves, egusi curds, whole sesame seeds or dry leaf heap.",
        "do_not_confuse_with": [
          "Afang soup with pounded leaves and waterleaf",
          "egusi soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/ofe-okazi.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "abacha",
      "live_post_id": "recipe-ng-traditional-20261004-abacha",
      "asset": {
        "relative_path": "assets/photos/abacha.jpg",
        "sha256": "97baf24d85bda5b02cdfdee5993e91c23089bfac41900b0b6696c5681f5fcd82",
        "width": 4000,
        "height": 3000,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2600636,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Ceslause",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:A_plate_of_homemade_%C3%A0b%C3%A0ch%C3%A0.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/c/cd/A_plate_of_homemade_%C3%A0b%C3%A0ch%C3%A0.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "A_plate_of_homemade_àbàchà.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/c/cd/A_plate_of_homemade_%C3%A0b%C3%A0ch%C3%A0.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Cassava-ribbon abacha salad with red onion, garden eggs, greens and protein pieces",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "A_plate_of_homemade_àbàchà.jpg by Ceslause, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Abacha cassava salad with ugba, garden egg, onion, greens and fish",
      "caveats": [
        "Visible cassava ribbons, oil-bean-like strips and garden-egg garnish fit dish. Additional large brown protein pieces and presentation may differ from canonical smoked-mackerel-only protein.",
        "Visible cassava ribbons, oil-bean-like strips and garden-egg garnish fit dish. Additional large brown protein pieces and presentation may differ from canonical smoked-mackerel-only protein.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Larger fish portions and garden-egg wedges than canonical chopped/flaked forms; named cassava-and-ugba salad components are plainly visible. No spaghetti or rice substitution."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "97baf24d85bda5b02cdfdee5993e91c23089bfac41900b0b6696c5681f5fcd82",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: thin golden-orange cassava shreds with thicker brown ugba ribbons, garden-egg wedges, red-onion rings, chopped green leaves and browned fish pieces."
      },
      "visual_spec": {
        "visible_food_spec": "A cassava-shred salad coated in creamy palm-oil dressing, mixed with ugba strips, chopped garden eggs, fine garden-egg leaves and deboned smoked-mackerel pieces; sliced red onion served on top.",
        "texture_and_color": "Pale golden-orange thin flat irregular cassava shreds with darker tan oil-bean ribbons, green leaves, pale garden egg and brown fish.",
        "key_negative_constraints": "No spaghetti, carrots, cabbage, boiled egg, cow skin, grilled whole fish or giant lettuce leaves.",
        "do_not_confuse_with": [
          "Ugba-only oil-bean salad",
          "noodles or coleslaw"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/abacha.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ukwa-porridge",
      "live_post_id": "recipe-ng-traditional-20261004-ukwa-porridge",
      "asset": {
        "relative_path": "assets/photos/ukwa-porridge.png",
        "sha256": "8349d079e1c68e4f8dbfdd46acd56fd8aecff45be8bdaf51067dbcfb22842aed",
        "width": 640,
        "height": 480,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 274372,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Ozims Divine",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Ukwa_(cooked_breadfruit).png",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/c/ce/Ukwa_%28cooked_breadfruit%29.png?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ukwa_(cooked_breadfruit).png",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/c/ce/Ukwa_%28cooked_breadfruit%29.png?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Cooked yellow-brown ukwa porridge in open serving coolers",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ukwa_(cooked_breadfruit).png by Ozims Divine, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ukwa porridge in two serving containers",
      "caveats": [
        "Source identifies cooked African breadfruit. This is a low-resolution buffet-serving photograph with black borders; greens and smoked fish are not clearly discernible, not proof of the exact formulation.",
        "Source identifies cooked African breadfruit. This is a low-resolution buffet-serving photograph with black borders; greens and smoked fish are not clearly discernible, not proof of the exact formulation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Low-resolution video-like frame; individual breadfruit seeds and proteins cannot be resolved reliably. Source names cooked African breadfruit; suitable only as a documentary thumbnail, not detailed texture evidence."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "8349d079e1c68e4f8dbfdd46acd56fd8aecff45be8bdaf51067dbcfb22842aed",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: two insulated containers filled with a coarse golden cooked porridge with scattered darker leaf flecks."
      },
      "visual_spec": {
        "visible_food_spec": "A soft African-breadfruit-seed porridge, with small oval ukwa seeds still identifiable, smoked-fish flakes and chopped wilted ugu in a small amount of thickened cooking liquid.",
        "texture_and_color": "Creamy yellow-orange seeds and sauce, dark-green leaves and brown fish flakes.",
        "key_negative_constraints": "No rice grains, corn kernels, large breadfruit fruit cubes, pigeon peas, meat, raw garnish or excess broth.",
        "do_not_confuse_with": [
          "Rice porridge",
          "sweetcorn porridge",
          "ordinary beans"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ukwa-porridge.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "okpa",
      "live_post_id": "recipe-ng-traditional-20261004-okpa",
      "asset": {
        "relative_path": "assets/photos/okpa.jpg",
        "sha256": "83d4e6ea3b8299372143e34801b09fb6d2d9cc34cc60de0a3628c240de9fedd2",
        "width": 3120,
        "height": 3747,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1676938,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "NiferO",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Freshly_Cooked_Okpa_Delight.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/f/fc/Freshly_Cooked_Okpa_Delight.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Freshly_Cooked_Okpa_Delight.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/f/fc/Freshly_Cooked_Okpa_Delight.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Golden-orange okpa pudding cut into thick pieces on a white plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Freshly_Cooked_Okpa_Delight.jpg by NiferO, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Golden okpa pudding cut into pieces",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source explicitly identifies Bambara-nut okpa. Dense golden pudding and cut surfaces fit; photographed after unwrapping and slicing.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Broken and sliced serving rather than whole ramekin forms. Fine compact interior and uniform palm-oil coloring fit named Bambara pudding; bean identity remains source-supported."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "83d4e6ea3b8299372143e34801b09fb6d2d9cc34cc60de0a3628c240de9fedd2",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Golden-orange dense smooth bean-pudding chunks on a plate, some retaining a mould or wrapper-shaped curve; no filling visible."
      },
      "visual_spec": {
        "visible_food_spec": "Unmoulded Bambara-bean puddings steamed in simple ramekins, one cut open to reveal an evenly set, dense tender interior and tiny pepper flecks.",
        "texture_and_color": "Uniform mustard-gold to golden yellow from palm oil, smooth moist surface and fine compact crumb.",
        "key_negative_constraints": "No egg, fish, onion, crayfish, corn kernels, leafy wrapper, browned crust or separate sauce.",
        "do_not_confuse_with": [
          "Orange moi moi with egg",
          "white ekuru",
          "corn abari"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/okpa.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "edikang-ikong",
      "live_post_id": "recipe-ng-traditional-20261004-edikang-ikong",
      "asset": {
        "relative_path": "assets/photos/edikang-ikong.jpg",
        "sha256": "abcc997e160caaba342ebde8a9f48d7b93c01b0c14b35a83eedb22ab1f9014bf",
        "width": 720,
        "height": 540,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 228431,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aderiqueza",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Edikang_ikong.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/0/07/Edikang_ikong.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Edikang_ikong.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/0/07/Edikang_ikong.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Dense dark-green edikang ikong vegetable soup with assorted meat and fish pieces in a bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Edikang_ikong.jpg by Aderiqueza, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Edikang ikong vegetable stew with meat and fish",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source specifically names edikang ikong; dense chopped leafy vegetables fit. Assorted meat and visible fish-bone/cut shapes differ from exact canonical preparation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source-supported named two-leaf stew; varied larger protein cuts than canonical and modest low-resolution detail. No egusi curds or dominant red tomato-style sauce."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "abcc997e160caaba342ebde8a9f48d7b93c01b0c14b35a83eedb22ab1f9014bf",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "A plate densely filled with dark chopped leafy vegetable stew and numerous brown meat/fish pieces with small oil glints."
      },
      "visual_spec": {
        "visible_food_spec": "A moist dense vegetable stew with separately sliced ugu and chopped waterleaf, beef pieces and deboned smoked fish; omit optional periwinkle.",
        "texture_and_color": "Abundant dark-green chopped and folded leaves, reddish palm-oil glints and brown proteins, very little free broth.",
        "key_negative_constraints": "No red bell pepper or tomatoes, egusi curds, cream, whole prawns, shells or large pool of broth.",
        "do_not_confuse_with": [
          "Red-pepper efo riro",
          "fine-pounded afang",
          "watery spinach soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/edikang-ikong.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "afang-soup",
      "live_post_id": "recipe-ng-traditional-20261004-afang-soup",
      "asset": {
        "relative_path": "assets/photos/afang-soup.jpg",
        "sha256": "b3b33adc71d55ea2f23a30e646b0eea208bb9f30506c8ac595bf3b91b6a61e5e",
        "width": 4032,
        "height": 3024,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 3090021,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Joan Onanyo",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Afang_soup_and_pounded_yam_01.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/8/80/Afang_soup_and_pounded_yam_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Afang_soup_and_pounded_yam_01.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/8/80/Afang_soup_and_pounded_yam_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Dark-green afang soup with large dark protein pieces in an earthenware bowl, beside pounded yam",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Afang_soup_and_pounded_yam_01.jpg by Joan Onanyo, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Afang leafy soup with meat and fish, served with pounded yam",
      "caveats": [
        "Source specifically names afang; dense cooked leaves fit. Large dark protein pieces and separate pounded-yam accompaniment vary from the exact serving.",
        "Source specifically names afang. Visible leaves are coarser and stringier than canonical pounded afang, with large skin-like protein pieces; separate pounded yam is an accompaniment. Named-dish reference, not this exact formulation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Leaves are visibly coarser and stringier than canonical finely pounded preparation, and larger assorted cuts are present. Source identifies Afang; retain preparation/serving caveat rather than claiming exact recipe texture."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "b3b33adc71d55ea2f23a30e646b0eea208bb9f30506c8ac595bf3b91b6a61e5e",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual full-size inspection: dark-green leafy stew with fish shreds and brown meat or skin-like pieces in an earthenware bowl, with separate pounded yam."
      },
      "visual_spec": {
        "visible_food_spec": "A thick vegetable stew of very finely sliced and pounded afang integrated with softer chopped waterleaf, beef and deboned smoked fish; omit optional periwinkle.",
        "texture_and_color": "Dense dark green fine-textured leaves with subtle orange oil sheen and little free broth, visibly finer than edikang ikong.",
        "key_negative_constraints": "No large intact afang leaves, long wiry leaf strips, egusi curds, tomato chunks, cream, shellfish or watery broth.",
        "do_not_confuse_with": [
          "Achi-thickened ofe okazi with long ribbons",
          "coarser edikang ikong"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/afang-soup.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "abak-atama",
      "live_post_id": "recipe-ng-traditional-20261004-abak-atama",
      "asset": {
        "relative_path": "assets/photos/abak-atama.jpg",
        "sha256": "d3233ef83238a2f19731ae7039dac3e6c3acdd2bdb08625eb52c5367297efbeb",
        "width": 4000,
        "height": 1800,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 3766272,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Psalmbusy",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Abak_soup_16.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/3/39/Abak_soup_16.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Abak_soup_16.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/3/39/Abak_soup_16.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Golden palm-fruit atama soup with chopped leaves and large fish or meat pieces in a metal bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Abak_soup_16.jpg by Psalmbusy, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Abak atama soup with large fish portions",
      "caveats": [
        "Part of a specifically documented Abak-atama preparation series. Golden palm-fruit broth and chopped leaves fit; cut sizes are documentary serving variants.",
        "Part of a specifically documented Abak-atama preparation series. Golden palm-fruit broth and chopped leaves fit; cut sizes are documentary serving variants.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Fish portions appear larger and less fully broken up than canonical deboned fish. Soup identity is supported by exact source/series; no proof of leaf species from pixels."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "d3233ef83238a2f19731ae7039dac3e6c3acdd2bdb08625eb52c5367297efbeb",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual larger inspection: brown-orange palm-fruit soup with dense fine dark leaf particles and large fish portions in a metal bowl."
      },
      "visual_spec": {
        "visible_food_spec": "Palm-fruit soup with a substantial amount of very finely sliced and pounded atama leaves, beef and deboned smoked fish; omit optional periwinkle and remove woody uyayak.",
        "texture_and_color": "Rust-orange to reddish-brown palm-fruit base with fine dark-green atama distributed through it, glossy and moderately thick.",
        "key_negative_constraints": "No catfish steaks, whole spice sticks, abundant whole herbs, tomato chunks, shellfish or generic bright-green spinach puree.",
        "do_not_confuse_with": [
          "Delta banga with catfish steaks",
          "ofe akwu with sparse scent leaf",
          "green afang stew"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/abak-atama.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ekpang-nkukwo",
      "live_post_id": "recipe-ng-traditional-20261004-ekpang-nkukwo",
      "asset": {
        "relative_path": "assets/photos/ekpang-nkukwo.jpg",
        "sha256": "58c72c4c959ec3a0c898be368444f2a9d792ec7f0e9deec49466dd8f903b19d9",
        "width": 1227,
        "height": 815,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 487233,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Artemisthe1st",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Ekpangnkukwo_01.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/f/f1/Ekpangnkukwo_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ekpangnkukwo_01.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/f/f1/Ekpangnkukwo_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Orange-gold ekpang nkukwo with cooked green leaf pieces, heaped in a patterned bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ekpangnkukwo_01.jpg by Artemisthe1st, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ekpang nkukwo cocoyam pottage in a decorative pot",
      "caveats": [
        "Source explicitly names the cocoyam-and-water-yam dish. Cooked parcels are soft and partly merged; this styled small-bowl serving differs from the recipe’s pot presentation.",
        "Source explicitly names the cocoyam-and-water-yam dish. Cooked parcels are soft and partly merged; this styled small-bowl serving differs from the recipe’s pot presentation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Cooked parcels are partly merged and most food is below the rim; not a step-by-step wrapper demonstration. Source identifies ekpang and the visible soft leaf/starch structure is compatible."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "58c72c4c959ec3a0c898be368444f2a9d792ec7f0e9deec49466dd8f903b19d9",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: orange-gold thick cocoyam pottage with green leaf-wrapped folds and softened irregular parcel-like pieces rising above a decorative serving pot."
      },
      "visual_spec": {
        "visible_food_spec": "Small cocoyam-leaf parcels filled with finely grated cocoyam and water yam, gently cooked until softened, in thickened palm-oil sauce with deboned smoked fish and shelled periwinkle meat.",
        "texture_and_color": "Soft olive-green leaf wrappers around pale cooked starch, orange-gold thick sauce with fish flakes and tiny dark periwinkle pieces.",
        "key_negative_constraints": "No large whole leaf packets, rice stuffing, meat cubes, unshelled periwinkles, snails, tomato sauce or raw leaves.",
        "do_not_confuse_with": [
          "Unwrapped ikokore yam dumplings",
          "grape-leaf dolmas",
          "large leaf-wrapped moi moi"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ekpang-nkukwo.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "delta-banga-soup",
      "live_post_id": "recipe-ng-traditional-20261004-delta-banga-soup",
      "asset": {
        "relative_path": "assets/photos/delta-banga-soup.jpg",
        "sha256": "4eb1ed8284e7ca3e2b38c89b22d58b68e6358dac803f5465dba9864e5cfbe593",
        "width": 2560,
        "height": 1920,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1191173,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Justdifference",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Eba_served_with_Fresh_fish_banga_soup_in_a_clay_pot.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/b/bc/Eba_served_with_Fresh_fish_banga_soup_in_a_clay_pot.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Eba_served_with_Fresh_fish_banga_soup_in_a_clay_pot.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/b/bc/Eba_served_with_Fresh_fish_banga_soup_in_a_clay_pot.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Brown-orange fresh-fish banga soup in a clay bowl beside yellow eba",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Eba_served_with_Fresh_fish_banga_soup_in_a_clay_pot.jpg by Justdifference, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Fish banga soup in a clay pot with eba alongside",
      "caveats": [
        "File source specifically identifies fresh-fish banga and gives Delta-area coordinates. Photo shows head/large fish portions and eba accompaniment, rather than only canonical catfish steaks.",
        "File source specifically identifies fresh-fish banga and gives Delta-area coordinates. Photo shows head/large fish portions and eba accompaniment, rather than only canonical catfish steaks.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Named fresh-fish banga source and visible soup form agree. Fish pieces are partly broken up and species not certain from pixels; eba is a separate accompaniment. Flash/dimness limits fine texture."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "4eb1ed8284e7ca3e2b38c89b22d58b68e6358dac803f5465dba9864e5cfbe593",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: orange-brown thick palm-fruit soup with visible fish pieces in a clay pot, beside a pale yellow eba mound."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of palm-fruit soup containing intact cooked catfish cross-cut steaks and deboned smoked fish, with crushed beletete leaves and ground banga spice; omit optional periwinkle.",
        "texture_and_color": "Deep orange-rust to brown-red, rich smooth palm-fruit body with an oil sheen and sparse dark leaf flecks.",
        "key_negative_constraints": "No beef, tomato chunks, egusi, cream, large green leaves, shellfish, visible woody spice stick or raw fish.",
        "do_not_confuse_with": [
          "Ofe akwu with beef and scent leaf",
          "pale catfish pepper soup"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/delta-banga-soup.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "owo-soup-delta",
      "live_post_id": "recipe-ng-traditional-20261004-owo-soup-delta",
      "asset": {
        "relative_path": "assets/ai/owo-soup-delta.png",
        "sha256": "1f695a66adbfed1756116daaff8e0eb40888c7b67ade7fd6676e7c95db651546",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2398747,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Delta Owo Soup, this exact tomato-free garri-thickened recipe. One plain neutral off-white ceramic bowl holds a substantial spoonable opaque mustard-yellow to warm golden-orange soup, its palm oil fully emulsified into the body. The cooked softened fine garri is fully integrated with a smooth-to-finely-grainy creamy texture and no dry grains or dumplings. Several small tender brown stewing-beef cubes and modest irregular deboned smoked-fish pieces partially emerge from the golden body. Ground crayfish and crushed Scotch bonnet are simmered into the soup, no visible whole seafood or whole peppers. The sauce is smooth and thick but still fluid between protein pieces, with muted gloss. No leafy vegetables, tomatoes, egusi curds, garri balls, cream swirl, froth, deep-red separated oil layer, snails, bushmeat, periwinkles, shells, prawns, stockfish bones or other added protein. Depict only beef and smoked-fish pieces in this golden soup, no starch, yam, plantain, side dishes or garnish. Landscape 4:3, close three-quarter overhead view, entire bowl visible centered with clear modest margin, plain warm neutral tabletop, soft natural side daylight and realistic cooked texture. No people, hands, utensils, props, scattered ingredients, lettering, logo, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://www.allnigerianrecipes.com/soups/urhobo-owho-soup/",
          "https://withlovebawo.com/owo-soup/",
          "https://www.nigerianfoodtv.com/owo-soup-oghwo-ofigbo-ogwofibo/",
          "https://www.foodstandards.gov.au/consumer/prevention-of-foodborne-illness/cassava"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-7aa59f93-6e08-44a2-b5a7-e398aafac7fc.png",
        "source_visual_review": "Opaque mustard-golden yellow soup body with fine integrated texture, brown beef and smoked-fish pieces, no leafy vegetables, snail/periwinkle shells, bushmeat, tomato, cream swirl or separated red oil layer.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Delta Owo Soup, this exact tomato-free garri-thickened recipe. One plain neutral off-white ceramic bowl holds a substantial spoonable opaque mustard-yellow to warm golden-orange soup, its palm oil fully emulsified into the body. The cooked softened fine garri is fully integrated with a smooth-to-finely-grainy creamy texture and no dry grains or dumplings. Several small tender brown stewing-beef cubes and modest irregular deboned smoked-fish pieces partially emerge from the golden body. Ground crayfish and crushed Scotch bonnet are simmered into the soup, no visible whole seafood or whole peppers. The sauce is smooth and thick but still fluid between protein pieces, with muted gloss. No leafy vegetables, tomatoes, egusi curds, garri balls, cream swirl, froth, deep-red separated oil layer, snails, bushmeat, periwinkles, shells, prawns, stockfish bones or other added protein. Depict only beef and smoked-fish pieces in this golden soup, no starch, yam, plantain, side dishes or garnish. Landscape 4:3, close three-quarter overhead view, entire bowl visible centered with clear modest margin, plain warm neutral tabletop, soft natural side daylight and realistic cooked texture. No people, hands, utensils, props, scattered ingredients, lettering, logo, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact species, hidden ingredients, elasticity, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of golden Delta owo soup with beef and smoked fish",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Opaque golden finely textured soup body with beef-like cubes and flaky smoked fish, no leafy garnish, snails, periwinkles or separated red-oil layer. No proof of hidden thickener or protein species from pixels.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "1f695a66adbfed1756116daaff8e0eb40888c7b67ade7fd6676e7c95db651546",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Opaque golden finely textured soup body with beef-like cubes and flaky smoked fish, no leafy garnish, snails, periwinkles or separated red-oil layer. No proof of hidden thickener or protein species from pixels."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of garri-thickened beef-and-smoked-fish soup with emulsified palm oil; softened garri is fully integrated with no dry lumps.",
        "texture_and_color": "Opaque mustard yellow to warm golden orange, smooth-to-finely-grainy creamy body with brown beef and smoked fish.",
        "key_negative_constraints": "No leafy vegetables, egusi curds, tomatoes, cream swirl, garri dumplings, froth or separated deep-red oil layer.",
        "do_not_confuse_with": [
          "Red oily banga",
          "white bean puree",
          "Owo variants thickened differently"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/owo-soup-delta.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "usi-starch",
      "live_post_id": "recipe-ng-traditional-20261004-usi-starch",
      "asset": {
        "relative_path": "assets/ai/usi-starch.png",
        "sha256": "9a967eb06653bb4069b1376597dce07ff89c8b5da35ee7754d95283179c838c6",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2249355,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Usi, Delta cassava starch swallow, based on this exact formulation: food-grade cassava starch cooked with water and a little red palm oil, continuously stirred and folded until glossy, translucent and elastic. Depict one modest smooth folded mound served warm on a plain off-white ceramic plate. The rich golden-yellow to amber-orange mound is a cohesive thick elastic starch gel with broad soft folds, slight translucency especially at thin folded edges, and a glossy moist surface. The shape is an ordinary hand-served folded starch portion, with gentle asymmetry, not a perfect sphere or ornamental spiral. It holds its own folded mound shape rather than spreading into liquid. No visible grains, floury white patches, matte crumbly eba texture, maize meal, custard, liquid pudding, wrappers, plastic, soup, sauce, garnish or extra food. Landscape 4:3, complete mound and entire plate fully visible centered with clear margin, close three-quarter overhead view on a plain warm neutral tabletop, soft natural side daylight, realistic cooked surface and restrained natural gloss. No people, hands, utensils, props, extra dishes, lettering, logo, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://www.thepretendchef.com/how-to-make-starch-usi/",
          "https://www.kitchenbutterfly.com/how-to-make-starch-usi/",
          "https://www.foodstandards.gov.au/consumer/prevention-of-foodborne-illness/cassava"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-7709113a-72ce-4d2a-8c3e-0b29189e57a2.png",
        "source_visual_review": "Golden-yellow to amber cohesive folded starch mound, glossy and subtly translucent with no grains, floury patches, wrappers or other foods; full mound and plate visible.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Usi, Delta cassava starch swallow, based on this exact formulation: food-grade cassava starch cooked with water and a little red palm oil, continuously stirred and folded until glossy, translucent and elastic. Depict one modest smooth folded mound served warm on a plain off-white ceramic plate. The rich golden-yellow to amber-orange mound is a cohesive thick elastic starch gel with broad soft folds, slight translucency especially at thin folded edges, and a glossy moist surface. The shape is an ordinary hand-served folded starch portion, with gentle asymmetry, not a perfect sphere or ornamental spiral. It holds its own folded mound shape rather than spreading into liquid. No visible grains, floury white patches, matte crumbly eba texture, maize meal, custard, liquid pudding, wrappers, plastic, soup, sauce, garnish or extra food. Landscape 4:3, complete mound and entire plate fully visible centered with clear margin, close three-quarter overhead view on a plain warm neutral tabletop, soft natural side daylight, realistic cooked surface and restrained natural gloss. No people, hands, utensils, props, extra dishes, lettering, logo, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact species, hidden ingredients, elasticity, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of a glossy golden folded usi cassava-starch swallow",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Fully framed glossy golden slightly translucent folded starch mound, no opaque granular swallow substitution, wrappers, garnish or added food. Texture/elasticity is represented plausibly but not physically proven.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "9a967eb06653bb4069b1376597dce07ff89c8b5da35ee7754d95283179c838c6",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Fully framed glossy golden slightly translucent folded starch mound, no opaque granular swallow substitution, wrappers, garnish or added food. Texture/elasticity is represented plausibly but not physically proven."
      },
      "visual_spec": {
        "visible_food_spec": "One smooth folded mound of cooked cassava starch coloured with red palm oil, served warm on a plain plate.",
        "texture_and_color": "Rich golden yellow to amber-orange, glossy translucent elastic gel with broad folds and no opaque floury patches.",
        "key_negative_constraints": "No visible grains, matte crumbly texture, white patches, soup, sauce or garnish; do not make it a liquid pudding.",
        "do_not_confuse_with": [
          "Opaque yellow eba",
          "maize swallow",
          "custard"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/usi-starch.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "edo-black-soup",
      "live_post_id": "recipe-ng-traditional-20261004-edo-black-soup",
      "asset": {
        "relative_path": "assets/ai/edo-black-soup.png",
        "sha256": "da9bb8d84b5ebc4bba5c51729302a1d17387605667e73d8e46f27a3b93591b13",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2572504,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng editorial recipe illustration. Generate a single realistic food-photograph-style image of Edo Black Soup, Omoebe, specifically the palm-fruit and finely ground leaf version. One plain off-white neutral ceramic bowl holds a very dark green-brown soup, near black in thicker areas, made from palm-fruit concentrate fully integrated with finely pureed washed bitterleaf, scent leaf and uziza. The body has a fine uniform tiny-leaf-grain puree texture and muted gently glossy surface, dark olive-brown rather than bright green or artificial jet black. Several tender medium small cubed stewing-beef pieces and irregular deboned smoked-fish flesh pieces partially emerge from this dark soup. Onion, crushed Scotch bonnet and ground dried crayfish are cooked into it and not visible as garnish. Soup is substantial but fluid around the protein. Landscape 4:3 composition, single bowl fully visible, centered close three-quarter overhead food photography on a plain warm beige tabletop, soft natural side daylight, realistic ordinary cooked texture. Show only this dish. No fresh herb sprigs, intact large leaves, raw garnish, egusi curds, tomato chunks, cream, bright green ewedu, artificial black dye, extra ingredients, whole fish, side dishes, swallow, utensils, props, people, text, logos or watermarks. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked recipe.",
        "source_recipe_reference_urls": [
          "https://allnigerianfoods.com/black-soup/",
          "https://joyfulcook.com/recipe/edo-state-black-soup-omoebe/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-07f23ac8-1218-41d6-b67c-7863ae8f7753.png",
        "source_visual_review": "PASS as illustrative fallback: visibly dark olive green-brown integrated leaf puree and palm-fruit base, several beef and fish pieces, muted oil gloss. Finely textured with tiny cooked leaf fragments; not large sliced greens or egusi curds. No fresh garnish or sides.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng editorial recipe illustration. Generate a single realistic food-photograph-style image of Edo Black Soup, Omoebe, specifically the palm-fruit and finely ground leaf version. One plain off-white neutral ceramic bowl holds a very dark green-brown soup, near black in thicker areas, made from palm-fruit concentrate fully integrated with finely pureed washed bitterleaf, scent leaf and uziza. The body has a fine uniform tiny-leaf-grain puree texture and muted gently glossy surface, dark olive-brown rather than bright green or artificial jet black. Several tender medium small cubed stewing-beef pieces and irregular deboned smoked-fish flesh pieces partially emerge from this dark soup. Onion, crushed Scotch bonnet and ground dried crayfish are cooked into it and not visible as garnish. Soup is substantial but fluid around the protein. Landscape 4:3 composition, single bowl fully visible, centered close three-quarter overhead food photography on a plain warm beige tabletop, soft natural side daylight, realistic ordinary cooked texture. Show only this dish. No fresh herb sprigs, intact large leaves, raw garnish, egusi curds, tomato chunks, cream, bright green ewedu, artificial black dye, extra ingredients, whole fish, side dishes, swallow, utensils, props, people, text, logos or watermarks. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact plant/protein species, hidden ingredients, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No reliable openly licensed Edo dish photo identified; a recipe-site result used German Schwarzsauer and was rejected."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of Edo black soup with a dark green-brown ground-leaf base, beef and smoked fish",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Very dark green-brown fine leaf puree with beef and smoked fish; differs materially from the coarser leafy soups.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "da9bb8d84b5ebc4bba5c51729302a1d17387605667e73d8e46f27a3b93591b13",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of palm-fruit soup fully integrated with finely pureed bitterleaf, scent leaves and uziza, containing beef and deboned smoked fish.",
        "texture_and_color": "Very dark green-brown, near black in thick areas; fine uniform leaf puree with a muted glossy surface.",
        "key_negative_constraints": "No intact large leaves, fresh herb sprigs, egusi curds, tomato chunks, cream, jet-black food coloring or charcoal.",
        "do_not_confuse_with": [
          "Bright green ewedu",
          "coarse leafy afang",
          "brown palm-fruit banga"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/edo-black-soup.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ofe-akwu",
      "live_post_id": "recipe-ng-traditional-20261004-ofe-akwu",
      "asset": {
        "relative_path": "assets/photos/ofe-akwu.jpg",
        "sha256": "b47e1806eb50803347e201ab1ba2ab78708e7bbe586c623db0bf6f614c70732b",
        "width": 722,
        "height": 840,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 397531,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "IfyClassique",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Ofe_Akw%E1%BB%A5.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/4/40/Ofe_Akw%E1%BB%A5.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ofe_Akwụ.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/4/40/Ofe_Akw%E1%BB%A5.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Red-brown ofe akwu palm-fruit stew with oil droplets, leafy flecks and protein pieces in a white bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ofe_Akwụ.jpg by IfyClassique, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ofe akwu palm-fruit stew with meat and leafy herbs",
      "caveats": [
        "Photographer documents Igbo palm-fruit stew with scent leaf plus ugu; canonical version uses scent leaf only.",
        "Source explicitly identifies palm-nut extract, scent leaf/nchuanwu and ugu. Red-brown palm-fruit stew body fits; added ugu and flash-lit presentation vary from canonical scent-leaf formulation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Replacement source explicitly identifies palm extract, scent leaves and extra ugu. This confirms palm-fruit stew rather than prior dense-green tripe image; additional ugu is a documented variant. Strong flash and oil sheen obscure some protein detail."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "b47e1806eb50803347e201ab1ba2ab78708e7bbe586c623db0bf6f614c70732b",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: red-brown glossy palm-fruit broth with meat-like portions and scattered green leaf flecks in a white bowl."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of reduced palm-fruit stew with cooked beef cubes, deboned smoked fish, softened onion and fine sliced scent leaves folded in at the end.",
        "texture_and_color": "Glossy reddish-brown to deep orange, moderately thick sauce with separated small oil pools and sparse green herb flecks.",
        "key_negative_constraints": "No catfish steaks, tomato chunks, abundant pounded leaves, periwinkles, egusi, cream or rice in the bowl.",
        "do_not_confuse_with": [
          "Delta banga with catfish",
          "densely leafy abak atama",
          "tomato beef stew"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ofe-akwu.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "achicha-ede",
      "live_post_id": "recipe-ng-traditional-20261004-achicha-ede",
      "asset": {
        "relative_path": "assets/ai/achicha-ede.png",
        "sha256": "6461661c6b89c36da7e6c115d4b9a8646db19bde0e943b4926cdebaa5dc6a9a1",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2561307,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng editorial recipe illustration. Generate a single realistic food-photograph-style image of Achicha Ede with Fio Fio, a Nsukka-associated meal from southeastern Nigeria. One plain neutral off-white ceramic shallow bowl of a dry-moist mixed meal: irregular small softened flakes of previously cooked-and-dried cocoyam, whole tender cooked tan-brown pigeon peas, and thin flat tan-brown strips of ugba fermented oil bean. This is not soup. Individual irregular beige-to-golden cocoyam flakes and roundish whole pigeon peas are the dominant distinct textures; the darker flat ugba strips are intermixed, not arranged like noodles. They have been steamed or boiled until soft, then folded into modest red palm oil with softened translucent sliced onion, crushed Scotch bonnet and finely chopped cooked scent leaves. Warm orange oil sheen coats the ingredients, without a pool of broth. Few tiny dark cooked green flecks only, no extra leafy greens and no crayfish. Ordinary home-cooked texture, appetizing but unembellished. Landscape 4:3 composition, bowl fully visible centered in a close three-quarter overhead view on plain warm neutral tabletop, soft natural side daylight. Only this dish, no fresh garnish, no long cassava noodles or abacha, corn, fresh cocoyam cubes, whole fish, meat, rice, pasta, carrots, raw onions, parsley, sides, utensils, props, people, text, logo or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked recipe.",
        "source_recipe_reference_urls": [
          "https://www.allnigerianrecipes.com/cocoyam/achicha-ede/",
          "https://onyinyeolufunmi.wordpress.com/2020/07/01/how-to-make-achicha-ede/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-cb93bc48-8f5c-47f5-b6d7-5e7acff57a31.png",
        "source_visual_review": "PASS as illustrative fallback after refinement and independent review: small soft crumbly irregular cocoyam flakes rather than thick fried slices, whole cooked pigeon peas, flat tan-brown ugba strips, softened onion and sparse cooked scent-leaf flecks. Dry-moist consistency, no broth, meat, fish or garnish. Optional extra greens/crayfish omitted.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng editorial recipe illustration. Generate a single realistic food-photograph-style image of Achicha Ede with Fio Fio, a Nsukka-associated meal from southeastern Nigeria. One plain neutral off-white ceramic shallow bowl of a dry-moist mixed meal: irregular small softened flakes of previously cooked-and-dried cocoyam, whole tender cooked tan-brown pigeon peas, and thin flat tan-brown strips of ugba fermented oil bean. This is not soup. Individual irregular beige-to-golden cocoyam flakes and roundish whole pigeon peas are the dominant distinct textures; the darker flat ugba strips are intermixed, not arranged like noodles. They have been steamed or boiled until soft, then folded into modest red palm oil with softened translucent sliced onion, crushed Scotch bonnet and finely chopped cooked scent leaves. Warm orange oil sheen coats the ingredients, without a pool of broth. Few tiny dark cooked green flecks only, no extra leafy greens and no crayfish. Ordinary home-cooked texture, appetizing but unembellished. Landscape 4:3 composition, bowl fully visible centered in a close three-quarter overhead view on plain warm neutral tabletop, soft natural side daylight. Only this dish, no fresh garnish, no long cassava noodles or abacha, corn, fresh cocoyam cubes, whole fish, meat, rice, pasta, carrots, raw onions, parsley, sides, utensils, props, people, text, logo or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked recipe.",
          "refinement_prompt": "Use case: precise-object-edit. Edit this Achicha Ede with Fio Fio food illustration. Change only the cocoyam starch pieces: replace every thick, browned, fried-looking potato/yam slice with much smaller irregular broken flakes of previously cooked-and-dried cocoyam that have been soaked and steamed until very soft. They must look rough, crumbly and tender, pale cream to pale warm gold with a light palm-oil tint; no golden-brown crust, no crisp surface, no neat rectangular or cut-slice faces, no fresh yam cubes. Make the cocoyam flakes mostly similar to or smaller than the whole pigeon peas, with naturally ragged broken edges and some tiny crumbles. Preserve the whole cooked tan-brown pigeon peas, tan-brown flat ugba strips, softened onion and very sparse cooked scent-leaf flecks, dry-moist consistency without broth, bowl, camera angle, 4:3 landscape framing, warm neutral background and natural light. No new foods, garnish, props, text, watermark or logos. This remains an AI-generated illustrative food image, not a photograph of a tested recipe."
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact plant/protein species, hidden ingredients, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [
            "No reliably licensed finished cocoyam-and-pigeon-pea dish photo found."
          ],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of Achicha Ede with pigeon peas, irregular cocoyam flakes, ugba strips and palm oil",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Revision replaces thick browned starch slices with small irregular crumbly-soft pieces; retains pigeon peas, ugba, onion and sparse cooked scent-leaf flecks. No obvious unlisted ingredient.",
        "Visible appearance checks cannot prove hidden ingredients, leaf species, meat species, taste or preparation. A pass is a limited suitability judgment for a clearly disclosed AI illustration, not a genuine recipe photograph or kitchen verification."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "6461661c6b89c36da7e6c115d4b9a8646db19bde0e943b4926cdebaa5dc6a9a1",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": null
      },
      "visual_spec": {
        "visible_food_spec": "A dry-moist mixed meal of softened dried-cocoyam flakes, whole cooked pigeon peas and tan ugba strips, tossed with palm oil, softened onion, pepper and chopped scent leaves; omit optional other greens.",
        "texture_and_color": "Small irregular crumbly-soft pale cocoyam flakes with rough broken edges, tan-brown peas and darker bean strips with an orange palm-oil sheen and small green flecks; no fried browning.",
        "key_negative_constraints": "No long cassava noodles, corn, thick rectangular yam or potato slices, fried or browned starch surfaces, fresh cocoyam cubes, fish, meat, leafy salad garnish or soupy broth.",
        "do_not_confuse_with": [
          "Abacha long cassava shreds",
          "ukwa seeds",
          "regular rice-and-beans"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/achicha-ede.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ugba",
      "live_post_id": "recipe-ng-traditional-20261004-ugba",
      "asset": {
        "relative_path": "assets/ai/ugba.png",
        "sha256": "5019f18aa2798d246e7af5e106e44974820a3be5e81efa37d2da1ef8df842697",
        "width": 1448,
        "height": 1086,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 2688716,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "OpenAI built-in image_gen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04",
        "prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Ugba (Spiced Oil-Bean Salad), this exact formulation with fermented oil bean as the dominant main dish and no cassava. A single plain neutral off-white shallow ceramic bowl holds a modest heap of very clearly visible fermented African oil-bean strips: flat, irregular elongated tan and beige-to-orange-brown ribbons, with natural darker edges and variable lengths, generously coated with a creamy golden-orange emulsified palm-oil dressing. The ugba strips dominate at least 75 percent of the visible food, retaining distinct flat bean-slice shape, not round noodles. Fold modest small flakes of deboned ready-to-eat smoked fish through the strips, clearly secondary and never large fish chunks that hide the ugba. A few very thin purple-red onion crescents and a sparse scattering of finely sliced fresh garden-egg leaf shreds belong to the exact recipe. The leaf quantity is small, roughly 20 g for 400 g ugba, and must not become a leafy bed or dark vegetable mound. Ground dried crayfish and finely chopped Scotch bonnet are integrated with the dressing, no whole seafood or peppers. Warmed gently, not fried; moist dressed salad, no broth. No cassava shreds, abacha, spaghetti, noodles, garden-egg fruit, carrots, boiled eggs, whole fish, large stockfish chunks, cow skin, meat, mayonnaise or unlisted garnish. Landscape 4:3, complete bowl fully visible centered with modest margin, close three-quarter overhead view on a plain warm neutral tabletop, soft natural side daylight, realistic irregular food textures and muted natural colors. No people, hands, utensils, extra dishes, props, scattered ingredients, lettering, logo, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
        "source_recipe_reference_urls": [
          "https://www.allnigerianrecipes.com/restaurant/ugba/",
          "https://blog.allnigerianrecipes.com/edible-potash-akanwu-alternative/",
          "https://www.thepretendchef.com/ugba-salad-oil-bean-seed-salad/"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-968461a7-5a78-4400-9a09-029688406562.png",
        "source_visual_review": "Dominant distinct tan/beige-to-orange flat elongated oil-bean strips with golden palm-oil dressing; secondary smoked-fish flakes, thin purple onion crescents and sparse fine green leaf shreds. No dark leafy vegetable bed, whole fish, cassava noodles or unlisted sides.",
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural. Asset type: Recipe.ng single-dish recipe catalogue illustration. Create a realistic food-photograph-style original illustration of Ugba (Spiced Oil-Bean Salad), this exact formulation with fermented oil bean as the dominant main dish and no cassava. A single plain neutral off-white shallow ceramic bowl holds a modest heap of very clearly visible fermented African oil-bean strips: flat, irregular elongated tan and beige-to-orange-brown ribbons, with natural darker edges and variable lengths, generously coated with a creamy golden-orange emulsified palm-oil dressing. The ugba strips dominate at least 75 percent of the visible food, retaining distinct flat bean-slice shape, not round noodles. Fold modest small flakes of deboned ready-to-eat smoked fish through the strips, clearly secondary and never large fish chunks that hide the ugba. A few very thin purple-red onion crescents and a sparse scattering of finely sliced fresh garden-egg leaf shreds belong to the exact recipe. The leaf quantity is small, roughly 20 g for 400 g ugba, and must not become a leafy bed or dark vegetable mound. Ground dried crayfish and finely chopped Scotch bonnet are integrated with the dressing, no whole seafood or peppers. Warmed gently, not fried; moist dressed salad, no broth. No cassava shreds, abacha, spaghetti, noodles, garden-egg fruit, carrots, boiled eggs, whole fish, large stockfish chunks, cow skin, meat, mayonnaise or unlisted garnish. Landscape 4:3, complete bowl fully visible centered with modest margin, close three-quarter overhead view on a plain warm neutral tabletop, soft natural side daylight, realistic irregular food textures and muted natural colors. No people, hands, utensils, extra dishes, props, scattered ingredients, lettering, logo, border or watermark. This is an AI-generated illustrative food image, not photographic documentation of an actual cooked or tested recipe.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Image checks cover visible defining structures and obvious additions only. Exact species, hidden ingredients, taste, tested yield and cultural authenticity cannot be proven from generated pixels.",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": [
            {
              "pageURL": "https://commons.wikimedia.org/wiki/File:Ugba_(freshly_cooked).jpg",
              "source_file_url": "https://upload.wikimedia.org/wikipedia/commons/e/ea/Ugba_%28freshly_cooked%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
              "creator": "Aderiqueza",
              "license": "CC BY-SA 4.0",
              "status": "pending_alternative",
              "sha256": "2a120cf0abeafc3c7791094374fd2b422de4d5c60f272597b51569913ab81bbc",
              "exclusion_reason": null,
              "variant_caveats": [
                "Defining fermented oil-bean ribbons are not prominent; leafy greens dominate. Looking for documented Ugba-and-stockfish alternative with the bean component visible."
              ]
            }
          ]
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI illustration of ugba oil-bean salad with smoked-fish flakes, red onion and garden-egg leaf shreds",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Broad flat oil-bean-like ribbons dominate with secondary smoked-fish flakes, thin red onion and sparse green leaf shreds in orange palm-oil dressing; no cassava-noodle substitute, dense leafy bed, whole fish or unexpected side. Ingredient species cannot be proven solely from pixels.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "5019f18aa2798d246e7af5e106e44974820a3be5e81efa37d2da1ef8df842697",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Broad flat oil-bean-like ribbons dominate with secondary smoked-fish flakes, thin red onion and sparse green leaf shreds in orange palm-oil dressing; no cassava-noodle substitute, dense leafy bed, whole fish or unexpected side. Ingredient species cannot be proven solely from pixels."
      },
      "visual_spec": {
        "visible_food_spec": "A salad of distinct fermented oil-bean ribbons coated in creamy palm-oil dressing and mixed with deboned smoked-fish flakes, served with thin red onion and finely sliced garden-egg leaves.",
        "texture_and_color": "Tan to orange-brown flat irregular bean strips, thick golden dressing, green leaf shreds and purple onion.",
        "key_negative_constraints": "No cassava, spaghetti, garden-egg fruit, carrots, boiled egg, whole fish, cow skin or mayonnaise.",
        "do_not_confuse_with": [
          "Abacha with dominant pale cassava shreds",
          "noodle salad"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/ugba.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "nkwobi",
      "live_post_id": "recipe-ng-traditional-20261004-nkwobi",
      "asset": {
        "relative_path": "assets/photos/nkwobi.jpg",
        "sha256": "f1e7f24d259784f4cc9313a6e133adbb5718802d7767a2ed1745c29e6cd4b465",
        "width": 4032,
        "height": 3024,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 3152878,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Joan Onanyo",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Nkwobi_01.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Nkwobi_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Nkwobi_01.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Nkwobi_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Nkwobi cow-foot pieces coated in orange-brown sauce, with red onion rings and green garnish on a wooden plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Nkwobi_01.jpg by Joan Onanyo, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Nkwobi cow-foot pieces with orange dressing, onion and leaves",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source names Nkwobi; visible foot/knuckle forms fit. Sauce is coarse and generous with garnish, rather than a smooth uniform emulsion.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Garnish leaves and red pepper slices are coarser than canonical finely sliced/crushed components. Named source and distinctive foot-like gelatinous anatomy support Nkwobi rather than a generic boneless-meat dish."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "f1e7f24d259784f4cc9313a6e133adbb5718802d7767a2ed1745c29e6cd4b465",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual larger inspection: irregular cow-foot or knuckle-like skin/tendon pieces with some rounded bone forms, coarse orange coating, red-onion rings and green leaves."
      },
      "visual_spec": {
        "visible_food_spec": "Tender small pieces of cow foot, including recognisable gelatinous skin and tendon around some larger bones, coated in creamy palm-oil dressing and finished with thin onion and fine utazi.",
        "texture_and_color": "Orange-ochre creamy coating over brown-beige irregular gelatinous cow-foot pieces; purple-white onion and sparse green slivers.",
        "key_negative_constraints": "No goat head, whole skull, brains, chunks of lean beef only, tomato sauce, parsley or deep broth.",
        "do_not_confuse_with": [
          "Isi ewu goat-head meat",
          "generic boneless beef stew"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/nkwobi.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "isi-ewu",
      "live_post_id": "recipe-ng-traditional-20261004-isi-ewu",
      "asset": {
        "relative_path": "assets/photos/isi-ewu.jpg",
        "sha256": "792767b0c07b30d64995070491665ad31e5a4327295ca91050d59e2bebf028cf",
        "width": 720,
        "height": 960,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 414047,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aderiqueza",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Isi_ewu.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/9/99/Isi_ewu.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Isi_ewu.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/9/99/Isi_ewu.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Isi ewu meat pieces coated in yellow-orange sauce with onion rings and abundant sliced leaves",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Isi_ewu.jpg by Aderiqueza, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Isi ewu meat and skin pieces with onion and leafy garnish",
      "caveats": [
        "Source names Isi ewu. Chopped meat/skin forms and palm-oil coating fit; leafy garnish and sauce texture are generous compared with canonical presentation.",
        "Source names Isi ewu. Chopped meat/skin forms and palm-oil coating fit; leafy garnish and sauce texture are generous compared with canonical presentation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source identifies Isi ewu; larger pieces and heavier leafy garnish than canonical. No whole head display or obvious cow-foot-only structure. Hidden brain inclusion and precise species cannot be determined visually."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "792767b0c07b30d64995070491665ad31e5a4327295ca91050d59e2bebf028cf",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Orange-coated irregular chopped meat and skin pieces with abundant sliced green leaf garnish and pale onion rings, shown in a close food photo."
      },
      "visual_spec": {
        "visible_food_spec": "Small butcher-prepared pieces of cooked goat-head meat, skin and tongue, without brain, dressed in creamy palm oil with thin onion and sliced utazi.",
        "texture_and_color": "Warm orange-gold dressing over darker brown meat, smooth skin and tongue pieces; visible onion and sparse dark-green leaf slivers.",
        "key_negative_constraints": "No whole head or skull display, brain, cow hoof cross-sections, charred skewers, tomato sauce, parsley or broth.",
        "do_not_confuse_with": [
          "Nkwobi cow-foot pieces",
          "asun grilled goat cubes"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/isi-ewu.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "ogbono-soup",
      "live_post_id": "recipe-ng-demo-20261001-chidi-ogbono",
      "asset": {
        "relative_path": "assets/photos/ogbono-soup.webp",
        "sha256": "4f6bd9a02c55d2147bda15a3442414f9f1289d8a7c22d66538304b1ccd189618",
        "width": 900,
        "height": 675,
        "mime_type": "image/webp",
        "image_format": "WEBP",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 253324,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Xtacywura",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Ogbono_soup.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/3/39/Ogbono_soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Ogbono_soup.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/demo/ogbono.webp",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized proportionally to 900x675 pixels; converted to WebP at quality 87; no cropping or content edits.",
        "modifications": "Prior source/site changes: Resized proportionally to 900x675 pixels; converted to WebP at quality 87; no cropping or content edits. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Thick ogbono soup with fish, greens and many periwinkles in a metal bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Ogbono_soup.jpg by Xtacywura, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Ogbono draw soup with greens, meat or fish and periwinkles",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source identifies ogbono; periwinkles are prominent and are a variation from the canonical ingredient list. Source’s English gloss calls ogbono melon inaccurately; retain botanical accuracy in recipe.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Thick ogbono soup with fish, greens and many periwinkles in a metal bowl",
        "Periwinkles and larger cuts are outside canonical formulation; named draw-soup texture is visible. Keep the seafood variation in caption."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "4f6bd9a02c55d2147bda15a3442414f9f1289d8a7c22d66538304b1ccd189618",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Golden-brown thick glossy soup with chopped dark leaves, meat or fish, prominent small greenish periwinkle pieces and visible viscous strands."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of ground-ogbono draw soup with a smooth continuous base, beef cubes, deboned smoked fish and a modest amount of fine ugu leaves.",
        "texture_and_color": "Warm orange-brown to tan, glossy viscous cohesive body, smooth seed-thickened sauce and dark-green leaf flecks.",
        "key_negative_constraints": "No egusi curds, whole bush-mango fruit, okra slices, tomato chunks, cream or dense leafy heap.",
        "do_not_confuse_with": [
          "Egusi with crumbly curds",
          "okra soup with visible pods",
          "leafy efo riro"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/ogbono-soup.webp",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "eba",
      "live_post_id": "recipe-ng-demo-20261001-ada-eba",
      "asset": {
        "relative_path": "assets/photos/eba.jpg",
        "sha256": "4820d9fe9e6bf6672d60e95e72033a6248a101ce618dd2522343d6a6bb678417",
        "width": 3120,
        "height": 4160,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 3948680,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Tesleemah",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Eba_(swallow_food).jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/5/5d/Eba_%28swallow_food%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Eba_(swallow_food).jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/5/5d/Eba_%28swallow_food%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Freshly mixed, coarse pale eba in a green bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Eba_(swallow_food).jpg by Tesleemah, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Freshly mixed eba with a coarse garri texture",
      "caveats": [
        "Source explicitly names garri mixed with boiled water. This rough, grainy mound is a documentary home-preparation view rather than a smooth shaped serving; low light and uneven texture are visible.",
        "Source explicitly names garri mixed with boiled water. This rough, grainy mound is a documentary home-preparation view rather than a smooth shaped serving; low light and uneven texture are visible.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Rough documentary preparation rather than smooth spoon-shaped finished plating; grainy garri texture distinguishes it from smooth fufu. Low light and green color cast. Accept as Eba with accurate preparation caption."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "4820d9fe9e6bf6672d60e95e72033a6248a101ce618dd2522343d6a6bb678417",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Pale coarse-granular hydrated swallow mass in a green bowl, cohesive in irregular mounds with no unrelated food."
      },
      "visual_spec": {
        "visible_food_spec": "A rounded mound of white-garri swallow, thoroughly hydrated and folded; choose the permitted white-garri option consistently.",
        "texture_and_color": "Off-white to pale cream, slightly coarse fine-granular surface, opaque and cohesive with damp spoon marks.",
        "key_negative_constraints": "No separated dry garri, loose rice, stretchy clear jelly, yellow palm-oil coloring, sauce or garnish.",
        "do_not_confuse_with": [
          "Smooth cassava fufu",
          "white rice swallow",
          "translucent yellow usi"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/eba.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "akpu-cassava-fufu",
      "live_post_id": "recipe-ng-traditional-20261004-akpu-cassava-fufu",
      "asset": {
        "relative_path": "assets/photos/akpu-cassava-fufu.jpg",
        "sha256": "868784712af712b763d55af25ceb6f2218117f1499cbc871d6eb27afc4b0928d",
        "width": 3264,
        "height": 1836,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 713261,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Ozims Divine",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Akpu_na_Ofe.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/1/10/Akpu_na_Ofe.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Akpu_na_Ofe.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/1/10/Akpu_na_Ofe.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Three pale wrapped akpu cassava-fufu portions beside a pot of oha soup",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Akpu_na_Ofe.jpg by Ozims Divine, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Wrapped akpu cassava-fufu portions with oha soup alongside",
      "caveats": [
        "Source explicitly identifies akpu with oha. Fufu is visible through clear wrapping; side soup is not part of the recipe, and the processed-flour method cannot be verified from appearance.",
        "Source explicitly identifies akpu with oha. Fufu is visible through clear wrapping; side soup is not part of the recipe, and the processed-flour method cannot be verified from appearance.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source explicitly identifies akpu with oha soup. Wrapping limits surface detail; processed-flour method cannot be inferred and accompanying soup is separate. No claim of exact unwrapped home-recipe plating."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "868784712af712b763d55af25ceb6f2218117f1499cbc871d6eb27afc4b0928d",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Three pale rounded portions individually enclosed in transparent wrapping on a metal plate, beside a bowl of leafy orange soup."
      },
      "visual_spec": {
        "visible_food_spec": "A plain mound of cooked commercially processed fermented cassava-flour fufu, smoothly worked and softly elastic.",
        "texture_and_color": "Off-white, smooth moist satin surface, fully opaque dense cohesive form with gentle folds.",
        "key_negative_constraints": "No coarse garri grains, loose rice, flour dust, yellow oil tint, soup or garnish.",
        "do_not_confuse_with": [
          "Grainier eba",
          "tuwo shinkafa rice swallow",
          "translucent starch"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/akpu-cassava-fufu.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "eko-agidi",
      "live_post_id": "recipe-ng-traditional-20261004-eko-agidi",
      "asset": {
        "relative_path": "assets/photos/eko-agidi.jpg",
        "sha256": "c4db66489eb49052279e58eeca28186dcea85d95cf3c50a54a7e7392c1d4daa6",
        "width": 468,
        "height": 351,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 47850,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Egbedi",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Agidi.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Agidi.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Agidi.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Agidi.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "A pale yellow maize pudding on an opened green leaf wrapper, held in a hand",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Agidi.jpg by Egbedi, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Agidi maize pudding on an opened leaf wrapper",
      "caveats": [
        "Source identifies corn-flour agidi. Smooth set pudding and leaf-wrapper form match; colour reflects maize/lighting and method is not proof of the canonical preparation.",
        "Source identifies corn-flour agidi. Smooth set pudding and leaf-wrapper form match; colour reflects maize/lighting and method is not proof of the canonical preparation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Leaf-shaped traditional serving and warmer shade differ from canonical white-starch ramekin method. Characteristic smooth set pudding is visible; source names agidi, but exact starch processing is not proven."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "c4db66489eb49052279e58eeca28186dcea85d95cf3c50a54a7e7392c1d4daa6",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Smooth pale cream-yellow set maize pudding exposed on an opened green leaf wrapper, held by a hand."
      },
      "visual_spec": {
        "visible_food_spec": "An unmoulded small round ramekin-shaped set white-corn-starch pudding with smooth sides and a softly rounded edge.",
        "texture_and_color": "White to pearly off-white, smooth glossy opaque-to-slightly-translucent set gel; clean firm form.",
        "key_negative_constraints": "No yellow cornmeal, whole kernels, leaf wrapping, tomato coloring, sauce, fruit or garnish.",
        "do_not_confuse_with": [
          "Soft beaten maize tuwo",
          "yellow okpa",
          "orange agidi jollof"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/eko-agidi.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "goat-meat-pepper-soup",
      "live_post_id": "recipe-ng-demo-20261001-musa-pepper-soup",
      "asset": {
        "relative_path": "assets/photos/goat-meat-pepper-soup.webp",
        "sha256": "6bc154122c25bee1d5d3e1d5e609ac65b3db8d1b0ef37ab7169886e2ab8ae7ce",
        "width": 900,
        "height": 1200,
        "mime_type": "image/webp",
        "image_format": "WEBP",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 153196,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Halima Waziri",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Spicy_Goat_meat_pepper_soup.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/7/78/Spicy_Goat_meat_pepper_soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Spicy_Goat_meat_pepper_soup.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/demo/pepper-soup.webp",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized proportionally to 900x1200 pixels; converted to WebP at quality 87; no cropping or content edits.",
        "modifications": "Prior source/site changes: Resized proportionally to 900x1200 pixels; converted to WebP at quality 87; no cropping or content edits. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Goat-meat pepper soup with bone-in pieces and a spoon on a patterned plate",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Spicy_Goat_meat_pepper_soup.jpg by Halima Waziri, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Goat meat pepper soup with large bone-in pieces",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source names goat meat; photo has a thick orange-brown broth and bone-in cuts, a documentary serving variation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Goat-meat pepper soup with bone-in pieces and a spoon on a patterned plate",
        "Larger assorted cuts and stronger orange tint than the canonical goat shoulder/leg presentation; source identifies goat. Casual low-light documentary photo."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "6bc154122c25bee1d5d3e1d5e609ac65b3db8d1b0ef37ab7169886e2ab8ae7ce",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Light brown-orange broth with large bone-in and gelatinous meat pieces and pepper bits, in a plate with a spoon."
      },
      "visual_spec": {
        "visible_food_spec": "A bowl of light goat pepper soup containing bone-in goat pieces, fine cooked onion, ground spice flecks and sliced scent leaves in broth.",
        "texture_and_color": "Light brown to amber mostly transparent broth, brown-grey goat meat with bone ends, sparse green leaves.",
        "key_negative_constraints": "No palm-oil slick, tomatoes, carrots, potatoes, yam, plantain, cream or decorative whole spice pods.",
        "do_not_confuse_with": [
          "Tomato goat stew",
          "creamy groundnut soup",
          "boneless asun"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/goat-meat-pepper-soup.webp",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "catfish-pepper-soup",
      "live_post_id": "recipe-ng-traditional-20261004-catfish-pepper-soup",
      "asset": {
        "relative_path": "assets/photos/catfish-pepper-soup.jpg",
        "sha256": "4cf9eaaaa69e2f08b3f63bae8a8cd9f0a8de35806239bfc5ee88354678d15329",
        "width": 720,
        "height": 635,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 422728,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Aderiqueza",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Catfish_Pepper_Soup.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/8/8f/Catfish_Pepper_Soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Catfish_Pepper_Soup.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/8/8f/Catfish_Pepper_Soup.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Cross-cut dark-skinned catfish pieces in spicy red-brown broth with leafy garnish and yellow chunks",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Catfish_Pepper_Soup.jpg by Aderiqueza, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Catfish pepper soup with chunky garnish and yellow starchy pieces",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Catfish steak forms are clearly visible and source explicitly names catfish pepper soup. Yellow starchy-looking chunks and coarse pepper garnish are extra serving ingredients, not in canonical recipe; their precise type is unverified.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Correct named catfish-pepper-soup form is visible. Integrated yellow starchy pieces and heavier garnish are outside canonical fish-only formulation; do not label chunks as yam or potato without evidence or claim exact recipe plating."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "4cf9eaaaa69e2f08b3f63bae8a8cd9f0a8de35806239bfc5ee88354678d15329",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: large dark-skinned cross-cut fish steaks in reddish pepper broth with coarse red pepper, onion and green herbs, plus rounded yellow starchy pieces."
      },
      "visual_spec": {
        "visible_food_spec": "Several intact cross-cut catfish steaks in a light seasoned broth, with fine cooked onion and sliced scent leaves.",
        "texture_and_color": "Pale grey-brown to light amber translucent broth, grey skin rings around opaque white fish flesh and green leaf flecks.",
        "key_negative_constraints": "No thick opaque gravy, yam pieces, red palm oil, tomato chunks, lemon slices, whole fish or other seafood.",
        "do_not_confuse_with": [
          "Pale but yam-thickened ofe nsala",
          "orange banga with catfish"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/catfish-pepper-soup.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "zobo",
      "live_post_id": "recipe-ng-demo-20261001-hauwa-zobo",
      "asset": {
        "relative_path": "assets/photos/zobo.webp",
        "sha256": "ceb518ba4b2210c8a77e464a957f7f1ff47fb1747d9ccc4c67010ffd63f88393",
        "width": 900,
        "height": 1200,
        "mime_type": "image/webp",
        "image_format": "WEBP",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 268050,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Lyndadelz",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Zobo_drink.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Zobo_drink.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Zobo_drink.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://recipe.ng/images/demo/zobo.webp",
        "asset_origin": "existing_site_derivative",
        "is_existing_site_derivative": true,
        "source_modifications": "Resized proportionally to 900x1200 pixels; converted to WebP at quality 87; no cropping or content edits.",
        "modifications": "Prior source/site changes: Resized proportionally to 900x1200 pixels; converted to WebP at quality 87; no cropping or content edits. No additional changes by this package; downloaded derivative bytes preserved.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "A clear glass of dark red zobo on a metal-mesh table",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Zobo_drink.jpg by Lyndadelz, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "A glass of deep-red zobo",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Named hibiscus drink; recipe ingredients and preparation cannot be established from appearance.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "A clear glass of dark red zobo on a metal-mesh table",
        "Drink ingredients cannot be identified visually, but named source and characteristic red appearance agree."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "ceb518ba4b2210c8a77e464a957f7f1ff47fb1747d9ccc4c67010ffd63f88393",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Clear drinking glass filled with deep ruby-red liquid on an outdoor metal table, no visible added garnish."
      },
      "visual_spec": {
        "visible_food_spec": "A single clear glass of chilled strained roselle drink made with pineapple, ginger and cloves; all cooked solids removed.",
        "texture_and_color": "Deep ruby-red to burgundy transparent liquid, smooth surface with subtle chilled-glass condensation.",
        "key_negative_constraints": "No hibiscus blossom garnish, pineapple chunks, lemon, lime, mint, whole cloves floating, ice, sugar rim or cocktail styling.",
        "do_not_confuse_with": [
          "Tiger-nut milk",
          "fruit smoothie",
          "red wine"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/zobo.webp",
      "applied_to_recipe": false
    },
    {
      "canonical_recipe_key": "kunun-aya",
      "live_post_id": "recipe-ng-traditional-20261004-kunun-aya",
      "asset": {
        "relative_path": "assets/ai/kunun-aya.png",
        "sha256": "a9f71851a7d97e49e3bdcd9c42d7ea944993875c9bc02d6a60a825e2e755a198",
        "width": 1254,
        "height": 1254,
        "mime_type": "image/png",
        "image_format": "PNG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1801042,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "ai_generated_illustration",
        "photographer": null,
        "generator": "image_gen.imagegen",
        "model": "Not exposed by tool",
        "generated_at": "2026-10-04T13:47:35.703560+00:00",
        "prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue reference image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of the FINISHED Kunun Aya tiger-nut drink, following this strained, gently boiled, then chilled home formulation. It is not the raw blended mixture.\nSubject: One plain clear colorless cylindrical drinking glass, about three-quarters filled with an opaque warm ivory to very pale beige tiger-nut drink. Show the complete glass upright with its smooth top liquid surface visible. The drink has been strained through a fine cloth, heated for ten minutes, cooled, refrigerated and stirred before pouring: its appearance is smooth and lightly thickened but still readily pourable. Only extremely fine natural suspended sediment is acceptable, not visible chunks or gritty particles. A nearly smooth surface with perhaps two or three tiny natural bubbles, no frothy cap. No separate sludge layer or pulp at the bottom.\nFormulation: Tiger nuts soaked, rinsed, blended with water and thoroughly strained; optional dates and ginger deliberately OMITTED. Pale clean tiger-nut-milk appearance, not brown sweetened drink, fermented yogurt drink or rice porridge. No dairy.\nScene and framing: A single glass standing on a neutral warm gray tabletop, soft diffuse daylight, close three-quarter view just high enough to see the liquid surface, whole vessel visible with ample modest margin and a quiet neutral background, realistic clear-glass reflections and restrained food color.\nConstraints: No whole tiger nuts, tuber skins, blender debris, fibres, date pieces, coconut, ginger chunks, rice, millet balls, peanuts, ice, mint, cinnamon, fruit, foam art, cream or garnish. No ingredient styling around the glass, no straws, spoons, extra dishes, blenders, hands or people. No text, captions, labels, logo, watermark, border, collage or grid. One original AI illustration only; not photographic evidence of an actual prepared, heat-treated or kitchen-tested drink.",
        "source_recipe_reference_urls": [
          "https://www.allnigerianrecipes.com/drinks/tiger-nuts-milk/",
          "https://www.dashofjazz.com/nigerian-tiger-nut-milk-kunu-aya/",
          "https://pubs.sciepub.com/jfs/11/1/2/index.html",
          "https://www.fda.gov/food/buy-store-serve-safe-food/safe-food-handling"
        ],
        "source_photograph_used": false,
        "license": "AI-generated output; no external photographic reuse license asserted",
        "license_url": null,
        "modifications": "None by this package; original generated PNG bytes preserved",
        "original_generation_output": "exec-fb4c5f38-a3f8-4f31-bdff-cdb3cd4fbbf0.png",
        "source_visual_review": {
          "status": "limited_visual_pass",
          "inspection": "Visually inspected generated pixels against complete canonical recipe and visual specs. Plain clear glass of opaque ivory to very pale beige smooth liquid with a few tiny bubbles; no pulp, blender debris, whole tiger nuts, optional date/ginger pieces, coconut, ice, foam art, garnish or props. Appearance is compatible with a finished strained drink.",
          "limitations": "Generated pixels permit only a visual compatibility check; ingredient identity, straining, boiling/heat treatment, refrigeration, temperature, safety, actual thickness and kitchen-tested fidelity cannot be certified.",
          "independent_review": "Independent reviewer passed limited appearance QA: plain glass of smooth ivory finished-looking drink, no coarse pulp or garnish. Heat treatment and ingredient identity cannot be proven by pixels."
        },
        "generation_prompt_history": {
          "original_prompt": "Use case: photorealistic-natural\nAsset type: Individual square Nigerian recipe catalogue reference image, publicly labeled AI-generated illustration in accompanying metadata\nPrimary request: Create one faithful realistic food illustration of the FINISHED Kunun Aya tiger-nut drink, following this strained, gently boiled, then chilled home formulation. It is not the raw blended mixture.\nSubject: One plain clear colorless cylindrical drinking glass, about three-quarters filled with an opaque warm ivory to very pale beige tiger-nut drink. Show the complete glass upright with its smooth top liquid surface visible. The drink has been strained through a fine cloth, heated for ten minutes, cooled, refrigerated and stirred before pouring: its appearance is smooth and lightly thickened but still readily pourable. Only extremely fine natural suspended sediment is acceptable, not visible chunks or gritty particles. A nearly smooth surface with perhaps two or three tiny natural bubbles, no frothy cap. No separate sludge layer or pulp at the bottom.\nFormulation: Tiger nuts soaked, rinsed, blended with water and thoroughly strained; optional dates and ginger deliberately OMITTED. Pale clean tiger-nut-milk appearance, not brown sweetened drink, fermented yogurt drink or rice porridge. No dairy.\nScene and framing: A single glass standing on a neutral warm gray tabletop, soft diffuse daylight, close three-quarter view just high enough to see the liquid surface, whole vessel visible with ample modest margin and a quiet neutral background, realistic clear-glass reflections and restrained food color.\nConstraints: No whole tiger nuts, tuber skins, blender debris, fibres, date pieces, coconut, ginger chunks, rice, millet balls, peanuts, ice, mint, cinnamon, fruit, foam art, cream or garnish. No ingredient styling around the glass, no straws, spoons, extra dishes, blenders, hands or people. No text, captions, labels, logo, watermark, border, collage or grid. One original AI illustration only; not photographic evidence of an actual prepared, heat-treated or kitchen-tested drink.",
          "refinement_prompt": null
        },
        "visual_review_limit": "Appearance review cannot authenticate hidden ingredients, species, preparation or kitchen testing",
        "photo_search_outcome": {
          "status": "needsAI",
          "reason": null,
          "research_notes": [],
          "rejected_candidates": []
        }
      },
      "visible_credit": "AI-generated illustration",
      "ai_disclosure": "AI-generated illustration, not a photograph of this cooked recipe or evidence of kitchen testing",
      "alt_text": "AI-generated illustration of a plain glass of smooth pale ivory Kunun Aya tiger-nut drink.",
      "caveats": [
        "Illustrative appearance is based on recipe text, not kitchen-tested food. Ingredient identity cannot be authenticated from pixels alone.",
        "Plain glass of smooth ivory finished-looking strained drink without coarse pulp, nuts, fruit, ice or garnish. Heat treatment and actual plant-milk identity cannot be proven by the still image.",
        "AI illustration passed a limited visible-formulation check; this does not authenticate actual cooking or hidden ingredients."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "a9f71851a7d97e49e3bdcd9c42d7ea944993875c9bc02d6a60a825e2e755a198",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Plain glass of smooth ivory finished-looking strained drink without coarse pulp, nuts, fruit, ice or garnish. Heat treatment and actual plant-milk identity cannot be proven by the still image."
      },
      "visual_spec": {
        "visible_food_spec": "A plain glass of strained and heat-treated tiger-nut drink, chilled and stirred before serving; omit optional dates and ginger.",
        "texture_and_color": "Opaque ivory to pale beige, smooth lightly thickened liquid with possible fine natural suspended sediment.",
        "key_negative_constraints": "No whole tiger nuts floating, coconut, dates, milk foam art, cinnamon, mint, fruit, ice or raw nut garnish.",
        "do_not_confuse_with": [
          "Cultured-milk fura drink",
          "peanut-rice kunun gyada porridge"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/ai/kunun-aya.png",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "awara",
      "live_post_id": "recipe-ng-traditional-20261004-awara",
      "asset": {
        "relative_path": "assets/photos/awara.jpg",
        "sha256": "78f872fb5cd1f1f65ea8d38de14f0ecd5c8f4ca9abe0d30decb31190f8059667",
        "width": 715,
        "height": 953,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 384379,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "YusufuAM",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Awara_(Soybeans_Cake).jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/b/b5/Awara_%28Soybeans_Cake%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Awara_(Soybeans_Cake).jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/b/b5/Awara_%28Soybeans_Cake%29.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Golden fried awara soybean-curd blocks in a takeaway tray with vegetable sides",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Awara_(Soybeans_Cake).jpg by YusufuAM, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Fried awara soybean-curd pieces with vegetable sides",
      "caveats": [
        "Source explicitly identifies soybean curd, not dairy wara. Golden rectangular curd pieces fit; cabbage/carrot/onion and sauce are added serving sides.",
        "Source explicitly identifies soybean curd, not dairy wara. Golden rectangular curd pieces fit; cabbage/carrot/onion and sauce are added serving sides.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source explicitly identifies soybean cake. Larger pieces and vegetable sides differ from canonical three-centimetre plain serving; soy-curd form is clear, with no bean-batter-ball substitution."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "78f872fb5cd1f1f65ea8d38de14f0ecd5c8f4ca9abe0d30decb31190f8059667",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Golden-brown rectangular fried curd blocks with pale interiors in a takeaway tray, alongside shredded cabbage, tomato and cooked vegetables."
      },
      "visual_spec": {
        "visible_food_spec": "Irregular approximately three-centimetre cubes of pressed soybean curd deep-fried until golden, one cut to reveal a pale set interior with tiny chilli flecks.",
        "texture_and_color": "Golden-brown lightly blistered exterior, firm moist ivory curd inside.",
        "key_negative_constraints": "No breading, batter crust, smooth round balls, cheese stretch, sauce, onions or fresh chilli garnish.",
        "do_not_confuse_with": [
          "Akara bean-batter balls",
          "fried cheese",
          "meat nuggets"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/awara.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "donkwa",
      "live_post_id": "recipe-ng-traditional-20261004-donkwa",
      "asset": {
        "relative_path": "assets/photos/donkwa.jpg",
        "sha256": "379e425d723a78c42f7378b6bf212efb2d2558a8b13f03f869e56736b1fce8e4",
        "width": 5184,
        "height": 3456,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 7267834,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Kambai Akau",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Akeelahz_Food_packaged_donkwa_at_Chong_Dovetail_2024_01.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/c/c0/Akeelahz_Food_packaged_donkwa_at_Chong_Dovetail_2024_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Akeelahz_Food_packaged_donkwa_at_Chong_Dovetail_2024_01.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/c/c0/Akeelahz_Food_packaged_donkwa_at_Chong_Dovetail_2024_01.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Brown donkwa balls visible through clear windows of branded Akeelahz Foods packets on a table",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Akeelahz_Food_packaged_donkwa_at_Chong_Dovetail_2024_01.jpg by Kambai Akau, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Packaged donkwa balls at a food display",
      "caveats": [
        "Source identifies packaged donkwa/dokuwa. Balls are visibly shown, but this is commercial packaging at an event, not a photograph of the home recipe; retain visible brand context without implying a partnership.",
        "Source identifies packaged donkwa/dokuwa. Balls are visibly shown, but this is commercial packaging at an event, not a photograph of the home recipe; retain visible brand context without implying a partnership.",
        "Packets share a Dokuwa/Kuli Kuli brand label. The photographer explicitly identifies this photo as donkwa/dokuwa and separately labels a kulikuli photo taken21seconds later in the same sequence.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Shared packaging says Dokuwa / Kuli Kuli, but the photographer explicitly labels this photo donkwa/dokuwa and separately labels kulikuli in an adjacent same-author photo 21 seconds later. Source comparison resolves product identity; packaging/commercial setting is a documentary variation, not an exact homemade recipe photo."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "379e425d723a78c42f7378b6bf212efb2d2558a8b13f03f869e56736b1fce8e4",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Full-size inspection: matte tan-brown spherical snacks clearly visible through branded packet windows, photographed as a commercial event display."
      },
      "visual_spec": {
        "visible_food_spec": "Small hand-pressed maize-and-groundnut balls made from finely milled ready-roasted ingredients, not fried after shaping; one slightly broken to show a crumbly interior.",
        "texture_and_color": "Light tan to warm beige, matte very fine sandy surface and compact but crumbly body.",
        "key_negative_constraints": "No dark fried crust, oily glaze, sugar dusting, syrup, whole nuts, coconut or wheat-bread crumb.",
        "do_not_confuse_with": [
          "Deep-fried kuli-kuli",
          "golden puff puff",
          "syrup-soaked dough balls"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/donkwa.jpg",
      "applied_to_recipe": true
    },
    {
      "canonical_recipe_key": "abari",
      "live_post_id": "recipe-ng-traditional-20261004-abari",
      "asset": {
        "relative_path": "assets/photos/abari.jpg",
        "sha256": "160e430d12fff33c832c73900f936f231550848daa75f9c12549a52a2c43635d",
        "width": 2448,
        "height": 3264,
        "mime_type": "image/jpeg",
        "image_format": "JPEG",
        "color_mode": "RGB",
        "frame_count": 1,
        "byte_size": 1513338,
        "downloaded_or_generated_bytes_preserved": true
      },
      "provenance": {
        "type": "genuine_photograph",
        "photographer": "Taoheedah",
        "source_page_url": "https://commons.wikimedia.org/wiki/File:Abari;Corn_Moin_Moin.jpg",
        "original_asset_url": "https://upload.wikimedia.org/wikipedia/commons/7/77/Abari%3BCorn_Moin_Moin.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "source_file_name": "Abari;Corn_Moin_Moin.jpg",
        "license": "CC BY-SA 4.0",
        "license_url": "https://creativecommons.org/licenses/by-sa/4.0",
        "license_verified": true,
        "source_claim": "Own work",
        "source_verified_date": "2026-10-04",
        "downloaded_at_utc": null,
        "download_time_note": "Exact download time was not recorded; bytes were validated at package build",
        "download_url": "https://upload.wikimedia.org/wikipedia/commons/7/77/Abari%3BCorn_Moin_Moin.jpg?utm_source=commons.wikimedia.org&utm_campaign=index&utm_content=original",
        "asset_origin": "original_source_file",
        "is_existing_site_derivative": false,
        "source_modifications": null,
        "modifications": "None by this package; original downloaded file bytes preserved. Source-file adaptations, if any, are credited separately.",
        "required_reuse_actions": [
          "Credit creator and link original source page",
          "Link the indicated image license",
          "Identify any subsequent edits; comply with share-alike terms for adaptations where applicable"
        ],
        "rights_caveat": "The source license statement is reuse evidence, not an independent guarantee of the uploader’s ownership.",
        "source_visual_review": "Yellow abari corn pudding broken open in a white bowl",
        "source_review_eligible": true,
        "source_verification": "Source page, license and actual pixels reviewed; permitted use remains subject to the stated license"
      },
      "visible_credit": "Abari;Corn_Moin_Moin.jpg by Taoheedah, via Wikimedia Commons, CC BY-SA 4.0",
      "ai_disclosure": null,
      "alt_text": "Abari corn pudding broken open in a bowl",
      "caveats": [
        "Photo represents the named dish; a photograph cannot verify every ingredient or the exact kitchen-tested recipe.",
        "Source explicitly identifies corn moin-moin/abari. Coarse broken pudding texture fits maize; this is a close-up of a partly eaten/unwrapped serving, not the exact kitchen-tested formulation.",
        "This is a source photograph of the named dish, not a photograph cooked from this collection’s exact quantities. The recipe has not been kitchen-tested.",
        "Source identifies Abari; fish flakes are not discernible and mould differs from canonical ramekins. No evidence of egg filling or fried crust; acceptable named steamed-corn pudding reference with method caveat."
      ],
      "approval": {
        "approved_for_package": true,
        "approved_sha256": "160e430d12fff33c832c73900f936f231550848daa75f9c12549a52a2c43635d",
        "match_status": "approved_dish_with_declared_caveats",
        "review_basis": "Independent limited visual review with final exact-byte approval",
        "review_note": "Individual inspection: yellow-orange steamed-pudding portion broken open in a bowl, exposing soft slightly grainy crumb and a smooth curved outer surface."
      },
      "visual_spec": {
        "visible_food_spec": "Small ramekin-shaped fresh-maize puddings steamed with blended red pepper, onion and palm oil, with deboned smoked-mackerel flakes dispersed within; cut one portion.",
        "texture_and_color": "Golden orange to warm peach, moist fine-but-slightly-grainy maize texture with brown fish flecks; no browned crust.",
        "key_negative_constraints": "No egg filling, whole sweetcorn garnish, leaf wrapping, cheese, tomato sauce, raw pepper garnish or fried surface.",
        "do_not_confuse_with": [
          "Bean moi moi with egg",
          "Bambara okpa",
          "plain white eko"
        ],
        "evidence_status": "Method-derived expected appearance, not a claim that a photo has been kitchen-verified. Color can naturally vary with ingredient batch and cooking; negative constraints and defining structures take precedence over exact hue."
      },
      "published_asset_url": "/images/collection/20261004/photos/abari.jpg",
      "applied_to_recipe": true
    }
  ]
}