Jak oznaczać treści AI, by nie dostać kary? Zapisz się na bezpłatne szkolenie o AI Act
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
Jak oznaczać treści AI, by nie dostać kary? Zapisz się na bezpłatne szkolenie o AI Act
Konferencja Mega Sekurak Hacking Party w Krakowie – 26-27 października!
2 sierpnia weszły w życie kolejne przepisy AI Act, kładące nacisk na oznaczanie treści w Internecie. Co jednak, jeśli ktoś tego obowiązku nie dopełni? Pamiętajmy, że cyberzbój na przepisy prawa nie patrzy. Wykrywanie deepfake’ów zaczyna się od zabezpieczenia oryginału i od pytania: co konkretnie próbujemy wykryć? Wygenerowany obraz, podmienioną twarz, sklonowany głos, film wyjęty z kontekstu, a może tekst napisany przez LLM?
13 sierpnia o godz. 10:00 wpadajcie na bezpłatne szkolenie Tomka Turby Jak oznaczać treści AI, by nie dostać kary? AI Act na przykładach. Na warsztat weźmiemy realne case’y i pokażemy, kiedy oznaczać, a kiedy nie ma takiej potrzeby. Przy okazji dowiecie się, jak wykrywać takie treści, jeśli niektórzy “zapomną” wspomnieć, że AI “maczała w nich palce” 😉.
W potocznym użyciu “deepfake” stał się workiem na wszystko, co wygląda podejrzanie. Warto rozdzielić pięć przypadków:
Jednak w każdym z tych przypadków detekcja może być trudna. Bo skutek jest praktyczny. Detektor od face swapu poprawnie zwróci “brak deepfake’a” dla filmu wygenerowanego przez model text-to-video. Wynik mieści się w zakresie narzędzia, a mimo to łatwo odczytać go jako “film prawdziwy”. Zatem na starcie przekazuję Wam ważne stwierdzenie…
NIST w opracowaniu o ryzyku treści syntetycznych dzieli rozwiązania na śledzenie pochodzenia i detekcję, zaznaczając, że żadna z tych technik osobno nie wystarcza. Mamy zatem trzy sygnały do weryfikacji: pochodzenie (Content Credentials, znak wodny, plik oryginalny z urządzenia), zawartość (anomalie z klasyfikatorów AI) i kontekst (kto opublikował, kiedy i skąd ma materiał – typowy OSINT).
Najbardziej trafny wniosek dla przypadku powstaje wtedy, gdy warstwy sobie przeczą: plik ma manifest C2PA z wpisem trainedAlgorithmicMedia i znak wodny Google AI, a wydawca podaje go jako nagranie z kamery. Problemem wtedy nie jest już “dziwna dłoń”, tylko udokumentowana sprzeczność co do pochodzenia. Sam wynik “92% że to AI” bez wersji modelu, progu i kalibracji jest tylko tropem, bo 92% w jednym produkcie nie znaczy tego samego, co w drugim. Dodatkowo detektor o czułości 90% i swoistości 95%, przy 5% materiałów syntetycznych w puli 10 000 plików, da około 450 trafień i około 475 fałszywych alarmów (na podstawie własnych badań tak stwierdzam). Ponad połowa alarmów będzie błędna.
Zanim otworzysz pięć zakładek ze skanerami, zabezpiecz materiał zgodnie z dobrymi praktykami OSINT. Przy incydencie albo sprawie sądowej łatwo o sytuację, w której pierwsza analizująca osoba zniszczyła metadane lub zachowała tylko kopię z komunikatora. Oczywiście, jeżeli po prostu surfujesz przez meandry Internetu i nie robisz analizy – nie musisz zachowywać się jak analityk OSINT.
1. Zdobądź najlepszą wersję pliku – plik pobrany bezpośrednio bije nagranie ekranu, a oryginalny załącznik bije film przesłany przez WhatsAppa. Źródło, link i czas otrzymania też warto mieć.
2. Policz hash i pracuj na kopii – hash nie powie, czy film jest prawdziwy, ale wykaże, jaki plik analizowaliśmy.
Listing 1. Zabezpieczenie oryginału z haszem pliku
mkdir -p case/{original,working,frames,reports}
cp --preserve=all podejrzane.mp4 case/original/
sha256sum case/original/podejrzane.mp4 | tee case/reports/SHA256SUMS
cp --preserve=all case/original/podejrzane.mp4 case/working/
3. Sprawdź metadane i pochodzenie – zaufany manifest C2PA to wartościowy sygnał, a jego brak to po prostu brak sygnału. Od dawna platformy społecznościowe usuwają metadane, a i starsze urządzenia niczego nie zapisują.
Listing 2. Weryfikacja metadanych pliku
exiftool -G1 -a -s case/original/podejrzane.mp4 > case/reports/exiftool.txt
ffprobe -v error -show_format -show_streams -of json \
case/original/podejrzane.mp4 > case/reports/ffprobe.json
c2patool case/original/podejrzane.mp4 --info
4. Ustal kontekst – subiektywnie to ounkt najważniejszy i najbardziej podatny na błędy poznawcze. Znajdź najstarszą publikację, poszukaj innych źródeł pokazujących to samo wydarzenie, zrób reverse image search na klatkach (np. tineye lub pimeyes), zweryfikuj pogodę, cienie i chronologię być może z archiwum. W przypadku incydentu, ataku – przy rzekomym poleceniu przelewu kontakt innym kanałem musi wyprzedzić analizę pikseli.
5. Uruchom dwa różne typy testów (pochodzenie, kontekst, klasyfikator) i zapisz warunki: narzędzie, datę, wersję modelu, hash wejścia, ustawienia, pełną odpowiedź JSON oraz to, czy usługa dostała oryginał, czy kopię. Dwa klasyfikatory uczone na podobnych zbiorach nie są niezależnymi dowodami.
W 2026 roku percepcja przestała wystarczać. W materiałach AI nie ma już sześciu palców ani rozjeżdżonej geometrii np. napisów na kubku sekuraka. Jakąś czujkę z tyłu głowy nadal mamy, bo wiele zdjęć ma w sobie “coś”, ale bez narzędzi tych niuansów nie wychwycimy już tak łatwo.
Zaczynamy jak wyżej, od metadanych (exiftool, magick identify -verbose, c2patool), i zestawiamy je z deklarowanym źródłem. Zdjęcie “prosto z aparatu” ze śladami eksportu z generatora wymaga wyjaśnienia. Brak EXIF nie jest jednak dowodem na AI, bo serwisy rutynowo czyszczą metadane, a nazwa aparatu nie jest gwarancją, bo da się ją dopisać.
SynthID to mechanizm znakowania wodnego od Google DeepMind. Znak wodny trafia bezpośrednio w obraz, wideo, audio lub tekst z narzędzi Google i ma przetrwać kompresję, skalowanie czy zmianę liczby klatek, choć po wielu modyfikacjach potrafi stać się niewykrywalny. W publicznym Gemini zweryfikujesz obraz, wideo i audio. Wrzucamy plik i pytamy takim promptem:
Zachowuj się jak super analityk czyli Tomek Turba. Sprawdź, czy ten plik zawiera watermark SynthID albo poprawne Content Credentials. Oddziel wynik dotyczący SynthID od wniosków na podstawie samych metadanych i wyglądu materiału. Czy materiał to deepfake? Określ skalę procentową.
Wykryty SynthID oznacza, że całość lub fragment powstał albo był edytowany w modelu od Google. Niewykryty oznacza tylko tyle, że pliku nie rozpoznano. Mógł powstać w innym modelu albo być mocno przerobionym materiałem Google. Wyniku niejednoznacznego nie zamieniamy w “raczej prawdziwe”. Gemini obsługuje też Content Credentials, więc łączy znak wodny z podpisaną historią pliku. To nadal nie jest test prawdziwości zdarzenia bo materiał AI może być jawną ilustracją, a autentyczne zdjęcie może mieć fałszywy podpis.
Hive AI uruchamia dla obrazu i wideo dwa modele: pierwszy sprawdza, czy materiał wygenerowała AI, drugi szuka deepfake’a twarzy. Odpowiedź zawiera klasy, wynik pewności i prawdopodobny silnik źródłowy.
Listing 3. Korzystanie z narzędzia The Hive przez API
curl --request POST \
--url https://api.thehive.ai/api/v2/task/sync \
--header "authorization: token ${HIVE_API_KEY}" \
--form 'media=@podejrzane.jpg' | jq .
Dla dłuższego wideo praktyczniejszy będzie endpoint asynchroniczny z funkcją callbak. Uważałbym jednak na atrybucję generatora bo to nadal klasyfikacja przez kolejne narzędzie, a nie odczyt podpisu. Hint dla analityka: w raporcie nie pisz “plik utworzono w Midjourney”, tylko “Hive wskazał Midjourney jako najbardziej prawdopodobne źródło”.

