Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Repository files navigation

Aperture

Record the screen on macOS

Requirements

  • macOS 13+
  • Xcode 15+
  • Swift 5.7+

Install

Add the following to Package.swift:

.package(url: "https://github.com/wulkano/Aperture", from: "3.0.0")

Or add the package in Xcode.

Docs

API Documentation.

Base Usage

import Foundation
import Aperture

let recorder = Aperture.Recorder()

let screens = try await Aperture.Devices.screen()

guard let screen = screens.first else {
	// No screens
	exit(1)
}

try await recorder.start(
	target: .screen,
	options: Aperture.RecordingOptions(
		destination: URL(filePath: "./screen-recording.mp4"),
		targetID: screen.id,
	)
)

try await Task.sleep(for: .seconds(5))

try await recorder.stop()

Base Options

destination

Type: URL

The filepath where the resulting recording should be written to.

targetID

Type: String

The ID of the target to record

Base Audio Options

losslessAudio

Type: Bool
Default: false

Will use the lossless ALAC codec if enabled, AAC otherwise.

recordSystemAudio

Type: Bool
Default: false

Record the system audio.

microphoneDeviceID

Type: String?

A microphone device ID to record.

Base Video Options

framesPerSecond

Type: Int
Default: 60

Number of frames per seconds.

showCursor

Type: Bool
Default: true

Show the cursor in the screen recording.

highlightClicks

Type: Bool
Default: false

Highlight cursor clicks in the screen recording.

Note: This will only apply on macOS 15+

videoCodec

Type: Aperture.VideoCodec
Default: .h264
Values: .h264, .hevc, .proRes422, .proRes4444

The video codec to be used.

Recording a screen

Use Aeprture.Devices.screen to discover the available screens

And then start recording with target: .screen

try await recorder.start(
	target: .screen,
	options: Aperture.RecordingOptions(
		destination: fileURL,
		targetID: screen.id,
		framesPerSecond: 60,
		cropRect: CGRect(x: 10, y: 10, width: 100, height: 100),
		showCursor: true,
		highlightClicks: true,
		videoCodec: .h264,
		losslessAudio: true,
		recordSystemAudio: true,
		microphoneDeviceID: microphone.id,
	)
)

Accepts all the base video and audio options along with:

cropRect

Type: CGRect?

Record only an area of the screen.

Recording a window

Use Aeprture.Devices.window to discover the available windows

And then start recording with target: .window

try await recorder.start(
	target: .window,
	options: Aperture.RecordingOptions(
		destination: fileURL,
		targetID: window.id,
		framesPerSecond: 60,
		showCursor: true,
		highlightClicks: true,
		videoCodec: .h264,
		losslessAudio: true,
		recordSystemAudio: true,
		microphoneDeviceID: microphone.id,
	)
)

Accepts all the base video and audio options

Recording only audio

Use Aeprture.Devices.audio to discover the available audio devices

And then start recording with target: .audioOnly

try await recorder.start(
	target: .audioOnly,
	options: Aperture.RecordingOptions(
		destination: fileURL,
		losslessAudio: true,
		recordSystemAudio: true,
		microphoneDeviceID: microphone.id,
	)
)

Accepts all the base audio options.

Recording an external device

Use Aeprture.Devices.iOS to discover the available external devices

And then start recording with target: .externalDevice

try await recorder.start(
	target: .externalDevice,
	options: Aperture.RecordingOptions(
		destination: fileURL,
		targetID: device.id,
		framesPerSecond: 60,
		videoCodec: .h264,
		losslessAudio: true,
		recordSystemAudio: true,
		microphoneDeviceID: microphone.id,
	)
)

Accepts the base video options except for cursor related ones, and all the audio options.

Discovering Devices

Screens

let screens = try await Aperture.Devices.screen()

Windows

let windows = try await Aperture.Devices.window(excludeDesktopWindows: true, onScreenWindowsOnly: true)
excludeDesktopWindows

Type: Bool
Default: true

onScreenWindowsOnly

Type: Bool
Default: true

Audio Devices

let devices = Aperture.Devices.audio()

External Devices

let devices = Aperture.Devices.iOS()

Dev

Run ./example.sh or ./example-ios.sh.

Related

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.