#capture #tracking #frame

nightly bevy_capture_media

Event based screenshots & recording for Bevy Engine

2 releases

0.0.2 Aug 12, 2022
0.0.1 Aug 12, 2022

#626 in Images

26 downloads per month


972 lines


Event based image & video capture for Bevy

Bevy tracking Crates.io docs.rs


  • Track any number of cameras for recording
  • Dispatch events to control the recording lifecycle
  • Keep a frame buffer of the past X frames for each recorder (Where X is any user supplied Duration)
  • Pick and choose the formats you want to record with features
  • wasm support

Supported Formats

  • PNG screenshots
  • GIF recordings
    • GIF Recordings are functional but require work


  • Perspective camera support
  • More formats
  • More control over frame smuggling
  • Screenshot watermarks
  • Improved web performance

A Simple Example

use std::time::Duration;
use bevy::prelude::*;
use bevy_capture_media::{MediaCapture, BevyCapturePlugin};

pub fn spawn_cameras(
    mut commands: Commands,
    mut capture: MediaCapture,
) {
    let camera_entity = commands
    // The tracking ID (1357) is arbitrary, but uniquely identifies this tracker
    capture.start_tracking_camera(1357, camera_entity, Duration::from_secs(5));

pub fn take_screenshot(
    input: Res<Input<KeyCode>>,
    mut capture: MediaCapture,
) {
    if input.just_released(KeyCode::RShift) {
        // If you have many cameras, consider storing their IDs
        // in a resource

fn main() {



All suggestions, issues, and pull requests are welcome. Any contributions must be licensed compatibly with this repository.

I want to add a new format!

Yes! This is great! There is a small checklist that any new format will need to meet to be included:

  • Encoding must happen in pure rust. No compiled C libraries, no bindings to other languages.
  • The format must perform well for a web target - if there is a very good reason to circumvent this, the format may still be accepted.
  • By default, the format and any dependencies must be optional and opt-in.
  • No patent-encumbered or closed formats will be accepted unless there is a free and permissive license grant for this project and any end users.


~589K SLoC