Rys. 1. Scoring w TheHive.AI
Copyleaks działa synchronicznie i zwraca wynik jednoznaczny w formacie “AI lub człowiek”, maskę obszarów syntetycznych oraz odczyt C2PA.
Listing 4. Wykorzystanie Copyleaks poprzez API
SCAN_ID="img-$(uuidgen)"
curl -X POST \
"https://api.copyleaks.com/v1/ai-image-detector/${SCAN_ID}/check" \
-H "Authorization: Bearer ${COPYLEAKS_TOKEN}" \
-F 'image=@podejrzane.jpg' -F 'filename=podejrzane.jpg' \
-F 'sandbox=false' -F 'model=ai-image-1-ultra' | jq .
Tryb sandbox=true zwraca mock, więc nie używaj go do oceny prawdziwego materiału. Maska pikselowa przydaje się przy materiale hybrydowym, ale wymaga oględzin, bo kompresja, odszumienie, tryb HDR i upscaling zostawiają ślady podobne do generatywnych.

Rys. 2. Copyleaks AI detektor w akcji – prezentacja obszarów wygenerowanych i prawdziwych
Lista “policz palce i zęby” traci wartość, ale własne oczy nadal wskażą fragment do analizy. Patrzymy w szczególności na: ciągłość krawędzi i obiektów zasłoniętych, cienie i odbicia w szkle, metalu oraz oczach, powtarzalne tekstury, spójność logotypów i lokalne różnice w ostrości. Przynajmniej mi to zawsze daje szybki wynik.
Wideo w analizie jest trudniejsze bo kontener, strumienie, setki klatek i zwykle osobny tor audio. Jeden wynik dla całego filmu potrafi ukryć fakt, że zmanipulowano trzy sekundy albo jedną twarz. Dlatego rozbijamy je na warstwy.
Listing 4. Wykorzystanie ręcznych narzędzi do własnej oceny
# Klatki: jedna na sekundę oraz przy zmianie sceny
ffmpeg -hide_banner -loglevel warning -i case/working/podejrzane.mp4 \
-vf 'fps=1,scale=1280:-2' -q:v 2 case/frames/fps1_%06d.jpg
ffmpeg -hide_banner -loglevel warning -i case/working/podejrzane.mp4 \
-vf "select='gt(scene,0.28)',scale=1280:-2" -fps_mode vfr -q:v 2 \
case/frames/scene_%05d.jpg
# Audio do osobnej analizy głosu
ffmpeg -hide_banner -loglevel warning -i case/working/podejrzane.mp4 \
-vn -ac 1 -ar 16000 case/working/audio.wav
Klatki analizujemy jak obrazy, audio jak osobny materiał. Sprawdzamy synchronizację ust, mruganie, spadki jakości przy ruchu głowy, zarys twarzy, włosy i skoki szumu. Pojedynczy artefakt niczego nie przesądza, ale wzorzec powtarzalny w wielu klatkach już tak.
Poza opisanymi wyżej Gemini z SynthID (jako sygnał pochodzeniowy) i Hive AI (dwa modele plus atrybucja generatora) warto znać:
Deepware Scanner – manipulacja twarzy, głównie face swap. Skaner webowy (limit 10 minut, min. 1920 x 1080) oraz CLI wymagające CUDA. Nie analizuje głosu, a przy filmie bez twarzy “no deepfake detected” nic nie będzie znaczył.
Copyleaks AI Video – ocena czy wideo jest syntetyczne w całości lub częściowo, wynik w osi czasu. Asynchronicznie podajemy URL i webhook, dostajemy overallAIRatio (od 2 sekund do godziny, do 512 MiB, min. 360 x 360 i 16 FPS). Dane opuszczają twoje środowisko, więc waliduj sekret webhooka.
DeepFake-O-Meter – kilka niezależnych modeli badawczych z Uniwersytetu w Buffalo. Jeśli jeden zwraca 97%, drugi 12%, a trzeci nie znajduje twarzy, nie uśredniaj tego do 54%. Rozbieżność jest ważną informacją, ale jeżeli wybierzesz “wszystkie” modele do analizy to uśredni Ci, że to nie fejk jak poniżej:

