# Маркировка ИИ-контента с 1 марта 2027: чеклист для авторов и бизнеса

> AI Release · @ai_release1 · https://ai-release.org/guides/markirovka-ii-kontenta-2027-cheklist.html

## TL;DR
- Время выполнения: 60–90 минут
- Уровень сложности: Intermediate
- Понадобится: ExifTool (утилита чтения/записи метаданных), `jq`, `python3`, `git`, доступ на запись в каталог с контентом

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/markirovka-ii-kontenta-2027-cheklist-ru-1.jpg?v=1793342091)


- ОС: Linux или macOS с bash; на Windows 10/11 — PowerShell 7 вместе с WSL, команды ниже даны для bash.
- `exiftool` — консольная утилита, которая пишет в файл EXIF (поля камеры) и XMP (текстовые поля метаданных стандарта Adobe/IPTC). Установка: `sudo apt install libimage-exiftool-perl` (Debian/Ubuntu) или `brew install exiftool` (macOS). Конкретную версию сверьте с документацией вашего дистрибутива — она должна поддерживать запись `XMP-iptcExt`.
- `jq` — консольный парсер JSON, нужен для валидации реестра.
- `python3` — для скрипта аудита; проверьте `python3 --version`.
- Права: запись в каталог ассетов (изображения, видео, PDF) и в git-репозиторий контента.
- Свободное место: как минимум одна копия архива ассетов — часть команд пишет файлы на месте.
- Юридический минимум: финальный текст акта, вступающего в силу 1 марта 2027. Состав обязательной пометки, перечень форматов и сроки хранения подтверждений возьмите из него — **сверьтесь с документацией**. Ниже — технический каркас, который закрывает типовые требования и не зависит от формулировок.

## Шаг 1. Инвентаризация ИИ-контента и реестр артефактов

**Что сделать:** создать рабочую структуру и завести реестр всех материалов, где участвовала генеративная модель. Реестр — файл `registry.jsonl`, где каждая строка это один JSON-объект (формат JSONL: одна запись — одна строка, удобно диффить в git).

**Зачем:** без инвентаризации нельзя ни промаркировать файлы, ни доказать, что пометка стоит везде. Реестр — единственный источник правды: по нему скрипт из Шага 3 находит пропуски.

**Пример:** структура каталогов и первая запись.

```bash
mkdir -p ~/ai-marking/{assets,registry,reports}
cd ~/ai-marking

cat > registry/registry.jsonl <<'EOF'
{"asset_id":"img-2027-0001","file":"assets/hero-banner.png","model":"<название-модели>","generated_at":"2027-03-01T10:15:00Z","operator":"ivan.petrov","prompt_ref":"prompts/hero-0001.txt","review":"human-edited","mark":"ai-generated"}
EOF
```

Поля реестра:

| Поле | Что писать | Пример |
|---|---|---|
| `asset_id` | внутренний неизменяемый ID | `img-2027-0001` |
| `file` | путь относительно корня проекта | `assets/hero-banner.png` |
| `model` | название модели или сервиса | `<название-модели>` |
| `generated_at` | дата генерации, ISO 8601, UTC | `2027-03-01T10:15:00Z` |
| `operator` | кто запускал генерацию | `ivan.petrov` |
| `prompt_ref` | путь к файлу с промптом | `prompts/hero-0001.txt` |
| `review` | степень участия человека | `human-edited` / `no-edits` |
| `mark` | тип пометки для публикации | `ai-generated` |

**Как проверить:** валидность JSON и число записей.

```bash
jq -c . registry/registry.jsonl > /dev/null && echo "OK: JSONL валиден"
wc -l registry/registry.jsonl
```

Ожидаемый вывод:

```
OK: JSONL валиден
1 registry/registry.jsonl
```

Если `jq` ругается — синтаксис сломан, читайте раздел «Возможные проблемы». Почему это работает: `jq` разбирает файл построчно и падает на первой некорректной строке, поэтому валидация одновременно служит проверкой целостности.

