← All docs changelog/2026-05-01.md

May 1, 2026

Commits

d790317 — Add checkpointing for Modal preemption, update LiveKit SDKs, fix anon DEK issue

Major livekit and queues update. The COLMAP SfM pipeline (colmap_undistorted_sfm_export.sh) now writes a checkpoint file after each stage so Modal preemption doesn't restart from scratch — completed steps are skipped on resume. LiveKit SDKs bumped from 1.1.2/1.4.2 to 1.1.5/1.5.6. VAD preloading via ctx.proc.userdata["vad"] disabled (upstream livekit prewarm bug causes timeouts with newer SDK); agents now call silero.VAD.load() inline. Session recording asset registration re-enabled. S3 bucket reference corrected from VIDEO_DATA_BUCKET_NAME to ASSET_DATA_BUCKET_NAME (consolidating onto a single bucket). The video_to_gsplat.sh helper script added for ffmpeg frame extraction + COLMAP + splatting. Anonymous DEK creation fixed for the new Supabase instance.

Changed:

  • dev/queues/colmap_undistorted_sfm_export.sh — checkpoint-based preemption tolerance: each COLMAP step writes to $CHECKPOINT_DIR/checkpoint.txt; step_done/mark_done helpers skip completed stages
  • dev/queues/session_to_splat.py — timeout extended from 4h to 6h
  • dev/queues/dockerfile.session_to_splat — build updates for new pipeline
  • dev/livekit_ts/agent/agent.pynoise_cancellation plugin replaced with silero; VAD loaded inline instead of from prewarm userdata; session recording asset registration un-commented; depth track handling notes
  • dev/livekit_ts/agent/room_agent_worker.py — VAD prewarm disabled (upstream bug)
  • dev/livekit_ts/agent/recorder.py — S3 bucket corrected to ASSET_DATA_BUCKET_NAME
  • dev/livekit_ts/agents/livekit_agent_helpers.py — SDK version bumps in image comments
  • dev/livekit_ts/agents/dockerfile.livekit_agent — Dockerfile adjustments
  • dev/core/core.pylivekit-protocol pinned to 1.1.5
  • dev/core/data.pyVIDEO_DATA_BUCKET_NAME removed; upload_to_sparky uses ASSET_DATA_BUCKET_NAME
  • dev/users/auth.py — anonymous DEK handling fixes
  • dev/requirements.txt, dev/requirements_full.txt, requirements.txt — dependency version bumps

Added:

  • dev/queues/video_to_gsplat.sh — end-to-end ffmpeg → COLMAP → splatting helper

Removed:

  • dev/queues/1416529-sd_640_360_30fps.mp4, dev/queues/boot.mp4 — test video files cleaned up

434ea24 — Make livekit-recorder write encrypted data

The Go-based livekit-recorder now encrypts video and depth recordings at rest using AES-CBC before writing to S3. The encryption mirrors the Python core.crypto.encrypt_account_data path: base64-encode plaintext → PKCS7-pad → random IV + CBC encrypt → base64-encode blob. The recorder receives the account DEK via a DEK_BASE64 environment variable, loaded by the Python agent before spawning the subprocess.

Changed:

  • dev/livekit-recorder/pkg/participant/data.goencryptBytes() (AES-CBC + PKCS7) and encryptAndWriteFile() functions added
  • dev/livekit-recorder/pkg/participant/processing.goprocess() and processDepth() now call encryptAndWriteFile instead of copyFile
  • dev/livekit_ts/agent/recorder.py — loads DEK via core.data.load_dek_in_memory(), passes DEK_BASE64 env var to recorder subprocess
  • dev/core/data.pyload_dek_in_memory() now returns the encoded DEK string (was void) with -> str | None return type