This repository is a fork of Bloodiko/jitsi-bot with a lot of additional features.
It includes browser-based bots for Jitsi Meet:
- Soundboard Bot (
soundboard/) - Streaming Bot (
streaming/) - Recording Bot (
recording/) - Chat Bot (
chatbot/)
These are active issues and should be treated as current limitations:
- The default Recording Bot flow remains Firefox-oriented.
- Chrome/Chromium now uses a separate recording variant with its own page and scripts.
- Chrome/Chromium recording support is still being actively validated; see
notes_for_recording_chrome.txtfor the current state and constraints.
Go to https://uriel1998.github.io/jitsi-bot/.
- Clone this repository.
- Serve this whole directory from a web server (project root as web root).
python3 start_server.pyYou can also use a more sophisticated web server (for example Nginx or Caddy), as long as it serves this repository root.
The helper server keeps HTTP request logging off by default. To enable request logs for debugging, run:
python3 start_server.py --log-requests- Open the launcher page:
http://localhost:5500/
This launches the four main bots from index.html:
- Streaming Bot
- Chat Bot
- Soundboard Bot
- Recording Bot
- Join your target Jitsi room in a browser tab. See below about the public instance.
- Open the bot page and enter the conference URL.
- Click
Toggle Bot. - You can either
Toggle BotorReset Botto unload the bot.
On the public meet.jit.si instance, only the Chat Bot is typically reliable.
Use this hash suffix for the meeting room URL for the bot when joining on public Jitsi:
#config.prejoinConfig.enabled=false&disableThirdPartyRequests=true
Example:
https://meet.jit.si/YourMeetingRoomName#config.prejoinConfig.enabled=false&disableThirdPartyRequests=true
- Pokpoko will stream mp3/ogg from an https stream into the audio of the conference. Put the full source URL in "Audio Source Input" and "Set Source".
- Kobuko will respond to multiple commands in the text chat of the conference; try !command. You can load your own text into
/lib/Customfor it to respond with. - Mochi will pipe audio from a virtual microphone into the audio of the conference. Have a virtual microphone set up prior to loading the bot; examples are linked on the bot's loading page. When the bot loads, choose the virtual microphone your app (such as Kenku) is playing on.
- Ritson records the mixed conference audio stream and also writes one file per speaker. Per-speaker files are named from the chosen base filename as
_Speaker Name, with an additional_<offsetSeconds>suffix if that speaker starts after the session has already begun. After joining the room, you must specifically tell it to begin recording. - The recording loader does not auto-open the recorder. It behaves the same in all browsers, but when you click its buttons it sends:
- Firefox and other non-Chromium browsers to
recording/recording.html - Chrome/Chromium-based browsers to
recording/recording_chrome.html
- Firefox and other non-Chromium browsers to
- The Chrome/Chromium recording page is kept in parallel with the Firefox-oriented recorder so browser-specific changes do not destabilize the default path.
- When the local helper server from
start_server.pyis running, the Recording Bot prefers uploading chunks to the server so they can be appended into one recording file underrecording_tests/. - If the local helper server is not available, the Recording Bot falls back to browser downloads.
- On GitHub Pages, recordings are always browser downloads because GitHub Pages cannot run
start_server.pyor accept upload writes. - If you self-host behind Nginx or Apache, recordings are still only saved server-side when
POST /__recording_chunkis handled by the Python helper server. Nginx or Apache alone do not save the files. - When uploads are proxied to
start_server.py, files are written underrecording_tests/relative to the working directory of that Python process. If you launch it from the repo root, that is./recording_tests/. - It sends text chat notifications when recording begins, when it ends, and periodically while recording.
- For Chrome-specific diagnostics, assumptions testing, and recorded findings, see:
notes_for_recording_chrome.txtrecording_chrome_test_suite/recording_chrome_test_suite/result_findings.txt
audio/contains sample audio files used by bot features.images/contains screenshots and icons.- Some media files are included for demonstration purposes and remain the property of their respective owners.
These merge scripts are mainly for the fallback download mode where the browser saves split chunk files. If the local helper server is running and receiving recording uploads, the preferred behavior is a single server-side recording file instead of many standalone browser downloads.
ffmpeg must be installed and available on your PATH before running any merge script.
Install instructions:
- Windows: FFmpeg download page (Windows builds)
- Linux: FFmpeg download page (Linux packages)
- macOS: Homebrew
ffmpegformula
If the Recording Bot saves split .webm chunks, use the helper script for your OS:
- Linux:
./merge_recordings_linux.sh - macOS:
./merge_recordings_macos.sh - PowerShell:
.\merge_recordings.ps1
Each script scans the current directory for files matching:
recording_YYYYMMDD_HHMMSS_partNNNN.webm
recording_YYYYMMDD_HHMMSS_<participant>_partNNNN.webm
recording_YYYYMMDD_HHMMSS__<participant>_partNNNN.webm
The scripts group chunks by timestamp and participant name, merge each ordered chunk set with ffmpeg, and write outputs under ./recording/<timestamp>/.
Examples:
recording_20260310_185513_T3_69337f62_part0001.webm
-> ./recording/20260310_185513/T3_69337f62.webm
recording_20260310_185513_Steven_58170157_part0001.webm
recording_20260310_185513_Steven_58170157_part0002.webm
-> ./recording/20260310_185513/Steven_58170157.webm
recording_20260310_185513__Ponpoko_cf8c3192_part0001.webm
recording_20260310_185513__Ponpoko_cf8c3192_part0002.webm
-> ./recording/20260310_185513/Ponpoko_cf8c3192.webm
recording_20260310_185513_part0001.webm
recording_20260310_185513_part0002.webm
-> ./recording/20260310_185513/recording.webm
Run any script with --help to print usage and examples.