{"id":18340154,"url":"https://github.com/f33rni/webinar-hacker","last_synced_at":"2025-10-03T18:57:00.539Z","repository":{"id":118549255,"uuid":"598948775","full_name":"F33RNI/Webinar-hacker","owner":"F33RNI","description":"Automatic lectures recording and transcription on the webinar.ru platform","archived":false,"fork":false,"pushed_at":"2023-03-11T19:57:01.000Z","size":3786,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T05:36:29.657Z","etag":null,"topics":["ai","hacking","lecture","opencv","pyaudio","python","recording","screenshots","subtitles","transcriber","webinar"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/F33RNI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-08T06:03:19.000Z","updated_at":"2024-10-11T23:32:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"3aff64c1-183b-43dc-8968-2ec54bfb886e","html_url":"https://github.com/F33RNI/Webinar-hacker","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/F33RNI/Webinar-hacker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FWebinar-hacker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FWebinar-hacker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FWebinar-hacker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FWebinar-hacker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/F33RNI","download_url":"https://codeload.github.com/F33RNI/Webinar-hacker/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FWebinar-hacker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278212138,"owners_count":25949045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-03T02:00:06.070Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","hacking","lecture","opencv","pyaudio","python","recording","screenshots","subtitles","transcriber","webinar"],"created_at":"2024-11-05T20:21:12.081Z","updated_at":"2025-10-03T18:57:00.534Z","avatar_url":"https://github.com/F33RNI.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Lecture-hacker (aka Webinar-hacker)\n## Автоматическая запись и транскрибирование лекций из платформы Webinar / Zoom или стороннего видео/аудио\n\u003cdiv style=\"width:100%;text-align:center;\"\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://github.com/F33RNI/Webinar-hacker/releases/latest\"\u003e\u003cimg alt=\"Download release\" src=\"https://img.shields.io/badge/-Скачать%20последний%20релиз-yellowgreen?style=for-the-badge\u0026logo=github\" width=\"auto\" height=\"50\"\u003e\u003c/a\u003e\n    \u003c/p\u003e\n    \u003cp align=\"center\"\u003e\n        \u003ca href=\"https://www.youtube.com/@F3RNI\"\u003e\u003cimg alt=\"YouTube\" src=\"https://img.shields.io/badge/-YouTube-red\" \u003e\u003c/a\u003e\n        \u003ca href=\"https://f3rni.bandcamp.com\"\u003e\u003cimg alt=\"Bandcamp\" src=\"https://img.shields.io/badge/-Bandcamp-cyan\" \u003e\u003c/a\u003e\n        \u003ca href=\"https://open.spotify.com/artist/22PQ62alehywlYiksbtzsm\"\u003e\u003cimg alt=\"Spotify\" src=\"https://img.shields.io/badge/-Spotify-green\" \u003e\u003c/a\u003e\n        \u003ca href=\"https://soundcloud.com/f3rni\"\u003e\u003cimg alt=\"SoundCloud\" src=\"https://img.shields.io/badge/-SoundCloud-orange\" \u003e\u003c/a\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\u003cdiv style=\"width:100%;text-align:center;\"\u003e\n    \u003cp align=\"center\"\u003e\n        \u003cimg src=\"Banner.jpg\" width=\"auto\" height=\"300\"\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n----------\n\n## Надоело слушать бесполезные скучные лекции? Предоставь это Lecture-hacker и можешь идти спать! 😴\n\n## Возможности\n\n- Автоматический вход по ссылке (Webinar / Zoom) с указанным именем, ожидание начала мероприятия\n- Возможность нескольких ссылок (по завершении мероприятия автоматическое переключение на следующее)\n- Вход, используя прокси\n- Автоматическое написание приветственного сообщения в чат\n- Автоматическое блокирование микрофона и камеры\n- Автоматическое блокирование всплывающих окон и диалогов\n- Автоматическое подтверждение присутствия\n- Автоматическая активность путём периодического фокусирования на чате\n- Автоматическая запись звука с возможностью задания порога чувствительности\n- Автоматическое сохранение скриншотов\n- Автоматическое переключение ссылок при превышении заданного времени ожидания\n- Сборка скриншотов и аудио-фрагментов из стороннего видео-файла или аудио-файла\n- Транскрибирование аудио в текст со знаками препинания при помощи локальной оффлайн-модели\n- Разделение на параграфы по паузе\n- Сопоставление скриншотов и транскрибированного текста в документ формата `.docx`\n- Вычисление примерного оставшегося времени до окончания процесса транскрибирования\n\n----------\n\n## Как запустить и пользоваться\n\n- Скачайте и распакуйте архив последней версии Lecture-hacker: https://github.com/F33RNI/Webinar-hacker/releases/latest\n- Скачайте и установите Google Chrome, если у вас его нет: https://www.google.com/chrome/\n- Запустите приложение, используя файл `Lecture-hacker.exe`\n\n*Запись и сборка лекций всегда проходит в 2 этапа независимо от того, с Webinar / Zoom она или из видео/аудио:*\n1. *Непосредственно запись лекции. На этом этапе Lecture-hacker извлекает аудио-фрагменты в которых есть звук, по громкости превышающий установленный порог (каждый фрагмент записывается в отдельный WAV файл 16КГц PCM16 (signed int16)). А также следит за изменением изображения. Если изменения выше порога, сохраняется скриншот.*\n2. *Из обработанных данных (набора .wav файлов и скриншотов) непосредственно собирается лекция. Для этого, в начале, аудио транскрибируется с сохранением времени, далее, текст вместе со скриншотами, согласно времени, записывается в .docx файл.*\n\n### Вход и запись лекций на платформе Webinar / Zoom\nОсновной функционал Lecture-hacker подразумевает автоматический вход по ссылке (и ожидание начала мероприятия), отправку приветственного сообщения в чат, симуляцию активности и запись лекции\n- Для этого, перейдите на вкладку **Webinar / Zoom**\n- Вставьте ссылку на мероприятие в поле `Webinar / Zoom links:`\n- Если мероприятий несколько, нажмите на кнопку `+` чтобы добавить новую ссылку и на кнопки `-` чтобы удалить ссылки\n- Укажите имя, с которым нужно подключиться в поле `Connect with name:`\n- Укажите приветственное сообщение, которое необходимо отправить в чат после начала мероприятия в поле `Hello message:`\n- Если требуется, укажите прокси в формате `IP:PORT` в поле `Proxy:`\n- Укажите время, через которое нужно переключить / закрыть ссылку в полях `Link timeout:`. Если это не требуется, снимите галочку или выставите 0 и 0\n- Для Zoom, укажите, нужно ли перезаходить по той же ссылке и сколько раз в поле `Zoom reconnects:` . Если это не требуется, снимите галочку или выставите 0\n- Укажите, нужно ли записывать это мероприятие для последующего транскрибирования в поле `Enable Recording`\n- Нажмите кнопку `Start` и дождитесь открытия браузера\n- Готово! Вход, запись и выход будут выполнены автоматически. Чтобы закрыть браузер раньше, нажмите на кнопку `Stop`\n\nВо время мероприятия можно настраивать таймаут (`Link timeout`), количество переподключений в Zoom (`Zoom reconnects`) и порог громкости для начала записи (`Audio threshold`)\n\n### Обработка стороннего видео- / аудио- файла\nПеред сборкой лекции (транскрибированием), необходимо обработать видео- / аудио- файл.\n- Для этого, перейдите на вкладку **Video / Audio file**\n- Вставьте путь к файлу (или выберите файл при помощи кнопки `Browse`)\n- Нажмите кнопку `Start` и дождитесь окончания обработки файла\n- Файл можно закрыть в любой момент, нажав на кнопку `Stop`\n- После обработки файла, можно транскрибировать данную лекцию\n\n### Транскрибирование и сборка лекции в .docx - документ\nПосле завершения мероприятия, записанный материал можно транскрибировать в `.docx` документ с картинками:\n- Для этого обновите список записей нажав на кнопку `Refresh`\n- Выберите из списка нужную запись\n- Нажмите на кнопку `Build`. После окончания процесса, будет показано окно с путём сохранения конечного документа\n- **Важно! Процесс сборки лекции может занимать длительное время! (может быть больше времени записанного материала) Не закрывайте приложение до разблокировки кнопок**\n- Для ускорения процесса транскрибирования, установите CUDA 11.7: https://developer.nvidia.com/cuda-11-7-0-download-archive и убедитесь что при запуске сборки, внизу окна есть сообщение `Device: cuda`\n\n----------\n\n## Настройки и файл настроек\n\n- Настройки Lecture-hacker хранятся в файле `settings.json`\n- Настройки с префиксом `gui_` редактируются при помощи элементов интерфейса в реальном времени\n- Для изменения других настроек, закройте приложение, откройте данный файл в текстовом редакторе, измените нужные параметры и откройте приложение заново\n- **Важно! Lecture-hacker не проводит автоматическую проверку настроек. Если вы задали неверное значение, ошибка появится в неожиданный момент! Будьте внимательны при редактировании файла**\n\nТекущий список настроек:\n```json\n{\n    \"screenshot_diff_threshold_percents\": 5,\n    \"opencv_threshold\": 10,\n    \"loop_interval_seconds\": 3.0,\n    \"timestamp_format\": \"%d_%m_%Y__%H_%M_%S\",\n    \"audio_chunk_size\": 4096,\n    \"audio_recording_chunks_min\": 20,\n    \"audio_wav_sampling_rate\": 16000,\n    \"audio_wav_resampling_type\": \"soxr_mq\",\n    \"paragraph_audio_distance_min_milliseconds\": 10000,\n    \"recordings_directory_name\": \"recordings\",\n    \"lectures_directory_name\": \"lectures\",\n    \"audio_directory_name\": \"audio\",\n    \"screenshots_directory_name\": \"screenshots\",\n    \"whisper_model_name\": \"medium\",\n    \"whisper_model_language\": \"ru\",\n    \"lecture_build_time_filter_factor\": 0.8,\n    \"lecture_picture_width_inches\": 6.0,\n    \"lecture_font_size_pt\": 12,\n    \"lecture_default_text_color\": [\n        0,\n        0,\n        0\n    ],\n    \"lecture_low_confidence_text_color\": [\n        150,\n        0,\n        0\n    ],\n    \"word_low_confidence_threshold_percents\": 70,\n    \"save_lecture_to_directory\": \"\",\n    \"gui_links\": [],\n    \"gui_name\": \"Tester\",\n    \"gui_hello_message\": \"\\u0417\\u0434\\u0440\\u0430\\u0432\\u0441\\u0442\\u0432\\u0443\\u0439\\u0442\\u0435!\",\n    \"gui_hello_message_enabled\": true,\n    \"gui_recording_enabled\": true,\n    \"gui_proxy\": \"\",\n    \"gui_max_event_time_enabled\": true,\n    \"gui_max_event_time_milliseconds\": 6000000,\n    \"gui_zoom_reconnects_enabled\": true,\n    \"gui_zoom_reconnects_max\": 2,\n    \"gui_audio_threshold_dbfs\": 0,\n    \"gui_video_audio_file\": \"\",\n    \"gui_tabs_current_index\": 0\n}\n```\n\n----------\n\n## Зависимости\n\n- **whisper-timestamped**: https://github.com/linto-ai/whisper-timestamped\n- **openai/whisper-medium**: https://huggingface.co/openai/whisper-medium\n- Другие зависимости и пакеты, указанные в файле `requirements.txt`\n\n----------\n\n## Запуск из исходников / сборка из исходников\n\n- Подробных инструкции пока неть 🙃\n- Но можно попробовать склонировать репозиторий `git clone https://github.com/F33RNI/Webinar-hacker`\n- Установить пакеты `pip install -r requirements.txt --upgrade`\n- Установить CUDA 11.7\n- Скачать файл `ffmpeg.exe` https://ffbinaries.com/downloads в папку с проектом \n- И попробовать запустить приложение `python main.py`\n\n----------\n\n## Участие в разработке\n\n- Хотите добавить что-то новое / исправить баг? Создайте пул-реквест / issue!\n\n----------\n\n## P.S. Проект находится в стадии разработки!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff33rni%2Fwebinar-hacker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff33rni%2Fwebinar-hacker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff33rni%2Fwebinar-hacker/lists"}