AutoPrintCode
AutoPrintCode
Агент для живых демонстраций кода. Он печатает заготовленный образец в любое окно (Блокнот, VS Code, веб-IDE, Jupyter) с позиции курсора, без ошибок и в заданном темпе, со звуком настоящей клавиатуры.
Для записи видеогайдов по программированию
Когда записываешь урок, приходится одновременно набирать код, объяснять и следить за кадром. AutoPrintCode берёт набор на себя:
- Меньше дублей и монтажа. Код печатается без опечаток и без пауз на то, чтобы вспомнить следующую строку. Фрагмент получается с первого раза, не нужно вырезать ошибки и заминки.
- Можно говорить, пока код набирается. Печать идёт сама. Хоткей
Ctrl+F9ставит её на паузу в любой момент, когда нужно что-то пояснить, и продолжает с того же места. - Зритель успевает следить. Код появляется постепенно в заданном темпе, а не вставляется целиком
через
Ctrl+V. Скорость подбирается под аудиторию: медленнее для новичков, быстрее для опытных. - Выглядит как живое программирование. Режим «Как человек» добавляет неровный ритм, паузы на обдумывание и опечатки, которые тут же исправляются. Звук настоящей клавиатуры поддерживает ощущение, что код набирают руками. Если звук пишется отдельно, его можно выключить.
- Одинаковый темп от дубля к дублю. Неудачный фрагмент легко переснять кнопкой «Сначала» и склеить с остальными: ритм не будет отличаться.
- Код урока по частям. Образец — это сценарий: условие, пояснения, подсказки и блоки кода по порядку.
Выделенные строки печатаются отдельно, поэтому код можно показывать порциями, чередуя с объяснением.
Переход к следующему блоку —
Ctrl+F12, переключаться в окно программы не нужно. - Чистый код в кадре. В образце можно оставить комментарии-подсказки для себя, а с настройкой «Без комментариев» в редактор попадёт код без них.
- Код в кадре — точно как в образце. Профиль IDE убирает автоскобки и автоотступы редактора. Не придётся исправлять что-то на записи.
- В настоящих инструментах. Печать идёт в VS Code, Jupyter, Colab или Блокнот. Урок записывается в той же среде, в которой будет работать зритель.
- Ничего лишнего не попадёт в кадр. Хоткеи не доходят до редактора. Если сменилось активное окно или вы случайно нажали клавишу, печать встаёт на паузу, а случайная клавиша в код не попадает.
- Окно программы можно держать вне кадра. Например, на втором мониторе: всё управление идёт глобальными хоткеями.
Запуск
Нужны Windows и Python 3.10+.
git clone https://github.com/Recyavik/AUTO_PRINT_CODE.git
cd AUTO_PRINT_CODE
pip install -r requirements.txt
python app.py # или run.bat — без консоли
Без git можно скачать архив: на странице репозитория Code → Download ZIP.
При первом запуске создаётся папка data/ с примером образца и звуками клавиш. Она не хранится в репозитории: у каждого своя база образцов и настроек.
Версия для браузера — интерфейс открывается страницей, печать идёт через локального помощника
на Node.js: web\start.bat. Подробности — в web/README.md.
Как устроено
- Образец — занятие: лента блоков сверху вниз. Блок — это текст (Markdown с ролью: условие, пояснение, подсказка) или код.
- Образцы открываются во вкладках, чтобы быстро переключаться между ними:
Ctrl+Tab,Ctrl+1…9, меню ☰. - Вся база хранится в одном файле
data/templates.json, рядом лежит резервная копия.bak. Настройки — вdata/settings.json. - Импорт:
.ipynb(Jupyter),.md,.py,.json. Экспорт:.ipynb,.json. Тетрадка импортируется как есть: каждая ячейка становится блоком, порядок сохраняется..py— весь файл одним блоком кода; если в нём есть ячейки# %%(VS Code, Spyder, Jupytext), каждая ячейка — отдельный блок, а# %% [markdown]— блок-пояснение.
Печать
- Щёлкните по блоку кода, и он станет активным (зелёная рамка).
Если выделить строки, напечатаются только они. Выделение сохраняется в образце.
Печать → Без комментариев (или галочка в настройках): комментарии
# …,// …,/* … */не печатаются — строки-комментарии пропускаются целиком, хвостовые отрезаются. Образец не меняется. Печать → Как человек (настройки — вкладка «Как человек»): неровный ритм (знакомые слова быстрее, Shift и цифры медленнее), паузы на обдумывание перед строками и новыми кусками кода, опечатки (соседняя клавиша, перестановка, двойное нажатие), которые замечаются через 0–2 буквы и исправляются Backspace. Опечатки бывают только в словах из букв — скобки, кавычки, отступы и Enter не задеваются, итоговый текст совпадает с образцом. - Поставьте курсор в целевом окне.
Ctrl+F9запускает печать, повторное нажатие ставит на паузу, следующее продолжает.
| Хоткей | Действие |
|---|---|
Ctrl+F9 |
старт / пауза / продолжить |
Ctrl+F10 |
начать сначала |
Ctrl+F11 |
стоп |
Ctrl+F12 / Ctrl+Shift+F12 |
следующий / предыдущий блок кода |
Все хоткеи можно сменить в ⚙ Настройки. Они глобальные: срабатывают в любом окне и до самого окна не доходят.
Защита во время печати
- Сменилось активное окно — печать встаёт на паузу.
- Нажата клавиша или кнопка мыши — печать встаёт на паузу, а случайная клавиша не попадает в код. Хоткеи приложения работают как обычно. Перехват ввода включается только на время печати; что именно было нажато, не записывается.
- Окно запущено от администратора — печать не начнётся, приложение покажет предупреждение. Windows молча отбрасывает ввод в такие окна, поэтому AutoPrintCode тоже нужно запустить от администратора.
Профили окна
- Блокнот / простое поле — текст печатается как есть.
- IDE (VS Code, веб-IDE, Jupyter) — компенсирует «умный» редактор:
- перед закрывающей скобкой или кавычкой и перед Enter стирается то, что редактор сам дописал справа (автоскобки, автокавычки), и закрываются подсказки автодополнения;
- после Enter снимается автоотступ, а отступ печатается точно как в образце. С настройкой «Отступы набирать клавишей Tab» отступ набирается нажатиями Tab, по одному на каждые 4 пробела образца, как это делает человек. Не подходит для простых полей ввода в браузере (там Tab переводит фокус) и редакторов с отступом в 2 пробела.
Профиль рассчитан на печать в конец строки или в пустую строку: текст справа от курсора на текущей строке будет стёрт.
Проверено в настоящих редакторах
| Редактор | Python | JavaScript |
|---|---|---|
| Блокнот Windows 11 (оба профиля) | ✓ | — |
| VS Code, настройки по умолчанию | ✓ | ✓ |
| Monaco (редактор Colab) | ✓ | ✓ |
| CodeMirror 6 (редактор JupyterLab 4) | ✓ | ✓ |
✓ — совпадение с образцом символ в символ при 1500 симв/мин. Образец включает автоотступы, вложенные скобки, тройные кавычки, f-строки, шаблонные строки и кириллицу.
Не проверено: JetBrains, HTML-файлы в VS Code (автозакрытие тегов — лучше отключить html.autoClosingTags).
Надёжность ввода
Мин. интервал нажатий (Настройки → Печать, по умолчанию 30 мс). При 8–12 мс Блокнот Windows 11 терял и переставлял символы, при 30 мс набор точный. Если в каком-то редакторе пропадают символы — увеличьте интервал.
Обновления
Программа сама проверяет релизы на GitHub (⚙ Настройки → Обновления):
| Настройка | Варианты |
|---|---|
| Проверять автоматически | вкл / выкл |
| Как часто | при каждом запуске · раз в день · раз в неделю |
| Найдя новую версию | только сообщить · скачать и предложить перезапуск · скачать и установить при выходе |
| Бета-версии | предлагать pre-release или нет |
Вручную: Справка → Проверить обновления… или «Проверить сейчас» в настройках. Новая версия показывается кнопкой ⬆ в строке состояния и в меню трея. В окне обновления видно, что нового, и можно выбрать «Обновить и перезапустить», «Пропустить эту версию» или «Позже».
- Во время печати обновление не ставится, а уведомления не всплывают.
- Папка
data/не меняется. Если файлы программы не удалось заменить, всё возвращается как было. - Если изменился
requirements.txt, новые библиотеки ставятся черезpipдо замены файлов. Еслиpipне справится, программа останется на старой версии. - Если программа скачана через
git clone, она обновляется через git: забирает тег релиза и переходит на него, история репозитория остаётся целой. Если вы меняли файлы программы, обновление не установится и правки останутся на месте. Если программа скачана архивом ZIP, файлы заменяются из архива релиза.
Как выпустить версию. Поднимите __version__ в autoprint/__init__.py, сделайте коммит и
опубликуйте на GitHub релиз с тегом vX.Y.Z (номер тот же, что в __version__). Описание релиза
программа покажет как «Что нового». Если отметить релиз как pre-release, его получат только те,
кто включил бета-версии. Если номер в теге не совпадает с __version__, программа откажется
ставить такой релиз.
Звук клавиш
Звуки — записи настоящих клавиатур: обычной офисной и механических (тактильная, линейная, глухая
«thock», щелчковая). Каждое нажатие звучит вместе с отпусканием клавиши, пробел и Enter ниже
и громче обычных клавиш. Громкость регулируется ползунком рядом с кнопкой 🔊 в главном окне,
звук выбирается в ⚙ Настройки → Звук. Все записи под лицензией CC0, авторы указаны в
autoprint/sounds/SOURCES.md.
Журнал
data/logs/autoprint.log (Файл → Открыть журнал работы). Пишутся служебные события: старт, пауза и её причина, целевое окно, ошибки. Набираемый текст и нажатия клавиш в журнал не попадают. Если что-то сработало не так на занятии — пришлите этот файл.
Тесты
cd tests/pages && npm i && npm run build && cd ../..
python tests/run_editors.py notepad vscode browser
Тест сам открывает редакторы и печатает в них. Во время прогона не трогайте клавиатуру и мышь. Тестовые данные пишутся в tests/_run, рабочая data/ не используется.