Skip to content

FPP 10.0-beta4

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 12 Aug 21:45
· 662 commits to master since this release
10.0-beta4
5ea1bad

FPP 10.0 (Beta 4) - Release Highlights

NOTE: This is a BETA release, continuing on from FPP 10.0-beta3. Coming from FPP 9.5? See the FPP 10.0-beta release notes for the full list of changes first. This post covers only what's changed since 10.0-beta3.

Thanks again to everyone testing and filing issues - keep it coming.

New in Beta 4 - At a Glance

  • Per-port pixel protocols - TM18xx, 16-bit and 400kHz parts can now be driven, and the WS2811-compatible parts (SK6812, WS2812B, WS2815, ...) are listed by name instead of hiding behind "ws2811"
  • 128 pixel strings from a single PRU - capes can declare a 16-deep shift chain on PocketBeagle2/AM62x
  • Four more self-PWM panel chips - DP3364S, ICND1065L, SM16380SH and ICND2153, plus 1/64 scan and full-height panel layouts
  • Boot is substantially faster on single-core boards - roughly 30s of a 90s BeagleBone boot removed, and a duplicate audio sink that could hang boot outright is fixed
  • Cape audio fixed - audio capes no longer lose out to a Dummy sound card, and PipeWire no longer restart-loops with no audio at all
  • USB WiFi wedge fixed - Realtek adapters on BeagleBones no longer come up alive-but-unreachable
  • Output crash fixed - uploading a config while outputting could free channel outputs out from under the output thread
  • Ports stay on across a config reload - a config upload while running no longer leaves every port powered off
  • Backups now restore Pixel Overlay Models and the Virtual Display Map - previously dropped silently
  • Pixel string "Reverse" is saved again, and OS upgrades check for free disk space before starting
  • New BBB kernel, effects/command improvements, and a long list of UI fixes

See below for details.


New in Beta 4 - Full Details

(everything below is new since 10.0-beta3 - not a restatement of the earlier betas)

Pixel Strings

  • Per-port pixel protocols now actually apply. The setting was saved by the UI but never read. Selecting a protocol per port works, including inverted-output parts
  • TM18xx support - inverted protocols select the correct idle level, and TM1814's constant-current preamble is sent ahead of the pixel data (without it the part sits at its 6.5mA floor)
  • 400kHz and longer-bit-cell parts (TM1803, TM1804, UCS1903 and friends) can now be driven - the bit cell is supplied to the PRU at runtime rather than compiled in, so a separate firmware image per timing isn't needed
  • WS2811-compatible parts are listed by name - SK6812, WS2812B, WS2815 and the rest of the 800kHz family, grouped to match xLights' pixel table, so you no longer have to know your part is "a WS2811 in disguise". Parts that would be driven wrong rather than merely differently are deliberately left off the list
  • 16 strings per data pin on AM62x - a cape can declare "stringsPerPin": 16 to drive 128 strings from one PRU's eight data pins. Existing 8-deep capes are unchanged byte for byte
  • Falcon smart receivers are refused on chains that can't support them, rather than failing obscurely
  • Fixed the pixel string "Reverse" direction never being saved (a class-name typo meant the dropdown was never read, and cloning a row lost it too)
  • Fixed BBShiftString rendering frames at the wrong offset on AM62x
  • Fixed the port status page reporting status and current readings it has no way to measure

LED Panels

  • New self-PWM panel chips supported: DP3364S, ICND1065L, SM16380SH and ICND2153
  • 1/64 scan panels - register tables can now carry scan-specific variants, and the FM6373 gains a proper 1/64 table instead of having its 1/32 table stretched. If no table matches your scan rate, the log now says so explicitly
  • Full-height panel layout - panels that scan every row (scan == height) can now use both RGB lanes for halves of the same row. A new Panel Data Layout setting selects it, and 128x64 and 64x64 1/64 sizes are now offered
  • Fixed the PWM panel firmware overflowing the PRU's 12KB instruction memory, which prevented it from loading
  • Fixed a crash on the first frame when an interleave setting maps outside the panel's frame (notably "Off" on a panel that scans fewer than half its rows)
  • Vendor panel settings are now version-gated, so new panel options published to fpp-data can't break FPP 9 players
  • The FM6353 option no longer claims ICN2153 compatibility - use the new ICND2153 type

