# EU AI Act — transparentnost obsahu generovaného AI Vlastník dokumentu: **EU‑INFRA**. Verze 2026‑09‑10. Týká se nařízení Evropského parlamentu a Rady **(EU) 2024/1689** (akt o umělé inteligenci), zejména **čl. 50 — povinnosti transparentnosti**. Zdroje: [čl. 50 aktu o AI](https://artificialintelligenceact.eu/article/50/) · [úplné znění nařízení (EUR‑Lex)](https://eur-lex.europa.eu/eli/reg/2024/1689/oj) · [C2PA — Content Credentials, specifikace](https://c2pa.org/specifications/) · [Kodex chování pro označování obsahu generovaného AI (Evropská komise, čl. 50 odst. 7; vydán 10. 6. 2026)](https://digital-strategy.ec.europa.eu/en/policies/ai-act-transparent-ai) · [shrnutí kodexu (IPTC, 6/2026)](https://iptc.org/news/eu-ai-transparency-code-of-practice-june-2026/) · BRIEF „EU‑FIRST“, DESIGN §19.5. > **Povinnosti podle čl. 50 jsou účinné od 2. 8. 2026** (čl. 113 nařízení), tedy **už platí**. Označení > popsané níže (§3, §4) je nasazené a funguje na každém stahovaném souboru; položky v §7 jsou zbývající mezery > **po termínu**, u každé je uvedeno, zda jde o dobrovolné zlepšení, nebo o věc k doplnění. Právní posouzení > kvalifikace Aleatorie jako poskytovatele systému AI **(k právní revizi)**. --- ## 1. Které povinnosti se na nás vztahují Poskytovatelem ve smyslu čl. 3 bodu 3 nařízení je **Cloudpeakify s.r.o.**, IČO **21041342**, DIČ **CZ21041342**, se sídlem **Jičínská 226/17, Žižkov, 130 00 Praha 3, Česká republika**, zapsaná v obchodním rejstříku vedeném Městským soudem v Praze, oddíl C, vložka 396064. Kontakt: **support@aleatoria.io**. Aleatoria je obchodní označení služby, kterou tato společnost provozuje — povinnosti podle čl. 50 nese ona, ne značka. Aleatoria je **systém AI, který generuje syntetický zvukový obsah**. Z čl. 50 z toho plyne: | ustanovení | koho se týká | obsah povinnosti | týká se nás | |---|---|---|---| | čl. 50 odst. 1 | poskytovatel systému, který přímo komunikuje s lidmi | informovat, že jde o AI | jen okrajově (nemáme chatbota); rozhraní přesto AI označuje | | **čl. 50 odst. 2** | **poskytovatel systému generujícího syntetický zvuk, obraz, video nebo text** | **výstupy musí být označeny ve strojově čitelném formátu a rozpoznatelné jako uměle vytvořené či manipulované**; řešení musí být účinné, interoperabilní, robustní a spolehlivé, nakolik je to technicky proveditelné | **ANO — jádro tohoto dokumentu** | | čl. 50 odst. 3 | poskytovatel systému rozpoznávání emocí / biometrické kategorizace | informovat vystavené osoby | ne | | čl. 50 odst. 4 | zavádějící subjekt (deployer) vytvářející deep fake nebo text o věcech veřejného zájmu | zveřejnit, že obsah byl uměle vytvořen | týká se **uživatelů** naší služby — upozorňujeme na to v podmínkách | | čl. 50 odst. 5 | všichni | informace musí být poskytnuta jasně a rozpoznatelně nejpozději při prvním kontaktu | ANO | | čl. 50 odst. 7 | Komise + poskytovatelé | kodex chování pro označování a detekci | kodex vydán 10. 6. 2026 (dobrovolný; signatáři mají domněnku souladu): **dvě vrstvy** — digitálně podepsaná a časově označená metadata (C2PA) a neslyšitelný vodoznak. Značení systémů na trhu před 2. 8. 2026 do **2. 12. 2026**, detekce do 2. 2. 2027. Stav: metadata ano, podpis a vodoznak jako piloty (§9); podpis kodexu rozhoduje vlastník | Výjimka pro „asistenční“ úpravy (čl. 50 odst. 2 poslední věta — systémy provádějící jen pomocnou úpravu, která podstatně nemění vstupní data) se na nás **nevztahuje**: audio vytváříme, nejen upravujeme. Označujeme proto **i čistě procedurální (Tier 0) výstupy**, přestože se u nich dá argumentovat, že nejde o „AI“ ve smyslu čl. 3 odst. 1 (je to algoritmická syntéza bez modelu). Označit navíc je bezpečnější než neoznačit **(k právní revizi)**. --- ## 2. Naše implementace — přehled | vrstva | značka | kde v kódu | ověření | |---|---|---|---| | WAV (24/32 bit) | RIFF `LIST/INFO`: `ICMT = "BPM=124.0 KEY=A minor \| AI-generated audio - Aleatoria 0.1.0"`, `ISFT = "Aleatoria"`, `ICRD`, `INAM` | `server/aleatoria/audio_io.py::write_wav`, `comment_for` | `audio_io.wav_info_tags(path)`; `ffprobe -show_format` | | FLAC (24 bit) | Vorbis comment: **`AI_GENERATED=true`**, `COMMENT` = tentýž popisek, `BPM`, `KEY`, `INITIALKEY`, `DATE`, `ENCODER` | `audio_io.py::vorbis_comments`, `set_flac_tags` | `audio_io.flac_tags(path)`; `metaflac --list` | | MP3 320 kbps | ID3v2.3: **`TXXX:AI-GENERATED=true`**, `COMM` = popisek, `TBPM`, `TKEY`, `TSSE`, `TYER`/`TDAT` | `audio_io.py::id3v2_tag` (vlastní zapisovač — ffmpeg `-metadata comment=` vyrobí `TXXX:comment`, který DJ software ignoruje) | `ffprobe -show_entries format_tags` | | Vícekanálové mastery (7.1.4 bed, AmbiX) | tentýž `LIST/INFO` blok jako WAV | `audio_io.py::write_multichannel_wav` | `ffprobe` | | ADM BWF (Atmos‑ready) | **`bext` `Description`** (BWF, EBU Tech 3285), `LIST/INFO` (`ICMT` = tentýž popisek jako u WAV, `ISFT`, `ICRD`, `INAM`) **a** `audioProgrammeLabel` uvnitř `axml` — třikrát, protože právě tenhle soubor putuje k distributorovi | `audio/immersive/adm.py` | `ffprobe -show_entries format_tags` · `grep audioProgrammeLabel` · ověřeno `ear-render -s 4+7+0 --strict` (rc 0) i po přidání `bext` | | HTTP stahování z API | hlavička **`X-Aleatoria-AI-Generated: true`** na každé odpovědi, kterou pošle **naše** API (u GCS i na přesměrování `302`) | `server/aleatoria/routes/tracks.py::AI_HEADER` | `curl -I` | | Objekt v GCS | **`x-goog-meta-ai-generated: true`** a `x-goog-meta-ai-label` — vlastní metadata objektu, která GCS vrací na **každém** GET, tedy i na podepsané URL, kterou prohlížeč následuje po `302` (naši hlavičku už v té odpovědi nikdo nepošle) | `server/aleatoria/storage.py::AI_OBJECT_METADATA`, `GCSStorage.put_file` | `gcloud storage objects describe gs://…/mix.wav --format='value(metadata)'` | | CORS podepsaných URL | `response_header` bucketu obsahuje `x-goog-meta-ai-generated` a `x-goog-meta-ai-label`, takže je smí přečíst i JavaScript. **Pozor:** `response_header` = `Access-Control-Expose-Headers`, hlavičku *nepřidává* — přidává ji metadata objektu o řádek výš | `infra/terraform/modules/storage/main.tf` | `gcloud storage buckets describe` | | Manifest původu | JSON ve tvaru C2PA: `c2pa.actions` s `digitalSourceType` = `trainedAlgorithmicMedia` u neurálního výstupu a `algorithmicMedia` u čistě procedurálního (§4), `ai_generated: true`, model, seed, region dat | `server/aleatoria/audio/provenance.py`, `routes/me.py` | `curl $API_URL/api/tracks/$ID/provenance` | | MIDI ze stop AI (`stems.mid`) | textová událost SMF (`FF 01`) na začátku konduktorové stopy: `AI-generated audio - Aleatoria \| MIDI transcribed from AI-separated stems` | `sidecars/stems/midi.py::write_smf` (`AI_LABEL`) | `midi.read_smf(data)["texts"]`; `server/tests/test_sidecar_stems.py` | | EV Drive: Boombox a zvuk zamykání (WAV 16 bit) | `LIST/INFO` **za** datovým chunkem (hlavička zůstává kanonických 44 B): `ICMT` = popisek bez verze jako v prohlížeči (`web/src/lib/audio/wav.ts` `AI_LABEL`), `ISFT = "Aleatoria EV Drive"` | `web/src/drive/engine/offline/exportClip.ts::encodeWav16` | `exportClip.test.ts`; `ffprobe -show_format` | | Rozhraní | štítek „AI“ (`QualityChips`, `quality.chip.ai`) v detailu skladby v knihovně, v prohlížeči knihovny v DAW a ve výsledku v jednoduchém studiu; sekce v Právních informacích (`legal.ai.*`); u výstupu Stable Audio navíc „Powered by Stability AI“ | `web/src/` (FE) | vizuálně | Popisek je jediná konstanta `audio_io.AI_LABEL = f"AI-generated audio - Aleatoria {__version__}"`; nikde se nezdvojuje. --- ## 3. Proč zrovna tyto značky * **Strojová čitelnost (čl. 50 odst. 2).** `AI_GENERATED=true` (Vorbis), `TXXX:AI-GENERATED=true` (ID3) a `X-Aleatoria-AI-Generated: true` (HTTP) jsou parsovatelné bez heuristiky. `ICMT` u WAV je textové pole, protože RIFF `INFO` nemá vyhrazený booleovský tag — proto je popisek stabilní a předvídatelný řetězec. * **Interoperabilita.** Použili jsme pole, která běžné nástroje skutečně čtou: `ffprobe`, `metaflac`, `mediainfo`, Rekordbox/Serato/Traktor (`TBPM`, `TKEY`, `INITIALKEY`), DAW (`ISFT`, `INAM`). * **Robustnost.** Značka je uložena přímo v souboru, ne jen v databázi; přežije kopírování i přejmenování. Neodolá přeenkódování bez zachování metadat — to je známé omezení všech metadatových značek a důvod, proč je na roadmapě C2PA a proč je hlavička doplňkem, ne náhradou. * **Vodoznak v signálu (audio watermark): pilot, zatím ne v produkci.** Kodex z 10. 6. 2026 chce vedle podepsaných metadat i neslyšitelný vodoznak. Zkoušíme open‑source **AudioSeal** (Meta, licence MIT): odolnost proti běžným úpravám a **slepý poslechový test (ABX)**, protože produkt slibuje maximální kvalitu masteru (BRIEF „MAX QUALITY“). Do produkce půjde jen tehdy, když ho posluchači v testu nerozpoznají (postup a kritérium v §9). Čl. 50 odst. 2 vyžaduje řešení „nakolik je to technicky proveditelné“; tento odstavec zaznamenává, kde jsme. --- ## 4. Manifest původu — `GET /api/tracks/{id}/provenance` Třetí vrstvou označení (vedle metadat v souboru a HTTP hlavičky) je **manifest původu ve tvaru C2PA**, který sestavuje `server/aleatoria/audio/provenance.py::build_manifest` a vrací endpoint `GET /api/tracks/{id}/provenance` (`server/aleatoria/routes/me.py`). Je to *sidecar* JSON — servíruje se vedle souboru, neukládá se do bucketu a nezvětšuje audio. Klíčové prvky (zkráceně): ```json { "claim_generator": "Aleatoria/0.1.0", "claim_generator_info": [{"name": "Aleatoria", "version": "0.1.0"}], "title": "…", "format": "audio/wav", "instance_id": "xmp:iid:", "assertions": [ {"label": "c2pa.actions", "data": {"actions": [{ "action": "c2pa.created", "digitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia", "softwareAgent": {"name": "Aleatoria", "version": "0.1.0"}, "parameters": {"engine": "acestep", "engine_kind": "neural", "mode": "song", "genre": "deep_house", "seed": 123456789, "prompt_provided": true}, "when": "2026-09-07T10:11:12+00:00"}]}}, {"label": "c2pa.training-mining", "data": {"entries": { "c2pa.ai_generative_training": {"use": "notAllowed"}, "c2pa.ai_training": {"use": "notAllowed"}, "c2pa.ai_inference": {"use": "notAllowed"}, "c2pa.data_mining": {"use": "notAllowed"}}}} ], "ai_generated": true, "engine": "acestep", "model": {"id": "acestep", "name": "ACE-Step 1.5", "kind": "neural", "license": "MIT", "generative": true}, "seed": 123456789, "created_at": "2026-09-07T10:11:12+00:00", "audio": {"sample_rate": 48000, "bit_depth": 24, "duration_sec": 180.0, "channels": 2}, "data_region": "europe-west4", "eu_ai_act": {"article": "Article 50(2)", "applies_from": "2026-08-02", "reference": "https://artificialintelligenceact.eu/article/50/", "marking": ["file_metadata", "http_header", "provenance_manifest"]}, "binding": {"embedded": false, "signed": false, "note": "…roadmap…"}, "derivation": {"kind": "edit", "source_track_id": "0d0f…", "op_count": 7, "ops_digest": "sha256:…", "doc_version": 7} } ``` Proč právě tohle: * `digitalSourceType` je hodnota ze slovníku IPTC, na který se C2PA odkazuje, a **volí se podle toho, co skladbu skutečně vyrobilo**: `trainedAlgorithmicMedia` u neurálního enginu (a u hybridu, který obsahuje výstup modelu), `algorithmicMedia` u čistě procedurálního Tier‑0 renderu — ten žádný trénovaný model nepoužívá. `provenance.digital_source_type(engine_kind)`. Obojí je „vytvořeno AI“ ve smyslu čl. 50 (`ai_generated` je `true` v obou případech), ale čl. 50 odst. 2 chce označení **robustní a spolehlivé**; tvrdit u vlastního DSP, že vzniklo trénovaným modelem, by spolehlivé nebylo. * `c2pa.training-mining` s `notAllowed` je zároveň naše prohlášení, že si nepřejeme, aby byl náš výstup použit k tréninku cizích modelů. * **Prompt se v manifestu neobjevuje** — jen `prompt_provided: true/false`. Manifest smí být sdílen se souborem, ale zadání může obsahovat osobní údaje (`docs/GDPR.md` §2). Kdo potřebuje celé zadání, má ho ve své knihovně a v exportu podle čl. 20. * `binding` říká na rovinu, že manifest **není vložen do souboru a není podepsán** — viz §7. * `derivation` je **jen u skladby, která vznikla úpravou jiné** ve Studio editoru (`docs/design/EDITOR.md` §3.4). Vygenerovaná skladba je reprodukovatelná z `spec + seed`; upravená z `spec + seed + meta.edit.ops`, což je deterministická, celočíselně indexovaná a zveřejněná funkce výsledku — reprodukovatelnost se tím **posiluje**, ne oslabuje. `ops_digest` je SHA‑256 kanonického JSONu seznamu operací, takže tvrzení lze ověřit bez toho, aby se celý seznam vozil v manifestu. U vygenerované skladby blok chybí; nepíšeme prázdné pole místo pravdy. ## 5. Co netvrdíme (poctivé označování) * **„Dolby Atmos encoded“ neříkáme nikdy.** Vyrábíme **ADM BWF master připravený pro Atmos** (BW64/RIFF s chunky `chna` + `axml` podle ITU‑R BS.2076, 48 kHz / 24 bit, nejvýše 128 stop = bed + max. 118 objektů). Finální kódování (DD+ JOC / AC‑4) provádějí licencované nástroje Dolby; ffmpeg to neumí. Otevřený **EBU ADM Renderer `ear`** (BSD‑3, `pip install ear`, `ear-render -s 4+7+0 in.wav out.wav`) soubor validuje a renderuje. Formulace v UI i v dokumentaci: *„Atmos‑ready ADM BWF master (importujte do Dolby Atmos Rendereru nebo doručte přes distributora, který ADM BWF přijímá)“*. Viz `docs/IMMERSIVE.md`. * **Netvrdíme, že výstup je originální dílo bez lidského přispění.** V podmínkách je uvedeno, že autorskoprávní ochrana čistě strojově generovaného obsahu je v EU nejistá **(k právní revizi)** — proto zdůrazňujeme lidský vstup (prompt, struktura, křivka energie, mix). * **Netvrdíme, že označení nelze odstranit.** Uživatel může tagy smazat; podmínky užití to zakazují (`docs/legal/TERMS.cs.md`, „Označení obsahu vytvořeného AI“) a čl. 50 odst. 4 klade povinnost i na toho, kdo obsah zveřejňuje. --- ## 6. Vztah k dalším povinnostem podle aktu o AI | oblast | posouzení | |---|---| | Zakázané praktiky (čl. 5) | netýká se — negenerujeme biometrickou kategorizaci, sociální skóring ani manipulaci | | Vysoce rizikové systémy (příloha III) | **ne** — hudební generátor mezi vysoce rizikové systémy nepatří | | Obecné modely AI (GPAI, čl. 53) | modely **netrénujeme**; používáme cizí modely (ACE‑Step 1.5 MIT, Stable Audio Open Small, HeartMuLa Apache‑2.0). Povinnosti poskytovatele GPAI nás potkají, teprve až budeme trénovat vlastní model (roadmapa, `docs/VISION.md`) — pak je nutné shrnutí trénovacích dat podle čl. 53 odst. 1 písm. d) a politika dodržování autorského práva | | Licence modelů | MusicGen má váhy **CC‑BY‑NC 4.0** → registry ho označuje `commercial_ok: false` a placené plány ho odmítnou; jde o smluvní, nikoli AI‑Act povinnost | | AI gramotnost (čl. 4) | provozovatel a spolupracovníci se seznámí s tímto dokumentem; u jednočlenného týmu formální školení nevyžadujeme (k právní revizi) | --- ## 7. Zbývající mezery (termín 2. 8. 2026 už uplynul — priorita) Čl. 50 odst. 2 váže rozsah označení na to, „nakolik je to technicky proveditelné“; níže je u každé položky uvedeno, jestli jde o **dobrovolné zpevnění** nad rámec povinnosti, nebo o **věc k doplnění**. 1. **Vložení a podpis manifestu C2PA.** Dnes je manifest sidecar (§4). Skutečný nárok C2PA vyžaduje zapsat úložiště JUMBF přímo do kontejneru (WAV/BWF přes RIFF chunk, MP3 přes ID3 rámec `GEOB`) a podepsat ho certifikátem od certifikační autority z důvěryhodného seznamu C2PA. Nutné: certifikát, knihovna (`c2pa-python`), rozhodnutí, u kterých formátů podepisovat. **Vlastník: CORE‑BE + EU‑INFRA.** 2. **Kodex chování podle čl. 50 odst. 7 (vydán 10. 6. 2026), termín 2. 12. 2026.** Podepsaný C2PA manifest: pilot se self‑signed certifikátem hotový (§9), pro produkci chybí certifikát z trust listu a časové razítko — **vlastník**. Vodoznak AudioSeal: pilot a slepý test (§9), rozhodnutí podle výsledku. Podpis kodexu (právní závazek) — **vlastník**. 3. **Detekční endpoint** `POST /api/verify` — nahraný soubor se zkontroluje na naše značky a vrátí manifest původu, pokud skladbu známe. Užitečné pro distributory a pro důkaz původu. 4. **Text pro uživatele o čl. 50 odst. 4** — kdo naši skladbu zveřejní jako součást obsahu veřejného zájmu, má vlastní povinnost obsah označit; upozornění je v podmínkách a v Právních informacích v aplikaci. 5. ~~**Text v aplikaci mluví o čl. 50 v budoucím čase.**~~ **Hotovo:** řetězec `legal.ai.body` ve `web/src/i18n/*.pages.ts` dnes říká „povinnosti podle čl. 50 platí od 2. srpna 2026 a označení je nasazené na každém exportovaném souboru“ (ověřeno 12. 10. 2026 ve všech jazycích), tedy totéž co tento dokument. --- ## 8. Jak si označení ověřit (provozní kontrola) ```bash # WAV / MP3 / FLAC z produkčního exportu ffprobe -v error -show_entries format_tags "$f" # ICMT / COMM / TXXX / AI_GENERATED metaflac --list --block-type=VORBIS_COMMENT mix.flac | grep -i ai_generated # hlavička naší API odpovědi (u GCS je to odpověď 302, ne soubor) curl -sI "$API_URL/api/tracks/$ID/audio?format=flac" | grep -i x-aleatoria # X-Aleatoria-AI-Generated: true # a značka na samotném objektu, kterou GCS vrací i na podepsané URL gcloud storage objects describe "gs://$BUCKET/tracks/$ID/mix.flac" --format='value(metadata)' curl -s "$API_URL/api/tracks/$ID/provenance" | jq '.ai_generated, .assertions[0].data.actions[0].digitalSourceType' # ADM BWF: bext Description + LIST/INFO + audioProgrammeLabel ffprobe -v error -show_entries format_tags immersive/atmos_adm.wav python - <<'PY' from pathlib import Path from aleatoria.audio_io import flac_tags, wav_info_tags print(wav_info_tags(Path("mix.wav")).get("ICMT")) print(flac_tags(Path("mix.flac")).get("AI_GENERATED")) print(wav_info_tags(Path("immersive/atmos_adm.wav")).get("ICMT")) PY ``` Kontrola patří do release checklistu (`docs/DEPLOY.md` §7 smoke test) — každý build, který exportuje soubor bez značky, je porušení čl. 50 a blokuje nasazení. ## 9. Piloty: podepsaný C2PA manifest a vodoznak (Q9, rozhodnutí ředitele 3. 10. 2026) **(b) Podepsaný C2PA manifest, self-signed pilot.** - **Co je hotové:** `server/aleatoria/c2pa_pilot.py` (podpis a čtení) a `server/tools/c2pa_pilot.py` (příkazy `keys`, `sign`, `verify`). - Do WAV a MP3 vloží podepsaný manifest (ES256). - Manifest obsahuje akci `c2pa.created` s `digitalSourceType` = `trainedAlgorithmicMedia` a odmítnutí AI tréninku (`cawg.training-mining`; starší `c2pa.training-mining` je v C2PA 2.x zastaralé). - **Ověřeno jednou ručně** 3. 10. 2026 ve zkušebním venv s c2pa-python 0.38 (c2pa-rs) na WAV i MP3: stav **Valid**. - Self-signed certifikát není z trust listu, takže ověřovatel manifest označí za platný, ale nedůvěryhodný. - Test `server/tests/test_c2pa_pilot.py` podepisuje WAV i MP3. **Bez balíčku c2pa-python (dnes i v CI) se přeskočí** — server na něm zatím nezávisí. - FLAC C2PA neumí. Ten dál nese nepodepsanou značku (§2). - **Klíče:** aplikace je nevyrábí. Kód, který certifikát vyrobí, je jen v `server/tools/` (mimo balíček `aleatoria`; test to hlídá). - Pro pilot je vyrobí operátor příkazem `python -m tools.c2pa_pilot keys --out …`. - Klíč vzniká rovnou s právy 0600 ve složce 0700 a existující klíč se nikdy nepřepíše. - Uloží se jako tajemství, mimo repozitář. - Certifikát z C2PA trust listu je nákup a rozhodnutí vlastníka (Q9 a). - **Časové razítko:** manifest dnes nemá razítko od autority časových razítek (TSA, `ta_url` je prázdné). - Podpis tak lze ověřit jen do vypršení certifikátu (pilot: 365 dní). Pak manifest neprojde ověřením. - **Produkce potřebuje TSA**, obvykle ji dodává vydavatel certifikátu (součást Q9 a). - **Proč to ještě není v exportu:** stažení souborů **přetagovává** (název, BPM, Serato cue; `routes/tracks.py`). - Ověřeno 3. 10. 2026: po přetagování podepsaného WAV i MP3 v souboru **žádný manifest nezůstane** („no JUMBF data found“). - Řešení pro napojení: podepisovat **až při odeslání**, po přetagování (podpis za běhu, cca desítky ms), nebo podepsané soubory nepřetagovávat. - **Podpis při odeslání znamená, že API drží podpisový klíč**, nebo podepisuje přes KMS či vzdálený podpisový callback (klíč mimo API). To je součást rozhodnutí vlastníka Q9 (a) spolu s certifikátem. - **Otevřené pro vlastníka (produktová a právní volba):** manifest dnes zakazuje i `ai_inference` (použití výstupu jako vstupu jiné AI). To omezuje, co smějí ostatní dělat s **vlastní skladbou uživatele**. Zda zákaz ponechat, zrušit, nebo nechat na uživateli, rozhodne vlastník (případně s advokátem). Kód se do té doby nemění. **(c) Neslyšitelný vodoznak AudioSeal, pilot ve větvi.** - `scripts/audioseal-pilot/` připraví slepý ABX poslechový test a změří odolnost: - MP3, AAC, - převzorkování tam a zpět, - hlasitost, - šum. - Kritérium je pevné předem: - ≥ 3 posluchači; pokusů na posluchače tolik, aby test jednotlivce i po Bonferroniho korekci měl sílu ≥ 0,8 pro posluchače, který slyší v 70 % pokusů — 60 při 3 posluchačích (síla 0,84), 72 při 6; - společné vyhodnocení všech posluchačů; - Bonferroni pro jednotlivce (celková chyba prvního druhu pro 3 × 60 pokusů 0,068, na bezpečné straně: spíš „slyšet“). - Poslouchá se v ABX přehrávači. Posluchači dostanou jen dvojice čistá/označená verze (`pairs/`) a prázdný list; X skryje přehrávač. Klíč odpovědí a záložní sadu A/B/X (X je kopie A nebo B, takže by šla poznat bez poslechu) má jen vedoucí testu ve vlastní složce mimo sdílenou. - Nevýznamný výsledek se zapisuje jako „bez dokladu slyšitelnosti při dané síle testu“, ne jako důkaz neslyšitelnosti. - **Do produkce až po slepém testu** (README sady uvádí kritéria). - **(a)** Podpis kodexu je právní závazek, rozhoduje vlastník.