{"schema_version":"1","site":"https://decosa.ai","id":"disclosure-preflight","num":"49","name":"Synthetic-performer disclosure and S&P pre-flight","tool_name":"Pre-flight a synthetic-performer ad","short":"Disclosure pre-flight","blurb":"Checks an ad or short before it ships. It finds synthetic performers from the file's own provenance (its C2PA credential, Decosa's render receipt or watermark) and what you declare, and reads the frames to see whether an AI label is on screen. It burns in the label and signs a C2PA marking when the New York or EU rules need them, checks each real performer's consent by ledger id, and flags real people, other brands, profanity, rating triggers and music cues in the script. A named reviewer signs off, and the sign-off is sealed into an AI-use attestation. Advisory, not a legal clearance.","status":"live","labels":{"industry":["entertainment","sales-marketing"],"job":["review","attest"],"input":["files","text"],"deploy":["hosted","selfhost"],"status":"live","output":["record","media"],"data":["confidential","pii"],"hardware":"gpu-96","licence":"permissive"},"industries":["entertainment","sales-marketing"],"runs_in":["hosted","selfhost"],"part_of":[],"built_from":["typed-judgment","content-credentials","signed-record"],"models":"Qwen3.8-27B reads the script (typed yes/no per candidate); code reads provenance, OCRs the label and adds it","where":"Hosted or self-host; unreleased ads on your own machine","hardware":"Any CPU for the video steps (ffmpeg, Tesseract, C2PA); Qwen3.8-27B (1× RTX 5090 32 GB or larger) for the script checks","final_artifact":"The ad with a visible AI label and a C2PA marking (when needed), a report and flag list (Markdown, CSV), and a signed AI-use attestation naming the reviewer.","self_host_first":false,"verification":{"receipt_coverage":"partial","summary":"Receipt per model call; receipted consent decisions; C2PA marking; signed AI-use attestation with the reviewer's sign-off","manual_qa":{"hosted":{"date":"2026-09-25","result":"pass","p50_ms":3600,"p95_ms":null,"runs":null,"receipts_per_run":5,"cost_per_run_usd":0.0012},"selfhost":{"date":"2026-09-25","result":"pass","method":"Fresh clone into a clean directory, docker build (50 s), the api service with named volumes, a development C2PA certificate from scripts/provenance_devcert.py, pointed at the running local vLLM (Qwen3.8-27B) over host networking; then torn down.","notes":"Verified on 2026-09-25: the image has ffmpeg, Tesseract 5.5.0, the font and c2pa-python; the planted script gives the same five flags and consent states as the hosted run in 2.7 s (five attested calls); the raw clip gets the label (6 of 6 frames read back) and a valid C2PA marking in 5.3 s; the attestation verifies and fails when one decision is changed; no script text or names in the logs. The Decosa-ad samples are hosted renders and show as unavailable, as expected. The model server's own startup was not re-verified (no new GPU load)."},"known_limits":["Advisory, not a legal clearance; 'conspicuous' is not measured.","Synthetic performers are found only from provenance or a declaration.","Script recall is measured on short synthetic scripts with blatant plants.","Logos and faces in the picture are not checked yet.","Consent comes from the consent ledger (tool 47) by id; the hosted demo's id_demo identities are fictional. A server without the ledger reports real performers as unchecked, never cleared."],"nightly_covers":null},"nightly":"https://api.decosa.ai/verify/status"},"eval_summary":{"metrics":[{"name":"Planted script issues found (full config)","value":"27 of 29 (93%)","unit":null,"n":29,"split":"test","note":"Dev: 31 of 32"},{"name":"Precision of script flags (full config)","value":"1.00 (27 flags, 0 false)","unit":null,"n":27,"split":"test","note":null},{"name":"Clean scripts with a flag","value":"0 of 8","unit":null,"n":8,"split":"test","note":"Without the yes/no step: 2 of 8; word lists only: 2 of 8"},{"name":"Word lists only (no model): planted issues found","value":"7 of 29","unit":null,"n":29,"split":"test","note":null},{"name":"OCR reads the AI label on finished Decosa ads / false alarm on unlabelled shots","value":"18 of 18 frames / 0 of 60 frames","unit":null,"n":78,"split":"synthetic","note":"Own label style on own footage only"}],"dataset":"48 synthetic ad scripts for fictional brands (24 dev, 24 test), with issues planted from fixed pools that share nothing between dev and test; Decosa's own UGC ad renders and ten raw H3 shots for the label check.","held_out":true,"caveats":["The plants are blatant, one clear instance each, in short synthetic scripts; expect lower recall and precision on real scripts.","The same author wrote the eval script, the planted pools and the prompts; one prompt change was made after the first dev run.","The label check measures Decosa's own label style on its own footage; third-party labels may not be read.","Conspicuousness under NY GBL 396-b is a legal judgement and is not measured. No synthetic-performer detector is used or claimed."],"date":"2026-09-25","doc_url":"https://decosa.ai/metrics/evals/disclosure-preflight"},"stack":{"summary":"Send an ad or short (the video, its script or transcript, and who is in it). Code reads the file's provenance: its C2PA credential, Decosa's render receipt (by file hash, credential or invisible watermark) and what you declare. No model guesses from the pixels. Tesseract reads six frames to see whether an AI label is on screen; when New York's synthetic-performer rule or the EU AI Act needs one, ffmpeg burns the label in, OCR reads it back and a C2PA marking is signed onto the file. Each real performer is checked by id against the consent ledger for this project, purpose and territory, with a receipt. An open model lists real people, other brands, profanity, rating triggers and music cues in the script, and a typed yes/no keeps or drops each one. A named reviewer decides every flag and signs off; the sign-off is sealed into an attestation that says which steps were code, which used an open model and which were human. Advisory, not a legal clearance.","tagline":"Before an ad ships: who in it is synthetic and how we know, a visible AI label and a C2PA marking when the rules need them, consent by ledger id, script flags with their lines, and a named reviewer's sign-off in a signed AI-use attestation.","deployment":"hosted-or-self-host","regulatory_note":"Advisory, not legal advice; checked against the primary texts on 25 Sep 2026. New York General Business Law § 396-b as amended by S.8420-A / A.8887-B (signed 11 Dec 2025, chapter 617; in force on the 180th day, 9 Jun 2026): whoever produces or creates an advertisement must conspicuously disclose that it includes a synthetic performer, where they have actual knowledge of it. A synthetic performer is a digitally created asset, made or changed with generative AI or a software algorithm, meant to give the impression of a human performer who is not recognisable as any identifiable natural performer; a replica of a real person is not one (that is consent and right-of-publicity territory). Audio-only ads, AI used only to translate a human performer, and ads for expressive works (films, shows, games) consistent with the work are exempt; $1,000 for a first violation and $5,000 for each after. Whether a given label is conspicuous is a legal judgement: this tool reports that OCR read it on every sampled frame, nothing more. EU AI Act, Regulation (EU) 2024/1689, Art. 50(2): providers of systems that generate synthetic audio, image or video must mark the outputs in a machine-readable format, detectable as AI-generated; Art. 50(4) with Art. 3(60): deployers must disclose a deep fake (content resembling existing persons that would falsely appear authentic), limited for evidently artistic, creative, satirical or fictional work to a disclosure that does not hamper it. Art. 50 applies from 2 Aug 2026 (Art. 113); Regulation (EU) 2026/1744 (the Digital Omnibus on AI, OJ 24 Jul 2026) gives generators already on the market before that date until 2 Dec 2026 to comply with Art. 50(2). A C2PA credential is one machine-readable marking; the Act does not name a standard. SAG-AFTRA's 2023 TV/Theatrical agreement also requires notice to the union before a synthetic performer is used (from a secondary summary, not verified against the contract text); it binds signatory producers, not this tool. Consent is checked only for identities enrolled in the consent ledger; nobody is identified from their face or voice. Model licences: Apache-2.0 (Qwen3.8-27B).","components":[{"id":"preflight","role":"The pre-flight: provenance lookup, performer evidence, rules for NY and the EU, consent lookups by ledger id, the profanity and music-cue word lists, the report, sign-off and the signed attestation (no model; CPU)","name":"decosa-api disclosure module (decosa_api/verticals/disclosure)","hf_repo":null,"license":"AGPL-3.0-or-later","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"Python 3.12; ffmpeg and ffprobe for video","receipt_coverage":"partial","in_hosted_demo":null,"tiers":["lite","standard"],"alternative_to":null},{"id":"ocr","role":"Reads six frames for an AI label (whole frame, then the top and bottom bands), before and after the label is added","name":"Tesseract OCR 5 (English)","hf_repo":null,"license":"Apache-2.0","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"tesseract CLI, --psm 11, on CPU","receipt_coverage":"none","in_hosted_demo":null,"tiers":["lite","standard"],"alternative_to":null},{"id":"c2pa","role":"Reads the file's C2PA credential and signs the marking: the source as a parentOf ingredient, c2pa.opened and c2pa.edited actions with the IPTC digital source type, and an ai.decosa.disclosure assertion","name":"c2pa-python 0.37 (c2pa-rs)","hf_repo":null,"license":"MIT OR Apache-2.0","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"c2pa-python on CPU, ES256 with the provenance kit's certificate","receipt_coverage":"partial","in_hosted_demo":null,"tiers":["lite","standard"],"alternative_to":null},{"id":"watermark","role":"Decodes Decosa's invisible video watermark (TrustMark), so a Decosa render whose credential was stripped is still recognised","name":"TrustMark Q (decoder)","hf_repo":null,"license":"MIT","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"trustmark on CPU, seven frames, majority vote (the provenance kit)","receipt_coverage":"none","in_hosted_demo":null,"tiers":["standard"],"alternative_to":null},{"id":"judge","role":"Model: lists candidate names, brands, profanity, rating triggers and music cues in the script, then answers a typed yes/no for each (typed-judgment, calibrated probability)","name":"Qwen3.8-27B (NVFP4)","hf_repo":"nvidia/Qwen3.8-27B-NVFP4","license":"Apache-2.0","params":"27.8B","quant":"NVFP4 (MLP NVFP4, GDN/attention FP8) + FP8 KV cache; MTP head, 3 draft tokens","vram_gb":20,"memory_gb_estimate":null,"engine":"vLLM 0.29.0, temperature 0, thinking off","receipt_coverage":"strong","in_hosted_demo":true,"tiers":["standard"],"alternative_to":null}],"tiers":[{"id":"lite","label":"Lite · code only, any CPU","summary":"Provenance, the label check and burn-in, the C2PA marking, consent lookups and the attestation, with the script read by word lists only (\"use_model\": false): profanity and music-cue markup, no names, brands or rating triggers.","components":["preflight","ocr","c2pa"],"hardware":"Any CPU","quality_evidence":[{"metric":"Planted script issues found / precision / clean scripts flagged (test, 29 plants in 24 synthetic scripts, 8 clean)","value":"7 of 29 / 0.78 / 2 of 8","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25 (word lists only: profanity 4 of 4, music markup 3 of 6; the false flags are generic music cues)"},{"metric":"AI label read on Decosa ads / read back after burn-in / false label on unlabelled clips","value":"18 of 18 / 60 of 60 / 0 of 60 frames","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25 (3 finished ads, 10 raw MiniMax H3 shots)"},{"metric":"C2PA marking valid with content intact and the disclosure assertion","value":"10 of 10","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25"}],"latency_note":"measured: a few seconds per short clip on CPU; no model call.","in_hosted_demo":false,"receipt_coverage":"partial","receipt_note":"No model calls, so no receipts; consent decisions and the attestation are signed by the instance.","hosting":null},{"id":"standard","label":"Standard · adds script checks by Qwen3.8-27B (hosted demo)","summary":"Everything in Lite, plus the model's candidate flags and a typed yes/no for each, with a receipt per call, and the watermark decoder for stripped Decosa renders.","components":["preflight","ocr","c2pa","watermark","judge"],"hardware":"Any CPU plus 1x RTX PRO 6000 96 GB (measured) or 1x RTX 5090 32 GB (estimate) for the model","quality_evidence":[{"metric":"Planted script issues found / precision / clean scripts flagged (test)","value":"27 of 29 (93%) / 1.00 (27 flags, 0 false) / 0 of 8","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25 (dev run twice, one change to the rating question between runs; test run once)"},{"metric":"By category (test): real person / brand / profanity / rating trigger / music","value":"4 of 4 / 7 of 8 / 4 of 4 / 7 of 7 / 5 of 6","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25 (misses: 'Apple' and the song 'Happy')"},{"metric":"Without the yes/no step (test): found / precision / clean scripts flagged","value":"28 of 29 / 0.93 / 2 of 8","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25"},{"metric":"Demo samples giving the expected performers, rules, consent states and flags","value":"7 of 7","source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25"}],"latency_note":"measured: seconds for the planted script or a raw clip, through the shared gateway.","in_hosted_demo":true,"receipt_coverage":"strong","receipt_note":"Every model call has a gateway-signed receipt on the hosted route.","hosting":null}],"alternates":[],"services":[{"name":"decosa-api","port":8445,"image":"${DECOSA_REGISTRY}/decosa-api:<tag>","purpose":"GET /disclosure/info, /disclosure/samples; POST /disclosure/check (SSE or JSON); POST /disclosure/runs/{id}/signoff; GET /disclosure/runs/{id}/video and /export?format=md|csv|attestation. The upload and intermediates are deleted when the run ends; the disclosed video is kept one hour; logs carry counts only. Needs ffmpeg, Tesseract and a font (in the image) and the provenance kit's certificate for the marking."},{"name":"vLLM","port":8114,"image":"vllm/vllm-openai@sha256:c2914767605584b6d8f45686b82de173ecc99e781897aa3d0a66dacd72c51ae1","purpose":"Qwen3.8-27B NVFP4 behind our gateway (hosted) or called directly (self-host), for the lyric labels only."}],"tools":[{"name":"NY Senate: S8420-A (GBL § 396-b, synthetic performers in advertisements)","url":"https://www.nysenate.gov/legislation/bills/2025/S8420/amendment/A","license":"Public legislative text","purpose":"The rule the visible label is checked against: definition, disclosure, exemptions, penalties, 180-day effective date."},{"name":"EUR-Lex: Regulation (EU) 2024/1689 (AI Act), Art. 3(60), 50 and 113","url":"https://eur-lex.europa.eu/eli/reg/2024/1689/oj","license":"EU legal text (reuse permitted)","purpose":"Machine-readable marking (50(2)), deep-fake disclosure (50(4)), application date 2 Aug 2026."},{"name":"EUR-Lex: Regulation (EU) 2026/1744 (Digital Omnibus on AI)","url":"https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:L_202601744","license":"EU legal text (reuse permitted)","purpose":"The transition to 2 Dec 2026 for Art. 50(2) for generators on the market before 2 Aug 2026."},{"name":"FFmpeg","url":"https://ffmpeg.org/","license":"LGPL-2.1 or later; run as a separate program","purpose":"Probes the upload, samples frames and burns in the label (drawtext)."},{"name":"DejaVu Sans Bold","url":"https://dejavu-fonts.github.io/","license":"Bitstream Vera licence (free)","purpose":"The label's font."},{"name":"Consent ledger (tool 47)","url":null,"license":"Apache-2.0","purpose":"Receipted consent decisions per identity, kind, project, purpose, territory and date. The hosted demo's id_demo identities are fictional and live in a private in-memory ledger."},{"name":"scripts/disclosure_eval.py","url":null,"license":"Apache-2.0","purpose":"48 synthetic ad scripts with planted issues (dev and test pools disjoint), and the label read-back and C2PA checks on Decosa's own renders."},{"name":"POST /record/verify","url":null,"license":"Apache-2.0","purpose":"Checks the signed attestation and names the first entry that was changed. The console also verifies it in your browser."}],"hardware":[{"tier":"Any CPU (video steps, word lists, consent, attestation)","fits":true,"notes":"Measured on our server 2026-09-25 (shared with other work): provenance check 1-4 s, OCR of six frames 1.7-3.1 s, burning the label into a 5 s 540x960 clip 0.2 s and a 5 s 1080x1920 shot about 3 s, C2PA signing under 0.1 s."},{"tier":"1x RTX 5090 32 GB","fits":true,"notes":"For the script checks, Qwen3.8-27B NVFP4 needs about 20 GB of weights plus a small KV cache (short prompts). Estimate: same model and prompts as the measured card, not run here on a 5090."},{"tier":"1x RTX PRO 6000 Blackwell 96 GB","fits":true,"notes":"Measured on our server: the eval, the hosted demo and the self-host check ran on this card, shared with other services."}],"latency":[{"lane":"Planted script (8 lines, two enrolled actors), hosted gateway route","typical_ms":3600,"source":"measured on our server 2026-09-25: 7.3, 4.1, 2.8 and 3.1 s over four runs through our gateway under other load (5-6 calls)"},{"lane":"Raw 5 s presenter clip declared synthetic: provenance, OCR, burn-in, read-back, C2PA","typical_ms":5100,"source":"measured on our server 2026-09-25: 9.2, 5.1 and 7.1 s over three runs"},{"lane":"Finished Decosa ad (18 s, 720x1248), nothing to add","typical_ms":4900,"source":"measured on our server 2026-09-25: 6.4, 4.9 and 3.4 s"},{"lane":"Script checks per eval script (6-10 lines), test split","typical_ms":1290,"source":"measured on our server 2026-09-25: median over 24 scripts, at most two calls in flight"}],"benchmark":{"title":"How well does it catch planted issues, and does the label stick?","intro":"48 short synthetic ad scripts for fictional brands (written by Qwen3.8-27B, receipted, read by hand) had real names, other brands, swear words, rating triggers and hit songs planted in them, from pools split between dev and test; 8 scripts per split carried only hard negatives. The label and marking were checked on Decosa's own renders.","rows":[{"label":"Planted script issues found (test, 29)","value":"93% (27)","detail":"27 flags, none false; 0 of 8 clean scripts flagged"},{"label":"Without the typed yes/no step","value":"28 found, 2 false","detail":"both false flags were generic music cues"},{"label":"Word lists only (no model)","value":"7 of 29","detail":"profanity and music markup only"},{"label":"Label read back after burn-in","value":"60 of 60 frames","detail":"and 0 of 60 frames of unlabelled clips read as labelled"},{"label":"C2PA marking valid, content intact","value":"10 of 10","detail":null}],"points":[{"heading":"Where it fails","text":"Single words that are also everyday words: 'Apple' in 'I cancelled Apple for this', and the song 'Happy'. The yes/no step that removes generic music cues also dropped that one real song."},{"heading":"What this does not show","text":"The plants are blatant, one instance each, in short synthetic scripts. The label check read our own label style on our own footage. No real-world recall, and no judgement of what counts as 'conspicuous', is claimed."}],"source":"decosa-api docs/evals/disclosure-preflight.md, 2026-09-25"},"notes":["No detector model is used or claimed. A performer is synthetic when the file's provenance says so or you declare it; a file with neither gets 'needs a declaration', because a detector miss would read as 'no AI here'.","The label check reads our own label style on our own footage (60 of 60 frames read back, 0 of 60 false). A third party's label in another font, place or language may not be read; the rule then shows missing or partial and the reviewer decides.","Script flags: 27 of 29 planted issues found on the held-out test set with no false flags, on short synthetic scripts with one blatant instance each. Real scripts (nicknames, brands used as generic words, music described without a title) will do worse.","Consent is by ledger id only, from the consent ledger (tool 47). A server without it configured answers only the fictional demo identities and older cr_ records, and reports every other performer as unchecked, never cleared.","Not included yet: logos and faces in the picture (the UGC OCR brand check is the licence-clean starting point), audio (voices are checked by ledger id, not by listening), and labels in other languages."]},"buyer_facts":[{"label":"Data retention","value":"The upload and intermediate files are deleted when the run ends; the disclosed video and the report are kept for one hour, for the token or key that made the run. Logs carry counts only, never script text, names or the reviewer."},{"label":"What leaves the box","value":"Self-hosted: nothing (the script checks go to your own model server). Hosted demo: the video is checked on Decosa's server; only the script goes to the model through our gateway."},{"label":"How 'synthetic' is decided","value":"From the file's C2PA credential, Decosa's render receipt (by file hash, credential or invisible watermark) and your declaration. No detector model; no provenance and no declaration means 'needs a declaration'."},{"label":"Consent","value":"One receipted consent-ledger check per enrolled performer and kind (face, voice) for the project, purpose 'advertising', territory and date. Nobody is identified from their face or voice."},{"label":"Cost per ad","value":"A fraction of a cent in model time at the gateway's list price for the planted demo script (a few calls); the video steps are CPU time."},{"label":"Output","value":"The ad with a visible label and a C2PA marking when a rule needs them; a report and flag list (Markdown, CSV); and a signed AI-use attestation naming the reviewer, verifiable at /record/verify."}],"data_handling":{"page":"/data#disclosure-preflight","self_host":{"level":"confidential","leaves":"nothing","summary":"Runs on your machine; nothing is sent to Decosa or a third party by default."},"hosted":{"level":"operator-processed","demo_only":false,"summary":"TLS to Decosa's server, then decrypted and processed by Decosa's API server, with the open models run by NEAR AI through OpenRouter, with Reka AI as the only fallback under Decosa's account.","gpus":"operator-contracted","third_parties":[],"retention":"The upload and intermediate files are deleted when the run ends; the disclosed video and the report are kept for one hour, for the token or key that made the run. Logs carry counts only, never script text, names or the reviewer.","used_for_training":false,"encrypted_while_processed":false},"sealed_tier":{"applies":false,"note":"The sealed tier (raw chat only, never use-case pipelines) is paused at launch (/docs/sealed-tier)."},"external_calls":[]},"console":{"href":"/tools/media/disclosure-preflight","input":"disclosure","lanes":[{"id":"rules","title":"Disclosure rules","kind":"list"},{"id":"performers","title":"Performers and consent","kind":"list"},{"id":"flags","title":"Script flags","kind":"list"},{"id":"attestation","title":"AI-use attestation","kind":"json"}],"samples":[{"n":1,"id":"ad-lumo-loop","title":"Ad lumo loop","deep_link":"/tools/media/disclosure-preflight?sample=1&autorun=0"},{"n":2,"id":"ad-fernway-h3","title":"Ad fernway h3","deep_link":"/tools/media/disclosure-preflight?sample=2&autorun=0"},{"n":3,"id":"raw-undeclared","title":"Raw undeclared","deep_link":"/tools/media/disclosure-preflight?sample=3&autorun=0"},{"n":4,"id":"raw-declared","title":"Raw declared","deep_link":"/tools/media/disclosure-preflight?sample=4&autorun=0"},{"n":5,"id":"stripped-credential","title":"Stripped credential","deep_link":"/tools/media/disclosure-preflight?sample=5&autorun=0"},{"n":6,"id":"script-planted","title":"Script planted","deep_link":"/tools/media/disclosure-preflight?sample=6&autorun=0"},{"n":7,"id":"replica-wrong-purpose","title":"Replica wrong purpose","deep_link":"/tools/media/disclosure-preflight?sample=7&autorun=0"}],"deep_link_params":{"sample":"1-based index into samples, or a sample id","autorun":"1 = start the run once the sample is loaded; 0 (default) = only preselect","reduce-motion":"1 = turn off animations"}},"api":{"base":"https://api.decosa.ai","contract":"/api/contract.json","contract_markdown":"/api/contract.md","reference":"/docs/api","keys":"/account/keys"},"prompts":{"hosted":"/prompts/disclosure-preflight-hosted.md","selfhost":"/prompts/disclosure-preflight-selfhost.md","assemble":"/prompts/disclosure-preflight-assemble.md","mac":null},"rehearsal":{"bundle":"/samples/disclosure-preflight.zip","bundle_url":"https://decosa.ai/samples/disclosure-preflight.zip","folder":"/samples/disclosure-preflight/","expected":"/samples/disclosure-preflight/expected.json","files":["/samples/disclosure-preflight/expected.json","/samples/disclosure-preflight/inputs/performers.json","/samples/disclosure-preflight/inputs/presenter-declared.json","/samples/disclosure-preflight/inputs/presenter-script.txt","/samples/disclosure-preflight/inputs/raw-presenter.mp4","/samples/disclosure-preflight/inputs/script-planted.txt"],"bytes":260023,"checks":["the hit song is flagged","the celebrity is flagged","the other brand is flagged","the swear word is flagged","the dangerous stunt is flagged","Ava's consent is granted","Ben's consent is refused (he withdrew it)","the ledger refuses Ben because his consent was revoked","Ben's face and voice refusals each carry a ledger decision id","the signed attestation verifies","an attestation with one entry edited no longer verifies","the clip gets the AI label burned in","the label is read back on every sampled frame (6 of 6)","the clip carries a C2PA marking whose content hash checks","the script's model calls have receipts (at least 4)","every model call has a signed receipt (consent-ledger decision ids are not model receipts)"],"licence":"Fictional: the script, brands in the product slots, performers and consent entries were written for Decosa (CC0); the named celebrity, brand and song are the planted issues. raw-presenter.mp4: Decosa's own synthetic presenter render (no real person), CC0.","about":"A fictional oat-milk script with five planted issues (a hit song, a celebrity, another brand, a swear word, a dangerous stunt) and two enrolled fictional actors, one consented and one who withdrew consent; then a raw AI presenter clip declared synthetic. The script check must flag the five issues, grant Ava and refuse Ben, and the sign-off must seal an attestation that verifies and fails once edited. The clip must get the AI label burned in, read back on every sampled frame, and a valid C2PA marking.","run":{"containers":"docker compose exec api python scripts/rehearse.py disclosure-preflight","checkout":"python scripts/rehearse.py disclosure-preflight --bundle disclosure-preflight.zip --base-url http://127.0.0.1:8445","mac":".venv/bin/python scripts/rehearse.py disclosure-preflight"},"guidance":"Set up with a coding agent (we recommend Claude Code with Claude Opus 5.5; any capable coding agent works) on mock data only, run the rehearsal until every check passes, then run your own data locally yourself. Never give the agent real data during setup."},"hardware_fit":{"check":"/self-host/hardware?use=disclosure-preflight","data":"/api/hardware.json","tiers":[{"id":"lite","gpu_gb":0,"basis":null,"unknown":[]},{"id":"standard","gpu_gb":57.6,"basis":"stack","unknown":[]}],"mac":null},"links":{"page":"/tools/media/disclosure-preflight","json":"/use-cases/disclosure-preflight.json","metrics":"/metrics/disclosure-preflight","console":"/tools/media/disclosure-preflight","console_sample":"/tools/media/disclosure-preflight?sample=1&autorun=0","stack":"/tools/media/disclosure-preflight#stack","try_live":"/tools/media/disclosure-preflight","watch":"/tools/media/disclosure-preflight","build":"/tools/media/disclosure-preflight#build","self_host":"/tools/media/disclosure-preflight#self-host","prompts":{"hosted":"/prompts/disclosure-preflight-hosted.md","selfhost":"/prompts/disclosure-preflight-selfhost.md","assemble":"/prompts/disclosure-preflight-assemble.md","mac":null}}}