Skip to content

Releases: eklonofficial/Vice

Vice 2.10.0

Choose a tag to compare

@eklonofficial eklonofficial released this 22 Aug 03:07

Screenshots, a custom colour theme, and a handful of things that were asked for and are now done.

Screenshots

Vice can take a picture of the screen now, on its own key. There is a new Images section in the sidebar that works like the clips one: click to open, drag onto a playlist, rename, copy, reveal, delete.

  • Set a screenshot key in Settings under Hotkeys. It is unset by default, so nothing changes for you until you pick one.
  • Every screenshot goes straight to your clipboard as well as to disk, so you can paste it somewhere without opening a folder.
  • They get tagged with the game the same way clips do, and a game's auto playlist holds its clips and its screenshots together.
  • The image viewer has a pen. Pick a colour, draw on it, save, and it overwrites the file in place.
  • Open a clip and there is a camera button in the header that saves the current frame as a screenshot. S does the same thing.
  • Screenshots live in ~/Pictures/Vice by default, kept away from your clips. Changeable in Settings.

This uses gpu-screen-recorder's own screenshot mode, which happily takes a still while it is holding the replay buffer, so there is no new dependency and it works everywhere clipping already works.

Custom colour theme

There is a sixth swatch beside the five presets. It opens a picker, and whatever you choose gets run through the same Material 3 derivation the five presets are built with, so you get a whole scheme and not a colour pasted over the blue one. The preview under the picker shows what your colour actually turns into before you commit to it, which matters because the accent is nearly always a lighter version of what you pointed at.

