Skip to content

v29.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 12:18
789de96

Highlights

  • Redesigned WebRTC webcam studio: it opens with a local camera and microphone preview that only the broadcaster sees. The channel goes live only after Start broadcast, and End broadcast returns to the preview. (c4c7bee, 9c72190, 6f8f47e)
  • Stripe duplicate-charge protection: single wallet payments and subscriptions now reuse idempotency keys and use per-user locks, so retries, timeouts and double clicks do not create a second charge or customer. (1561d42, 27a6822, 8d760a1)
  • AI Companion subtitles: the Companion transcript of a video can be copied to the player as a SubtitleSwitcher subtitle. This happens automatically after processing, or manually. (f1627ea)
  • Category list cache: adding, editing or deleting a category is reflected immediately, instead of a stale cached list being served. Related to WWBN/AVideo#10600. (d2f0f70)

New features

  • WebRTC studio (c4c7bee, 9c72190, 6f8f47e):
    • Camera and microphone selectors, including front and rear camera options. The selected devices are remembered for future visits.
    • Detects devices being connected or disconnected during a session, and shows clear messages for permission and device errors.
    • Screen sharing is under advanced settings.
    • A chat panel that does not cover the preview, a guided help tour, and pt_BR translations.
    • Status labels (Connecting, Starting broadcast, You are live, Ending broadcast) reflect what the server confirms. A lost connection keeps End broadcast available instead of assuming the broadcast ended.
  • Companion subtitles in the AI plugin (f1627ea, 32ac611):
    • The transcript is saved as a SubtitleSwitcher track once processing ends. A scheduled task also covers videos whose tab was closed.
    • The automatic copy never replaces a subtitle in the same language that it did not create, such as a manual upload or an ai.ypt.me transcription.
    • The Copy subtitle to player button asks before replacing one.
    • The Companion widget icons were updated.
  • Stripe single payments (plugin/StripeYPT/getIntent.json.php, YPTWallet Stripe button) (1561d42, 27a6822):
    • The PaymentIntent idempotency key is saved and replayed after timeouts.
    • A per-user guard blocks duplicate payments, timed by when Stripe recorded the charge.
    • A different amount or an expired attempt cancels the old client secret before a new one is created.
    • A repeated click only checks the existing payment's status.
    • Error responses are clearer. A definite validation error, such as an amount below Stripe's minimum, can be corrected and retried.
    • The wallet is still credited by the charge.succeeded webhook.
  • Stripe subscriptions (8d760a1):
    • Subscription creation uses idempotency keys and an advisory lock across PHP workers.
    • Every Stripe customer already linked locally is checked before a new one is created.
    • Local rows whose customer was canceled, deleted or is missing are relinked to the new customer.

Fixes

  • Category cache (d2f0f70):
    • The category list cache key now includes a fingerprint of the categories table, so a change shows up without waiting for cache deletion. With the Cache plugin, deletion only happens on the per-minute cron.
    • objects/categories.json.php no longer returns broken JSON when PHP prints warnings.
    • DataTables-style search[value] parameters are handled.
    • Cached directory paths are reset after cache directories are removed.
  • Restreamer: plugin/Live/standAloneFiles/restreamer.json.php no longer starts a PHP session, and closes a session only if one is active. (2ad80db)

Dependencies

  • Composer:
    • aws/aws-sdk-php 3.395.6 → 3.398.0 (4fcc6b4, ee791fa)
    • google/apiclient 2.19.4 → 2.20.0 (d4518df)
    • google/apiclient-services 0.459.0 → 0.460.0 (4c8123e)
    • james-heinrich/getid3 1.9.26 → 1.9.27 (1fc8586)
  • npm:
    • intro.js 8.5.0 → 8.6.0 (f5b30da)
    • socket.io-client 4.8.3 → 4.8.4 (e08c7d3)
    • tinymce 8.9.1 → 8.9.2 (5bf1b13)
  • GitHub Actions:
    • actions/checkout 4 → 7 (69ff7b9)
    • actions/setup-node 4 → 7 (cf0af5a)
    • actions/upload-artifact 4 → 7 (08d3cde)

Other changes

  • The Dependabot auto-merge workflow now handles errors, and its token setup is documented in .github/DEPENDABOT_AUTOMERGE.md. (62e4f8b)
  • Added regression tests for the WebRTC studio, Companion subtitles, Stripe checkout and category caching. Contributor guidance now covers Stripe payments, the per-request SQL read cache and delayed cache invalidation. (c4c7bee, f1627ea, 1561d42, 27a6822, 8d760a1, d2f0f70)

Upgrade notes

  • Stripe restricted keys: the single-payment duplicate guard reads the charge time from Stripe, which needs the Charges: Read permission on a restricted key. The rest of the flow only needs PaymentIntents. Without that permission, the guard logs a warning and falls back to a 5-minute observation window. (27a6822)
  • Single-payment state is stored under videos/stripe-payment-locks/. It is not cache, and it is meant to survive cache cleanup. (1561d42, 27a6822)
  • Companion subtitles require the SubtitleSwitcher plugin to be enabled. Otherwise the Companion tab asks you to enable it. (f1627ea)

Full changelog: v29.1.1...v29.2.0
Release commit: 789de965a652

Original automated release notes

29.2.0 (2026-09-28)

Features

  • add support for Companion subtitles, including scheduling and manual copy functionality (f1627ea)
  • enhance cache handling and add regression tests for category caching (d2f0f70)
  • enhance Dependabot auto-merge workflow with error handling and documentation for token setup (62e4f8b)
  • enhance Stripe subscription handling with idempotency keys and error management (8d760a1)
  • Enhance WebRTC functionality with improved device management and UI updates (9c72190)
  • Improve WebRTC button functionality and UI consistency (6f8f47e)
  • StripeYPT: enhance single payment handling and add payment status check functionality (27a6822)
  • StripeYPT: implement single payment intent handling and improve error responses (1561d42)
  • update companion widget icons for improved user experience (32ac611)

Fixes

  • restreamer: ensure session is closed only if active and add config for session handling (2ad80db)

Dependencies

  • bump actions/checkout from 4 to 7 (69ff7b9)
  • bump actions/setup-node from 4 to 7 (cf0af5a)
  • bump actions/upload-artifact from 4 to 7 (08d3cde)
  • bump aws/aws-sdk-php from 3.395.6 to 3.395.7 (4fcc6b4)
  • bump aws/aws-sdk-php from 3.395.7 to 3.398.0 (ee791fa)
  • bump google/apiclient from 2.19.4 to 2.20.0 (d4518df)
  • bump google/apiclient-services from 0.459.0 to 0.460.0 (4c8123e)
  • bump intro.js from 8.5.0 to 8.6.0 (f5b30da)
  • bump james-heinrich/getid3 from 1.9.26 to 1.9.27 (1fc8586)
  • bump socket.io-client from 4.8.3 to 4.8.4 (e08c7d3)
  • bump tinymce from 8.9.1 to 8.9.2 (5bf1b13)

Other changes

  • Refactor WebRTC Studio: Enhance UI and functionality (c4c7bee)

Release commit: 789de965a652