Текстовые материалы, которые модель переписала или сократила, заводятся в тот же реестр — с путём к `.md`-файлу. Подходящие сценарии обработки текста разобраны в [гайде по нейросетям для текста](https://ai-release.org/guides/nejroseti-dlya-teksta.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## Шаг 2. Проставить машинную и видимую пометку
![Иллюстрация к разделу «Шаг 2. Проставить машинную и видимую пометку»](https://ai-release.org/guides/img/markirovka-ii-kontenta-2027-cheklist-ru-2.jpg?v=1793342098)


**Что сделать:** записать метаданные в сам файл и добавить видимую глазом пометку в публикацию. Машинная часть — поля `XMP-dc:Description` (человекочитаемое описание) и `XMP-iptcExt:DigitalSourceType` (стандартный словарь IPTC, где `trainedAlgorithmicMedia` означает «создано обученной моделью»; актуальный URL значения сверьте с документацией словаря).

**Зачем:** метаданные переживают скачивание файла и читаются автоматикой площадок, а видимая пометка остаётся, даже если метаданные вырезаны при загрузке.

**Пример:** маркировка одного изображения.

```bash
exiftool -overwrite_original \
  -XMP-dc:Description="Сгенерировано ИИ: <название-модели>. Изменено человеком: да." \
  -XMP-iptcExt:DigitalSourceType="http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia" \
  assets/hero-banner.png
```

Пакетная обработка всех ассетов из реестра:

```bash
jq -r '.file' registry/registry.jsonl | while read -r f; do
  [ -f "$f" ] || { echo "MISSING: $f"; continue; }
  exiftool -overwrite_original \
    -XMP-dc:Description="Сгенерировано ИИ. Изменено человеком: да." \
    -XMP-iptcExt:DigitalSourceType="http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia" \
    "$f" > /dev/null && echo "OK: $f"
done
```

Для текстовых страниц видимую пометку удобно держать в front matter (YAML-блок в начале markdown-файла), из которого шаблон выводит подпись под материалом:

```yaml
---
title: "Как мы собрали лендинг"
ai_generated: true
ai_model: "<название-модели>"
ai_reviewed_by: "ivan.petrov"
---
```

Чек-лист перед публикацией:

- [ ] запись в `registry.jsonl` создана и валидна (`jq`)
- [ ] в файле есть `DigitalSourceType`
- [ ] в тексте/на странице есть видимая пометка «Сгенерировано с помощью ИИ»
- [ ] указано, правил ли материал человек (`review`)
- [ ] исходный промпт сохранён в `prompts/`

Если пометку нужно ставить в потоке из десятков файлов, пакетную часть имеет смысл вынести в автоматический шаг — общий подход к таким сценариям описан в [гиде по ИИ-агентам для автоматизации](https://ai-release.org/guides/ii-agenty-dlya-avtomatizacii.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

**Как проверить:** прочитать метаданные обратно.

```bash
exiftool -XMP-dc:Description -XMP-iptcExt:DigitalSourceType assets/hero-banner.png
```

Ожидаемый вывод:

```
Description                     : Сгенерировано ИИ: <название-модели>. Изменено человеком: да.
Digital Source Type             : http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia
```

Пустая строка после `Description` означает, что запись не прошла — вернитесь к команде `exiftool` и проверьте путь к файлу.

## Шаг 3. Аудит выборки и финальный отчёт
![Иллюстрация к разделу «Шаг 3. Аудит выборки и финальный отчёт»](https://ai-release.org/guides/img/markirovka-ii-kontenta-2027-cheklist-ru-3.jpg?v=1793342105)


**Что сделать:** прогнать автоматическую сверку «реестр ↔ файлы» и сохранить отчёт с датой. Отчёт — доказательство, что на момент публикации пометка стояла везде.

**Зачем:** ручная проверка 50 файлов даёт ошибки; скрипт проверяет все записи за секунды и печатает список пропусков.

**Пример:** скрипт аудита.

```bash
python3 - <<'PY' | tee reports/audit-$(date +%F).txt
import json, subprocess, pathlib
missing = []
lines = pathlib.Path("registry/registry.jsonl").read_text().splitlines()
for line in lines:
    if not line.strip():
        continue
    rec = json.loads(line)
    out = subprocess.run(
        ["exiftool", "-s3", "-XMP-iptcExt:DigitalSourceType", rec["file"]],
        capture_output=True, text=True).stdout.strip()
    if not out:
        missing.append(rec["file"])
print("Записей в реестре:", len([l for l in lines if l.strip()]))
print("Без маркировки:", len(missing))
for f in missing:
    print(" -", f)
PY
```

Ожидаемый вывод при успехе:

```
Записей в реестре: 12
Без маркировки: 0
```

Тот же результат сохраняется в `reports/audit-2027-03-01.txt`. Почему это работает: `exiftool -s3` печатает только значение поля без имени тега, поэтому пустой ответ однозначно означает отсутствие метки.

Второй контур проверки — публичный манифест для площадок, которые вырезают EXIF/XMP при загрузке:

```bash
jq -s '{generated: "2027-03-01", items: .}' registry/registry.jsonl > ~/ai-marking/public/ai-manifest.json
curl -s https://<ваш-домен>/ai-manifest.json | jq '.items | length'
```

`<ваш-домен>` — домен, на котором лежит сайт; файл кладётся в корень статики. Ожидаемый ответ — число, равное количеству записей в реестре (в примере `12`). Если вернулся `0` или ошибка парсинга — файл не выложен или отдаётся с неверным `Content-Type`.

## Возможные проблемы и решения

**Проблема. ExifTool не находит файл при пакетной обработке**
- Ошибка: `Error: File not found - assets/hero-banner.png`
- Причина: команда запущена не из корня проекта, либо в реестре путь записан относительно другого каталога.
- Решение: проверьте текущий каталог и наличие файла, затем повторите.

```bash
pwd && ls -l assets/hero-banner.png
cd ~/ai-marking && exiftool -XMP-iptcExt:DigitalSourceType assets/hero-banner.png
```

**Проблема. Реестр перестал парситься после ручной правки**
- Ошибка: `jq: error (at registry/registry.jsonl:3): Expected separator between values at line 3, column 42`
- Причина: в третьей строке пропущена запятая между полями или строка разбита переносом — в JSONL перенос внутри записи недопустим.
- Решение: найдите строку и проверьте её отдельно, затем перезапишите одной строкой.

```bash
sed -n '3p' registry/registry.jsonl
sed -n '3p' registry/registry.jsonl | jq -c .
```

**Проблема. После загрузки на площадку метаданные исчезли**
- Ошибка: `exiftool -XMP-iptcExt:DigitalSourceType` на скачанном файле печатает пустую строку
- Причина: соцсеть или CDN пересжимает изображение и удаляет XMP-блок.
- Решение: оставить видимую пометку в самом контенте и продублировать сведения в публичном манифесте; в отчёте аудита зафиксировать, что проверялся исходник, а не копия с площадки.

```bash
curl -s https://<ваш-домен>/ai-manifest.json | jq '.items[] | select(.asset_id=="img-2027-0001")'
```

## Резюме и следующие шаги

Реестр `registry.jsonl` плюс метка `DigitalSourceType` в файле и видимая подпись закрывают три точки контроля: что сгенерировано, чем помечено и где подтверждение. Дальше расширьте реестр на архивные материалы и добавьте `reports/audit-*.txt` в git, чтобы отчёты шли вместе с контентом.

## FAQ

**Нужно ли маркировать текст, который модель только переписала?**
Да, фиксируйте его в реестре с полем `review` (`human-edited` или `no-edits`) — это показывает степень участия человека. Точный порог «существенной переработки» задан в акте — сверьтесь с документацией.

**Что делать, если площадка удаляет метаданные?**
Оставляйте видимую пометку в тексте или на изображении и публикуйте `ai-manifest.json` на своём домене; в отчёте аудита указывайте, что проверялся исходный файл.

**Кто отвечает за маркировку — автор или компания?**
Технически метку ставит тот, кто публикует. Поэтому реестр ведётся в репозитории контента: поле `operator` фиксирует исполнителя, а `ai_reviewed_by` — того, кто выпустил материал.

**Нужно ли маркировать внутренние черновики?**
Достаточно записи в реестре без публикации манифеста: черновик не выходит к аудитории. Перед публикацией прогоните Шаг 2 и Шаг 3 — метка ставится на файл, который уходит наружу.
