Skip to main content
Roblox’s own Record Video button does nothing on the Android client, and nothing in Cordial can change that. Cordial can record for it, because it owns the window the engine draws into: it reads each finished frame out of its own swapchain and hands it to ffmpeg. It needs ffmpeg on your PATH. The Flatpak runtime ships one, so the Flatpak has it; on other installs it is the ffmpeg package.

Turn it on

1

Open Settings and switch on Record gameplay

The switch is in the same group as Controllers. It applies the next time Cordial starts, not to a game already running.
2

Start the game and play

Recording begins with the first frame the game draws and ends when you close Cordial. The file is finished when the client exits.
3

Find the file

Files are named Cordial-2026-10-15_18-07-11.mp4.
  • Not in the Flatpak: ~/Videos/Cordial/ (or your XDG_VIDEOS_DIR).
  • In the Flatpak: ~/.var/app/io.github.luohoa97.Cordial/data/cordial/profiles/<profile>/recordings/. The Flatpak has no access to ~/Videos, so it records into its own data instead.
Set CORDIAL_RECORD_DIR to choose another folder.

What you get

MP4 with H.264 where ffmpeg has libx264. Where it does not, which is the Flatpak runtime’s ffmpeg, WebM with VP9. The container follows what the encoder can fill; it never writes a WebM called .mp4. The frame rate is 30 unless you set CORDIAL_RECORD_FPS (1 to 120). Playback runs at the speed you played, not faster: the engine draws one frame a second when nothing is moving, and the recorder fills the gaps with the last frame. If you resize the window while recording, the file ends and a new one starts beside it (Cordial-…-2.mp4), because a video cannot change size part way. An MP4 is written in fragments, so one cut off by a crash or a full disk still plays up to the cut.

Sound

Off. Record sound too records everything the default output is playing, every program’s, not only the game. A call on another desktop would be in the file, which is why it is separate and off. The same thing from the environment is CORDIAL_RECORD_AUDIO=desktop. The game’s own sound alone is not available yet.

What it costs

Each captured frame holds the engine’s present for a few milliseconds while it is copied: 2.5 to 3.4 ms at 1280x754 on one Intel GPU, measured at 30 and 60 captured frames a second. If the encoder cannot keep up, frames are dropped rather than slowing the game; the summary line at the end of the log counts them.
The Settings switch records a whole session. To start and stop by hand, run the client with CORDIAL_DEV_CONTROL=1 and use the development control surface (record start, record stop, record status, or cordial_record in the MCP). There is no hotkey and no button in the game yet.The client log says what was chosen ([record] recording to … (libx264 at 30 fps, no audio)) and, at the end, how many frames were written and dropped.
Why it is built this way: ADR-059.