Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
0727b61
feat: add restart recording functionality in LaunchWindow and useScre…
prayaslashkari Mar 15, 2026
119c3ac
feat: implement async restart recording functionality to ensure prope…
prayaslashkari Mar 17, 2026
9a5d94a
refactor: update VideoEditor layout and add config.json for setup and…
prayaslashkari Mar 17, 2026
2fb5b3b
Add webcam recording overlay support
marcusschiesser Mar 17, 2026
e4263d4
fix: sync webcam preview playback speed
marcusschiesser Mar 17, 2026
f1a453b
fix: finalize externally stopped recordings
marcusschiesser Mar 17, 2026
776ed95
fix: always tear down webcam export queues
marcusschiesser Mar 17, 2026
942a7e5
fix: allow webcam toggle while recording
marcusschiesser Mar 17, 2026
c3e4c86
fix: reset webcam state on access denial
marcusschiesser Mar 17, 2026
1591f7d
fix: restore passing checks for webcam overlay changes
marcusschiesser Mar 17, 2026
3d2d0a4
fix: always release exporter video frames
marcusschiesser Mar 17, 2026
e2147be
feat: enhance restart recording functionality to prevent concurrent r…
prayaslashkari Mar 17, 2026
0935dac
Merge pull request #228 from prayaslashkari/feature/resizeable-video-…
siddharthvaddem Mar 17, 2026
2669b38
Merge pull request #216 from prayaslashkari/feature/restart-recording
siddharthvaddem Mar 17, 2026
0a0dd08
Merge branch 'codex/pr-229' into main
siddharthvaddem Mar 18, 2026
b33ec5e
fix: restore webcam sessions and stop export deadlocks
siddharthvaddem Mar 18, 2026
0f12328
Merge remote-tracking branch 'origin/main' into main
siddharthvaddem Mar 18, 2026
4b8c95f
bring back show folder
siddharthvaddem Mar 18, 2026
7a6efc5
Merge pull request #232 from siddharthvaddem/codex/saved-to-location
siddharthvaddem Mar 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions electron-builder.json5
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,13 @@
],
"icon": "icons/icons/mac/icon.icns",
"artifactName": "${productName}-Mac-${arch}-${version}-Installer.${ext}",
"extendInfo": {
"NSAudioCaptureUsageDescription": "OpenScreen needs audio capture permission to record system audio.",
"NSMicrophoneUsageDescription": "OpenScreen needs microphone access to record voice audio.",
"NSCameraUseContinuityCameraDeviceType": true,
"com.apple.security.device.audio-input": true
}
"extendInfo": {
"NSAudioCaptureUsageDescription": "OpenScreen needs audio capture permission to record system audio.",
"NSMicrophoneUsageDescription": "OpenScreen needs microphone access to record voice audio.",
"NSCameraUsageDescription": "OpenScreen needs camera access to record webcam video.",
"NSCameraUseContinuityCameraDeviceType": true,
"com.apple.security.device.audio-input": true
}
},
"linux": {
"target": [
Expand Down
40 changes: 38 additions & 2 deletions electron/electron-env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,38 @@ interface Window {
openSourceSelector: () => Promise<void>;
selectSource: (source: ProcessedDesktopSource) => Promise<ProcessedDesktopSource | null>;
getSelectedSource: () => Promise<ProcessedDesktopSource | null>;
requestCameraAccess: () => Promise<{
success: boolean;
granted: boolean;
status: string;
error?: string;
}>;
getAssetBasePath: () => Promise<string | null>;
storeRecordedVideo: (
videoData: ArrayBuffer,
fileName: string,
) => Promise<{ success: boolean; path?: string; message?: string }>;
getRecordedVideoPath: () => Promise<{ success: boolean; path?: string; message?: string }>;
) => Promise<{
success: boolean;
path?: string;
session?: import("../src/lib/recordingSession").RecordingSession;
message?: string;
error?: string;
}>;
storeRecordedSession: (
payload: import("../src/lib/recordingSession").StoreRecordedSessionInput,
) => Promise<{
success: boolean;
path?: string;
session?: import("../src/lib/recordingSession").RecordingSession;
message?: string;
error?: string;
}>;
getRecordedVideoPath: () => Promise<{
success: boolean;
path?: string;
message?: string;
error?: string;
}>;
setRecordingState: (recording: boolean) => Promise<void>;
getCursorTelemetry: (videoPath?: string) => Promise<{
success: boolean;
Expand All @@ -50,7 +76,17 @@ interface Window {
) => Promise<{ success: boolean; path?: string; message?: string; canceled?: boolean }>;
openVideoFilePicker: () => Promise<{ success: boolean; path?: string; canceled?: boolean }>;
setCurrentVideoPath: (path: string) => Promise<{ success: boolean }>;
setCurrentRecordingSession: (
session: import("../src/lib/recordingSession").RecordingSession | null,
) => Promise<{
success: boolean;
session?: import("../src/lib/recordingSession").RecordingSession;
}>;
getCurrentVideoPath: () => Promise<{ success: boolean; path?: string }>;
getCurrentRecordingSession: () => Promise<{
success: boolean;
session?: import("../src/lib/recordingSession").RecordingSession;
}>;
readBinaryFile: (filePath: string) => Promise<{
success: boolean;
data?: ArrayBuffer;
Expand Down
Loading
Loading