Флэшкарточки из любого источника (отчёт, книга, урок, закон, расшифровка) — как у NotebookLM, но с источником на каждой карточке, интервальным повторением, тремя типами, ru/uz (латиница и кириллица)/en, картинками в скетч-стиле для канала, PDF для печати, импортом в Anki и квизами в Telegram. Применять при «сделай карточки», «флэшкарточки», «колода для запоминания», «карточки к уроку», «квиз по материалу», «повторение по Anki».
Installs into .claude/skills of the current project.
Are you the author of Flashcards?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/shakhruz-flashcards)
---
name: flashcards
description: "Флэшкарточки из любого источника (отчёт, книга, урок, закон, расшифровка) — как у NotebookLM, но с источником на каждой карточке, интервальным повторением, тремя типами, ru/uz (латиница и кириллица)/en, картинками в скетч-стиле для канала, PDF для печати, импортом в Anki и квизами в Telegram. Применять при «сделай карточки», «флэшкарточки», «колода для запоминания», «карточки к уроку», «квиз по материалу», «повторение по Anki»."
---
# flashcards — колода, которую запоминают
Навык заведён 25.09.2026 по слову владельца MILAGPT: «пойдём по способностям
NotebookLM — генерация флэшкарточек… сделай наш аналог, который будет ещё лучше».
Разведка того, как это устроено у Google, есть у старшей. Если коротко,
у NotebookLM нет интервального повторения, ссылки на место в источнике, второго
языка на карточке, печати и Telegram. У нас всё это есть.
## Что получается на выходе
| Файл | Кому и зачем |
|---|---|
| `cards-<язык>/NN-front.png`, `NN-back.png` | 1080×1350, скетч на кремовой бумаге: пост, карусель, сторис |
| `print-<язык>.pdf` | A4, 8 карт на лист, обороты зеркально, линии реза: раздатка на занятие |
| `trainer.html` | тренажёр на телефоне: каталожная карточка с переворотом, свайп вправо — «знаю», влево — «повторить», вверх — «спросить»; кнопки оценки внизу под большой палец; на десктопе клавиши (пробел, ←, →, ↓, ↑); кольцо прогресса; экран итога (сколько знал, что повторить, дата следующей повторки); повторы по Лейтнеру (1·3·7·14·30 дней); язык, режимы «Сегодня · Все · Ошибки»; тёмная тема и «уменьшить движение». Проверен на 360, 390, 430 и 768 px |
| `anki-<язык>-basic.txt`, `anki-<язык>-cloze.txt` | импорт в Anki одной кнопкой: тип, колода и теги уже в заголовке файла |
| `polls-<язык>.json` | квиз-опросы Telegram с правильным ответом и объяснением |
## Шаг 1. Разговор до колоды (одним сообщением, не анкетой)
Спросите только то, чего не знаете: **для кого** колода (ученик, клиент,
подписчики канала), **сколько** карт (мало 8 · стандарт 12 · много 20–30),
**сложность** (лёгкая: факты и определения; средняя: связи и причины; трудная:
применение и «почему»), **языки**, **куда** (канал, печать, тренажёр, Anki).
Не ответили — берите стандарт: 12 карт, смесь сложностей, язык собеседника.
## Шаг 2. Колода — `deck.json`
Пишете её сами по источнику. Образец на 12 карт (аналитический отчёт, 4 языка,
все три типа) есть у старшей: попросите его, если нет под рукой.
```json
{
"id": "slug-kolody",
"title": {"ru": "…", "uz_latn": "…", "en": "…"}, // строка или словарь по языкам
"subtitle": {"ru": "…"}, "kicker": {"ru": "Коротко, обычным регистром"},
"source_doc": {"title": "Название источника", "author": "…", "date": "ДД.ММ.ГГГГ"},
"langs": ["ru", "uz_latn", "uz_cyrl", "en"],
"ask_bot": "@имя_вашего_бота", // кнопка «спросить подробнее» в тренажёре
"cards": [
{"id": "c01", "type": "qa", "difficulty": "easy|medium|hard", "tags": ["тема"],
"source": {"section": "Раздел источника", "quote": "дословная фраза ≤30 слов"},
"ru": {"front": "Вопрос?", "back": "Ответ.", "why": "почему это важно", "hint": "подсказка (необяз.)",
"answer": "короткий ответ для квиза", "choices": ["неверный 1", "неверный 2", "неверный 3"]}},
{"id": "c02", "type": "cloze", "ru": {"front": "Каждое {{пятое}} высказывание — требование.", "back": "пояснение"}},
{"id": "c03", "type": "explain", "ru": {"front": "Почему…?", "points": ["мысль 1", "мысль 2", "мысль 3"]}}
]
}
```
**Правила колоды — то, чем она лучше:**
1. **Источник у каждой карты**: раздел и дословная фраза. Цитата остаётся на
языке оригинала, её не переводят. Нет фразы в источнике — нет карты.
Проверка не пропустит карту без источника.
2. **Одна карта — одна мысль.** Лицо ≤30 слов, оборот ≤45. Список из пяти пунктов
дробится на карты.
3. **Смесь типов.** Примерно половина `qa`, четверть `cloze` (пропуск — цифра,
термин, ключевое слово; можно два пропуска), четверть `explain` («объясните
своими словами» + 2–4 опорные мысли на обороте). `explain` учит понимать, а
не угадывать.
4. **`why` на обороте**: одна фраза, зачем это знать. Это наш ответ на кнопку
Explain у NotebookLM, только на самой карте.
5. **Неверные варианты для квиза** правдоподобны и из того же источника, а не
очевидная чепуха. Без `answer` и `choices` карта в квиз не идёт, и это нормально.
6. **Цифры — как в источнике.** Не округляйте и не пересчитывайте. Если доля
посчитана на малой выборке, скажите это в `why`.
7. **Узбекский:** пишите `uz_latn` (латиница 2021+, апостроф `ʻ` U+02BB в oʻ/gʻ,
`ʼ` U+02BC). `uz_cyrl` соберётся сама из латиницы (`scripts/translit_uz.py`,
исключения — месяцы, -tsiya → -ция, korrupsiya). Хотите проверить — задайте
`uz_cyrl` явно. Узбекский текст наружу вычитывает носитель, это правило из
`humanizer-uz` и `uzbek-editor`.
## Шаг 3. Проверка и сборка
```bash
S=~/.claude/skills/flashcards/scripts
python3 $S/deck.py check ~/work/<колода>/deck.json # ошибки ✗ исправить, предупреждения ⚠ прочитать
python3 $S/deck.py build ~/work/<колода>/deck.json ~/work/<колода>/out
python3 $S/deck.py render ~/work/<колода>/out # PNG и PDF
```
У компаньона браузера нет, поэтому `render` кладёт заявки в
`~/work/render-queue/` (очередь хоста, раз в минуту). Готово, когда рядом с
каждой заявкой появился `.done` с `"ok": true`. Папка колоды обязана лежать
внутри `~/work`. На 12 карт × 4 языка это ~100 заявок, минут 5–8. Одного языка
для канала хватает: `build … --lang ru`.
**Посмотрите 2–3 PNG глазами** (Read), прежде чем отдавать: текст не вылез,
пропуск виден, источник читается.
## Шаг 4. Куда отдать
- **Человеку на телефон** — `trainer.html` файлом. Шрифты внутри, сеть не нужна,
прогресс хранится на его устройстве. Если попросят ссылку — просите старшую
выложить страницу.
- **В канал** — 3–5 пар PNG каруселью (лицо, потом оборот) по правилам публикации
вашего владельца: пост наружу — после его «да».
- **На занятие** — `print-<язык>.pdf`: печать двусторонняя, переворот по длинному краю.
- **В Anki** — `anki-*.txt`: Файл → Импорт, всё уже размечено.
- **Квиз в Telegram** — сначала показ:
`python3 $S/deck.py polls out/polls-ru.json --chat <id>`, отправка — с `--send`.
Отправлять **только** в чат, где владелец или ученик попросил квиз. Бот должен
быть в этом чате. В группе ответы не анонимны: участники увидят, кто как ответил.
## Картинка-иллюстрация (по желанию)
У карты может быть поле `"image": "file.png"` рядом с `deck.json`: рисунок
встанет над вопросом. Рисунок делайте навыком `genimage` с фиксированным блоком
стиля из `mila-studio/prompts/style-sketch.md` (карандашный скетч, masterpiece),
без текста на картинке: весь текст карта ставит сама. Один рисунок стоит
≈ $0,14. На колоду хватит одного, для обложки или первой карты, а не на
каждую карту.
## Сколько стоит
Сборка, PNG, PDF, тренажёр, Anki и квизы — бесплатно: всё собирается у нас.
Платны только иллюстрации genimage, ≈ $0,14 штука, по желанию. Колода без
картинок стоит только вашего времени на `deck.json`.
## Чего навык не делает
- Не выдумывает факты: всё берётся из источника, который дал человек.
- Не публикует сам: PNG в канал и квизы — только туда, где попросили.
- Не хранит прогресс ученика у нас: тренажёр пишет только в его браузер.