Repository Analysis

siddharthvaddem/openscreen

Create stunning demos for free. Open-source, no subscriptions, no watermarks, and free for commercial use. An alternative to Screen Studio.

4.5 Likely human-written View on GitHub
4.5
Adjusted Score
4.5
Raw Score
100%
Time Factor
2026-05-29
Last Push
37,773
Stars
TypeScript
Language
66,361
Lines of Code
318
Files
157
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 51LOW 106

Pattern Findings

157 matches across 4 categories. Click a row to expand file-level details.

Decorative Section Separators50 hits · 186 pts
SeverityFileLineSnippet
MEDIUMscripts/build_macos.sh11# ── Load .env ─────────────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh25# ── Config ────────────────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh31# ── Colors ────────────────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh44# ── Preflight ─────────────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh92# ── Clean ─────────────────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh99# ── Install Dependencies ─────────────────────────────────────────────
MEDIUMscripts/build_macos.sh104# ── Build Vite + Electron ────────────────────────────────────────────
MEDIUMscripts/build_macos.sh109# ── Package, Sign, Notarize per Architecture ─────────────────────────
MEDIUMscripts/build_macos.sh116 # ── Package with electron-builder ─────────────────────────────
MEDIUMscripts/build_macos.sh136 # ── Verify codesign on .app ───────────────────────────────────
MEDIUMscripts/build_macos.sh141 # ── Create DMG ────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh167 # ── Sign DMG ──────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh172 # ── Notarize DMG ──────────────────────────────────────────────
MEDIUMscripts/build_macos.sh179 # ── Staple ────────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh184 # ── Validate ──────────────────────────────────────────────────
MEDIUMscripts/build_macos.sh191# ── Clean up unpacked dirs (keep only DMGs) ───────────────────────────
MEDIUMscripts/build_macos.sh196# ── Done ──────────────────────────────────────────────────────────────
MEDIUM.github/workflows/build.yml51 # ─── Checkout ─────────────────────────────────────────────
MEDIUM.github/workflows/build.yml55 # ─── Setup Node.js ────────────────────────────────────────
MEDIUM.github/workflows/build.yml62 # ─── Setup Python (needed by some native deps) ────────────
MEDIUM.github/workflows/build.yml68 # ─── Install Dependencies ─────────────────────────────────
MEDIUM.github/workflows/build.yml72 # ─── Import Code Signing Certificate ──────────────────────
MEDIUM.github/workflows/build.yml110 # ─── Build Vite + Electron ────────────────────────────────
MEDIUM.github/workflows/build.yml114 # ─── Package with electron-builder ────────────────────────
MEDIUM.github/workflows/build.yml124 # ─── Read version from package.json ───────────────────────
MEDIUM.github/workflows/build.yml129 # ─── Locate the .app bundle ───────────────────────────────
MEDIUM.github/workflows/build.yml145 # ─── Verify .app signature ────────────────────────────────
MEDIUM.github/workflows/build.yml149 # ─── Create DMG ───────────────────────────────────────────
MEDIUM.github/workflows/build.yml177 # ─── Sign DMG ─────────────────────────────────────────────
MEDIUM.github/workflows/build.yml185 # ─── Notarize DMG ────────────────────────────────────────
MEDIUM.github/workflows/build.yml197 # ─── Staple ───────────────────────────────────────────────
MEDIUM.github/workflows/build.yml201 # ─── Validate ─────────────────────────────────────────────
MEDIUM.github/workflows/build.yml207 # ─── Upload Artifact ──────────────────────────────────────
MEDIUM.github/workflows/build.yml215 # ─── Cleanup Keychain ─────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp18// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp20// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp36// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp38// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp87// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp89// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp105// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp107// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp139// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp141// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp176// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp184// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp312// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp314// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp409// ─────────────────────────────────────────────────────────────────────────────
MEDIUMelectron/native/wgc-capture/src/cursor-sampler.cpp411// ─────────────────────────────────────────────────────────────────────────────
Hyper-Verbose Identifiers99 hits · 100 pts
SeverityFileLineSnippet
LOWelectron/main.ts362function createEditorWindowWrapper() {
LOWelectron/main.ts405function createSourceSelectorWindowWrapper() {
LOWelectron/main.ts413function createCountdownOverlayWindowWrapper() {
LOWelectron/windows.ts172export function createSourceSelectorWindow(): BrowserWindow {
LOWelectron/windows.ts216export function createCountdownOverlayWindow(): BrowserWindow {
LOWelectron/globalShortcut.ts66export async function loadAndRegisterGlobalShortcut(onTrigger: () => void): Promise<void> {
LOWelectron/globalShortcut.ts77export function unregisterAllGlobalShortcuts(): void {
LOWelectron/native-bridge/cursor/recording/factory.ts16export function createCursorRecordingSession(
LOW…ge/cursor/recording/macNativeCursorRecordingSession.ts69export async function requestMacCursorAccessibilityAccess() {
LOW…idge/cursor/recording/windowsNativeRecordingSession.ts18function getCursorSamplerCandidates(): string[] {
LOWelectron/ipc/recordingStream.ts103export function registerRecordingStreamHandlers(
LOWelectron/ipc/handlers.ts1034function tryParseNativeHelperEvent(line: string) {
LOWelectron/ipc/handlers.ts1043function inspectNativeMacCaptureOutput() {
LOWelectron/ipc/handlers.ts1052function attachNativeMacCaptureOutputDrain(proc: ChildProcessWithoutNullStreams) {
LOWelectron/ipc/handlers.ts1185function setCurrentRecordingSessionState(session: RecordingSession | null) {
LOWelectron/ipc/handlers.ts1190function getSessionManifestPathForVideo(videoPath: string) {
LOWelectron/ipc/handlers.ts1198async function loadRecordedSessionForVideoPath(
LOWelectron/ipc/handlers.ts109function hasAllowedImportVideoExtension(filePath: string): boolean {
LOWelectron/ipc/handlers.ts132function parseAfinfoAudioTrackBitrates(output: string): number[] {
LOWelectron/ipc/handlers.ts142async function prepareSupplementalPreviewAudioTrack(videoPath: string) {
LOWelectron/ipc/handlers.ts250function resolveRecordingOutputPath(fileName: string): string {
LOWelectron/ipc/handlers.ts294async function getApprovedProjectSession(
LOWelectron/ipc/handlers.ts607function resolvePackagedResourcePath(...segments: string[]) {
LOWelectron/ipc/handlers.ts615function getNativeWindowsCaptureHelperCandidates() {
LOWelectron/ipc/handlers.ts634async function findNativeWindowsCaptureHelperPath() {
LOWelectron/ipc/handlers.ts651function getNativeMacCaptureHelperCandidates() {
LOWelectron/ipc/handlers.ts663async function findNativeMacCaptureHelperPath() {
LOWelectron/ipc/handlers.ts680function isWindowsGraphicsCaptureOsSupported() {
LOWelectron/ipc/handlers.ts689function normalizeNativeDeviceName(value: string) {
LOWelectron/ipc/handlers.ts723function queryDirectShowVideoInputRegistry() {
LOWelectron/ipc/handlers.ts741async function resolveDirectShowWebcamClsid(deviceName?: string) {
LOWelectron/ipc/handlers.ts826async function writePendingCursorTelemetry(videoPath: string) {
LOWelectron/ipc/handlers.ts834function shiftPendingCursorTelemetry(offsetMs: number) {
LOWelectron/ipc/handlers.ts850function compactPendingCursorTelemetryPauseRanges(
LOWelectron/ipc/handlers.ts894function completeNativeMacCursorPauseRange(endMs = Date.now()) {
LOWelectron/ipc/handlers.ts906function completeNativeWindowsCursorPauseRange(endMs = Date.now()) {
LOWelectron/ipc/handlers.ts918function waitForNativeWindowsCaptureStart(proc: ChildProcessWithoutNullStreams) {
LOWelectron/ipc/handlers.ts960function waitForNativeWindowsCaptureStop(proc: ChildProcessWithoutNullStreams) {
LOWelectron/ipc/handlers.ts1015function readNativeWindowsWebcamFormat(output: string) {
LOWelectron/ipc/handlers.ts1080function waitForNativeMacCaptureStart(proc: ChildProcessWithoutNullStreams) {
LOWelectron/ipc/handlers.ts1127function waitForNativeMacCaptureStop(proc: ChildProcessWithoutNullStreams) {
LOWelectron/ipc/handlers.ts2189 async function storeRecordedSessionFiles(payload: StoreRecordedSessionInput) {
LOWelectron/ipc/handlers.ts2733 function getCurrentVideoPathResult(): ProjectPathResult {
LOWelectron/ipc/nativeBridge.ts91export function registerNativeBridgeHandlers(context: NativeBridgeContext) {
LOWsrc/utils/aspectRatioUtils.ts46export function getNativeAspectRatioValue(
LOWsrc/components/video-editor/VideoPlayback.tsx212function enableAllPreviewAudioTracks(video: HTMLVideoElement) {
LOWsrc/components/video-editor/VideoEditor.tsx117function getFileNameForDiagnostics(filePath?: string | null) {
LOWsrc/components/video-editor/VideoEditor.tsx132function buildExportDiagnosticMessage(diagnostics: ExportDiagnostics) {
LOWsrc/components/video-editor/VideoEditor.tsx149function buildSaveDiagnosticMessage(formatLabel: "GIF" | "Video", reason?: string) {
LOWsrc/components/video-editor/backgroundImageUpload.ts6export function isSupportedBackgroundImageType(type: string, fileName: string): boolean {
LOWsrc/components/video-editor/customPlaybackSpeed.ts14export function parseCustomPlaybackSpeedInput(rawValue: string): CustomPlaybackSpeedInputResult {
LOWsrc/components/video-editor/projectPersistence.ts100function computeNormalizedWebcamLayoutPreset(
LOW…omponents/video-editor/videoPlayback/cursorRenderer.ts277export function interpolateCursorPosition(
LOW…omponents/video-editor/videoPlayback/cursorRenderer.ts331function findLatestInteractionSample(samples: CursorTelemetryPoint[], timeMs: number) {
LOW…omponents/video-editor/videoPlayback/cursorRenderer.ts351function findLatestStableCursorType(samples: CursorTelemetryPoint[], timeMs: number) {
LOWsrc/components/video-editor/videoPlayback/mathUtils.ts10function sampleCubicBezierDerivative(a1: number, a2: number, t: number) {
LOW…mponents/video-editor/videoPlayback/zoomRegionUtils.ts201function getConnectedRegionTransition(
LOW…components/video-editor/videoPlayback/zoomTransform.ts9function getMotionBlurAmountResponse(motionBlurAmount: number) {
LOW…components/video-editor/videoPlayback/zoomTransform.ts110export function computeFocusFromTransform({
LOW…omponents/video-editor/timeline/zoomSuggestionUtils.ts37export function detectZoomDwellCandidates(samples: CursorTelemetryPoint[]): ZoomDwellCandidate[] {
39 more matches not shown…
Over-Commented Block7 hits · 7 pts
SeverityFileLineSnippet
LOWelectron/native/wgc-capture/src/cursor-sampler.cpp1#include <windows.h>
LOWelectron/native/wgc-capture/src/webcam_capture.h1#pragma once
LOW…ctron/native/wgc-capture/src/wasapi_loopback_capture.h1#pragma once
LOW…ectron/native/wgc-capture/src/dshow_webcam_capture.cpp1#include "dshow_webcam_capture.h"
LOWelectron/native/wgc-capture/src/main.cpp1#include "audio_sample_utils.h"
LOWelectron/native/wgc-capture/src/wgc_session.h1#pragma once
LOWsrc/vite-env.d.ts1/// <reference types="vite/client" />
Self-Referential Comments1 hit · 4 pts
SeverityFileLineSnippet
MEDIUM.github/workflows/build.yml81 # Create a temporary keychain