Create stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio.
157 matches across 4 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | scripts/build_macos.sh | 11 | # ── Load .env ───────────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 25 | # ── Config ──────────────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 31 | # ── Colors ──────────────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 44 | # ── Preflight ───────────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 92 | # ── Clean ───────────────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 99 | # ── Install Dependencies ───────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 104 | # ── Build Vite + Electron ──────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 109 | # ── Package, Sign, Notarize per Architecture ───────────────────────── |
| MEDIUM | scripts/build_macos.sh | 116 | # ── Package with electron-builder ───────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 136 | # ── Verify codesign on .app ─────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 141 | # ── Create DMG ──────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 167 | # ── Sign DMG ────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 172 | # ── Notarize DMG ────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 179 | # ── Staple ──────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 184 | # ── Validate ────────────────────────────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 191 | # ── Clean up unpacked dirs (keep only DMGs) ─────────────────────────── |
| MEDIUM | scripts/build_macos.sh | 196 | # ── Done ────────────────────────────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 51 | # ─── Checkout ───────────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 55 | # ─── Setup Node.js ──────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 62 | # ─── Setup Python (needed by some native deps) ──────────── |
| MEDIUM | .github/workflows/build.yml | 68 | # ─── Install Dependencies ───────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 72 | # ─── Import Code Signing Certificate ────────────────────── |
| MEDIUM | .github/workflows/build.yml | 110 | # ─── Build Vite + Electron ──────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 114 | # ─── Package with electron-builder ──────────────────────── |
| MEDIUM | .github/workflows/build.yml | 124 | # ─── Read version from package.json ─────────────────────── |
| MEDIUM | .github/workflows/build.yml | 129 | # ─── Locate the .app bundle ─────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 145 | # ─── Verify .app signature ──────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 149 | # ─── Create DMG ─────────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 177 | # ─── Sign DMG ───────────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 185 | # ─── Notarize DMG ──────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 197 | # ─── Staple ─────────────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 201 | # ─── Validate ───────────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 207 | # ─── Upload Artifact ────────────────────────────────────── |
| MEDIUM | .github/workflows/build.yml | 215 | # ─── Cleanup Keychain ───────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 18 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 20 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 36 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 38 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 87 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 89 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 105 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 107 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 139 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 141 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 176 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 184 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 312 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 314 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 409 | // ───────────────────────────────────────────────────────────────────────────── |
| MEDIUM | electron/native/wgc-capture/src/cursor-sampler.cpp | 411 | // ───────────────────────────────────────────────────────────────────────────── |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | electron/main.ts | 362 | function createEditorWindowWrapper() { |
| LOW | electron/main.ts | 405 | function createSourceSelectorWindowWrapper() { |
| LOW | electron/main.ts | 413 | function createCountdownOverlayWindowWrapper() { |
| LOW | electron/windows.ts | 172 | export function createSourceSelectorWindow(): BrowserWindow { |
| LOW | electron/windows.ts | 216 | export function createCountdownOverlayWindow(): BrowserWindow { |
| LOW | electron/globalShortcut.ts | 66 | export async function loadAndRegisterGlobalShortcut(onTrigger: () => void): Promise<void> { |
| LOW | electron/globalShortcut.ts | 77 | export function unregisterAllGlobalShortcuts(): void { |
| LOW | electron/native-bridge/cursor/recording/factory.ts | 16 | export function createCursorRecordingSession( |
| LOW | …ge/cursor/recording/macNativeCursorRecordingSession.ts | 69 | export async function requestMacCursorAccessibilityAccess() { |
| LOW | …idge/cursor/recording/windowsNativeRecordingSession.ts | 18 | function getCursorSamplerCandidates(): string[] { |
| LOW | electron/ipc/recordingStream.ts | 103 | export function registerRecordingStreamHandlers( |
| LOW | electron/ipc/handlers.ts | 1034 | function tryParseNativeHelperEvent(line: string) { |
| LOW | electron/ipc/handlers.ts | 1043 | function inspectNativeMacCaptureOutput() { |
| LOW | electron/ipc/handlers.ts | 1052 | function attachNativeMacCaptureOutputDrain(proc: ChildProcessWithoutNullStreams) { |
| LOW | electron/ipc/handlers.ts | 1185 | function setCurrentRecordingSessionState(session: RecordingSession | null) { |
| LOW | electron/ipc/handlers.ts | 1190 | function getSessionManifestPathForVideo(videoPath: string) { |
| LOW | electron/ipc/handlers.ts | 1198 | async function loadRecordedSessionForVideoPath( |
| LOW | electron/ipc/handlers.ts | 109 | function hasAllowedImportVideoExtension(filePath: string): boolean { |
| LOW | electron/ipc/handlers.ts | 132 | function parseAfinfoAudioTrackBitrates(output: string): number[] { |
| LOW | electron/ipc/handlers.ts | 142 | async function prepareSupplementalPreviewAudioTrack(videoPath: string) { |
| LOW | electron/ipc/handlers.ts | 250 | function resolveRecordingOutputPath(fileName: string): string { |
| LOW | electron/ipc/handlers.ts | 294 | async function getApprovedProjectSession( |
| LOW | electron/ipc/handlers.ts | 607 | function resolvePackagedResourcePath(...segments: string[]) { |
| LOW | electron/ipc/handlers.ts | 615 | function getNativeWindowsCaptureHelperCandidates() { |
| LOW | electron/ipc/handlers.ts | 634 | async function findNativeWindowsCaptureHelperPath() { |
| LOW | electron/ipc/handlers.ts | 651 | function getNativeMacCaptureHelperCandidates() { |
| LOW | electron/ipc/handlers.ts | 663 | async function findNativeMacCaptureHelperPath() { |
| LOW | electron/ipc/handlers.ts | 680 | function isWindowsGraphicsCaptureOsSupported() { |
| LOW | electron/ipc/handlers.ts | 689 | function normalizeNativeDeviceName(value: string) { |
| LOW | electron/ipc/handlers.ts | 723 | function queryDirectShowVideoInputRegistry() { |
| LOW | electron/ipc/handlers.ts | 741 | async function resolveDirectShowWebcamClsid(deviceName?: string) { |
| LOW | electron/ipc/handlers.ts | 826 | async function writePendingCursorTelemetry(videoPath: string) { |
| LOW | electron/ipc/handlers.ts | 834 | function shiftPendingCursorTelemetry(offsetMs: number) { |
| LOW | electron/ipc/handlers.ts | 850 | function compactPendingCursorTelemetryPauseRanges( |
| LOW | electron/ipc/handlers.ts | 894 | function completeNativeMacCursorPauseRange(endMs = Date.now()) { |
| LOW | electron/ipc/handlers.ts | 906 | function completeNativeWindowsCursorPauseRange(endMs = Date.now()) { |
| LOW | electron/ipc/handlers.ts | 918 | function waitForNativeWindowsCaptureStart(proc: ChildProcessWithoutNullStreams) { |
| LOW | electron/ipc/handlers.ts | 960 | function waitForNativeWindowsCaptureStop(proc: ChildProcessWithoutNullStreams) { |
| LOW | electron/ipc/handlers.ts | 1015 | function readNativeWindowsWebcamFormat(output: string) { |
| LOW | electron/ipc/handlers.ts | 1080 | function waitForNativeMacCaptureStart(proc: ChildProcessWithoutNullStreams) { |
| LOW | electron/ipc/handlers.ts | 1127 | function waitForNativeMacCaptureStop(proc: ChildProcessWithoutNullStreams) { |
| LOW | electron/ipc/handlers.ts | 2189 | async function storeRecordedSessionFiles(payload: StoreRecordedSessionInput) { |
| LOW | electron/ipc/handlers.ts | 2733 | function getCurrentVideoPathResult(): ProjectPathResult { |
| LOW | electron/ipc/nativeBridge.ts | 91 | export function registerNativeBridgeHandlers(context: NativeBridgeContext) { |
| LOW | src/utils/aspectRatioUtils.ts | 46 | export function getNativeAspectRatioValue( |
| LOW | src/components/video-editor/VideoPlayback.tsx | 212 | function enableAllPreviewAudioTracks(video: HTMLVideoElement) { |
| LOW | src/components/video-editor/VideoEditor.tsx | 117 | function getFileNameForDiagnostics(filePath?: string | null) { |
| LOW | src/components/video-editor/VideoEditor.tsx | 132 | function buildExportDiagnosticMessage(diagnostics: ExportDiagnostics) { |
| LOW | src/components/video-editor/VideoEditor.tsx | 149 | function buildSaveDiagnosticMessage(formatLabel: "GIF" | "Video", reason?: string) { |
| LOW | src/components/video-editor/backgroundImageUpload.ts | 6 | export function isSupportedBackgroundImageType(type: string, fileName: string): boolean { |
| LOW | src/components/video-editor/customPlaybackSpeed.ts | 14 | export function parseCustomPlaybackSpeedInput(rawValue: string): CustomPlaybackSpeedInputResult { |
| LOW | src/components/video-editor/projectPersistence.ts | 100 | function computeNormalizedWebcamLayoutPreset( |
| LOW | …omponents/video-editor/videoPlayback/cursorRenderer.ts | 277 | export function interpolateCursorPosition( |
| LOW | …omponents/video-editor/videoPlayback/cursorRenderer.ts | 331 | function findLatestInteractionSample(samples: CursorTelemetryPoint[], timeMs: number) { |
| LOW | …omponents/video-editor/videoPlayback/cursorRenderer.ts | 351 | function findLatestStableCursorType(samples: CursorTelemetryPoint[], timeMs: number) { |
| LOW | src/components/video-editor/videoPlayback/mathUtils.ts | 10 | function sampleCubicBezierDerivative(a1: number, a2: number, t: number) { |
| LOW | …mponents/video-editor/videoPlayback/zoomRegionUtils.ts | 201 | function getConnectedRegionTransition( |
| LOW | …components/video-editor/videoPlayback/zoomTransform.ts | 9 | function getMotionBlurAmountResponse(motionBlurAmount: number) { |
| LOW | …components/video-editor/videoPlayback/zoomTransform.ts | 110 | export function computeFocusFromTransform({ |
| LOW | …omponents/video-editor/timeline/zoomSuggestionUtils.ts | 37 | export function detectZoomDwellCandidates(samples: CursorTelemetryPoint[]): ZoomDwellCandidate[] { |
| 39 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | electron/native/wgc-capture/src/cursor-sampler.cpp | 1 | #include <windows.h> |
| LOW | electron/native/wgc-capture/src/webcam_capture.h | 1 | #pragma once |
| LOW | …ctron/native/wgc-capture/src/wasapi_loopback_capture.h | 1 | #pragma once |
| LOW | …ectron/native/wgc-capture/src/dshow_webcam_capture.cpp | 1 | #include "dshow_webcam_capture.h" |
| LOW | electron/native/wgc-capture/src/main.cpp | 1 | #include "audio_sample_utils.h" |
| LOW | electron/native/wgc-capture/src/wgc_session.h | 1 | #pragma once |
| LOW | src/vite-env.d.ts | 1 | /// <reference types="vite/client" /> |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | .github/workflows/build.yml | 81 | # Create a temporary keychain |