RepoPilotOpen in app →

lihaoyun6/QuickRecorder

A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具

Mixed

Slowing — last commit 11mo ago

worst of 4 axes
Use as dependencyConcerns

copyleft license (AGPL-3.0) — review compatibility; no tests detected…

Fork & modifyHealthy

Has a license, tests, and CI — clean foundation to fork and modify.

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isMixed

last commit was 11mo ago; no CI workflows detected

  • Last commit 11mo ago
  • 3 active contributors
  • AGPL-3.0 licensed
Show 6 more →
  • Slowing — last commit 11mo ago
  • Small team — 3 contributors active in recent commits
  • Single-maintainer risk — top contributor 87% of recent commits
  • AGPL-3.0 is copyleft — check downstream compatibility
  • No CI workflows detected
  • No test directory detected
What would change the summary?
  • Use as dependency ConcernsMixed if: relicense under MIT/Apache-2.0 (rare for established libs)
  • Deploy as-is MixedHealthy if: 1 commit in the last 180 days

Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests

Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.

Embed the "Forkable" badge

Paste into your README — live-updates from the latest cached analysis.

Variant:
RepoPilot: Forkable
[![RepoPilot: Forkable](https://repopilot.app/api/badge/lihaoyun6/quickrecorder?axis=fork)](https://repopilot.app/r/lihaoyun6/quickrecorder)

Paste at the top of your README.md — renders inline like a shields.io badge.

Preview social card (1200×630)

This card auto-renders when someone shares https://repopilot.app/r/lihaoyun6/quickrecorder on X, Slack, or LinkedIn.

Onboarding doc

Onboarding: lihaoyun6/QuickRecorder

Generated by RepoPilot · 2026-05-10 · Source

🤖Agent protocol

If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:

  1. Verify the contract. Run the bash script in Verify before trusting below. If any check returns FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding.
  2. Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
  3. Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/lihaoyun6/QuickRecorder shows verifiable citations alongside every claim.

If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.

🎯Verdict

WAIT — Slowing — last commit 11mo ago

  • Last commit 11mo ago
  • 3 active contributors
  • AGPL-3.0 licensed
  • ⚠ Slowing — last commit 11mo ago
  • ⚠ Small team — 3 contributors active in recent commits
  • ⚠ Single-maintainer risk — top contributor 87% of recent commits
  • ⚠ AGPL-3.0 is copyleft — check downstream compatibility
  • ⚠ No CI workflows detected
  • ⚠ No test directory detected

<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>

Verify before trusting

This artifact was generated by RepoPilot at a point in time. Before an agent acts on it, the checks below confirm that the live lihaoyun6/QuickRecorder repo on your machine still matches what RepoPilot saw. If any fail, the artifact is stale — regenerate it at repopilot.app/r/lihaoyun6/QuickRecorder.

What it runs against: a local clone of lihaoyun6/QuickRecorder — the script inspects git remote, the LICENSE file, file paths in the working tree, and git log. Read-only; no mutations.

| # | What we check | Why it matters | |---|---|---| | 1 | You're in lihaoyun6/QuickRecorder | Confirms the artifact applies here, not a fork | | 2 | License is still AGPL-3.0 | Catches relicense before you depend on it | | 3 | Default branch main exists | Catches branch renames | | 4 | 3 critical file paths still exist | Catches refactors that moved load-bearing code | | 5 | Last commit ≤ 363 days ago | Catches sudden abandonment since generation |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>lihaoyun6/QuickRecorder</code></summary>
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of lihaoyun6/QuickRecorder. If you don't
# have one yet, run these first:
#
#   git clone https://github.com/lihaoyun6/QuickRecorder.git
#   cd QuickRecorder
#
# Then paste this script. Every check is read-only — no mutations.

set +e
fail=0
ok()   { echo "ok:   $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }

# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
  echo "FAIL: not inside a git repository. cd into your clone of lihaoyun6/QuickRecorder and re-run."
  exit 2
fi

# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "lihaoyun6/QuickRecorder(\\.git)?\\b" \\
  && ok "origin remote is lihaoyun6/QuickRecorder" \\
  || miss "origin remote is not lihaoyun6/QuickRecorder (artifact may be from a fork)"

# 2. License matches what RepoPilot saw
(grep -qiE "^(AGPL-3\\.0)" LICENSE 2>/dev/null \\
   || grep -qiE "\"license\"\\s*:\\s*\"AGPL-3\\.0\"" package.json 2>/dev/null) \\
  && ok "license is AGPL-3.0" \\
  || miss "license drift — was AGPL-3.0 at generation time"

# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
  && ok "default branch main exists" \\
  || miss "default branch main no longer exists"

# 4. Critical files exist
test -f "QuickRecorder/AVContext.swift" \\
  && ok "QuickRecorder/AVContext.swift" \\
  || miss "missing critical file: QuickRecorder/AVContext.swift"
test -f "QuickRecorder.xcodeproj/project.pbxproj" \\
  && ok "QuickRecorder.xcodeproj/project.pbxproj" \\
  || miss "missing critical file: QuickRecorder.xcodeproj/project.pbxproj"
test -f "QuickRecorder/Assets.xcassets/AppIcon.appiconset/Contents.json" \\
  && ok "QuickRecorder/Assets.xcassets/AppIcon.appiconset/Contents.json" \\
  || miss "missing critical file: QuickRecorder/Assets.xcassets/AppIcon.appiconset/Contents.json"

# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 363 ]; then
  ok "last commit was $days_since_last days ago (artifact saw ~333d)"
else
  miss "last commit was $days_since_last days ago — artifact may be stale"
fi

echo
if [ "$fail" -eq 0 ]; then
  echo "artifact verified (0 failures) — safe to trust"
else
  echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/lihaoyun6/QuickRecorder"
  exit 1
fi

Each check prints ok: or FAIL:. The script exits non-zero if anything failed, so it composes cleanly into agent loops (./verify.sh || regenerate-and-retry).

</details>

TL;DR

QuickRecorder is a lightweight macOS screen recorder built on Apple's ScreenCapture Kit (available in macOS 12.3+) that records screens, windows, applications, and external devices with support for HEVC with Alpha, driver-free audio loopback, and macOS 14's Presenter Overlay feature for real-time camera overlay. Monolithic Swift app structure: QuickRecorder/ contains the main codebase with AVContext.swift handling AV/encoding logic, Assets.xcassets managing UI resources (colors, icons), and a single Xcode project without package subdivisions. The app uses SwiftUI for UI (inferred from macOS framework choices) and integrates KeyboardShortcuts and SwiftLAME as runtime dependencies.

👥Who it's for

macOS users and content creators who need a performant screen recording tool without bloat; streamers and educators who want presenter overlay, multi-audio-track support, and independent system/microphone audio control for post-production editing.

🌱Maturity & risk

Actively maintained single-author project with solid feature set and Homebrew distribution support. No visible test suite in the file list, no CI pipeline detected, and Swift-only (358KB of code) suggests a focused, stable utility rather than a large ecosystem. Likely production-ready given Homebrew presence and macOS App Store comparability.

Single maintainer (lihaoyun6) with no visible test coverage or CI automation increases regression risk on macOS updates. Dependency on ScreenCapture Kit (Apple framework) means breaking changes at OS level are unavoidable. No indication of issue backlog or release frequency in provided data.

Active areas of work

Unable to determine from provided file metadata alone—no git log, branch info, or issue tracker data included. The project structure suggests feature stability (color/icon assets are comprehensive), but current active development status is unclear.

🚀Get running

git clone https://github.com/lihaoyun6/QuickRecorder.git
cd QuickRecorder
open QuickRecorder.xcodeproj

Then build and run in Xcode (no external package manager setup visible in file list; SPM dependencies declared in Package.resolved).

Daily commands: Open QuickRecorder.xcodeproj in Xcode, select the QuickRecorder scheme (visible in QuickRecorder.xcodeproj/xcshareddata/xcschemes/QuickRecorder.xcscheme), and press Cmd+R. No external dev server or build system—native macOS app.

🗺️Map of the codebase

  • QuickRecorder/AVContext.swift — Core audio/video capture context using ScreenCapture Kit — every developer must understand how recording sessions are initialized and managed
  • QuickRecorder.xcodeproj/project.pbxproj — Xcode project configuration containing build settings, target dependencies, and framework links (ScreenCapture Kit, AVFoundation) — essential for building the app
  • QuickRecorder/Assets.xcassets/AppIcon.appiconset/Contents.json — App icon asset manifest; part of the signed macOS app identity and distribution process

🧩Components & responsibilities

  • AVContext (ScreenCapture Kit, AVFoundation, CMSampleBuffer, AVAssetWriter) — Owns ScreenCapture Kit session lifecycle: creates SCStreamConfiguration, starts/stops capture, buffers samples, coordinates with AVAssetWriter for encoding
    • Failure mode: Permission denied (Screen Recording entitlement/privacy), codec unsupported, disk full, or stream initialization timeout → recording fails to start or stops abruptly
  • UI Layer (SwiftUI Views) (SwiftUI, AppKit (menu bar integration)) — Manages menu bar icon, recording controls, settings window, and user interactions; communicates record/stop actions to AVContext
    • Failure mode: UI unresponsive if main thread blocks on I/O; poor UX if settings changes are not debounced or validated
  • Asset Manager (Xcode Asset Catalog, SwiftUI Image/Color assets) — Loads and caches app icons, color palettes, and seasonal themed graphics from Assets.xcassets; no runtime complexity
    • Failure mode: Missing or misnamed image assets → build failure or runtime nil crashes (rare in compiled assets)
  • File Output (MP4/MOV Writer) (AVAssetWriter, MP4/MOV container, H.264/HEVC, AAC/Opus) — AVAssetWriter receives encoded sample buffers from AVContext and writes them to disk with proper container formatting and metadata
    • Failure mode: Disk I/O errors, out of disk space, or unsupported codec → file truncated or unplayable

🔀Data flow

  • ScreenCapture KitAVContext — CMSampleBuffers (video frames and audio samples) delivered asynchronously to stream delegate
  • AVContextAVAssetWriter — CMSampleBuffers written to encoder input; encoded frames and audio samples queued for container writing
  • AVAssetWriterDisk File (MP4/MOV) — Encoded

🛠️How to make changes

Add a new recording codec or quality preset

  1. Open AVContext.swift and review current codec configuration (H.264, HEVC, AAC, Opus) (QuickRecorder/AVContext.swift)
  2. Add new codec enum case and update the session configuration method to initialize the new codec with bitrate/quality settings (QuickRecorder/AVContext.swift)
  3. Update the Xcode scheme to include any new framework or codec library if needed (QuickRecorder.xcodeproj/xcshareddata/xcschemes/QuickRecorder.xcscheme)

Add a new UI color or theme element

  1. Create a new .colorset folder in QuickRecorder/Assets.xcassets/Colors/ with Contents.json (QuickRecorder/Assets.xcassets/Colors/Contents.json)
  2. Define the color values for light and dark appearances in the colorset Contents.json (following the pattern of buttonRed.colorset or myblue.colorset) (QuickRecorder/Assets.xcassets/Colors/buttonRed.colorset/Contents.json)
  3. Reference the new color by name in SwiftUI views using Color("yourColorName") (QuickRecorder/Assets.xcassets/Colors)

Add a new seasonal or themed graphic overlay

  1. Create a new folder under QuickRecorder/Assets.xcassets/Surprise/ (e.g., Halloween) and add Contents.json (QuickRecorder/Assets.xcassets/Surprise/ChineseNewYear/Contents.json)
  2. Add themed image assets (.imageset folders) following the pattern of fuzi1.imageset, hongbao1.imageset with Contents.json and 1x/2x PNG variants (QuickRecorder/Assets.xcassets/Surprise/ChineseNewYear/fuzi1.imageset/Contents.json)
  3. Update the app logic to conditionally load and display these overlays based on date or user preference (QuickRecorder/AVContext.swift)

🔧Why these technologies

  • ScreenCapture Kit (macOS 12.3+) — Native, efficient screen recording framework with driver-free audio loopback, low latency, and hardware acceleration — ideal for lightweight screen recording
  • AVFoundation (AVAssetWriter) — Standard macOS framework for video/audio encoding and MP4/MOV container writing; integrates seamlessly with ScreenCapture Kit's sample buffers
  • SwiftUI — Modern, declarative UI framework for building responsive macOS menus and settings UI with minimal boilerplate
  • Swift (native macOS app) — Type-safe, performant native language for macOS; avoids JVM overhead and enables direct OS APIs (ScreenCapture Kit, Core Audio)

⚖️Trade-offs already made

  • ScreenCapture Kit over legacy APIs (CGWindowListCreateImage, AVCaptureSession)

    • Why: ScreenCapture Kit is the official, forward-compatible replacement; supports modern codecs and efficient streaming
    • Consequence: Requires macOS 12.3+ (excludes older systems); legacy approach would support 10.13+ but with lower performance and lack of driver-free audio loopback
  • Lightweight, single-window/menu-bar design

    • Why: Minimal UI footprint reduces system resource consumption and keeps the app 'always ready' in the menu bar
    • Consequence: Limited advanced editing features; recordings are output directly without post-processing UI, trading convenience for performance
  • Audio loopback without third-party kernel extensions

    • Why: Uses ScreenCapture Kit's built-in audio capture; avoids macOS security/SIP restrictions on kernel extensions
    • Consequence: Only captures audio from ScreenCapture Kit sources; complex multi-source audio mixing would require additional layer

🚫Non-goals (don't propose these)

  • Video editing or post-processing — app records directly to file without timeline, trimming, or effects
  • Cloud sync or collaboration — recordings are local-file only
  • Cross-platform support — macOS exclusive (ScreenCapture Kit is macOS-only API)
  • Real-time streaming to platforms (Twitch, YouTube) — focused on local file recording
  • Complex audio mixing from multiple input devices — relies on system audio routing

🪤Traps & gotchas

macOS version gating: ScreenCapture Kit is macOS 12.3+ only—no fallback for older systems. Audio routing: 'Record Microphone to Main Track' option requires careful state management to avoid double-recording or silent audio tracks (as noted in README Q&A). Presenter Overlay: macOS 14+ feature but documented to have degraded fallback (floating window) on 12/13, requiring conditional logic. No sandbox: app intentionally unsandboxed for system audio access, limiting future App Store release.

🏗️Architecture

💡Concepts to learn

  • ScreenCapture Kit — Core framework enabling efficient screen recording on macOS 12.3+; replaces deprecated ReplayKit and AVScreenRecorder, handling codec selection and frame delivery
  • HEVC with Alpha (Alpha Channel in Video Codecs) — Advanced feature allowing video frames to include transparency data; requires special codec configuration and is only editable in Final Cut Pro X and iMovie, not standard H.264
  • Virtual Audio Device / Driver-Free Loopback — Technique to capture system audio without kernel extensions; QuickRecorder uses this to mix microphone + system sound without third-party audio drivers
  • Presenter Overlay (macOS 14+) — Native FaceTime/Continuity feature that composites camera input real-time into screen recordings; requires explicit AVStream authorization and macOS 14+ API
  • SwiftUI State Management for AV Streams — Coordinating multiple audio/video capture streams (system, microphone, camera, presenter overlay) in SwiftUI requires careful @State/@Published binding to avoid race conditions
  • MP3 Encoding via LAME — SwiftLAME bridges libmp3lame C library to Swift; AVContext.swift uses it for real-time audio compression to reduce file size
  • Mnpn/Azayaka — Direct predecessor and inspiration; QuickRecorder forks recording engine concepts and author is a contributor to Azayaka
  • sindresorhus/KeyboardShortcuts — Runtime dependency for shortcut key event handling; used to capture global hotkeys for record/stop
  • hidden-spectrum/SwiftLAME — Runtime dependency for MP3 audio encoding integration in AVContext.swift
  • apple/swift-coreml-diffusion — Peer macOS Swift utility demonstrating ScreenCapture Kit usage patterns on modern macOS
  • iina/iina — Similar macOS-native media tool architecture; reference for SwiftUI + AVFoundation patterns in production macOS apps

🪄PR ideas

To work on one of these in Claude Code or Cursor, paste: Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.

Add comprehensive AVContext unit tests

AVContext.swift is a critical audio/video context handler with no visible test coverage. This file likely contains complex logic for managing AVFoundation sessions, encoding parameters, and frame/audio buffer processing. Unit tests would catch regressions in audio/video codec handling and buffer management, which are error-prone areas in screen recording.

  • [ ] Create QuickRecorderTests/AVContextTests.swift with XCTest framework
  • [ ] Add tests for AVContext initialization with different encoder configurations
  • [ ] Add tests for audio buffer input/output handling
  • [ ] Add tests for video frame encoding and codec parameter validation
  • [ ] Add mocking for AVFoundation dependencies to isolate AVContext logic

Create GitHub Actions workflow for macOS builds and code signing verification

This is a macOS-native application with AppKit assets (icons, colors) and Xcode project configuration, but there's no visible CI pipeline. Adding a GitHub Actions workflow would validate that the project builds successfully on every PR, catch breaking changes early, and verify code signing setup. This is essential for a distribution tool that uses Homebrew.

  • [ ] Create .github/workflows/build.yml with macOS runner
  • [ ] Add step to build QuickRecorder.xcodeproj with xcodebuild
  • [ ] Add step to validate AppIcon and Assets.xcassets integrity
  • [ ] Add step to verify Package.resolved dependencies are locked
  • [ ] Optional: Add code signing validation step if certificates are available

Refactor color and image assets into a centralized AssetCatalog enum

Assets.xcassets contains 8+ color sets (buttonRed, dark_my_red, myblue, mygreen, mypurple, black_white, etc.) and 6+ image sets scattered across Colors/ and Others/ folders. This creates maintenance burden and potential for inconsistency. Creating a strongly-typed Swift enum (similar to AppKit's built-in color assets) would make it easier to reference colors/images throughout the codebase, enable compile-time verification, and document the purpose of each color.

  • [ ] Create QuickRecorder/Assets/AssetCatalog.swift with enums for ColorSet and ImageSet
  • [ ] Map all 8+ colors from Colors/*.colorset to ColorSet enum cases with computed Color properties
  • [ ] Map all 6+ images from Others/*.imageset to ImageSet enum cases with computed NSImage properties
  • [ ] Search all .swift files for hardcoded color/image names and replace with AssetCatalog references
  • [ ] Update Assets.xcassets documentation in README with color usage guide

🌿Good first issues

  • Add unit tests for AVContext.swift audio merging logic (Microphone + System Audio tracks): No test files visible; audio mixing is error-prone and the Q&A hints at user confusion about dual-track recording
  • Document macOS 14 Presenter Overlay setup in a new PRESENTER_OVERLAY.md (currently only mentioned in README without integration guide): Key feature underutilized by users unfamiliar with setup; would reduce support questions
  • Add CI/CD workflow (.github/workflows/build.yml) to test builds on macOS 12.3, 13, 14 via GitHub Actions: Single-maintainer project with no visible automation; ScreenCapture Kit breaks frequently between OS versions, risking silent regressions

Top contributors

Click to expand

📝Recent commits

Click to expand
  • e820517 — update appcast (lihaoyun6)
  • 0ed9b2b — Fixed: Crash on Intel-based Macs (lihaoyun6)
  • 3a39fec — update appcast (lihaoyun6)
  • de80894 — update appcast (lihaoyun6)
  • 4f6f94a — change icon, fix crash (lihaoyun6)
  • 29e71fc — update appcast (lihaoyun6)
  • 9c6dc3f — fix pausing button (lihaoyun6)
  • 72f3e4b — fix non-hdr screenshot, Optimized bitrate (lihaoyun6)
  • d74435c — Merge pull request #201 from AndrewKeYanzhe/main (lihaoyun6)
  • e26b575 — save as RGB10 format HDR PNG instead of HEIF (420 Chroma) (AndrewKeYanzhe)

🔒Security observations

The QuickRecorder project is a macOS-native application with limited exposure to common web vulnerabilities (SQLi, XSS, injection attacks). However, as a screen recording application handling sensitive user data, security focuses on: proper permission declarations, secure memory handling of recorded content, and dependency management. The provided file structure shows a well-organized Xcode project, but critical security files (Info.plist, entitlements, actual Swift source code) were not available for detailed analysis. The application should implement strict privacy controls, secure data handling for screen recordings, and regular dependency audits. No obvious hardcoded secrets or exposed credentials were found in the file structure provided.

  • Low · Missing dependency vulnerability tracking — QuickRecorder.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved. The Package.resolved file exists but its contents were not provided for analysis. Swift Package Manager dependencies should be regularly audited for known vulnerabilities using tools like swift package update and checking security advisories. Fix: Regularly audit Swift Package Manager dependencies using vulnerability scanning tools. Consider using automated dependency checking in CI/CD pipelines.
  • Low · Xcode project configuration requires review — QuickRecorder.xcodeproj/project.pbxproj. The project.pbxproj file (Xcode project configuration) was not provided for detailed analysis. This file can contain build settings, code signing configurations, and other security-relevant settings that should be reviewed. Fix: Review project build settings for: proper code signing configuration, minimum deployment target, compiler security flags, and any hardcoded credentials in build variables.
  • Low · macOS-specific permissions not documented — QuickRecorder (app configuration files). As a screen recording application accessing sensitive user content, the app requires specific macOS entitlements and privacy permissions. The Info.plist or entitlements configuration was not provided for review. Fix: Ensure Info.plist includes proper descriptions for: Screen Recording (NSScreenRecordingUsageDescription), Microphone (NSMicrophoneUsageDescription), and Audio input permissions. Use the minimal required entitlements. Document privacy practices clearly.
  • Low · Source code review not performed — QuickRecorder/*.swift. Swift source files (AVContext.swift and others) were not provided for static analysis. Potential issues in the provided files could include: improper handling of sensitive data in memory, insecure file operations, or unvalidated user input. Fix: Perform static code analysis on all Swift files using SwiftLint and manual review. Focus on: proper memory management of recorded data, secure file handling, input validation, and cryptographic operations if any.

LLM-derived; treat as a starting point, not a security audit.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · lihaoyun6/QuickRecorder — RepoPilot