Releases: caaatto/vicash
Release list
v0.1.10
- audio: a failed start at launch (for example when the default output device is gone) no longer writes enabled = false to the config and no longer wipes the saved device names
- audio: the F1 panel now shows the actual start error instead of the generic off hint
- audio: new enable button in the F1 panel starts audio at runtime, no --audio flag or config edit needed
v0.1.9
- In-app capture device picker in the F1 panel
- Audio passthrough on by default
- Immediate present mode by default for lower latency
- Fixed a crash when launched without a console (double-click)
- Fixed heavy frame drops when opening the audio / video device dropdowns
vicash v0.1.8 (long-session OOM hotfix)
vicash v0.1.8
Update if you keep vicash open for more than ~30 minutes at a time.
What broke
The unfinished MSMF H.264 / MPEG-TS pipeline behind /stream.ts (shipped as wip reference code since v0.1.0) was auto-spawned every time the relay started. It encoded the capture stream at full framerate continuously, even though nobody was ever consuming /stream.ts. The Microsoft Media Foundation software encoder leaked internal sample buffers on that path. After ~30 minutes of normal use the next encode call returned E_OUTOFMEMORY (0x8007000E), the encoder thread did not handle it gracefully, and the OS abort-trapped the whole process as a "fast fail" (0xc0000409).
The v0.1.7 diagnostic release added a panic hook that would have caught a normal Rust panic, but Windows fast-fail aborts skip the Rust panic path entirely - which is why panic.log stayed empty even after the second crash.
Fix
The leaky encoder no longer auto-spawns. The video_stream module stays in the source tree as wip reference, but it does no work at runtime. If you want H.264 + AAC inside vicash, the fMP4 path added in v0.1.5 (F1 -> Relay -> "Audio im Relay aktivieren") via the optional ffmpeg.exe is the supported way.
Update
If you are on v0.1.5 or v0.1.6 or v0.1.7: open F1, Update -> Install and restart now.
vicash v0.1.7
vicash v0.1.7
Tiny diagnostic release. No new features, just better forensics when something goes wrong.
v0.1.6 switched to the Windows GUI subsystem so launching vicash no longer pops a cmd window. The downside: when a panic happens, the Rust default handler tries to print to stderr, but with no console attached the message is dropped on the floor. The user sees a generic "vicash.exe stopped working" dialog with zero diagnostic information.
This release fixes that.
What's new
- A panic hook now appends every crash (message + Rust backtrace) to
%APPDATA%\caaatto\vicash\config\panic.log. Attach this file to a bug report and the offending location is right there. - All log output is also teed to
%APPDATA%\caaatto\vicash\config\log.txt, truncated past ~512 KB so the disk does not fill on long sessions. Useful when investigating issues that do not panic outright. - Terminal launches (
vicash --list, etc.) still print to the parent console exactly as before. The file logs are additive, not a replacement.
Update
If you are on v0.1.5 or v0.1.6: open F1, scroll to Update -> Install and restart now. vicash swaps itself in place and relaunches. The top-right "Update available" badge added in v0.1.6 should also be visible in the main preview window.
vicash v0.1.6
vicash v0.1.6
Two small but visible UX fixes.
No more cmd window
Release builds now use the Windows GUI subsystem. Double-clicking vicash.exe no longer pops a console window with log output. CLI usage still works the same: vicash --list from PowerShell shows the device list because we re-attach to the parent console on startup when one is present.
Update-available badge in the preview window
The auto-updater status was previously visible only inside the F1 settings panel. Now, when a newer release is available, a small badge appears in the top right of the preview window:
Update available: v0.1.7 (F1)
The badge is informational; the F1 -> Update section is still where you click "Install and restart now".
Self-test the auto-updater
v0.1.5 users running this version's parent: open F1 -> Update. You should see "Update available: 0.1.6" and an install button. Clicking it pulls this release down, swaps the binary in place, and relaunches. The leftover vicash.exe.old is cleaned up on the next startup.
vicash v0.1.5
vicash v0.1.5
Three things land in this release: a real fix for an audio sync regression that crept in around v0.1.3, the first cut of an audio+video relay (beta), and a self-updater so you never have to re-download by hand again.
Self-updater
vicash now checks https://api.github.com/repos/caaatto/vicash/releases/latest on startup, compares the tag against its compiled version, and surfaces the result in a new Update section in F1.
When a new release is out, click Install and restart now. vicash:
- downloads the new
vicash.exe, - renames the running binary out of the way (
vicash.exe.old), - drops the new one in its place,
- relaunches itself with the same arguments.
The leftover .old is cleaned up on the next startup.
The DWM hotfix in v0.1.4 would have reached every v0.1.5+ user automatically through this path.
Audio + video relay over fMP4 (beta)
Optional, off by default. Requires ffmpeg.exe on PATH (same dependency as F10 recording).
- F1 -> Relay (beta) -> "Audio im Relay aktivieren" spawns a single ffmpeg subprocess that pulls raw NV12 video and f32 audio over two TCP localhost sockets and emits a streamable fragmented MP4 to vicash. vicash parses the boxes and broadcasts to every client.
Two new endpoints:
/playeris a tiny HTML5 page with Media Source Extensions that aggressively trims its buffer so latency stays near the fragment duration (~0.5-1s) instead of the multi-second default a raw<video>tag would buffer. Use this for browser viewing./stream.mp4is the raw fMP4 stream with chunked transfer encoding. Use this in OBS Browser Source where the player chrome would get in the way.
The whole relay section is labelled "Relay (beta)" until the audio path has more hardware miles on it. Capture-card audio sync drift varies by hardware; MJPEG-only relay remains the rock-stable path.
Audio sync fix
The relay-sink hook added in the v0.1.3 line briefly held two parking_lot mutexes across two consecutive ringbuf push loops in the cpal input callback. That was just slow enough to push WASAPI past its frame deadline and cause the local speaker output to drift, even when the relay was off.
v0.1.5:
- Releases the speaker-side ringbuf lock before touching the relay lock.
- Gates the relay fan-out behind an
AtomicBoolso the callback does one atomic load and skips when the relay is disabled. Zero mutex contact in the cold path.
If you raised your audio sync delay since v0.1.3, you can probably drop it back to where it was before.
Download
Grab vicash.exe below, drop it anywhere, double-click. No installer. Existing v0.1.4 users running F1 will see the update offered automatically.
vicash v0.1.4 (critical DX12 hotfix)
vicash v0.1.4
Critical hotfix. Update immediately if you are on Windows + NVIDIA.
What broke in v0.1.2 / v0.1.3
The "prefer DX12 over Vulkan" change in v0.1.2 listed both backends in
the wgpu Backends bitmask. wgpu was free to pick whichever, and on
recent NVIDIA drivers it kept picking Vulkan. That triggers the
dwmcore.dll heap-corruption crash (exception code 0xc00001ad) that
the v0.1.2 release notes claimed was mitigated. The user-visible
symptom is the desktop window manager dying mid-session: black wallpaper,
crashing apps, sometimes a forced restart.
What's fixed
vicash now lists wgpu::Backends::DX12 only on Windows. The Vulkan path
is excluded entirely from the process, removing the failure mode at the
source. Verify in the log on startup:
[INFO wgpu_core::instance] Adapter AdapterInfo { ..., backend: Dx12 }
Everything else
Identical to v0.1.3. All v0.1.3 features (F9 screenshot, F10 recording,
colour adjustment, custom aspect, Ctrl+wheel zoom, CRT scanlines, mono
audio mix, device-by-name persistence, localhost-only bind toggle, etc.)
ship unchanged.
Download
Grab vicash.exe below, drop it anywhere, double-click. No installer.
vicash v0.1.3
vicash v0.1.3
Niche feature pack focused on the cheap-card / Switch capture audience.
What's new
Hotkeys
- F9: screenshot to PNG under
<Pictures>/vicash - F10: video recording to MP4 (requires
ffmpeg.exein PATH; vicash itself stays a single exe)
Image shader
- Brightness / contrast / saturation / hue sliders with named presets (Neutral / Switch / Retro warm / Cool)
- Custom aspect ratio (4:3 for retro consoles, 16:9, 16:10, free w:h)
- Ctrl + mouse-wheel zoom, drag sliders for pan, right-click resets
- CRT scanline shader strength slider
Audio
- Mono mix toggle averages all input channels and broadcasts to every output channel. Fixes the MS2109 / MS2130 "audio only on left channel" papercut without a third-party tool.
Capture device
- Persist by device name instead of index. Windows shuffles capture device indices after reboot or driver updates; matching by name keeps the right card selected.
--device <n>is now a session-only override and no longer pollutes the saved preference.
Relay
- Localhost-only bind toggle for privacy on public networks
- LAN troubleshooting hint covers
http://vshttps://, firewall, AP isolation
UI
- Settings panel scrolls when it exceeds the viewport
- Larger panel text for readability
- Copy URL button now writes to the system clipboard
Perf
- "No signal" overlay when frame timestamps stop advancing for 1.5s
- Pipeline-latency metric stays sub-1ms and is no longer polluted by heartbeat redraws
- Throttled display so latency / CPU digits actually stay readable
- CPU% normalized by core count to match Task Manager
Download
Grab vicash.exe below, drop it anywhere, double-click. No installer. Optional: place ffmpeg.exe in the same folder or on PATH if you want F10 recording.
vicash v0.1.2
What is new
-
Prefer DX12 over Vulkan on Windows. wgpu's Vulkan path on NVIDIA + Desktop Window Manager can trigger a
dwmcore.dllheap corruption (Event Log:dwm.exefault, exception code0xc00001ad) that takes the whole desktop down - black wallpaper, every other GPU-using app crashing in cascade. DX12 lives closer to the Windows graphics stack and avoids the failure mode. -
README troubleshooting section covers the DWM crash, the cheap-card MFT source reader lockup window, the Windows port reservation gotcha (error 10013), and the current "audio relay is local-only" limitation.
Download
Grab vicash.exe below, double-click, pick your capture card. Press F1 inside the window for live settings.
Recommended
Keep your GPU driver current. The Vulkan-backed v0.1.1 build would specifically misbehave with older NVIDIA drivers; v0.1.2 sidesteps that path on Windows entirely but a current driver is still good hygiene.
vicash v0.1.1
What is new
- Live relay toggle in the F1 panel. Start and stop the MJPEG server from inside vicash, no need to relaunch with
--serve. The panel shows status, active and total client count, and both the LAN URL and the localhost URL with copy buttons. - Autostart relay option persists across launches.
- Default port is now 7777. Windows reserves dynamic port ranges that often include 8080 (Hyper-V, WSL, Docker, IIS) and refuse bind with error 10013 even for admins. 7777 is rarely on that excluded range.
- Better error surface. If the chosen port is unavailable the panel shows a red error inline plus a hint to try 8181, 9090 or 5500.
- Cleaner relay HTML page at the root URL: full-bleed video with a small help overlay showing the
/streamand/snapshot.jpgpaths.
Download
Grab vicash.exe below, double-click, pick your capture card. Press F1 inside the window for live settings (Sprache, Monitor mode, Display, Capture, Audio, Relay, Performance).
Full v0.1.1 changelog
- Live relay start / stop from F1 panel
- Relay port editable in panel, persisted
- Relay autostart checkbox
- LAN URL + localhost URL displayed separately with their own copy buttons
- Default port 8080 -> 7777
- Relay accept loop uses
recv_timeoutwith shutdown flag for clean stop - README rewritten to lead with the F1 button flow and document the Windows port reservation gotcha
See the v0.1.0 release notes for the original feature list.