Rys. 3. Przekłamany wynik Deepfake-o-meter
InVID-WeVerify – analizuje kluczowe klatki, metadane, wykonuje reverse image search, oraz filtrowanie. Zestaw weryfikacyjny, nie klasyfikator, i dlatego wyłapuje przypadek niewidoczny dla skanera: prawdziwy film z 2022 r. opisany jako dzisiejszy atak. Kłamie zatem kontekst, a nie piksele.

Rys. 4. Przykład z InVid-WeWerify
DeepfakeBench – lokalny framework z 36 metodami, w tym ośmioma detektorami wideo. Dobry do benchmarku on-prem, bezużyteczny przy jednym podejrzanym MP4 z Teamsa (szkoda czasu).
Analiza tekstu w 2026 r. jest najtrudniejsza. Większość płatnych narzędzi tekstowych GenAI ma funkcję “zhumanizuj” co oznacza, że model wielokrotnie potrafi parafrazować zdania. Detektor tekstu niestety nie ma pikseli ani kodeka. Szuka wzorców statystycznychj z modelu jak przewidywalność, rozkład tokenów, stylometrię danych modeli. Człowiek może pisać przewidywalnie, model chaotycznie, a tekst bywa tłumaczony, redagowany i parafrazowany. Staje się wtedy niewykrywalny.
Badanie opublikowane w “Patterns” wykazało bias detektorów wobec osób, dla których angielski nie jest językiem ojczystym: średnio 61,22% prac TOEFL napisanych przez ludzi oznaczono jako AI. Praca z NeurIPS pokazała, że parafraza obniżyła skuteczność DetectGPT z 70,3% do 4,6% przy 1% false positive rate. Pamiętacie, jak OpenAI wycofało własny klasyfikator w 2023 r.? Mój wniosek wydaje się zatem oczywisty – wynik detektora tekstu nie może być samodzielną podstawą do ukarania pracownika, ucznia czy dostawcy…
Z narzędzi to wcześniej wspomniany Copyleaks AI Text Detector obsługuje ponad 30 języków, w tym polski. Po pobraniu tokenu z id.copyleaks.com/v3/account/login/api (ważny 48 godzin) skanujemy plik bez ręcznego składania JSON-a:
Listing 5. Copyleaks do tekstu po API
jq -Rs '{text: ., sandbox: false}' artykul.txt | curl -sS -X POST \
"https://api.copyleaks.com/v2/writer-detector/text-$(uuidgen)/check" \
-H "Authorization: Bearer ${COPYLEAKS_TOKEN}" \
-H 'Content-Type: application/json' --data-binary @- | jq .
Również wcześniej wspomniany Hive Text Detection dzieli tekst na fragmenty po 2048 znaków i punktuje każdy osobno. Jednak uwaga, ta granica nie pokrywa się z granicami autorstwa: jeden segment może zawierać cytat, kod, fragment regulaminu i komentarz autora i nie będzie to potwierdzenie pochodzenia “generatywnego AI”.
Za to Google udostępnia też referencyjną implementację SynthID Text, wprost opisaną jako badawcza.
Ostatecznie przy tekście, wynik detektora to wskazanie fragmentów do sprawdzenia. Mocniejszym dowodem będą: historia wersji w Google Docs, zapisy Git albo DMS, szkice i ścieżka redakcyjna, logi użycia zatwierdzonych narzędzi oraz rozmowa o tezach i źródłach. W tekście technicznym bardziej interesuje mnie zmyślony numerek CVE lub paragraf z kodeksu który nie istnieje niż akapit brzmiący “zbyt równo”.

