Auto Tournament

Frame by Frame

The CS2 plugin the highlight recorder uses to record clips one frame at a time, on any GPU.

Frame by Frame is a small CS2 plugin that the highlight recorder loads into its own CS2. With it, CS2 renders a demo one frame at a time and saves every frame and the game's own sound. A slow GPU gets the same clip as a fast one; it just takes longer.

You don't install or set it up: the recorder does that, and only while its own CS2 runs.

What it does

CS2 can already save a demo as frames with startmovie, but retail CS2 hides that command. Frame by Frame does two things inside the game:

  • Unhides startmovie. It asks CS2 to unhide its developer-only commands, after checking that it's calling the right function.
  • Runs commands on exact frames. The recorder writes a list of commands, each for a given frame, and the plugin runs each one at the start of that frame. That's how a clip renders at 480 frames a game second only where it's slowed, and at 240 everywhere else.

It patches no game code and needs no Metamod or CounterStrikeSharp.

After a CS2 update

A CS2 update can move what the plugin relies on. It checks before it does anything, and when a check fails it stops that part and logs it. The game keeps running, and the recorder still records, just more slowly:

StateWhat it meansRecording
Frame actionsEverything works.Fastest.
One movieThe frame-exact commands are off for this CS2 build.Each clip is one movie at the slowed rate: slower, same result.
OffCS2 no longer unhides startmovie for the plugin.Clips are recorded from the video stream, as before Frame by Frame.

Each recorder checks after its CS2 updates and reports the state:

  • On Manage → Highlights → CS2 → Recorders, a recorder shows a warning when it isn't on frame actions, with the CS2 build that turned it off.
  • The compatibility page shows the newest check for Frame by Frame next to Ready Up's.

When that happens, update the recorder once a new Frame by Frame release is out. Update all on the Recorders page does it.

Try it by hand

To use it outside the recorder, put a release's frame-by-frame folder in game/csgo/, add Game csgo/frame-by-frame above Game csgo in gameinfo.gi, and start CS2 with -insecure. The console then shows [Frame by Frame] movie commands unhidden. The README explains the commands file.

To make a recorder skip the frame-exact commands, set AT_FBF_ACTIONS=0 on it. It then records like the One movie state.

On this page