Skip to content

DejaVideo allows you to record your screen continuously and to export the last minute at any moment.

License

Notifications You must be signed in to change notification settings

jasperhartong/DejaVideo

Repository files navigation

DejaVideo

DejaVideo Logo
Jump back into the past, anytime.
A small, continuous screen recording utility for Mac
Built with ❤︎ by Jasper Hartong

Emit/Time Shield

About

menu_bar_2 011d1b4b

DejaVideo lives in your menu bar. It allows you to record your screen continuously and to export the last minute at any moment.

  • With a minimum impact on your Mac, you can let it record always.
  • Supports both dark and light mode
  • 100% offline (No phoning home, no analytics, no update mechanisms)
  • Opens the screen recording in QuickTime upong exporting. Hit ⌘ T and trim it to your needs.
  • Has a fancy loading animation to indicate which screen is being recorded

DejaVideo - Continuous screen recorder for Mac, jump back anytime. | Product Hunt Embed

Releases

  • v1.0.2 – The initial release of DejaVideo plus some additional minor fixes.
  • v1.1.0 – [Unreleased] Adds additional settings for scaling, fps and interval to record. See PR #1

⚠️ Disclaimer

This code was my first stab at using Swift. It's source is now public, because.. why not?

🔨 Development Tips

Summary of the main logic

The ContinuousRecording state-machine aggregates a list of ScaledRecordingFragments (storing the current screen image and mousePoint position), based on the firing of a RepeatingBackgroundTimer. When exporting to video, the VidWriter merges these fragments using CVPixelBuffer.

Running the project

Open up the .xcodeproj, run and DejaVideo should appear in your menu bar.

Packing the release in a dmg

Test starting at login

In order to let this work during development, there should be only 1 app found for the bundle identifier of the LauncherApplication.

To check whether MacOs finds ONLY the correct build (which should be /Applications):

import Cocoa

let bundleId = "deblonde.LauncherApplication"
let paths = LSCopyApplicationURLsForBundleIdentifier(bundleId as CFString, nil)
print("Available service instances by bundle id: \(String(describing: paths))")

To remove builds:

  • make sure to clean the project (⌘ + Shift + alt + K).
  • make sure to clean the archives (⌘ + Shift + 6)

Also, it could help to bump the build number in the General options of the project

Launchctl

In the end deblonde.LauncherApplication should be registered in launchctl, you can check or interact with it:

$launchctl list
$launchctl remove deblonde.LauncherApplication

About

DejaVideo allows you to record your screen continuously and to export the last minute at any moment.

Topics

Resources

License

Stars

Watchers

Forks

Languages