Rys. 6. Matryca sprawdzeń różnymi narzędziami (wygenerowane przez AI z mojej głowy)
Jakbym miał Wam podpowiedzieć jak analizować różne przypadki to zebrałem te które rozpatruje najczęściej:
Skaner deepfaków online przetwarza dane bardzo wrażliwe: twarz, głos, dokumenty, materiał dowodowy. Powinieneś pamiętać o czterech zasadach:
Co mogę doradzić to popróbuj. Zbierz własny zestaw testowy, materiały z kilku generatorów, przykład face swap, zdjęcia wysłane po komunikatorze, polskie teksty ludzkie i mieszane i sprawdź dla wyżej wymienionych narzędzi.
Na co dzień i na szybko to polecam dla obrazu ExifTool i c2patool, SynthID oraz Content Credentials w Gemini, dalej Hive, Copyleaks lub DeepFake-O-Meter, na końcu reverse search (tineye i pimeyes). Dla detekcji wideo to ręcznie ffprobe, klatki i audio, kontekst w InVID, potem Hive, Deepware lub DeepFake-O-Meter, a przy większej skali Copyleaks Video API. Dla tekstu Copyleaks i Hive wskażą fragmenty do sprawdzenia, ale decyzję opieraj na historii wersji i spójności merytorycznej jeżeli to możliwe.
Dwóch rzeczy nie rób nigdy. Nie traktuj braku znaku wodnego jako dowodu autentyczności ani procentu z detektora tekstu jako dowodu winy. Najlepszym detektorem deepfake’ów pozostaje dobrze zaprojektowany proces. Znak wodny odpowiada na pytanie o pochodzenie, klasyfikator szuka cech syntetycznych, OSINT sprawdza kontekst, a weryfikacja drugim kanałem zatrzymuje oszustwo. Dopiero wykorzystanie tych technik razem daje wynik, pod którym można się podpisać.
~Tomek Turba
13 sierpnia o godz. 10:00 wpadajcie na bezpłatne szkolenie Tomka Turby Jak oznaczać treści AI, by nie dostać kary? AI Act na przykładach. Na warsztat weźmiemy realne case’y i pokażemy, kiedy oznaczać, a kiedy nie ma takiej potrzeby. Przy okazji dowiecie się, jak wykrywać takie treści, jeśli niektórzy “zapomną” wspomnieć, że AI “maczała w nich palce” 😉.