What's new in the Jitsi plugin v4.6
Version 4.6 of the mod_jitsi plugin is probably the biggest update since we introduced automatic provisioning on GCP. It touches four very different but complementary areas: recordings, AI on top of the recordings, private sessions between users, and a new tutoring-hours system. Let’s go through them one by one.
1. Recordings on GCP: the Jibri pool
What is Jibri
Jibri is the official recording component of Jitsi Meet. It is a separate virtual machine that joins the room as an invisible participant, captures video and audio with Chrome and saves the result as an MP4 file.
The starting point: no recording on GCP servers in 4.5
Up to version 4.5, Jitsi servers auto-provisioned on GCP by the plugin did not support recording: no Jibri was deployed alongside them and the record/stream feature was simply not available on those machines. If you wanted to record a class, you had to set up and maintain your own Jibri manually, outside of the plugin.
The 4.6 solution: a managed Jibri pool
In 4.6 the plugin’s GCP servers feature a pool of Jibri machines. It works like this:
- The administrator configures the pool size (e.g. 2 Jibris available at once).
- The plugin always keeps that number of Jibris in ready (idle) state, booted and waiting.
- When a teacher starts recording, one of the Jibris from the pool goes to work and the plugin automatically spins up a new one to fill the gap, so there is always a free Jibri.
- When the recording finishes, the Jibri goes back to idle and the one that was created as a replacement is already ready for the next recording.
Fast boot from a GCP image
The very first time a Jibri is created, the full process (installing packages, Java, Chrome, kernel tweaks, etc.) takes around 10-15 minutes. To avoid that wait on replacements, the plugin automatically creates a GCP image (snapshot) of the first Jibri once it is operational. Subsequent Jibris in the pool boot from that image and become ready in 1-2 minutes.
Real-time status monitor
Each Jibri ships with a small service (jibri-monitor) that polls the local recording status every 2 seconds (by querying Jibri’s internal API on port 2222). When Jibri starts recording, the monitor automatically calls Moodle with the new status (BUSY). Moodle updates the pool and, if necessary, queues the creation of a new Jibri immediately, without waiting for the next cron cycle.
When recording ends, Jibri’s finalize script calls Moodle with the recording’s URL, which is automatically imported into the corresponding Jitsi activity.
Recording into Google Cloud Storage
Recordings can be stored directly in Google Cloud Storage, which makes them permanently accessible from anywhere without depending on the Jibri server staying up. The recording URL is of the form https://storage.googleapis.com/... and is public and permanent.
What the administrator sees
The server management page gets new columns and controls:
- Status of each Jibri in the pool (idle / recording / provisioning / error)
- Number of active Jibris vs. the desired pool size
- Ability to add or remove Jibris manually
- The recording and streaming buttons in a session are only shown when at least one Jibri is available (if they are all still provisioning, the buttons are hidden to avoid confusion)
2. AI on top of recordings
Recordings stored in GCS get access to three AI features based on Gemini 2.5 Flash (Vertex AI):
Automatic summary
Teachers can request a text summary of a recording. The plugin sends the video directly to Gemini using the bucket’s gs:// URI —which allows processing large files without size limits— and receives a structured summary of the class. The summary is generated in the language of the user’s session.
Automatic quiz
With a single click, the plugin generates a true/false quiz in Moodle from the contents of the recording. The quiz is created as a Moodle Quiz activity inside the same course, with the number of questions configured by the administrator. Students can access it directly from the recording’s tab.
Transcript with timestamps and chapters
The plugin transcribes the full audio of the recording and inserts:
- Clickable timestamps at the start of each turn (format
[MM:SS]or[HH:MM:SS]for long videos). Clicking jumps straight to that point in the video. - Chapter headings (
### Chapter name) whenever the topic changes significantly, so it’s easy to navigate the contents of the class.
Students see the summary, quiz and transcript generated by the teacher. The teacher sees the “generate” button; the student sees the content once it has been generated.
3. Private sessions: now with history and notifications
Private sessions let any Moodle user (teacher, student, admin staff) have a 1-to-1 video call with any other user that shares at least one visible course.
How it works
- The user’s own profile shows a link to open the search/calls page (
call.php). - Another user’s profile shows a direct link to start a video call (only if you share at least one course).
- The room is symmetric: it doesn’t matter who calls whom, both users land in the same room (
{site}-priv-{smallerId}-{largerId}), so there are no duplicates.
Call history
call.php shows a history of recent calls: avatar, name and date of the last time you spoke with each person. From there you can start a new call directly.
Incoming-call notifications
When someone enters your private room:
- You receive a Moodle popup notification immediately.
- If you enable Web Push notifications (button on
call.php), you also get a browser notification even if Moodle is not open in a tab. call.phpincludes an incoming-call modal that pops up automatically (with a ringtone) when someone enters your room, with Join or Ignore buttons.
4. Tutoring hours
This is probably the most practical day-to-day feature for educational institutions.
The problem it solves
Teachers get messages from students asking “can I call you now?”. There was no easy way to know whether the teacher was available for a tutoring session at that moment.
How the schedule works
Teachers can define their availability schedule on a new page (tutoringschedule.php):
- For each course they teach, they can add time slots (weekday + start time + end time).
- The schedule is managed per course, independently.
When a student tries to call a teacher:
- If the teacher has a tutoring schedule, the plugin checks whether right now is within the teacher’s office hours.
- If available, the call proceeds normally.
- If outside the schedule, the student sees a notice with the next available slot and cannot start the call.
Availability indicators
On the search page and in the call history, teachers with a tutoring schedule show an availability badge: green if they are currently in office hours, or with the next available slot otherwise. This lets the student know at a glance whether it’s worth trying to call.
Integration with private sessions
The tutoring system integrates transparently with private sessions: if you try to call a teacher outside of their hours, you see a clear message before the video call even starts. No unnecessary interruptions.
Summary of what’s new in 4.6
GCP recording
- Pool of Jibris with fast boot from an image
- Real-time status monitor for automatic top-up
- Recording into Google Cloud Storage (permanent URL)
Artificial intelligence
- Automatic recording summary
- Auto-generated true/false quiz
- Transcript with clickable timestamps and chapters
- AI content visible to students
Private sessions
- Search for coursemates and call history
- Web Push notifications for incoming calls
- Incoming-call modal with ringtone on
call.php
Tutoring
- Per-course availability schedule for teachers
- Availability badge shown in search and history
- Out-of-hours calls are blocked with the next available slot shown
As always, everything is available in the mod_jitsi repository. If you try any of the new features and have feedback (especially on the Jibri pool or the AI features on top of recordings), open an issue or contact me directly.