Full screen for clips (#177)

There is a full screen button in the clip viewer. F and double-click do it too, and Escape comes back out without closing the clip.

It expands to fill the Vice window when the button is clicked, which needs nothing from the host. After three seconds without moving the mouse the play button, the controls and the cursor fade out so they are not sitting over the clip.

Volume slider (#174)

The clip viewer has a volume slider, thanks to @voltek-laruelle. It remembers your level between clips and between restarts, and muting no longer forgets where you had it set.

While I was in there I took out the second playback bar underneath the main one. There were two playheads for the same video and only one of them needed to exist.

Trimmed clips that would not open (#172)

Real bug, not your setup. ffmpeg -ss before -i with -c copy does an accurate seek, which means it throws away the packets before your cut point and hands back a track where every frame points at a keyframe the file no longer contains. It probes fine, mpv plays it, and Chromium renders black and says nothing about it. Vice now spots that case and re-encodes just that one, so you still get the exact in-point you asked for.

Renaming from the viewer and the trim window (#170)

Double-click the title in either one. It used to be the card only.

Trim pauses the clip (#175)

Opening Trim over a playing clip left two copies of the same audio going. It stops the one underneath now.

Upgrades apply themselves

The daemon notices when its own files have been replaced on disk and restarts to pick up the new code. Before this the only thing that noticed was the app at launch, so upgrading without opening the window left the old daemon running and you had to know to type systemctl --user restart vice.service.

It only does this where systemd owns the service, because systemd is what starts the replacement, and it waits if you are mid-session or mid-clip.

Onboarding

The quick start is six pages now instead of three. It sets your clip key, your screenshot key and your replay length rather than telling you where the controls are, and it explains the tap versus double-tap thing that nothing was explaining before.

Translations (#125)

The README has a proper section on adding a language now. It is one JSON file, a half-finished one is fine because fallback happens per key, and docs/TRANSLATING.md has the rest. Still looking for pt-BR, pl-PL, es-ES and fr if anyone wants them.

Installing

yay -Syu vice-clipper

Then open Vice. That is the whole procedure.

Vice 2.9.0

Choose a tag to compare

@eklonofficial eklonofficial released this 20 Aug 03:13

Vice can now be translated, and a handful of bugs from the last release are fixed.

Translation

The interface is translatable. Every string lives in ui-src/locales/en.json
and English is the source, so a translation that is only half finished still
ships: any key a locale is missing falls back to English on its own.

Pick a language in Settings under Appearance. It follows your system language
by default.

If you want to translate Vice into your language, docs/TRANSLATING.md is the
four-step version. npm run i18n:new -- <locale> creates the file for you.
This closes #125, where pt-BR, pl-PL and fr were offered and are still free to
claim.

Fixes

  • The installer no longer asks dnf for a package that conflicts with the one
    you already have. On Nobara and other Fedora derivatives, ffmpeg-free is
    installed and RPM Fusion's ffmpeg replaces it, so naming either one made dnf
    refuse the whole transaction and the install stopped before it started. Vice
    needs a working ffmpeg, not a particular package, so if one is already there
    it asks for nothing. Reported by @Aratronnn in #173.

  • Half-Life 2 and Left 4 Dead 2 are no longer tagged as Team Fortress 2. All
    three run a binary called hl2_linux, so the process name cannot tell them
    apart. Vice now reads the Steam app id of the running game, which names it
    exactly, and needs no window title and no lookup over the network. Reported
    by @jethrothelion in #162.

  • Notification sounds are 48 kHz stereo, matching the usual PipeWire graph.
    Saving a clip could abort pipewire-pulse and take every application's audio
    with it. The crash is inside pipewire itself, so this does not fix it, but
    the tone no longer needs the resampling and channel mixing that was running
    in the code that failed. Reported by @ockerman0 in #163, and I would still
    like to hear whether it helps.

  • Clips whose names contain #, ?, % or + work again. The 2.8.0 rebuild
    stopped encoding them, so trimming, renaming, deleting and highlights all
    failed or hit the wrong clip.

  • A clip that will not play now says why in the log. Without it the only
    record was a screenshot, which cannot tell a missing decoder from a broken
    file.

  • Hover previews on clip cards go through the H.264 preview proxy, the same as
    the viewer does. H.265 libraries showed black cards for clips that played
    fine when opened.

Upgrading

yay -Syu vice-clipper then opening Vice is the whole procedure. The daemon
notices it is running older code and restarts itself.

Vice 2.8.0

Choose a tag to compare

@eklonofficial eklonofficial released this 18 Aug 23:50

UI Update:

The UI is rebuilt. It was 8,129 lines of vanilla JS with onclick= attributes
and globals on window; it is now React and TypeScript, and every colour in it
comes from a real Material 3 scheme.

Upgrades that actually take effect

An upgrade replaced the files on disk while the running daemon kept the old
Python in memory, and there was no path back. Three things fix that:

  • vice-app starts the daemon through systemd when the unit is loaded. It used
    to use a bare Popen, so any self-heal left the daemon outside the service
    meant to own it, and the next start found that process on the socket and
    retried forever.
  • vice start takes over from a daemon reporting a different version. Retrying
    could never clear that, and refusing left you on old code with nothing saying
    so. Matching versions stay an error.
  • The unit gives up after three tries in a minute instead of sitting in
    "activating" while it retries a permanent failure. One install had done that
    5,424 times without ever looking like it had failed.

Fixed

  • vice status and the UI reported the clips saved by the running process, not
    the size of your library. A daemon left up for a day would say 2 against a
    library of 51.
  • Game detection knows about Forza Horizon 4, Big Walk, Supermarket Simulator
    and Sandustry, thanks to @voltek-laruelle.

Upgrading

Update and open Vice. That is all:

yay -Syu vice-clipper

The daemon that is running is still the old version at that point, but the
launcher you just installed is not: it notices the mismatch and restarts the
daemon through systemd for you.

The service file also changed, and systemd holds the old copy until it is told
to re-read it. Nothing you use day to day depends on that, since the change is
a limit on how long the unit retries a permanent failure, and your session
picks it up at the next login. If you would rather not wait:

systemctl --user daemon-reload

Vice 2.7.2

Choose a tag to compare

@eklonofficial eklonofficial released this 16 Aug 00:01

Mostly about failures that were happening quietly. Four of these are cases
where Vice knew something had gone wrong and did not tell anyone.

Clips that save but will not play (#154)

If a clip came out unreadable, Vice logged that it could not parse some JSON
and threw away the actual reason ffprobe gave. That was my fault and it is
why this one has taken three rounds with the reporter without getting solved.
ffprobe's own message is kept and logged now, so one line from the log should
be enough to tell what is wrong with the file.

Three other things around the same bug:

  • The clip-saved sound played before the save finished, so a failed save
    still sounded like it worked. There is a separate failure tone now. The
    saved tone stays where it was, because flushing a long buffer takes seconds
    and waiting in silence would be worse.
  • The error message said "check vice.log" instead of what actually happened.
    It now names the file and the reason.
  • A clip that could not be read was listed in the gallery as an ordinary clip
    of 0:00 with no thumbnail, which is exactly what a broken clip looks like
    from the outside. It is marked as unreadable now, with the reason. The file
    is never touched.

Recording carrying on after the daemon is gone (#121)

The recorder runs in its own session so its helper process gets cleaned up
with it. The side effect was that killing the daemon outright, or the daemon
crashing, left gpu-screen-recorder running with nothing supervising it, and
starting Vice again put a second one next to it. I found one on my own
machine that had been holding 727 MB and the GPU encoder for ten hours.

Vice now writes down each recorder it starts and clears any survivor when it
starts up. It only ever stops one when the command line still matches what it
recorded, the daemon that owned it is gone, and the process leads its own
group, because killing something unrelated would be much worse than the
leftover.

One window (#121)

Opening Vice again gave you a second window onto the same daemon, and the two
disagreed about settings. It raises the window you already have instead.

Settings quietly changing what you record

Two of them:

  • If your saved display was not in the list gpu-screen-recorder returned,
    Settings reset the picker to Auto and the next save wrote it away for good.
    Setting the display by hand is the only way to reach a monitor that will not
    enumerate, so opening Settings once undid the only workaround there is.
    It is kept now.
  • With separate audio tracks set up and "capture desktop audio" turned off,
    the recorder keeps only microphone sources, so a game track disappears and
    you get just your voice. Settings now tells you which tracks will be
    dropped instead of letting it happen quietly. This is very likely what #137
    is.

Smaller things

  • Custom notification sounds. Point Settings at your own file for any of the
    five events. Anything missing or unreadable falls back to the built-in tone,
    so a typo cannot leave you with silence.
  • GeoGuessr Steam Edition is detected now, thanks to @editeurlaruelle-cmd.
  • The test suite runs on every push and pull request.
  • Em-dashes are gone from everything, including the package description and
    the desktop entry, and there is a test so they stay gone.

Upgrading

yay -Syu vice-clipper
systemctl --user restart vice.service

Vice 2.7.1

Choose a tag to compare

@eklonofficial eklonofficial released this 15 Aug 15:18

Recording starts on GPUs that refuse the configured codec

Vice picked its codec from ffmpeg's encoder list. All that tells you is that ffmpeg was built with NVENC support, which it always is, and nothing about whether your card will accept it. Vice then passed -k h264 to gpu-screen-recorder whether it would work or not, and recording failed outright with Could not open video codec: Function not implemented on machines where gpu-screen-recorder's own UI records fine.

Vice now reads gpu-screen-recorder --info and will not ask for a codec your GPU does not list. If the encoder still refuses, it retries on the GPU with a codec that works before it falls back to CPU encoding, so you stay on hardware encoding instead of losing frames. There is a banner when that happens telling you which codec it picked and why.

Worth knowing if you are on a wide monitor: H.264 encoding caps out at 4096 pixels wide on NVIDIA. HEVC and AV1 go to 8192. That combination, an ultrawide plus H.264, is a case where the codec is listed as supported and still will not open.

On any machine where the capability probe cannot answer, the command Vice builds is byte for byte what 2.7.0 built.

A clip directory that has gone away says so

If your clips live on a second drive or a network mount and the path stops existing, Vice detected it and then threw the message away. The check ran before the web UI started and the exception never reached the log, so vice.log stopped mid-startup with nothing after it and the error dialog had nothing useful to show.

The check now runs after the window is up, so you get a banner naming the directory and the config file to change, the daemon keeps running, and it starts recording on its own once the path comes back. Anything else that goes wrong during startup is written to the log before it stops.

Other

  • The test suite runs on Python 3.10 again, the oldest version Vice supports.
  • Tests now run automatically on pull requests.

Full Changelog: v2.7.0...v2.7.1

v2.7.0

Choose a tag to compare

@eklonofficial eklonofficial released this 15 Aug 01:26

Fixes

Share links pointed at Cloudflare's API (#143). Vice reads cloudflared's output to find your tunnel address, and matched anything ending in .trycloudflare.com. cloudflared also prints its own API endpoint, https://api.trycloudflare.com, and when that turned up first Vice took it as the tunnel. Every link you shared then went to Cloudflare's API, which answers "Method Not Allowed". Infrastructure hostnames are skipped now. If your links looked like that, they will be normal four-word addresses again after this update.

Vice stayed dark when capture would not start (#156). A recorder that failed to start took the whole window down with it: you got "Vice started but the UI server did not respond" and no way to reach Settings and pick an encoder that works, which was the one thing that would have fixed it. Vice now stays up and tells you what gpu-screen-recorder actually said, and keeps retrying in the background, so a driver that gets fixed is picked up without you doing anything. If the problem is the GPU encoder itself, Vice falls back to CPU encoding for that session so you keep clipping, and says so. It tries the GPU first every time it starts.

The service was enabled but never started (#139). The unit asked to be started by graphical-session.target, which Hyprland and other compositors that do not use uwsm never activate. So enabling it looked like it worked and then nothing happened at login. It now also starts from default.target, and waits for your session to come up before it starts recording. vice doctor used to report "File: (not installed)" for the packaged service; it looks in the system paths too now, and tells you whether the service is enabled and running.

If you have the service enabled already, run this once to pick up the change:

systemctl --user reenable vice.service

Clips were not tagged with the game on KDE and GNOME under Wayland (#152). Reading the focused window there goes through XWayland, which KWin only partly fills in, so clip tagging came up empty and clips landed in no playlist. Discord presence has had a fallback for this since #102 and clip tagging now uses the same one. xdotool, xprop and wmctrl are proper dependencies now instead of tools Vice assumed you had.

install.sh aborted on machines with a legacy NVIDIA driver (#147). It asked for nvidia-utils by name whenever nvidia-smi answered, which conflicts with branches like nvidia-580xx-utils and stopped the install. nvidia-smi answering already means the driver is installed, so it leaves it alone.

Session recordings ignored your container setting (#150). Setting the container to MKV applied to clips but not to session recordings, which were always mp4. Thanks to SlavWolf.

Vice held on to video and thumbnails it was not showing (#148). Hovering a clip attached a video player that stayed attached, scrolled-past thumbnails stayed decoded, and opening the editor once held three video elements per track for the rest of the session. Thanks to Sea-Bass-cmd.

Features

Mono microphone. Settings > Audio > Mono microphone. XLR and other single-channel interfaces present themselves as stereo with sound on one channel only, which puts your voice in one ear. This centres it. Applied when the clip is saved, so it needs mic capture on and no separate audio tracks (#146).

Hardware video decode in previews. Settings > Recording > Hardware video decode in previews, off by default. Chromium's hardware decode renders video as a black rectangle on a lot of Linux GPU and driver combinations, which is why Vice disables it. If your machine handles it, this gives you back smooth previews for high-resolution AV1 and HEVC clips. If video goes black, turn it off (#140).

More games. Half-Life, Half-Life 2, Portal, Portal 2 and Black Mesa now carry their Steam ids, and Star Citizen and Trailmakers are in the list. Thanks to LiljaGirly.

Game matching also takes the most specific name that fits rather than the first one in the list, so a Steam id is safe to add even when a longer id starts with the same digits. Nothing that matched before matches differently.

Diagnostics

gpu-screen-recorder's own messages now reach vice.log instead of only existing at debug level, so an audio device it cannot find is visible when something goes wrong. Vice also warns when turning off desktop audio strips the separate audio tracks you set up, which looked like multi-track being broken (#137).

yay -Syu vice-clipper

v2.6.0

Choose a tag to compare

@eklonofficial eklonofficial released this 01 Aug 20:59

Features

Clip whichever monitor your mouse is on (#133). Settings > Recording > Follow my mouse records the screen the pointer is sitting on instead of one you picked in advance, so a moment on your second monitor is still clippable. No capture backend can retarget a running replay buffer, so moving to another monitor restarts it and a clip taken in the first couple of seconds after switching will be short. Vice waits for two agreeing readings before switching, so dragging the mouse across a screen edge costs you nothing. Works on X11, Hyprland and Sway; KDE and GNOME on Wayland do not expose the pointer position, and the toggle says so.

8-bit or 10-bit colour (#131). Settings > Recording > Colour depth. 10-bit needs an HEVC or AV1 encoder, so if you ask for it with H.264 or Auto selected Vice records HEVC 10-bit and logs why rather than quietly giving you 8-bit. No GPU encoder does 10-bit H.264. Also available as recording.color_depth in config.toml.

Hotkeys that stand down for other apps (#130). Some games clip on the same keys Vice does. Settings > Hotkeys > Ignore hotkeys in these apps takes one match per line, and while a matching window is focused Vice leaves its keys alone. Matches are case-insensitive substrings checked against the window's process name and class, so ggst.exe or a steam_app_ id both work. The clip button in the Vice window and the CLI keep working regardless.

227 more games. The bundled game list went from 100 to 327, covering fighting games, soulslikes, sims, MMOs, current live service shooters and a long tail of indies. Every Steam app id in the batch was checked against the Steam API. Thanks to SlavWolf for the Guilty Gear Strive pull request that started it.

Fixes

Clip names with apostrophes or spaces no longer break the clip (#138). Renaming a clip to something with an apostrophe left the card completely dead until you renamed the file outside Vice and restarted. The clip name is also the filename, and the filename went three places that each needed different escaping: the click handlers in the clip grid, where an apostrophe closed the JS string and killed every button on the card; the share, video and thumbnail URLs, where a space truncated the link; and the disk. All three are fixed independently, so a clip you already renamed in your file manager works again without renaming it back.

Spaces are no longer rejected either. Names normalise instead: "Insane wallbang" saves as Insane-wallbang.mp4, "Bob's clip" as Bobs-clip.mp4. Editor export names follow the same rule. Thanks to pinexd for the report.

yay -Syu vice-clipper

v2.5.0

Choose a tag to compare

@eklonofficial eklonofficial released this 27 Jul 19:55

Fixes

Every recorder restart leaked a process and a file descriptor (#129). gpu-screen-recorder forks a privileged gsr-kms-server helper, and Vice only ever signalled GSR itself. The helper survived, kept the recorder's stderr pipe open, and the daemon leaked one process and one fd per restart until it ran out of file descriptors and quietly stopped clipping. GSR now runs in its own process group and is reaped as one, so the counts stay flat across restarts. Session recording had the same bug and got the same fix. Thanks to philderks for the measurements and the reproduction.

A dead recorder now says why, and stops retrying forever (#129). GSR's output was logged at debug only, so a fatal encoder error never showed up at the default level while the UI still claimed to be recording. The watchdog now reports the recorder's last output when it dies unexpectedly. Repeated deaths also back off, doubling the wait from the third one up to 5 minutes, instead of restarting a permanently broken recorder every few seconds.

The notification sound is adjustable (#127). Settings > Audio > Notification volume covers the clip-saved ping and the session start, stop and highlight tones. Slide it to 0 and it reads Off, which plays nothing at all rather than playing silence. Also available as notifications.sound_volume in config.toml.

The UI no longer burns a CPU core when the engine falls back to software. QtWebEngine can drop to software compositing silently, with no error and no black window, and the glass blurs and drifting background then cost a whole core on an idle window. Vice now times how fast frames actually arrive and turns the expensive effects down when they cannot keep up. Settings > Appearance > Visual effects lets you force Full or Reduced instead. On an RTX 4060 at 3440x1440 this took an idle window from 94% of a core to nothing.

yay -Syu vice-clipper

v2.4.2

Choose a tag to compare

@eklonofficial eklonofficial released this 24 Jul 20:52

Fixes

  • Clip rename field now expands to full width while you're editing it, instead of squeezing next to the action buttons.
yay -Syu vice-clipper

v2.4.1

Choose a tag to compare

@eklonofficial eklonofficial released this 24 Jul 20:37

Fixes

  • Fedora and openSUSE installs no longer fail with "Dependency dbus-1 not found." When install.sh builds gpu-screen-recorder from source (needed on distros where it isn't packaged), the dnf and zypper dependency lists were missing the dbus development package, so meson always died at the dependency check. Added dbus-devel (Fedora) and dbus-1-devel (openSUSE) to those lists.
yay -Syu vice-clipper