v2.0.1
microsoft/markitdownv2.0.1Sep 30, 2026by github-actions[bot]
Upgrading?
AI Summary
This update fixes critical bugs from v2.0, including the black second output window on macOS and webcam permission issues. It adds a photosensitivity flash limiter and improves audio analysis accuracy.
Key Highlights
- New photosensitivity flash limiter (default on)
- Fixes second output window and webcam access on macOS
- Audio loudness readings corrected and pitch tracking optimized
- OSC and web remote now listen only to local machine
New Features
- Photosensitivity flash limiter
- MacOS output window fix
- Webcam permission fix
- Audio analysis accuracy improvements
- Pitch tracking performance boost
Full Release Notes
Fixes for 2.0: the second output window and webcams work on macOS, the audio analysis reads true levels, and a run of crashes and remote-control bugs are gone. Two changes may need a look: OSC and the web remote answer only this computer until you allow other devices, and loudness reads about 3 LU higher. ### Added - **A photosensitivity flash limiter, on by default.** Large-area flashing is held to at most three flashes a second, the WCAG and broadcast threshold, on screen and in every live output and recording; bright hits beyond that are dimmed. Offline loop and scene renders are not limited. Set it under Setup ▸ General: Strict allows one a second, and Auto goes Strict when the system asks for reduced motion, which also stops interface animation. Strobe-heavy looks are throttled; Off restores them. ### Changed - **OSC input and the web remote now listen on this computer only.** A phone, a controller on another machine or a bridge in Docker needs **Other devices** switched on for each under Setup ▸ Control. Web pages other than the remote's own can no longer connect to it, and other devices also need the web remote's access key: scan the QR code shown there or open the link beside it, and give bridges `--key` or `FOSFORA_KEY`. **New key** disconnects every old holder. - **Pitch tracking costs about 1% of what it did** (5.3 ms to 0.05 ms per analysis step), freeing nearly half a CPU core on the audio thread. A fundamental below 55 Hz, which read as the bottom of the `pitch` range, now reads as no pitch: the last value holds at zero confidence. - **Building from source needs Rust 1.97**, the toolchain the repository pins and tests; the declared minimum of 1.90 was never tested. - **Fosfora no longer links OpenSSL.** Downloads already used the built-in TLS, so the Linux binary no longer needs the system OpenSSL library, and building from source no longer needs `libssl-dev`. ### Fixed - **On macOS the second output window stayed black, or took the interface with it.** It now opens as a plain borderless window on its display, with the interface left live on the other, and closing it no longer leaves the interface zoomed. - **Webcams stayed dark on macOS and no permission prompt appeared.** Fosfora now asks for camera access the first time a camera is added, and adds it once you allow it. - **The app and window icon still showed the old Phosphor "P".** It is the Fosfora "F" now. - **Murmur, Symbiosis and Genesis flocked on the wrong neighbors**: each bird, cell and seed read the particles of the grid cell next to its own, and below High particle quality the neighbor grid was the wrong size. Flocks now cohere and split where the sim says they should. - **Screen turned bloomed highlights black** where two bright layers overlapped, and Exclusion could go negative. Screen, Overlay, Hard Light and Exclusion now stay bright on HDR values and blend exactly as before everywhere else. - **A NaN or out-of-range number over OSC or the web remote** could blank a layer's opacity or a parameter, and a preset saved afterwards vanished from the list. Such values are now ignored, and a preset that would not load back is refused with an error. - **One corrupt sample from a loopback device** left loudness and the normalized audio features stuck until the device was reopened. Bad samples are now silenced on capture. - **Per-band pan read the wrong frequency ranges on 48 kHz devices**; the band edges now follow the device's sample rate. - **Loading an effect by an out-of-range index** over OSC or the web remote deleted the layer's preset bindings and loaded nothing. It is now ignored. - **Accented or other non-ASCII characters crashed the app** when a preset name, a text particle source or a webcam name was shortened for display. - **A GIF with a huge or corrupt header crashed the app.** GIFs over 8192 px per side, or whose frames would take more than 2 GiB decoded, are now refused with an error; convert those to video. - **Fast animation stuttered in shows running for hours**: shader time lost precision as uptime grew, to ~16 ms steps after a day and a half. `u.time` now wraps to 0 every hour, so it stays smooth; anything periodic in it makes one jump per hour, like reloading the effect. - **Soft edges darkened wherever a layer used Normal blend over another**, costing antialiased fringes and glows up to a quarter of their brightness. Normal is now a true premultiplied over, so stacked layers' coverage also adds up instead of taking the larger of the two. - **A fader moved while an effect loaded could stick partway** over OSC, MIDI or the web remote: once the input queue filled, the newest messages were the ones dropped. The oldest are dropped now, so the last value sent always arrives. - **Webcam as a particle source** had no button and could only come back from a preset. It is on the particle source row again. - **The depth download always failed on macOS**, so depth obstacles could not be set up there. On every platform, an interrupted download could leave a broken ONNX Runtime that was reused on every run. The runtime, depth model and Splat demo are now checked against pinned checksums, and a broken copy is fetched again when you press Download. - **One idle connection to the web remote stalled every other client** for five seconds. Beyond 32 open connections new ones are refused, and a burst of effect or preset loads from the remote now loads only the last. - **Morph effects above about 2 million particles failed to load on Windows (DX12)**; they are now capped to what the GPU can bind. - **The web remote could load hidden effects by number**, including the 10-million-particle Stress benchmark. It now loads only effects in its list. - **Right after a stall such as an effect loading, audio-reactive visuals replayed audio from before it**: the newest analysis frames were the ones dropped. The oldest are dropped now. - **Tracks tuned close to a quarter tone off** could have their tuning estimate swing through standard pitch, smearing chroma and key across two notes for seconds. The estimate now wraps the short way round and holds. - **Downbeats weighed each beat's loudness rise after auto-gain**, which flattens the accents that mark the "one"; they now read the true level. - **Quiet line or mic input made audio-reactive visuals stutter**: a level hovering near the silence threshold switched the audio features off and on and could drop the beat grid. The gate now closes only after a clear drop held for a quarter second. - **Loudness read 3–6 dB low, and anti-phase stereo counted as silence.** Left and right are now summed as the broadcast standard specifies, so `loudness_m` and `loudness_s` read about 3 LU higher on typical music; retune anything keyed to a fixed loudness level. - **A DC offset from some interfaces and loopback paths inflated sub-bass** and the lowest onset bands. It is now filtered out before analysis. - **The spectrum and spectrogram textures read 6 dB low**, as did the fixed-range dB bands; a full-scale tone now reads 0 dB, so they sit slightly brighter. Beat and onset detection are unchanged. - **Windows loopback capture was silent on 32-bit integer devices**, paused the beat clock through silent stretches, and leaked memory on every reconnect. All three are fixed. - **Surround devices lost their center channel**, so vocals and dialogue from a 5.1 or 7.1 input or Windows loopback barely reached the visuals. Extra channels are now folded into stereo, center and surrounds at −3 dB, LFE left out. - **Switching audio device mid-recording** to one with a different sample rate pitch-shifted the rest of the recording's audio and let it drift from the picture. The new device's audio is now converted to the recording's rate. - **After a GPU driver reset or a removed GPU** the app rebuilt its textures on the dead device every frame, flooding the log. It now exits once, with an error saying to restart it. ## Downloads | Platform | File | Notes | |----------|------|-------| | **macOS** | `.dmg` | Universal binary (Apple Silicon + Intel) | | **Linux x86_64** | `.tar.gz` | glibc 2.35+ (Ubuntu 22.04+, Debian 12+) | | **Windows x64** | `.zip` | Windows 10+ | ## Getting started **macOS**: Open the DMG, drag Fosfora.app to Applications (or run directly). Signed and notarized. **Linux / Windows**: Extract, run `fosfora` from the extracted directory. The `assets/` folder must be next to the binary. ## Requirements - **GPU**: Vulkan (Linux/Windows) or Metal (macOS) - **Audio**: Built-in mic or line-in for audio-reactive visuals - **NDI®** (optional): [NDI® SDK runtime](https://ndi.video) for network video output - **Video playback** (optional): `ffmpeg` on PATH for media layers --- NDI® is a registered trademark of Vizrt NDI AB.
Related Repositories
public-apis/public-apis★ 491,123
A collective list of free APIs
NousResearch/hermes-agent★ 255,883
The agent that grows with you
yt-dlp/yt-dlp★ 199,986
A feature-rich command-line audio/video downloader
Significant-Gravitas/AutoGPT★ 187,698
AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.
langgenius/dify★ 159,154
Build Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype to production without rebuilding the stack.