Skip to content

Commander-lol/bevy_capture_media

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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
  • 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_plugins(bevy_capture_media::BevyCapturePlugin)
        .add_startup_system(spawn_cameras)
        .add_system(take_screenshot);
}
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.

About

Event based image & video capture for Bevy

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages