Skip to content

wainwrightmark/bevy_capture_media

 
 

Repository files navigation

bevy_capture_media

Event based image & video capture for Bevy

Bevy tracking Crates.io docs.rs

Features

  • 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

Roadmap

  • Perspective camera support
  • Support for viewports
  • Support for resizing cameras
  • 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
        .spawn_bundle(Camera2dBundle::default())
        .id();
        
    // 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
        capture.capture_png(1357);
    }
}

fn main() {
    App::new()
        .add_plugin(DefaultPlugins)
        .add_plugin(bevy_capture_media::BevyCapturePlugin)
        .add_startup_system(spawn_cameras)
        .add_system(take_screenshot)
        .run();
}
2022-08-12.22-36-28.mp4

Contributing

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.

Asset Licenses

The git repository contains some assets for the examples. They are licensed from their original creators with the following licenses:

About

Event based image & video capture for Bevy

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%