Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/fossasia/voxbento --skill floor-bot-analysis명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Use this skill to review pull requests for VoxBento. Covers correctness, security, architecture compliance, and testing.
Ask which skill or flow fits your situation. A router over the user-invoked skills in this repo.
Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | floor-bot-analysis |
| description | Use this skill for floor bot analysis. |
This skill explains how to debug and analyze the Floor Bot feature in VoxBento, which bridges the Jitsi WebRTC audio floor track to the RTSP/MediaMTX infrastructure for transcription.
The floor-bot is a headless Playwright/Chromium container that joins the main Jitsi conference room (monitoring the floor channel). It captures the audio and sends it over a PulseAudio socket directly to FFmpeg. FFmpeg then pushes this audio via RTSP to MediaMTX, where the transcription worker pulls it and generates captions.
bot.py via an HTTP server. It listens on port 8080 for /start and /stop commands./tmp/pulse-{event_slug}.sock acts as the bridge. Chromium outputs to this socket, and FFmpeg reads from it.rtsp://mediamtx:8554/{event_slug}/floor./api/rooms/{room_id}/floor-transcription/start trigger the bot to join the Jitsi room and immediately spawn the transcription worker pointing to the floor channel.When deploying this architecture, understanding the network topology is critical.
JITSI_INTERNAL_BASE)jitsi-web. To bypass WebRTC HTTP origin blocking for getUserMedia, the backend automatically replaces localhost or jitsi.voxbento.com with the Docker-internal HTTPS URL: https://jitsi-web. The bot explicitly uses --ignore-certificate-errors and --unsafely-treat-insecure-origin-as-secure=https://jitsi-web.https://jitsi-web hostname will fail. You must set JITSI_INTERNAL_BASE to the public Jitsi URL (e.g., https://jitsi.eventyay.com) in your .env.MEDIAMTX_RTSP_BASE)rtsp://mediamtx:8554 (the container name inside Docker Compose).MEDIAMTX_RTSP_BASE environment variable. Both the floor-bot FFmpeg ingest and the backend transcription worker use this URL.FLOOR_BOT_BASE)http://floor-bot:8080.FLOOR_BOT_BASE to point to the correct pod/service DNS.Check if Playwright is muting the browser. Ensure --ignore_default_args=["--mute-audio"] is being passed. Also verify if the Jitsi UI is trying to acquire mic permissions and failing: Ensure --use-fake-device-for-media-stream is used.
Jitsi expects URL parameters (like userInfo.displayName) to be valid JSON strings. Ensure the display name is properly quote-wrapped and URL encoded:
urllib.parse.quote('"VoxBento FloorBot"') -> %22VoxBento%20FloorBot%22.
Ensure PULSE_SERVER="unix:/tmp/pulse-{event_slug}.sock" is properly passed to the Playwright chromium browser using the env= dictionary.
If FFmpeg reports loop/sync errors (Non-monotonous DTS), check the sample rate constraints in Jitsi vs Chromium vs FFmpeg.
Tail the Floor Bot Logs:
docker compose logs -f floor-bot
Check PulseAudio Connections inside Floor Bot:
docker compose exec floor-bot sh -c 'PULSE_SERVER="unix:/tmp/pulse-{event_slug}.sock" pactl list sink-inputs'
(If the browser is outputting audio correctly, you will see 'Chromium' listed as a client).
Check FFmpeg/MediaMTX Streaming:
docker compose logs -f mediamtx
(Look for: [path {event_slug}/floor] stream is online)