{
  "schema": "adfactory.angle-review/v1",
  "scope": "Four sales angles, selected songs and character passports; no generated videos.",
  "selection": {
    "schema": "adfactory.angle-selection/v1",
    "campaignSha256": "55182faac76bdec5b1980a20f4ff9857a43641650d354977cbeb6675a66c12d8",
    "choicesSha256": "5c416e23702708b117eee17a9e9171b46a68f0ff76d61fb989b8327534e4195c",
    "selections": [
      {
        "angleId": "forgot-neck",
        "take": 1,
        "source": "jobs/forgot-neck-v01/takes/take_song_1.mp3",
        "openingStem": "reviews/openings/stems/htdemucs/forgot-neck-v01-take1/vocals.wav",
        "listeningReview": "reviews/forgot-neck-listening-v01/evaluation.json",
        "selectionReason": "Take 1 preserves the non-brand lines more clearly than take 2; sharp Stop hook and recurring checklist payoff.",
        "reviewedUncertainLineIndexes": [
          26,
          31
        ],
        "lyricUncertaintyNote": "ASR rendered the sung English brand as Hope you / Hope you’re in these lines; the retained audio reviewer heard Гоу п’юр. No non-brand omission identified in the selected take. Native-speaker pronunciation validation remains pending.",
        "sourceSha256": "52f94cf2f2ceb8ae2ffc6fccd1746324e023a79c40cc12570de55ef0a43d070c",
        "openingStemSha256": "65d534776e8174ee8177ae0add072b096b2447c3be2e633828b1cb47b6b5d63d",
        "vocalOnset": {
          "earliestSeconds": 0.33,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.33,
            0.33,
            0.34
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 0.29000000000000004,
        "trimEndSeconds": 103.26,
        "estimatedFirstVocalSecondsAfterTrim": 0.03999999999999998,
        "output": "exports/forgot-neck.mp3",
        "hook": "exports/forgot-neck-hook.mp3",
        "media": {
          "duration": 103.000816,
          "decodedDuration": 102.949637,
          "bytes": 2472690,
          "sha256": "c77492207c5ddf02cbe40731e78b37137c04514e83d965519607571e67d03c84"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "5a54404bcd8a04380d6324e2e3e70a181f66e1689961bb7be2ffdadef25e4297"
        },
        "loudness": {
          "input_i": "-14.49",
          "input_tp": "-1.07",
          "input_lra": "3.90",
          "input_thresh": "-24.54",
          "output_i": "-14.25",
          "output_tp": "-1.00",
          "output_lra": "2.90",
          "output_thresh": "-24.29",
          "normalization_type": "dynamic",
          "target_offset": "0.05"
        },
        "sourceLoudness": {
          "input_i": "-14.88",
          "input_tp": "-0.91",
          "input_lra": "4.30",
          "input_thresh": "-24.95",
          "output_i": "-13.41",
          "output_tp": "-1.00",
          "output_lra": "2.80",
          "output_thresh": "-23.46",
          "normalization_type": "dynamic",
          "target_offset": "-0.79"
        },
        "asr": {
          "total": 32,
          "matched": 30,
          "uncertain": 2,
          "source": "jobs/forgot-neck-v01/takes/take_song_1.lines.json",
          "sha256": "a7a7ef92702a0b54cc47c6959b9e3db0cb71cc8004a36b44607427181a3cdd7d"
        },
        "openingReviewCaveat": "Raw model review incorrectly reported zero intro; separated vocals measured the actual pickup. Final hook review required.",
        "status": "exported-for-final-opening-review",
        "ownerValidation": "pending"
      },
      {
        "angleId": "scarf-holiday",
        "take": 2,
        "source": "jobs/scarf-holiday-v01/takes/take_song_2.mp3",
        "openingStem": "reviews/openings/stems/htdemucs/scarf-holiday-v01-take2/vocals.wav",
        "listeningReview": "reviews/scarf-holiday-listening-v01/evaluation.json",
        "selectionReason": "Both takes match all 32 lines; take 2 has the smoother, more articulate vocal in the retained comparison.",
        "reviewedUncertainLineIndexes": [],
        "lyricUncertaintyNote": "All source lyric lines matched by ASR; this is not a native-speaker judgment.",
        "sourceSha256": "a7ea2caa53bce60583eeab20f7e42a67964a1fad6bc1339875506235b19e7b17",
        "openingStemSha256": "b29182dbdb661f5c9eb93341691404639db795501724eec60ea362049afb7a59",
        "vocalOnset": {
          "earliestSeconds": 1.81,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            1.81,
            1.83,
            1.84
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 1.77,
        "trimEndSeconds": 111.68,
        "estimatedFirstVocalSecondsAfterTrim": 0.040000000000000036,
        "output": "exports/scarf-holiday.mp3",
        "hook": "exports/scarf-holiday-hook.mp3",
        "media": {
          "duration": 109.949388,
          "decodedDuration": 109.898209,
          "bytes": 2639456,
          "sha256": "342bb44dc79905f491fd29eb20594d2351d4a585afc16af0c5fbde98ec255597"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "4ef0f8ae3fa5ff018645737705e8e5e30d8c727b0f640e211650b5a32eb4e5ca"
        },
        "loudness": {
          "input_i": "-14.51",
          "input_tp": "-1.11",
          "input_lra": "3.90",
          "input_thresh": "-24.54",
          "output_i": "-13.87",
          "output_tp": "-1.00",
          "output_lra": "3.60",
          "output_thresh": "-23.89",
          "normalization_type": "dynamic",
          "target_offset": "-0.33"
        },
        "sourceLoudness": {
          "input_i": "-14.82",
          "input_tp": "-0.44",
          "input_lra": "3.90",
          "input_thresh": "-24.85",
          "output_i": "-13.61",
          "output_tp": "-1.00",
          "output_lra": "3.60",
          "output_thresh": "-23.64",
          "normalization_type": "dynamic",
          "target_offset": "-0.59"
        },
        "asr": {
          "total": 32,
          "matched": 32,
          "uncertain": 0,
          "source": "jobs/scarf-holiday-v01/takes/take_song_2.lines.json",
          "sha256": "0e554b9dbb2a377f916757ab0ef9fd4127bff1577f03c1dd0304c049cfb5321c"
        },
        "openingReviewCaveat": "Raw model review incorrectly reported zero intro; separated vocals measured the actual pickup. Final hook review required.",
        "status": "exported-for-final-opening-review",
        "ownerValidation": "pending"
      },
      {
        "angleId": "mum-in-frame",
        "take": 1,
        "source": "jobs/mum-in-frame-v01/takes/take_song_1.mp3",
        "openingStem": "reviews/openings/stems/htdemucs/mum-in-frame-v01-take1/vocals.wav",
        "listeningReview": "reviews/mum-in-frame-listening-v01/evaluation.json",
        "selectionReason": "Take 1 matches all 36 lines; take 2 has three uncertain/missing alignments. Prefer the more propulsive family-photo payoff.",
        "reviewedUncertainLineIndexes": [],
        "lyricUncertaintyNote": "All source lyric lines matched by ASR; this is not a native-speaker judgment.",
        "sourceSha256": "d430535c2d61b54e7ecdc54ba310c94ed44814223d70b4730f57dc8beeff862d",
        "openingStemSha256": "9c31fdd42707ed484139ec5c81cc3d336a981f37ebe4e4cae5c691f1ab9924d8",
        "vocalOnset": {
          "earliestSeconds": 1.47,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            1.47,
            1.48,
            1.48
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 1.43,
        "trimEndSeconds": 116.38,
        "estimatedFirstVocalSecondsAfterTrim": 0.040000000000000036,
        "output": "exports/mum-in-frame.mp3",
        "hook": "exports/mum-in-frame-hook.mp3",
        "media": {
          "duration": 114.99102,
          "decodedDuration": 114.939841,
          "bytes": 2760455,
          "sha256": "0d8cfccadfab883971e38d023c43823d6fb69bd16eb8ceb7cc0841c72e05da5c"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "d3cb3c0d1c4d3611a65e8149dcdb4a20bec7c897dd3c9604e5921d22498df1fe"
        },
        "loudness": {
          "input_i": "-14.49",
          "input_tp": "-0.84",
          "input_lra": "4.40",
          "input_thresh": "-24.52",
          "output_i": "-14.13",
          "output_tp": "-1.00",
          "output_lra": "3.70",
          "output_thresh": "-24.15",
          "normalization_type": "dynamic",
          "target_offset": "-0.07"
        },
        "sourceLoudness": {
          "input_i": "-14.44",
          "input_tp": "-0.08",
          "input_lra": "4.60",
          "input_thresh": "-24.47",
          "output_i": "-13.58",
          "output_tp": "-1.00",
          "output_lra": "4.40",
          "output_thresh": "-23.60",
          "normalization_type": "dynamic",
          "target_offset": "-0.62"
        },
        "asr": {
          "total": 36,
          "matched": 36,
          "uncertain": 0,
          "source": "jobs/mum-in-frame-v01/takes/take_song_1.lines.json",
          "sha256": "51c4c7a7a7795a05ec85ffe366f87348c29c2de017cd84849aeacf39e7df6e31"
        },
        "openingReviewCaveat": "Raw model review incorrectly reported zero intro; separated vocals measured the actual pickup. Final hook review required.",
        "status": "exported-for-final-opening-review",
        "ownerValidation": "pending"
      },
      {
        "angleId": "no-fairy-tales",
        "take": 1,
        "source": "jobs/no-fairy-tales-v01/takes/take_song_1.mp3",
        "openingStem": "reviews/openings/stems/htdemucs/no-fairy-tales-v01-take1/vocals.wav",
        "listeningReview": "reviews/no-fairy-tales-listening-v01/evaluation.json",
        "selectionReason": "Take 1 has a tighter arrangement in the comparison; all non-brand lines match and the closing payment/inspection CTA is present.",
        "reviewedUncertainLineIndexes": [
          8
        ],
        "lyricUncertaintyNote": "ASR rendered the sung English brand as Hope you / Hope you’re in these lines; the retained audio reviewer heard Гоу п’юр. No non-brand omission identified in the selected take. Native-speaker pronunciation validation remains pending.",
        "sourceSha256": "09f28b1cf29b6cb004182c6d9d9a3942a3118fc8efaee236792e4be1f35164ea",
        "openingStemSha256": "58c80c3d1825b19641a3cf216463b724d139c53582e3c01bdb4613299bb69470",
        "vocalOnset": {
          "earliestSeconds": 1.16,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            1.16,
            1.18,
            1.19
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "trimStartSeconds": 1.1199999999999999,
        "trimEndSeconds": 126.16,
        "estimatedFirstVocalSecondsAfterTrim": 0.040000000000000036,
        "output": "exports/no-fairy-tales.mp3",
        "hook": "exports/no-fairy-tales-hook.mp3",
        "media": {
          "duration": 125.074286,
          "decodedDuration": 125.023107,
          "bytes": 3002453,
          "sha256": "bbbe75f113492b7de568d269c9f7188e86791b225714272652262f97cfef48bd"
        },
        "hookMedia": {
          "duration": 3.030204,
          "decodedDuration": 2.979025,
          "bytes": 73395,
          "sha256": "860033c242ab03afa42457128351dd5596ff0c55181854c55c2aa4016f035a34"
        },
        "loudness": {
          "input_i": "-14.48",
          "input_tp": "-0.89",
          "input_lra": "2.70",
          "input_thresh": "-24.53",
          "output_i": "-14.19",
          "output_tp": "-1.00",
          "output_lra": "2.70",
          "output_thresh": "-24.21",
          "normalization_type": "dynamic",
          "target_offset": "-0.01"
        },
        "sourceLoudness": {
          "input_i": "-14.54",
          "input_tp": "-0.65",
          "input_lra": "5.30",
          "input_thresh": "-24.59",
          "output_i": "-13.25",
          "output_tp": "-1.00",
          "output_lra": "2.70",
          "output_thresh": "-23.29",
          "normalization_type": "dynamic",
          "target_offset": "-0.95"
        },
        "asr": {
          "total": 36,
          "matched": 35,
          "uncertain": 1,
          "source": "jobs/no-fairy-tales-v01/takes/take_song_1.lines.json",
          "sha256": "bcbc801a4cfcae7ce9f94657114e9e97e4890be84c75b623e93ff4dd556be355"
        },
        "openingReviewCaveat": "Raw model review incorrectly reported zero intro; separated vocals measured the actual pickup. Final hook review required.",
        "status": "exported-for-final-opening-review",
        "ownerValidation": "pending"
      }
    ],
    "videoGeneration": false
  },
  "finalOpenings": {
    "ok": true,
    "checks": [
      {
        "angleId": "forgot-neck",
        "exportSha256": "c77492207c5ddf02cbe40731e78b37137c04514e83d965519607571e67d03c84",
        "hookSha256": "5a54404bcd8a04380d6324e2e3e70a181f66e1689961bb7be2ffdadef25e4297",
        "openingStemSha256": "2558c5ba5f6bc046112a894f00621123b851471949a35a1009e192b2880dc5d9",
        "finalVocalOnset": {
          "earliestSeconds": 0.04,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.04,
            0.04,
            0.05
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "pass": true,
        "limitation": "Separated vocal activity establishes onset timing; lyric identity is checked separately by ASR. Not a human pronunciation judgment."
      },
      {
        "angleId": "scarf-holiday",
        "exportSha256": "342bb44dc79905f491fd29eb20594d2351d4a585afc16af0c5fbde98ec255597",
        "hookSha256": "4ef0f8ae3fa5ff018645737705e8e5e30d8c727b0f640e211650b5a32eb4e5ca",
        "openingStemSha256": "5e53e51d5a273f9622720e12bb82abf16454b5aacca27d2d07783b970b3ede04",
        "finalVocalOnset": {
          "earliestSeconds": 0.05,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.05,
            0.07,
            0.16
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "pass": true,
        "limitation": "Separated vocal activity establishes onset timing; lyric identity is checked separately by ASR. Not a human pronunciation judgment."
      },
      {
        "angleId": "mum-in-frame",
        "exportSha256": "0d8cfccadfab883971e38d023c43823d6fb69bd16eb8ceb7cc0841c72e05da5c",
        "hookSha256": "d3cb3c0d1c4d3611a65e8149dcdb4a20bec7c897dd3c9604e5921d22498df1fe",
        "openingStemSha256": "49e012beaa1bd04fecbb31d81d283e03319500132084144af6eceb83ba9006df",
        "finalVocalOnset": {
          "earliestSeconds": 0.05,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.05,
            0.05,
            0.06
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "pass": true,
        "limitation": "Separated vocal activity establishes onset timing; lyric identity is checked separately by ASR. Not a human pronunciation judgment."
      },
      {
        "angleId": "no-fairy-tales",
        "exportSha256": "bbbe75f113492b7de568d269c9f7188e86791b225714272652262f97cfef48bd",
        "hookSha256": "860033c242ab03afa42457128351dd5596ff0c55181854c55c2aa4016f035a34",
        "openingStemSha256": "66f0d9e5929cd25eb7fb1ba1166e9567950bf2c082fde369de65a334ba9ccad9",
        "finalVocalOnset": {
          "earliestSeconds": 0.02,
          "thresholdsDbfs": [
            -45,
            -40,
            -35
          ],
          "detectedSeconds": [
            0.02,
            0.04,
            0.06
          ],
          "method": "4/5 active 10ms frames in isolated vocal stem"
        },
        "pass": true,
        "limitation": "Separated vocal activity establishes onset timing; lyric identity is checked separately by ASR. Not a human pronunciation judgment."
      }
    ]
  },
  "portraitInspections": [
    {
      "characterId": "vira",
      "image": "runs/gopure-angles/passports/vira-v01.png",
      "sha256": "d7615e895425830dee3425df649999780b4c9f77c1cccec16f993104b3439a63",
      "generator": "Built-in image_gen tool",
      "reviewer": "Codex direct image inspection",
      "status": "accepted-for-owner-validation",
      "observed": [
        "One frontal closed-mouth portrait, single fictional woman, head through upper chest.",
        "Hair, eye color, accessories and clothing distinguish this lead from the other three.",
        "Natural mature face and neck texture visible; no before/after transformation."
      ],
      "limitations": [
        "Bust portrait does not verify full-body proportions.",
        "Appearance and age are creative casting judgments, not biometric measurements.",
        "Requested stylized 3D rendered close to photographic realism. Accepted the coherent cinematic casting direction; remaining cast explicitly requested that direction."
      ],
      "creativePortraitPrompt": "Neutral cinematic-realism identity portrait; age 44, auburn asymmetric pixie, hazel eyes, square freckled face, cobalt open-neck shirt, coral triangular earrings. Head through upper chest, eye-level, mouth closed, visible natural neck texture, gray studio. No age reversal or product."
    },
    {
      "characterId": "lada",
      "image": "runs/gopure-angles/passports/lada-v01.png",
      "sha256": "d0e162f2edf12ed55d41a4f43af885bdcb8d9bb1a3b9ee27afaba383a2a0d188",
      "generator": "Built-in image_gen tool",
      "reviewer": "Codex direct image inspection",
      "status": "accepted-for-owner-validation",
      "observed": [
        "One frontal closed-mouth portrait, single fictional woman, head through upper chest.",
        "Hair, eye color, accessories and clothing distinguish this lead from the other three.",
        "Natural mature face and neck texture visible; no before/after transformation."
      ],
      "limitations": [
        "Bust portrait does not verify full-body proportions.",
        "Appearance and age are creative casting judgments, not biometric measurements."
      ],
      "creativePortraitPrompt": "Neutral editorial cinematic-realism identity portrait; age 51, dark curly bob with gray strands, green eyes, round full olive-skinned face, emerald open-neck blouse, mustard earrings. Head through upper chest, visible natural neck, gray studio, mouth closed. No scarf, no de-aging."
    },
    {
      "characterId": "orysia",
      "image": "runs/gopure-angles/passports/orysia-v01.png",
      "sha256": "084b4eb66eab344864fe5d3bf34dec978610f87fe6f5e5b7b079058953a6db06",
      "generator": "Built-in image_gen tool",
      "reviewer": "Codex direct image inspection",
      "status": "accepted-for-owner-validation",
      "observed": [
        "One frontal closed-mouth portrait, single fictional woman, head through upper chest.",
        "Hair, eye color, accessories and clothing distinguish this lead from the other three.",
        "Natural mature face and neck texture visible; no before/after transformation."
      ],
      "limitations": [
        "Bust portrait does not verify full-body proportions.",
        "Appearance and age are creative casting judgments, not biometric measurements."
      ],
      "creativePortraitPrompt": "Neutral editorial cinematic-realism portrait; age 57, silvery shoulder-length wavy bob, gray-blue eyes, long oval face, natural mature lines, coral cardigan over ivory open-neck top, small silver earrings. Full head through chest, gray studio, mouth closed, exposed natural neck. No de-aging."
    },
    {
      "characterId": "iryna",
      "image": "runs/gopure-angles/passports/iryna-v01.png",
      "sha256": "c50d3958451c179fa1502e5492b6964228daec50874b261f92d86feebf864539",
      "generator": "Built-in image_gen tool",
      "reviewer": "Codex direct image inspection",
      "status": "accepted-for-owner-validation",
      "observed": [
        "One frontal closed-mouth portrait, single fictional woman, head through upper chest.",
        "Hair, eye color, accessories and clothing distinguish this lead from the other three.",
        "Natural mature face and neck texture visible; no before/after transformation."
      ],
      "limitations": [
        "Bust portrait does not verify full-body proportions.",
        "Appearance and age are creative casting judgments, not biometric measurements."
      ],
      "creativePortraitPrompt": "Neutral editorial cinematic-realism portrait; age 49, sharp short dark bob with a broad silver forelock, brown eyes, angular face, dark rectangular glasses, plum jacket and lemon-yellow open-neck blouse. Full head through chest, gray studio, mouth closed, natural exposed neck texture. No doctor or authority costume."
    }
  ],
  "ownerValidation": "pending",
  "limits": [
    "No native-speaker or audience test.",
    "Three ASR brand-name readings are uncertain; retained model review heard the intended brand.",
    "Automated genre labels and raw intro claims were inconsistent; measured timing overrides them.",
    "Synthetic fictional characters and stories; seller-sourced cosmetic claims."
  ]
}