KartikLabhshetwar/better-shot
46.5
Weak · 1 October 2026
65.9k
lines of production code
Swift
with TypeScript
2
measurements over time
What this system is
BetterShot is a macOS application designed for comprehensive screen capture, video recording, and image annotation. It provides users with tools to capture regions, windows, scrolling content, and full screens, alongside features for editing, beautifying, and organizing media. The system supports sharing via self-hosted storage and includes a native settings interface with persistent history management.
Features
Add guided onboarding tour with accessibility support
The app now includes a guided onboarding experience using the vendored TourKit library. This feature presents a slideshow of tour pages with native primary buttons, accessible back/skip controls, and system-aware neutral colors. It respects user accessibility preferences by disabling page fades under Reduce Motion and supporting reduced transparency, ensuring a consistent and inclusive onboarding flow.
Vendor · high confidence
BetterShot project structure initialized with comprehensive source and resource files
The Xcode project file (project.pbxproj) has been created, registering a complete set of Swift source files and resources for the BetterShot application. This includes core components for screen capture (ScreenCapture, ScrollCaptureController), video recording and editing (RecordingStudioWindow, VideoTrimSelection, Recording3DKeyframeEditor), and annotation tools (AnnoEditor, AnnotationCanvas, various inspector and renderer classes). The project also incorporates resources for onboarding, settings, and UI themes, establishing the foundational build structure for the app's capture, editing, and sharing capabilities.
BetterShot.xcodeproj · high confidence
Introduce scrolling capture with live preview and auto-scroll
Users can now capture full-length scrolling webpages or documents. The new \ScrollCaptureController\ stitches multiple frames into a single image, while the \ScrollCaptureSessionPresenter\ manages the session UI, including a floating control bar and a \ScrollCapturePreviewPanel\ that shows a live preview of the stitched content as it grows. The system automatically scrolls the target window to capture the content, with options to toggle auto-scrolling and cancel the session.
Sources/Capture · high confidence
Introduce self-hosted R2 sharing with direct links and secure credential storage
Users can now share captures to their own Cloudflare R2 bucket. This change introduces a new R2 credential store that securely saves access keys in the Keychain and manages configuration in UserDefaults, including a migration path for existing installs to enable uploads. It adds a hand-rolled AWS SigV4 signer (R2Uploader) to perform direct uploads without an SDK dependency, and implements image compression and manifest generation to optimize file sizes and provide metadata for the web share page. A new toggle allows users to choose between direct file links and viewer links, with direct links disabled by default for existing users.
Sources/Sharing · high confidence
Introduces HistoryStore for persistent capture management
Adds a new HistoryStore class that persists capture history as a JSON file in Application Support. This component handles importing captures with specific naming conventions, referencing existing files, syncing recordings, and managing metadata like pixel dimensions and beautified export paths. It provides the underlying storage logic for the history feature, including thumbnail source resolution and record matching.
Sources/History · high confidence
Introduces a floating preview overlay with pinned screenshots and deck staging
Adds a new floating preview panel that displays a deck of recent captures (images and videos) with configurable card size, edge margins, and position. Users can pin individual captures to persistent floating windows that support scroll-wheel resizing and hover-to-reveal close buttons. The system uses a staging directory to manage capture files, allowing users to edit, pin, share, or save captures from the overlay before they are permanently stored, with automatic dismissal and save-to-default-location actions.
Sources/Preview · high confidence
Introduces comprehensive settings, background, and capture history models
The application now supports a richer set of user preferences and visual customizations. Users can configure the app's appearance, save directory, and export quality, as well as control the capture overlay's position, size, and auto-dismiss delay. A new background system allows screenshots to be beautified with solid colors, gradients, or bundled macOS wallpapers. Additionally, the capture history now tracks recording metadata (such as microphone and camera settings) and preserves the user-assigned name of each capture to prevent renaming conflicts.
Sources/Models · high confidence
Introduces in-app auto-update, image beautification, and silent-screen recording
Users can now update BetterShot directly from within the app via the new AppUpdater service, which checks GitHub releases, downloads the DMG, and prepares it for installation. The image editor gains a BeautifierRenderer that applies cinematic color grades (exposure, contrast, saturation, split-tone, vignette, grain) and decorative backgrounds (solid, gradient, wallpaper, bundled images) with adjustable padding, aspect ratios, and per-corner radii. Screen recording now includes a SilenceDetector that automatically identifies and removes quiet stretches from the audio track, and the app supports editing images directly from the clipboard via a new ClipboardImage service.
Sources/Services · high confidence
Introduces native SwiftUI menu bar popover, onboarding flow, and Liquid Glass styling
The app now uses a custom SwiftUI-based popover for the menu bar tray instead of the native MenuBarExtra, featuring a redesigned capture grid with Region, Screen, Window, Recording, Scrolling Capture, OCR, and Color Picker actions. A new guided onboarding experience walks users through permissions (Screen, Accessibility, Input Monitoring, Microphone, Camera) and includes interactive demos. The UI adopts a new 'GlassSurface' visual style that uses macOS 26's native glass effects with fallbacks for earlier versions, and includes a reusable escape-key handler and toast notification system for status updates.
Sources/Views · high confidence
Launch of the Better Shot marketing site with blog, changelog, and comparison pages
The bettershot-landing area now hosts the official marketing website for Better Shot, providing a public-facing presence for the macOS screenshot and screen recording tool. The site includes a blog index and dedicated comparison articles positioning Better Shot as a free, open-source alternative to CleanShot X, Loom, and CapCut. A changelog page displays version history, and the site is configured with comprehensive SEO metadata, including OpenGraph tags, JSON-LD structured data, and canonical URLs to support search engine visibility.
bettershot-landing · high confidence
New annotation engine and capture display logic
This change introduces a complete rewrite of the annotation editor and screenshot capture targeting. A new annotation engine (AnnoEditor, AnnoCanvasLayer, AnnoShapeDrawing) replaces the previous implementation, adding support for complex interactions like arrow binding, rotation, and native text editing overlays, while also introducing 3D camera effects, progressive blur, and custom backgrounds for the preview card. Additionally, a new ActiveDisplayResolver ensures screenshots and previews target the correct display by honoring user pinning preferences and mouse position, and AfterCaptureActions configures post-capture behaviors like auto-saving and uploading.
Sources/BetterShot · high confidence
New build, test, and packaging scripts for macOS distribution and Cap 3D validation
This change introduces four new scripts in the \scripts/\ directory to support the BetterShot macOS application. \create-dmg.sh\ automates the creation of a branded DMG installer with a custom background and icon layout, while \dmg-background.swift\ generates the visual assets for that installer window. \generate-cap-3d-reference.py\ is a developer tool that compiles upstream Cap 3D rendering logic to produce reference JSON fixtures for testing 3D scene effects. Finally, \run-checks.sh\ provides a unified entry point to compile and execute Swift source-level checks and a landing page share-origin validation, ensuring code correctness before release.
scripts · high confidence
New native macOS settings interface and media gallery
The application now features a redesigned, native macOS Settings window with a sidebar navigation for General, Capture, Overlay, Recording, Shortcuts, and Sharing sections. This update introduces a dedicated Media Gallery for browsing and managing local and cloud captures, and a new Overlay Settings tab that allows users to customize the preview card's layout, position, size, and tool assignments.
Sources/Settings · high confidence
Behavioural changes
BetterShot sandboxing and URL scheme configuration
The BetterShot resource bundle now includes an entitlements file granting audio-input and camera permissions, and an Info.plist defining the 'bettershot' URL scheme and usage descriptions for camera, microphone, screen capture, input monitoring, and speech recognition. This enables the app to operate within a sandboxed environment while supporting URL-based actions and required privacy permissions.
Resources · high confidence
Introduces native SwiftUI app structure with onboarding, release notes, and URL-based capture actions
BetterShot has been rewritten as a native SwiftUI application, replacing the previous architecture with a new \BetterShotApp\ entry point and \BetterShotDelegate\. This change introduces a guided onboarding flow for new users, a release notes window that displays changelog updates, and the ability to trigger specific capture actions (region, fullscreen, window, scroll, recording, OCR, color picker, and settings) via custom \bettershot://\ URL schemes. The app now manages its own window lifecycle for annotation and video editors, handles recording recovery on launch, and respects a user preference to hide the capture bar at startup.
Sources/App · high confidence
Test coverage
Added automated tests for annotation handling, URL routing, clipboard, and export formats
Added a suite of new test files in the Tests directory to verify core product behaviors. AnnotationCommitCheck and AnnotationReopenCheck validate that annotations are correctly committed to the history library, that base images are preserved for re-rendering, and that reopening captures resolves to the correct edited or raw source files. CaptureURLActionCheck ensures the bettershot:// URL scheme correctly maps to capture actions and rejects malformed inputs. ClipboardImageCheck verifies that images pasted from the clipboard retain their original format (PNG, JPEG) or are safely converted (TIFF to PNG) without touching the user's system clipboard. ColorGradeCheck confirms that the nine color grading presets and individual knobs (exposure, saturation, temperature, etc.) produce the expected pixel changes. DeckStagingCheck tests the staging logic for deck cards, ensuring promotion to the library and discard operations work correctly. DefaultLookMappingCheck ensures background styles, padding, and aspect ratios map correctly between configuration and settings. EditorSceneIntegration and EditorUIIntegration verify SwiftUI editor scene behavior, full-screen transitions, tool deselection, gradient persistence, and cursor artwork caching. ExportFormatCheck ensures all offered export formats are encodable by ImageIO and that stale WebP preferences fall back to PNG.
Tests · high confidence
Dependencies
Add bettershot-landing project and TourKit Swift package
This change introduces two new dependency sets: the bettershot-landing Next.js application (using Next 15.4.10, React 19.2.0, and various Radix UI components) with its associated Remotion video generation dependencies, and the TourKit Swift package targeting macOS 13.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 47 → 46 (-0.1)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 61 → 61 (-0.1)
- Architecture 86 → 89 (+2.8)
- Maturity 62 → 64 (+1.8)
- Readiness 33 → 33 (-0.5)
- Security 73 → 76 (+3.0)
- Accessibility 47 → 48 (+0.8)
- Performance 78 (new)
Resolved (15)
- Change coupling: AnnotationEditorWindow.swift ↔ RecordingStudioWindow.swift (Sources/BetterShot/AnnotationEditorWindow.swift)
- Change-coupling hub: PreferencesView.swift → BetterShotDelegate.swift, CaptureOrchestrator.swift, MenuBarContentView.swift (Sources/Settings/PreferencesView.swift)
- Documentation: no installation or build instructions (README.md)
- Documentation: written for insiders
- Duplicated block (10 lines × 2) (Sources/BetterShot/ScreenshotHistoryStore.swift)
- Duplicated block (24–25 lines × 2) (Sources/BetterShot/BetterShotPreferences.swift)
- Duplicated block (5 lines × 2) (Sources/Capture/LastRegionGhostPresenter.swift)
- Duplicated block (6 lines × 2) (Sources/Views/MenuBarContentView.swift)
- Hotspot: Sources/BetterShot/RecordingPointerTimeline.swift (Sources/BetterShot/RecordingPointerTimeline.swift)
- Hotspot: Sources/BetterShot/RecordingViewportTimeline.swift (Sources/BetterShot/RecordingViewportTimeline.swift)
- Hotspot: Sources/Views/OnboardingPermissionsView.swift (Sources/Views/OnboardingPermissionsView.swift)
- Repeated repair: Sources/Preview/PreviewOverlay.swift (Sources/Preview/PreviewOverlay.swift)
- StudioFrameCompositor.startRender (cognitive 53) (Sources/BetterShot/RecordingStudioExporter.swift)
- StudioFrameCompositor.startRender (cyclomatic 25) (Sources/BetterShot/RecordingStudioExporter.swift)
- ViewportTimeline.build (cyclomatic 17) (Sources/BetterShot/RecordingViewportTimeline.swift)
New (104)
- AnnotationCanvas.body (cognitive 22) (Sources/BetterShot/AnnotationCanvas.swift)
- AnnotationCanvas.body (cyclomatic 23) (Sources/BetterShot/AnnotationCanvas.swift)
- CaptureOrchestrator.processCapturedImage (cognitive 24) (Sources/Capture/CaptureOrchestrator.swift)
- CaptureOrchestrator.processCapturedImage (cyclomatic 19) (Sources/Capture/CaptureOrchestrator.swift)
- Change-coupling hub: PreferencesView.swift → BetterShotDelegate.swift, ScreenshotHistoryStore.swift, CaptureOrchestrator.swift (Sources/Settings/PreferencesView.swift)
- Coverage not measured — Swift suite
- Duplicated block (10 lines × 2) (Sources/BetterShot/AnnotationBackgroundPresetBar.swift)
- Duplicated block (10 lines × 2) (Sources/BetterShot/AnnotationDocument.swift)
- Duplicated block (10 lines × 2) (Sources/BetterShot/ScreenshotHistoryStore.swift)
- Duplicated block (10 lines × 2) (Sources/Settings/MediaGallery.swift)
- Duplicated block (11 lines × 2) (Sources/BetterShot/AnnotationInspectorStyle.swift)
- Duplicated block (13 lines × 2) (Sources/BetterShot/AnnotationEditorWindow.swift)
- Duplicated block (13 lines × 2) (Sources/BetterShot/RecordingStudioWindow.swift)
- Duplicated block (14 lines × 2) (Sources/BetterShot/RecordingStudioWindow.swift)
- Duplicated block (16 lines × 2) (Sources/BetterShot/AnnotationBackgroundPresetBar.swift)
- Duplicated block (16 lines × 2) (Sources/BetterShot/CloudUploadOptions.swift)
- Duplicated block (16–18 lines × 2) (Sources/BetterShot/AnnotationBackgroundPreviewViews.swift)
- Duplicated block (17 lines × 2) (Sources/BetterShot/AnnotationBackgroundPresetBar.swift)
- Duplicated block (19 lines × 2) (Sources/BetterShot/AnnotationBackgroundPresetBar.swift)
- Duplicated block (28 lines × 2) (Sources/BetterShot/AnnotationTool.swift)
- …and 84 more
Changes since last survey
- 128 commits — 65 feature/other, 63 fixes
By area
- (root) — 52 commits
- (repo) — 21 commits
- Sources/BetterShot — 17 commits
- Sources/Capture — 12 commits
- BetterShot.xcodeproj/project.pbxproj — 4 commits
- Sources/Notch — 4 commits
- Vendor/DynamicNotchKit — 3 commits
- Sources/Settings — 2 commits
- Sources/Sharing — 2 commits
- Tests/EditorUIIntegration.swift — 2 commits
- bettershot-landing/components — 2 commits
- docs/notch-mode — 2 commits
- Resources/Licenses — 1 commit
- Sources/History — 1 commit
- Sources/Models — 1 commit
- Sources/Services — 1 commit
- Tests/R2UploadToggleCheck.swift — 1 commit
Notable commits
- fix: Fix notch shelf editor routing and active outline
- fix: Fix scrolling capture with MacShot registration and auto-scroll
- fix: Merge pull request #161 from icanhasjonas/fix/clipboard-file-names
- fix: Merge pull request #162 from icanhasjonas/fix/remove-webp-export
- fix: Merge pull request #163 from icanhasjonas/fix/honor-upload-toggle
- fix: Merge pull request #164 from icanhasjonas/fix/speed-slider-undo
- fix: Merge pull request #168 from icanhasjonas/fix/screencapture-saved-early
- fix: Merge remote-tracking branch 'origin/main' into fix/clipboard-file-names
- fix: Merge remote-tracking branch 'origin/main' into fix/clipboard-file-names
- fix: Merge remote-tracking branch 'origin/main' into fix/clipboard-file-names
- fix: Merge remote-tracking branch 'origin/main' into fix/clipboard-file-names
- fix: Merge remote-tracking branch 'origin/main' into fix/clipboard-file-names
- fix: Merge remote-tracking branch 'origin/main' into fix/honor-upload-toggle
- fix: Merge remote-tracking branch 'origin/main' into fix/honor-upload-toggle
- fix: Merge remote-tracking branch 'origin/main' into fix/screencapture-saved-early
- fix: Merge remote-tracking branch 'origin/main' into fix/screencapture-saved-early
- fix: Merge remote-tracking branch 'origin/main' into fix/screencapture-saved-early
- fix: Merge remote-tracking branch 'origin/main' into fix/speed-slider-undo
- fix: Refine notch controls and retain OCR and color results; fix window capture
- fix: fix: add opt-in screenshot auto-save for 0.5.4
- …and 108 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
KartikLabhshetwar/better-shot was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 2b0c8910e0057c58750d3cf6cbfd05ee3cb3e59e — the exact code this score is about.
- Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.