Audio

  • Cape audio no longer loses to a Dummy sound card. Three separate causes fixed: cape EEPROMs naming kernel modules that have since been renamed, snd-dummy being loaded while a real card was still binding, and the CPU DAI and machine driver not being loaded at all
  • Fixed PipeWire restart-looping with no audio (#2811) - a stale ALSA config in /etc survived upgrades forever and was never re-validated against what the hardware actually accepts
  • Fixed picking a PCM format the card can't sustain at the target rate - on a fixed-bit-clock I2S cape, a wider sample size halves the achievable rate, so "S32_LE exists" and "44100 exists" did not mean both at once
  • Format probing now judges success by the player's exit status rather than by its banner text
  • Fixed audio-only playback losing the first ~250ms of the file, from both the status page and playlists

Boot Time & Resource Use

Mostly aimed at single-core BeagleBone-class boards, where these land on the critical path to fppd and the web UI:

  • Fixed a duplicate WirePlumber ALSA sink that could hang boot entirely - a second, monitor-created node for a card FPP already owns would win the default-sink election and then block forever, holding boot open with no timeout. Also cuts ~11s off postNetwork
  • DHCP no longer drags in systemd-hostnamed and polkit just to set a hostname FPP already wrote itself (~21s of a 90s boot on AM335x)
  • rsyslog is deferred off the boot path, and atd/ufw no longer ship enabled
  • The spoken IP announcement now yields to fppd, apache and php-fpm instead of competing with them for the core
  • Twelve unused PHP extensions are no longer loaded - ~1.6MB per worker, and it takes the Foreign Function Interface out of a web-facing PHP
  • Removed a leftover /proc scan for a legacy AES67 implementation that no longer exists

Networking & WiFi

  • Fixed Realtek USB WiFi adapters coming up alive but unreachable - rtw88_usb tries to switch the chip into USB 3 mode during probe, which no BeagleBone USB host can do, and the attempt intermittently wedged the adapter (the netdev appears and reports Link UP, but the radio never associates). Now disabled, with the option actually applying
  • A wedged adapter that still slips through is now recovered by rebooting, which is the only recovery that reliably works, with a guard so recovery can't feed itself into a reset loop
  • Only one wpa_supplicant runs now instead of two
  • disableWLANPowerManagement() is actually called
  • The network status page reports the live connection rather than pending config changes, and tethering/wifi status messages are clearer, with tethering changes live-applied via Restart Network
  • Fixed the Manual DNS fields not appearing on load on slower devices

Stability & Crash Fixes

  • Fixed channel outputs being destroyed while the output thread was still walking them - a config upload during output could free an output mid-cycle. The 100ms sleep it relied on was never a barrier
  • Fixed ports being left powered off after a config reload - a controller that had its config uploaded while outputting kept receiving data with every port disabled until output was stopped and started again. This also restores eFuse trip reporting on reloaded ports
  • Fixed an unbounded walk in the compressed FSEQ frame lookup - a sync packet or playlist start position past the end of a shorter local copy of the sequence could run off the offset table
  • Fixed fppd aborting when an FSEQ read-ahead thread can't be created (effects triggered several times a second could accumulate dozens of open readers)
  • Fixed a FileMonitor deadlock caused by holding its lock while running callbacks
  • Fixed CopyFileContents reporting failure for every successful copy on Linux
  • Fixed installing PRU programs clobbering the PRU sleep firmware
  • Pin control survives an unmappable /dev/mem, and the missing P8_26 pin was added
  • Fixed the i2c1 EEPROM cape probe stranding the pins it borrows

Commands, Effects & Overlays

  • FSEQ Effect Start gains an ifNotRunning option, and an option to restart an effect in place instead of starting a duplicate
  • Running effects now composite in trigger-recency order rather than array-index order
  • Command execution args are logged at Info, sources at Debug and payloads at Excessive
  • %VAR:name% is now resolved on the /api/command/{cmd} routes too
  • A playlist, preset or API call referencing a missing command now warns instead of failing quietly
  • Routine MQTT command-run publishes are no longer logged as warnings
  • Empty SetSetting values are preserved instead of being dropped
  • Overlay model Text effect supports multi-line text (#2823), handles escaped backslashes, and no longer collapses on empty text
  • GPIO command display now shows multisync information and command arg labels alongside values
  • Fixed GPIO pull-up/down bias being skipped when a pin's resetMode defaults to a0/a3

Backups & Config

  • Pixel Overlay Models and the Virtual Display Map are now restored from backups - they were previously dropped silently
  • Uploading a config file that doesn't change anything no longer rewrites it
  • Fixed the reset-fpp-config checkbox grid layout and grouping

OS Upgrade & Web UI

  • OS upgrades now check for free disk space before starting (#2820)
  • The upgrade dialog is no longer flooded with a line per progress-bar redraw
  • An unknown current version now offers a rebuild rather than a bogus upgrade, and an update is no longer flagged as available when stats haven't caught up with the most recent commit yet
  • Streamed progress dialogs no longer reuse stale browser-cached content
  • File upload progress no longer appears stuck at 100% - it now shows "Saving to disk" while the server finishes writing (#2812)
  • FilePond updated to 4.32.12, dropping the old Safari chunk workaround
  • Dark mode fixes: the upload drop zone is visible, and command text on invalid command preset rows is readable
  • Fixed warning click-through breaking on unescaped text
  • The status WebSocket now honors the /proxy/<ip>/ path prefix
  • Input and video configuration pages now handle unsaved changes and notify on them
  • Test-mode stop is sent with keepalive so it can't be dropped on page unload
  • Plugin versions are now recorded in crash reports, the Plugins page shows a spinner while checking for updates, and the post-OS-upgrade reinstall flag clears when there are no plugins to reinstall
  • Restored journal visibility for fppinit, fpprtc and fppoled

Kernel

  • BeagleBone images move to the 7.1.6-fpp16 kernel - reaches network.target ~4.6s earlier and carries 32 rtw88 fixes

Upgrading to FPP 10 Beta 4

(carried over from the 10.0-beta announcement for convenience - unchanged in beta4)

  • Brand new arm64 images recommended for all 64-bit capable Pi's (Pi 3, Pi 4, Pi 5, Pi Zero 2W, Compute Module 4/5) and PocketBeagle2
  • The original 32-bit images remain available for older/32-bit-only boards (Pi B, B+, Zero, Zero W) & other Beagles
  • Moving from 32-bit to 64-bit requires re-imaging - an in-place OS upgrade cannot switch architectures. Back up your config, flash the new image, restore config.

Option A - Fresh install (required if moving 32-bit → 64-bit)

  1. Back up your FPP config
  2. Flash the FPP10 image
  3. Restore your config

Option B - In-place upgrade (only if staying on the same architecture)

  1. Make sure you're fully updated on FPP 9.x (or 8.x) first, or already on 10.0-beta/beta2/beta3
  2. About → Upgrade OS → pick the 10.0 image for your board
  3. Let it download, install, and reboot
  4. Delete the fppos file from File Manager → Uploads
  5. If it fails to boot, power-cycle it (some devices need this due to library changes)

Which image do I need?

Board Image
64-bit capable Pi (3/4/5, Zero 2W, CM4/CM5) FPP-v10.0-beta4-Pi64.img.zip
Older/32-bit-only Pi FPP-v10.0-beta4-Pi.img.zip
BeagleBone Black/Green/PocketBeagle/Green Gateway FPP-v10.0-beta4-BBB.img.zip
PocketBeagle2 / PocketBeagle2 Industrial FPP-v10.0-beta4-BB64.img.zip

Backwards Compatibility Notes

  • Only in-kernel WiFi drivers are included - some older USB WiFi adapters may no longer work post-upgrade
  • VLC and SDL media backends removed - replaced by GStreamer/PipeWire
  • rpi_ws281x driver dropped - Pi string outputs now use DPIPixels
  • "Remote XXXX" FPP commands removed (deprecated since 9.0) - use normal FPP commands with MultiSync checkbox and target set
  • "FPD" dongle / PixelNet output removed (deprecated since 9.0)
  • Debian 12 → 13 library upgrades mean most plugins will need updating/reinstalling

Back up your config before upgrading, and please continue reporting issues.