Skip to content

feat: add Quick Snip, shared editors and reliable Linux input access - #64

Merged
ExtraBinoss merged 12 commits into
masterfrom
feat/quick-snip
Sep 13, 2026
Merged

ExtraBinoss merged 12 commits into
masterfrom
feat/quick-snip

Conversation

@ExtraBinoss

@ExtraBinoss ExtraBinoss commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

Quick Snip adds direct video and screenshot capture from a global shortcut or the tray, with reusable editor presets, automatic export, clipboard actions, and a compact status window. The branch also brings the screenshot and video editing tools together and improves waveform performance and Linux input-access handling.

Changes

  • Add preset-driven Quick Snip video/screenshot workflows, capture-mode storage, cancellation recovery, and native window ownership. The completed status pill shows a five-second countdown, pauses during interaction, and restarts after interaction ends.
  • Share Elements tools and properties across editors, including text, drawing, blur, and highlight. Timeline thumbnails show actual element content and distinguish blur from highlight.
  • Add a draggable Screenshot Composition panel with persisted canvas-bounded positioning, a stable header, adaptive opening direction, bounded scrolling, context-menu deletion, and Ctrl/Cmd-click selection shared with canvas hit-testing.
  • Render one-sided Blick waveforms with the bundled Mediabunny and a shared WebGL2 renderer. Decode visible source ranges progressively, reuse cached detail across zoom and pan, retain visible data during refinement, and crossfade updates.
  • Export video caption transcripts as versioned JSON with caption IDs and segment/word timestamps in timeline milliseconds. Validate the payload at the Electron boundary and write atomically through an owned save dialog; no transcript import is exposed.
  • Preserve Linux helper startup diagnostics through Rust, Electron, the HUD, onboarding, preferences, and copied system information. Distinguish authorization cancellation from failure, declare DEB/RPM Polkit dependencies, and compare helper/policy contents before reusing an installed AppImage helper.

Validation

  • Focused tests for the changed Vue/TypeScript files: 44 files, 463 tests passed.
  • Focused Node tests for Linux input access, packaging dependencies/post-install behavior, Quick Snip dismissal, and transcript export passed.
  • Focused Rust tests for Linux input handling, FFmpeg probes, and zoom-field preservation passed; native helper/engine builds and product Clippy passed. An obsolete zoom fixture was updated to match the renderer-owned field contract.
  • TypeScript and Vue type checks, renderer build, and formatting checks passed.

This remains a draft pending manual capture/export, native window, and clipboard validation on the supported platforms. The reported Kubuntu 26.04 input failure has not been reproduced on the affected machine. No browser or end-to-end tests were run for these updates.

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 644 files, which is 544 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 652b8b6e-1be0-4ac9-b4d6-5a8b6f4844b1

📥 Commits

Reviewing files that changed from the base of the PR and between 8a12ee6 and 1efe29e.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (644)
  • Cargo.toml
  • countdown.html
  • docs/ARCHITECTURE.md
  • docs/dev/linux.md
  • docs/electron_window.md
  • docs/heavy-timeline-performance.md
  • docs/performance/editor-resources-2026-09-13.md
  • docs/playback-performance.md
  • docs/quick-snip_WIP.md
  • docs/recorder.md
  • docs/startup-performance.md
  • electron/camera/recording-control.cjs
  • electron/captions/transcript-export-ipc.cjs
  • electron/capture/capture-cancellation.cjs
  • electron/capture/capture-config.cjs
  • electron/capture/capture-engine.cjs
  • electron/capture/capture-ipc.cjs
  • electron/capture/system-audio-preview.cjs
  • electron/clipboard/file-clipboard.cjs
  • electron/countdown-window.cjs
  • electron/export/export-ipc.cjs
  • electron/input/input-access.cjs
  • electron/lifecycle/application-updater.cjs
  • electron/lifecycle/capture-warmup.cjs
  • electron/lifecycle/capture-window-ipc.cjs
  • electron/lifecycle/development-profile.cjs
  • electron/lifecycle/renderer-setup.cjs
  • electron/main.cjs
  • electron/preferences/linux-shortcut-source.cjs
  • electron/preferences/preferences-ipc.cjs
  • electron/preferences/preferences-store.cjs
  • electron/preload.cjs
  • electron/presets/editor-preset-ipc.cjs
  • electron/presets/editor-preset-store.cjs
  • electron/presets/initial-editor-settings.cjs
  • electron/projects/clip-composition.cjs
  • electron/projects/composition-appearance.cjs
  • electron/projects/composition-captions.cjs
  • electron/projects/composition-effect.cjs
  • electron/projects/composition-element-content.cjs
  • electron/projects/composition-shape-layer.cjs
  • electron/projects/project-editor-state.cjs
  • electron/projects/project-ipc.cjs
  • electron/projects/project-library.cjs
  • electron/projects/project-media-protocol.cjs
  • electron/projects/project-store.cjs
  • electron/projects/project-summary.cjs
  • electron/quick-snip/quick-snip-controller.cjs
  • electron/quick-snip/quick-snip-device-menu.cjs
  • electron/quick-snip/quick-snip-finalizer.cjs
  • electron/quick-snip/quick-snip-position.cjs
  • electron/quick-snip/quick-snip-renderer.cjs
  • electron/quick-snip/quick-snip-service.cjs
  • electron/quick-snip/quick-snip-status-window.cjs
  • electron/quick-snip/quick-snip-window.cjs
  • electron/screen-region-overlay.cjs
  • electron/screenshot/screenshot-composition-validation.cjs
  • electron/screenshot/screenshot-history.cjs
  • electron/screenshot/screenshot-ipc.cjs
  • electron/screenshot/screenshot-store.cjs
  • electron/screenshot/screenshot-validation.cjs
  • electron/storage/capture-stores.cjs
  • electron/storage/project-categories.cjs
  • electron/storage/user-paths.cjs
  • electron/teleprompter/teleprompter-checkpoint.cjs
  • electron/teleprompter/teleprompter-ipc.cjs
  • electron/teleprompter/teleprompter-window.cjs
  • electron/tray/tray-manager.cjs
  • electron/window/committed-window-position.cjs
  • electron/window/editor-startup-guard.cjs
  • electron/window/editor-window-controller.cjs
  • electron/window/editor-window.cjs
  • electron/window/window-controller.cjs
  • package.json
  • packages/capture/Cargo.toml
  • packages/capture/src/bin/capture-engine.rs
  • packages/capture/src/bin/capture-probe.rs
  • packages/capture/src/bin/capture-smoke.rs
  • packages/capture/src/input/access.rs
  • packages/capture/src/lib.rs
  • packages/capture/src/model/config.rs
  • packages/capture/src/protocol/command.rs
  • packages/capture/src/screen/linux/ffmpeg.rs
  • packages/capture/src/screen/linux/ffmpeg_cache.rs
  • packages/capture/src/screen/linux/gpu_inventory.rs
  • packages/capture/src/screen/linux/input_helper_diagnostics.rs
  • packages/capture/src/screen/linux/input_helper_diagnostics_tests.rs
  • packages/capture/src/screen/linux/input_helper_executable.rs
  • packages/capture/src/screen/linux/input_helper_executable_tests.rs
  • packages/capture/src/screen/linux/input_monitor.rs
  • packages/capture/src/screen/linux/input_monitor_startup_tests.rs
  • packages/capture/src/screen/linux/input_monitor_tests.rs
  • packages/capture/src/screen/linux/mod.rs
  • packages/capture/src/screen/linux/pipewire/process.rs
  • packages/capture/src/screen/linux/pipewire/tests.rs
  • packages/capture/src/screen/linux/pipewire/tests/start_tests.rs
  • packages/capture/src/screen/linux/pipewire/thread.rs
  • packages/capture/src/screen/linux/pipewire/thread_tests.rs
  • packages/capture/src/screen/linux/recording.rs
  • packages/capture/src/screen/mac/capture.rs
  • packages/capture/src/screen/mac/preview.rs
  • packages/capture/src/screen/recording.rs
  • packages/capture/src/screen/win/capture.rs
  • packages/capture/src/screen/win/catalog.rs
  • packages/capture/src/screen/win/mod.rs
  • packages/capture/src/screen/win/screenshot.rs
  • packages/capture/src/screenshot/linux.rs
  • packages/capture/src/screenshot/mac/mod.rs
  • packages/capture/src/screenshot/mod.rs
  • packages/capture/src/screenshot/tests.rs
  • packages/capture/src/screenshot/win.rs
  • packages/capture/src/session/recording.rs
  • packages/capture/src/session/recording_active.rs
  • packages/capture/src/session/recording_tests.rs
  • packages/capture/tests/catalog.rs
  • packages/capture/tests/model.rs
  • packages/capture/tests/protocol.rs
  • packages/capture/tests/session.rs
  • packages/capture/tests/storage.rs
  • quick-snip-status.html
  • scripts/dev/electron.cjs
  • src/App.vue
  • src/api/browser-media-devices.ts
  • src/api/camera-recorder.ts
  • src/api/linux-requirement-guidance.test.ts
  • src/api/linux-requirement-guidance.ts
  • src/api/microphone-recorder.ts
  • src/api/tests/browser-media-devices.test.ts
  • src/api/tests/camera-recorder.test.ts
  • src/api/tests/microphone-recorder.test.ts
  • src/api/types/capture-api.ts
  • src/api/types/capture-config.ts
  • src/api/types/capture-mode.ts
  • src/api/types/capture-session.ts
  • src/api/types/editor-preset.ts
  • src/api/types/input-access.ts
  • src/api/types/quick-snip-api.ts
  • src/api/types/quick-snip.ts
  • src/api/types/screen-region.ts
  • src/api/types/screenshot.ts
  • src/api/types/transcript.ts
  • src/components/export/ExportPopover.vue
  • src/components/export/composition/tests/render.test.ts
  • src/components/export/export-types.ts
  • src/components/export/mediabunny/export-worker-fonts.ts
  • src/components/export/mediabunny/export-worker-pipelines.ts
  • src/components/export/mediabunny/export-worker-protocol.ts
  • src/components/export/mediabunny/export.worker.ts
  • src/components/export/mediabunny/tests/export-worker-fonts.test.ts
  • src/components/export/tests/ExportPopover.test.ts
  • src/components/hud/CaptureModeGroup.vue
  • src/components/hud/CapturePresetSelect.vue
  • src/components/hud/HUD.vue
  • src/components/hud/ProjectPicker.vue
  • src/components/hud/TopbarHUD.vue
  • src/components/hud/hud-devices.ts
  • src/components/hud/hud-form.css
  • src/components/hud/hud-shell.css
  • src/components/hud/hud-state-types.ts
  • src/components/hud/interactions/InteractionAccessError.test.ts
  • src/components/hud/interactions/InteractionAccessError.vue
  • src/components/hud/interactions/interaction-access-types.ts
  • src/components/hud/interactions/useInteractionAccess.test.ts
  • src/components/hud/interactions/useInteractionAccess.ts
  • src/components/hud/recorder/RecorderBar.test.ts
  • src/components/hud/recorder/RecorderBar.vue
  • src/components/hud/recorder/recording-native-preparation.ts
  • src/components/hud/recorder/recording-types.ts
  • src/components/hud/recorder/useRecordingController.test.ts
  • src/components/hud/recorder/useRecordingController.ts
  • src/components/hud/region/ScreenRegionOverlayApp.vue
  • src/components/hud/settings/HudPreferences.vue
  • src/components/hud/settings/ShortcutPreferences.vue
  • src/components/hud/teleprompter/Teleprompter.test.ts
  • src/components/hud/teleprompter/Teleprompter.vue
  • src/components/hud/teleprompter/TeleprompterWindowApp.vue
  • src/components/hud/teleprompter/teleprompter-types.ts
  • src/components/hud/teleprompter/useTeleprompter.ts
  • src/components/hud/tests/CaptureModeGroup.test.ts
  • src/components/hud/tests/CapturePresetSelect.test.ts
  • src/components/hud/tests/HUD.test.ts
  • src/components/hud/tests/ProjectPicker.test.ts
  • src/components/hud/tests/ScreenRegionOverlayApp.test.ts
  • src/components/hud/tests/ShortcutPreferences.test.ts
  • src/components/hud/tests/TeleprompterWindowApp.test.ts
  • src/components/hud/tests/TopbarHUD.test.ts
  • src/components/hud/tests/capture.mock.ts
  • src/components/hud/tests/useHudCaptureMode.test.ts
  • src/components/hud/tests/useHudStartup.test.ts
  • src/components/hud/tests/useHudWindow.test.ts
  • src/components/hud/tests/useTeleprompter.composable.test.ts
  • src/components/hud/useHudCaptureMode.ts
  • src/components/hud/useHudIssues.input-access.test.ts
  • src/components/hud/useHudIssues.ts
  • src/components/hud/useHudState.ts
  • src/components/hud/useHudWindow.ts
  • src/components/onboarding/SetupStep.input-access.test.ts
  • src/components/onboarding/SetupStep.vue
  • src/components/projects/ProjectCreateDialog.vue
  • src/components/projects/ProjectModeIcon.vue
  • src/components/projects/ProjectPicker.vue
  • src/components/projects/project-card.css
  • src/components/projects/project-picker-types.ts
  • src/components/projects/project-picker.css
  • src/components/projects/useProjectPicker.ts
  • src/components/projects/useProjectPreviews.ts
  • src/components/quick-snip/QuickSnipCountdown.test.ts
  • src/components/quick-snip/QuickSnipCountdown.vue
  • src/components/quick-snip/QuickSnipCropBar.vue
  • src/components/quick-snip/QuickSnipStatus.countdown.test.ts
  • src/components/quick-snip/QuickSnipStatus.test.ts
  • src/components/quick-snip/QuickSnipStatus.vue
  • src/components/quick-snip/quick-snip-crop-bar.css
  • src/components/quick-snip/quick-snip-device-types.ts
  • src/components/quick-snip/quick-snip-export.ts
  • src/components/quick-snip/quick-snip-screenshot.ts
  • src/components/quick-snip/quick-snip-status.css
  • src/components/quick-snip/useQuickSnipCropBar.ts
  • src/components/quick-snip/useQuickSnipDeviceMenu.test.ts
  • src/components/quick-snip/useQuickSnipDeviceMenu.ts
  • src/components/ui/button/Button.vue
  • src/components/ui/button/ButtonGroup.vue
  • src/components/ui/button/CopyButton.test.ts
  • src/components/ui/button/CopyButton.vue
  • src/components/ui/button/button-group-item.css
  • src/components/ui/dialog/ConfirmDialog.test.ts
  • src/components/ui/dialog/ConfirmDialog.vue
  • src/components/ui/dialog/Dialog.test.ts
  • src/components/ui/dialog/Dialog.vue
  • src/components/ui/dialog/TextInputDialog.test.ts
  • src/components/ui/dialog/TextInputDialog.vue
  • src/components/ui/performance/MiniPerformanceGraph.test.ts
  • src/components/ui/performance/MiniPerformanceGraph.vue
  • src/components/ui/popover/Popover.test.ts
  • src/components/ui/popover/Popover.vue
  • src/components/ui/popover/PopoverMenuList.test.ts
  • src/components/ui/popover/PopoverMenuList.vue
  • src/components/ui/skeleton/Skeleton.vue
  • src/components/ui/transitions/ReorderGroup.test.ts
  • src/components/ui/transitions/ReorderGroup.vue
  • src/components/ui/transitions/reorder-types.ts
  • src/components/video-editor/EditorAmbientBackground.vue
  • src/components/video-editor/EditorHistoryControls.vue
  • src/components/video-editor/EditorPresetControls.vue
  • src/components/video-editor/EditorWindowApp.vue
  • src/components/video-editor/Topbar.vue
  • src/components/video-editor/VideoEditor.vue
  • src/components/video-editor/VideoProjectEdition.vue
  • src/components/video-editor/canvas/CaptionInlineEditor.vue
  • src/components/video-editor/canvas/EditorCanvas.vue
  • src/components/video-editor/canvas/canvas-sizing.ts
  • src/components/video-editor/canvas/composables/layer-display-layout.ts
  • src/components/video-editor/canvas/composables/tests/useCanvasFormatTransition.test.ts
  • src/components/video-editor/canvas/composables/useCanvasFormatTransition.ts
  • src/components/video-editor/canvas/composables/useCompositionMedia.ts
  • src/components/video-editor/canvas/composables/useCursorCanvasInteraction.test.ts
  • src/components/video-editor/canvas/composables/useCursorOverlay.test.ts
  • src/components/video-editor/canvas/tests/EditorCanvas.test.ts
  • src/components/video-editor/canvas/tests/canvas-sizing.test.ts
  • src/components/video-editor/captions/TranscriptExport.vue
  • src/components/video-editor/captions/caption-transcript.ts
  • src/components/video-editor/captions/tests/TranscriptExport.test.ts
  • src/components/video-editor/captions/tests/caption-transcript.test.ts
  • src/components/video-editor/composables/editor-default-types.ts
  • src/components/video-editor/composables/editor-defaults.ts
  • src/components/video-editor/composables/editor-history-types.ts
  • src/components/video-editor/composables/tests/editor-defaults.test.ts
  • src/components/video-editor/composables/tests/editor-state-fixture.ts
  • src/components/video-editor/composables/tests/useClipComposition.visual-element.test.ts
  • src/components/video-editor/composables/tests/useEditorPresets.test.ts
  • src/components/video-editor/composables/tests/useEditorUndoRedo.persistence.test.ts
  • src/components/video-editor/composables/tests/useEditorUndoRedo.test.ts
  • src/components/video-editor/composables/tests/useProjectEditorState.lifecycle.test.ts
  • src/components/video-editor/composables/tests/useProjectEditorState.test.ts
  • src/components/video-editor/composables/tests/useVideoEditor.add-element.test.ts
  • src/components/video-editor/composables/tests/useVideoEditor.test.ts
  • src/components/video-editor/composables/useClipComposition.ts
  • src/components/video-editor/composables/useEditorPresets.ts
  • src/components/video-editor/composables/useEditorUndoRedo.ts
  • src/components/video-editor/composables/useProjectEditorState.ts
  • src/components/video-editor/composables/useSelectedClips.ts
  • src/components/video-editor/composables/useVideoEditor.ts
  • src/components/video-editor/composition/appearance/adaptive-shadow.ts
  • src/components/video-editor/composition/appearance/appearance-types.ts
  • src/components/video-editor/composition/appearance/phone-frame-fill.ts
  • src/components/video-editor/composition/appearance/render-decorated-media.ts
  • src/components/video-editor/composition/captions/render-caption-shape.ts
  • src/components/video-editor/composition/captions/render-caption-text.ts
  • src/components/video-editor/composition/captions/text-decoration.ts
  • src/components/video-editor/composition/effects/blur-effect.test.ts
  • src/components/video-editor/composition/effects/blur-effect.ts
  • src/components/video-editor/composition/effects/effect-shape.ts
  • src/components/video-editor/composition/effects/effect-types.ts
  • src/components/video-editor/composition/effects/highlight-effect.test.ts
  • src/components/video-editor/composition/effects/highlight-effect.ts
  • src/components/video-editor/composition/engine/clip-composition-validation.ts
  • src/components/video-editor/composition/engine/clip-engine.ts
  • src/components/video-editor/composition/render-composited-layer.ts
  • src/components/video-editor/composition/scene-layers.ts
  • src/components/video-editor/composition/shape/render-element-content.test.ts
  • src/components/video-editor/composition/shape/render-element-content.ts
  • src/components/video-editor/composition/shape/render-shape-clip.test.ts
  • src/components/video-editor/composition/shape/render-shape-clip.ts
  • src/components/video-editor/composition/tests/render-composited-layer.test.ts
  • src/components/video-editor/composition/tests/scene-layers.test.ts
  • src/components/video-editor/composition/visual-element-defaults.ts
  • src/components/video-editor/composition/visual-element-types.ts
  • src/components/video-editor/editor-window-title.ts
  • src/components/video-editor/elements/DrawingControls.vue
  • src/components/video-editor/elements/ElementCanvasOverlay.vue
  • src/components/video-editor/elements/ElementTextControls.vue
  • src/components/video-editor/elements/ElementsPanel.vue
  • src/components/video-editor/elements/element-editor-types.ts
  • src/components/video-editor/elements/element-projection.ts
  • src/components/video-editor/elements/tests/ElementCanvasOverlay.test.ts
  • src/components/video-editor/elements/tests/ElementTextControls.test.ts
  • src/components/video-editor/elements/tests/ElementsPanel.test.ts
  • src/components/video-editor/elements/tests/element-projection.test.ts
  • src/components/video-editor/elements/tests/useCanvasElements.test.ts
  • src/components/video-editor/elements/tests/useElementEditor.test.ts
  • src/components/video-editor/elements/tests/useVideoElements.test.ts
  • src/components/video-editor/elements/useCanvasElements.ts
  • src/components/video-editor/elements/useElementEditor.ts
  • src/components/video-editor/elements/useVideoElements.ts
  • src/components/video-editor/elements/video-elements.ts
  • src/components/video-editor/performance/preview-performance-types.ts
  • src/components/video-editor/performance/tests/usePreviewMonitorActivity.test.ts
  • src/components/video-editor/performance/tests/usePreviewPerformanceMonitor.test.ts
  • src/components/video-editor/performance/usePreviewMonitorActivity.ts
  • src/components/video-editor/performance/usePreviewPerformanceMonitor.ts
  • src/components/video-editor/properties/PropertiesDeleteAction.vue
  • src/components/video-editor/properties/PropertiesPanel.css
  • src/components/video-editor/properties/PropertiesPanel.elements.test.ts
  • src/components/video-editor/properties/PropertiesPanel.vue
  • src/components/video-editor/properties/PropertiesPanelHeader.test.ts
  • src/components/video-editor/properties/PropertiesPanelHeader.vue
  • src/components/video-editor/properties/canvas/CanvasBackgroundTabs.vue
  • src/components/video-editor/properties/canvas/CanvasPanel.vue
  • src/components/video-editor/properties/canvas/RemoveBackgroundControl.vue
  • src/components/video-editor/properties/canvas/WatermarkControls.vue
  • src/components/video-editor/properties/canvas/canvas-panel.css
  • src/components/video-editor/properties/canvas/useCanvasMediaTiles.ts
  • src/components/video-editor/properties/captions/CaptionPanel.test.ts
  • src/components/video-editor/properties/captions/CaptionPanel.vue
  • src/components/video-editor/properties/captions/CaptionStyleControls.test.ts
  • src/components/video-editor/properties/captions/CaptionStyleControls.vue
  • src/components/video-editor/properties/clip/BlurPropertiesPanel.vue
  • src/components/video-editor/properties/clip/ClipPropertiesPanel.vue
  • src/components/video-editor/properties/clip/ShapeLayerPropertiesPanel.vue
  • src/components/video-editor/properties/clip/blur-properties-types.ts
  • src/components/video-editor/properties/clip/tests/BlurPropertiesPanel.test.ts
  • src/components/video-editor/properties/clip/tests/BorderAndFrameControls.test.ts
  • src/components/video-editor/properties/clip/tests/ClipPropertiesPanel.test.ts
  • src/components/video-editor/properties/cursor/CursorAppearanceControls.vue
  • src/components/video-editor/properties/cursor/CursorPanel.vue
  • src/components/video-editor/properties/cursor/cursor-appearance-types.ts
  • src/components/video-editor/properties/cursor/cursor-image-loader.ts
  • src/components/video-editor/properties/cursor/cursor-image-types.ts
  • src/components/video-editor/properties/cursor/cursor-size.ts
  • src/components/video-editor/properties/cursor/tests/CursorAppearanceControls.test.ts
  • src/components/video-editor/properties/cursor/tests/CursorPanel.test.ts
  • src/components/video-editor/properties/cursor/tests/cursor-image-loader.test.ts
  • src/components/video-editor/properties/properties-panel-contract-types.ts
  • src/components/video-editor/properties/properties-panel-title.ts
  • src/components/video-editor/properties/properties-panel-types.ts
  • src/components/video-editor/properties/settings/SettingsPanel.test.ts
  • src/components/video-editor/properties/settings/SettingsPanel.vue
  • src/components/video-editor/screenshot/ScreenshotCanvas.vue
  • src/components/video-editor/screenshot/ScreenshotCropSelection.vue
  • src/components/video-editor/screenshot/ScreenshotCursorControls.vue
  • src/components/video-editor/screenshot/ScreenshotEditor.vue
  • src/components/video-editor/screenshot/ScreenshotExportPopover.vue
  • src/components/video-editor/screenshot/ScreenshotPropertiesPanel.vue
  • src/components/video-editor/screenshot/ScreenshotSizeControls.vue
  • src/components/video-editor/screenshot/composition/ScreenshotComposition.vue
  • src/components/video-editor/screenshot/composition/composition-panel-position.ts
  • src/components/video-editor/screenshot/composition/composition-panel-types.ts
  • src/components/video-editor/screenshot/composition/tests/composition-panel-position.test-support.ts
  • src/components/video-editor/screenshot/composition/tests/composition-panel-position.test.ts
  • src/components/video-editor/screenshot/composition/tests/useCompositionPanelPosition.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/LayerThumbnail.vue
  • src/components/video-editor/screenshot/composition/thumbnails/tests/LayerThumbnail.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/thumbnail-assets.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/thumbnail-images.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/thumbnail-pixels.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/thumbnail-render.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/thumbnail-spec.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/thumbnail-worker.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/tests/useLayerThumbnails.test.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail-assets.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail-pixels.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail-render.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail-spec.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail-types.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail-worker.ts
  • src/components/video-editor/screenshot/composition/thumbnails/thumbnail.worker.ts
  • src/components/video-editor/screenshot/composition/thumbnails/useLayerThumbnails.ts
  • src/components/video-editor/screenshot/composition/useCompositionPanelPosition.ts
  • src/components/video-editor/screenshot/composition/useScreenshotLayerReorder.ts
  • src/components/video-editor/screenshot/screenshot-assets.ts
  • src/components/video-editor/screenshot/screenshot-cursors.ts
  • src/components/video-editor/screenshot/screenshot-dimensions.ts
  • src/components/video-editor/screenshot/screenshot-drag-renderer.ts
  • src/components/video-editor/screenshot/screenshot-geometry.ts
  • src/components/video-editor/screenshot/screenshot-image-raster.ts
  • src/components/video-editor/screenshot/screenshot-images.ts
  • src/components/video-editor/screenshot/screenshot-layer-geometry.ts
  • src/components/video-editor/screenshot/screenshot-layer-render.ts
  • src/components/video-editor/screenshot/screenshot-layer-types.ts
  • src/components/video-editor/screenshot/screenshot-layers.ts
  • src/components/video-editor/screenshot/screenshot-render.ts
  • src/components/video-editor/screenshot/screenshot-selection-transform.ts
  • src/components/video-editor/screenshot/screenshot-state.ts
  • src/components/video-editor/screenshot/screenshot-transform.ts
  • src/components/video-editor/screenshot/screenshot-types.ts
  • src/components/video-editor/screenshot/tests/ScreenshotCanvas.performance.test.ts
  • src/components/video-editor/screenshot/tests/ScreenshotCanvas.test.ts
  • src/components/video-editor/screenshot/tests/ScreenshotComposition.test.ts
  • src/components/video-editor/screenshot/tests/ScreenshotCropSelection.test.ts
  • src/components/video-editor/screenshot/tests/ScreenshotCursorControls.test.ts
  • src/components/video-editor/screenshot/tests/ScreenshotEditor.images.test.ts
  • src/components/video-editor/screenshot/tests/ScreenshotEditor.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-assets.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-cursors.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-drag-renderer.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-editor-history-cases.ts
  • src/components/video-editor/screenshot/tests/screenshot-editor-test-helpers.ts
  • src/components/video-editor/screenshot/tests/screenshot-geometry.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-highlight.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-image-raster.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-images.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-layer-geometry.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-layer-render.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-layers.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-render.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-selection-transform.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-state.test.ts
  • src/components/video-editor/screenshot/tests/screenshot-transform.test.ts
  • src/components/video-editor/screenshot/tests/useScreenshotCursors.test.ts
  • src/components/video-editor/screenshot/tests/useScreenshotEffects.test.ts
  • src/components/video-editor/screenshot/tests/useScreenshotHistory.test.ts
  • src/components/video-editor/screenshot/tests/useScreenshotLayerReorder.test.ts
  • src/components/video-editor/screenshot/tests/useScreenshotLayerShortcuts.test.ts
  • src/components/video-editor/screenshot/tests/useScreenshotSelection.test.ts
  • src/components/video-editor/screenshot/useScreenshotCursors.ts
  • src/components/video-editor/screenshot/useScreenshotEditor.ts
  • src/components/video-editor/screenshot/useScreenshotEffects.ts
  • src/components/video-editor/screenshot/useScreenshotHistory.ts
  • src/components/video-editor/screenshot/useScreenshotLayerShortcuts.ts
  • src/components/video-editor/screenshot/useScreenshotSelection.ts
  • src/components/video-editor/sidebar/SidebarPanel.vue
  • src/components/video-editor/sidebar/sidebar-types.ts
  • src/components/video-editor/tests/EditorHistoryControls.test.ts
  • src/components/video-editor/tests/EditorPresetControls.test.ts
  • src/components/video-editor/tests/EditorWindowApp.test.ts
  • src/components/video-editor/tests/PropertiesPanel.test.ts
  • src/components/video-editor/tests/SidebarPanel.test.ts
  • src/components/video-editor/tests/Topbar.test.ts
  • src/components/video-editor/tests/VideoEditor.test.mocks.ts
  • src/components/video-editor/timeline/ShapeTimelinePreview.vue
  • src/components/video-editor/timeline/TimelineAddMenu.vue
  • src/components/video-editor/timeline/TimelineAudioTracks.vue
  • src/components/video-editor/timeline/TimelineCaptionTracks.vue
  • src/components/video-editor/timeline/TimelineClip.vue
  • src/components/video-editor/timeline/TimelineTrackHeaders.vue
  • src/components/video-editor/timeline/TimelineTracks.vue
  • src/components/video-editor/timeline/composables/audio-waveform-cache.ts
  • src/components/video-editor/timeline/composables/audio-waveform-types.ts
  • src/components/video-editor/timeline/composables/tests/audio-waveform-cache.test.ts
  • src/components/video-editor/timeline/composables/tests/useCompositionAudioWaveforms.test-support.ts
  • src/components/video-editor/timeline/composables/tests/useCompositionAudioWaveforms.test.ts
  • src/components/video-editor/timeline/composables/useCompositionAudioWaveforms.ts
  • src/components/video-editor/timeline/composables/useTimelineAddPlacement.ts
  • src/components/video-editor/timeline/shape-timeline-preview-types.ts
  • src/components/video-editor/timeline/shape-timeline-preview.ts
  • src/components/video-editor/timeline/tests/ShapeTimelinePreview.test.ts
  • src/components/video-editor/timeline/tests/TimelineAddMenu.test.ts
  • src/components/video-editor/timeline/tests/TimelineClip.effects.test.ts
  • src/components/video-editor/timeline/tests/TimelineClip.test.ts
  • src/components/video-editor/timeline/tests/TimelineTrackHeaders.elements.test.ts
  • src/components/video-editor/timeline/tests/TimelineTracks.visual-add.test.ts
  • src/components/video-editor/timeline/tests/shape-timeline-preview.test.ts
  • src/components/video-editor/timeline/timeline-audio-tracks-types.ts
  • src/components/video-editor/timeline/timeline-clip-types.ts
  • src/components/video-editor/timeline/timeline-element-types.ts
  • src/components/video-editor/timeline/timeline-highlight.css
  • src/components/video-editor/timeline/waveform/BlickWaveformCanvas.vue
  • src/components/video-editor/timeline/waveform/audio-waveform.css
  • src/components/video-editor/timeline/waveform/blick-waveform-renderer.ts
  • src/components/video-editor/timeline/waveform/blick-waveform-shaders.ts
  • src/components/video-editor/timeline/waveform/blick-waveform-types.ts
  • src/components/video-editor/timeline/waveform/tests/BlickWaveformCanvas.animation.test.ts
  • src/components/video-editor/timeline/waveform/tests/BlickWaveformCanvas.test.ts
  • src/components/video-editor/timeline/waveform/tests/blick-waveform-renderer.test.ts
  • src/components/video-editor/timeline/waveform/tests/useThumbnails.test.ts
  • src/components/video-editor/timeline/waveform/thumbnail-source-types.ts
  • src/components/video-editor/timeline/waveform/thumbnail-source.ts
  • src/components/video-editor/timeline/waveform/useThumbnails.ts
  • src/components/video-editor/zoom/tests/zoom-playback-edge.test.ts
  • src/components/video-editor/zoom/tests/zoom-playback-performance.test.ts
  • src/components/video-editor/zoom/zoom-playback.ts
  • src/components/video-editor/zoom/zoom-types.ts
  • src/composables/useCopySystemInformation.test.ts
  • src/composables/useCopySystemInformation.ts
  • src/countdown-main.ts
  • src/editor-main.ts
  • src/i18n/bg/core.json
  • src/i18n/bg/editor.json
  • src/i18n/de/core.json
  • src/i18n/de/editor.json
  • src/i18n/en/core.json
  • src/i18n/en/editor.json
  • src/i18n/es/core.json
  • src/i18n/es/editor.json
  • src/i18n/fr/core.json
  • src/i18n/fr/editor.json
  • src/i18n/hi/core.json
  • src/i18n/hi/editor.json
  • src/i18n/i18n.test.ts
  • src/i18n/it/core.json
  • src/i18n/it/editor.json
  • src/i18n/ja/core.json
  • src/i18n/ja/editor.json
  • src/i18n/ko/core.json
  • src/i18n/ko/editor.json
  • src/i18n/pl/core.json
  • src/i18n/pl/editor.json
  • src/i18n/pt-BR/core.json
  • src/i18n/pt-BR/editor.json
  • src/i18n/ru/core.json
  • src/i18n/ru/editor.json
  • src/i18n/vi/core.json
  • src/i18n/vi/editor.json
  • src/i18n/zh-CN/core.json
  • src/i18n/zh-CN/editor.json
  • src/i18n/zh-TW/core.json
  • src/i18n/zh-TW/editor.json
  • src/media/playback/frame-cache.ts
  • src/media/playback/media-playback-engine.ts
  • src/media/playback/playback-cached-seek.ts
  • src/media/playback/playback-clip-index.ts
  • src/media/playback/playback-consumer-window.ts
  • src/media/playback/playback-frame-continuity.ts
  • src/media/playback/playback-frame-queue.ts
  • src/media/playback/playback-protocol.ts
  • src/media/playback/playback-types.ts
  • src/media/playback/playback-worker-consumers.ts
  • src/media/playback/playback.worker.ts
  • src/media/playback/tests/frame-cache.test.ts
  • src/media/playback/tests/media-playback-cached-seek.test.ts
  • src/media/playback/tests/media-playback-engine-lifecycle.test.ts
  • src/media/playback/tests/media-playback-engine.test.ts
  • src/media/playback/tests/playback-clip-index.test.ts
  • src/media/playback/tests/playback-consumer-window.test.ts
  • src/media/playback/tests/playback-frame-queue.test.ts
  • src/media/playback/tests/playback-protocol.test.ts
  • src/media/playback/tests/playback-worker.test.ts
  • src/media/playback/tests/waveform-bands.test.ts
  • src/media/playback/tests/waveform-worker.test.ts
  • src/media/playback/tests/waveform.test.ts
  • src/media/playback/waveform-bands.ts
  • src/media/playback/waveform-protocol.ts
  • src/media/playback/waveform-types.ts
  • src/media/playback/waveform.ts
  • src/media/playback/waveform.worker.ts
  • src/media/shared/composition-types.ts
  • src/media/shared/editor-history-types.ts
  • src/media/shared/element-fonts.ts
  • src/media/shared/element-text.ts
  • src/media/shared/element-types.ts
  • src/media/shared/freehand-smoothing.ts
  • src/media/shared/freehand.ts
  • src/media/shared/highlight-defaults.ts
  • src/media/shared/layer-compositing-types.ts
  • src/media/shared/layer-compositing.ts
  • src/media/shared/shape-layer-style.ts
  • src/media/shared/shape-layer-types.ts
  • src/media/shared/tests/element-fonts.test.ts
  • src/media/shared/tests/element-text.test.ts
  • src/media/shared/tests/freehand-smoothing.test.ts
  • src/media/shared/tests/freehand.test.ts
  • src/media/shared/tests/layer-compositing.test.ts
  • src/media/shared/tests/timeline-interval-index.test.ts
  • src/media/shared/timeline-interval-index.ts
  • src/media/shared/timeline-interval-types.ts
  • src/quick-snip-status-main.ts
  • src/stores/tests/theme.test.ts
  • src/stores/theme.ts
  • src/tests/App.test.ts
  • test/camera-recording-control.test.cjs
  • test/capture-engine.test.cjs
  • test/capture-ipc.test.cjs
  • test/capture-stores.test.cjs
  • test/capture-warmup.test.cjs
  • test/clip-composition.test.cjs
  • test/committed-window-position.test.cjs
  • test/composition-element-content.test.cjs
  • test/countdown-window.test.cjs
  • test/development-profile.test.cjs
  • test/editor-preset-store.test.cjs
  • test/editor-window.test.cjs
  • test/electron-dev.test.cjs
  • test/export-ipc.test.cjs
  • test/file-clipboard.test.cjs
  • test/initial-editor-settings.test.cjs
  • test/input-access.test.cjs
  • test/linux-input-dependencies.test.cjs
  • test/preferences/linux-shortcut-source.test.cjs
  • test/preferences/preferences-ipc.test.cjs
  • test/project-categories.test.cjs
  • test/project-editor-state.test.cjs
  • test/project-library.test.cjs
  • test/project-media-protocol.test.cjs
  • test/quick-snip-controller.test.cjs
  • test/quick-snip-device-menu.test.cjs
  • test/quick-snip-finalizer.test.cjs
  • test/quick-snip-modes.test.cjs
  • test/quick-snip-position.test.cjs
  • test/quick-snip-renderer.test.cjs
  • test/quick-snip-service.test.cjs
  • test/quick-snip-status-window.test.cjs
  • test/quick-snip-window.test.cjs
  • test/renderer-setup-window.test.cjs
  • test/screen-region-overlay.test.cjs
  • test/screenshot-composition-validation.test.cjs
  • test/screenshot-engine-protocol.test.cjs
  • test/screenshot-history.test.cjs
  • test/screenshot-images.test.cjs
  • test/screenshot-ipc.test.cjs
  • test/screenshot-presets.test.cjs
  • test/screenshot-store.test.cjs
  • test/system-audio-preview.test.cjs
  • test/teleprompter-checkpoint.test.cjs
  • test/teleprompter-ipc.test.cjs
  • test/teleprompter-window-persistence.test.cjs
  • test/transcript-export-ipc.test.cjs
  • test/tray-manager.test.cjs
  • test/window-controller.test.cjs
  • tests/editor-bootstrap.test.ts
  • tests/quick-snip-crop-bar.test.ts
  • tests/quick-snip-export.test.ts
  • tests/quick-snip-screenshot.test.ts
  • tests/quick-snip-status.test.ts
  • vite.config.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

albi added 10 commits September 12, 2026 14:33
Fix Linux window capture startup, renderer-backed exports, editor handoff, and persistent file clipboard support. Improve compact translated controls, shared recorder visibility settings, committed window positions, adaptive export popovers, and window lifecycle handling. Add focused regression coverage and update platform documentation.
Build export snapshots on demand, stop idle monitoring, and suspend HUD auxiliary windows while editing with teleprompter checkpoints.

Avoid unnecessary timeline geometry reads, bound screenshot artwork caches, and release export surfaces. Include focused regression tests and measured before/after results.
Keep master as the editor UI and capture architecture baseline, including
precise crop, timeline locks, voiceover, native previews, recorder launcher
and independent editor windows. Integrate Quick Snip and Screenshot modes,
presets, categorized project storage and retained-resource optimizations.

Preserve per-window capture ownership, startup failure recovery, lazy editor
loading and export snapshots, and HUD auxiliary window suspension.

Validated with focused Node and Vitest tests, Vue type checking, the Vite
production build, capture protocol/storage tests and targeted Rust Clippy.
Windows and macOS native hardware paths were not exercised on this Linux host.
Add progressive cached Blick waveforms with smooth refinement, shared element tools and previews, screenshot composition positioning and multiselection, caption transcript JSON export, and the Quick Snip dismissal countdown.

Preserve Linux helper diagnostics, declare Polkit packaging dependencies, compare installed helper contents, and update focused tests and documentation.
@ExtraBinoss ExtraBinoss changed the title WIP: add Quick Snip workflow and editor presets WIP: add Quick Snip, shared editors and reliable Linux input access Sep 13, 2026
@ExtraBinoss

Copy link
Copy Markdown
Collaborator Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Sep 13, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review skipped: 643 files exceed the limit of 100.

Pass an explicit empty window-exclusion list when resolving source previews and place the screenshot macOS backend under its platform directory.
@ExtraBinoss
ExtraBinoss marked this pull request as ready for review September 13, 2026 20:57
Copilot AI lite review requested due to automatic review settings September 13, 2026 20:57
@ExtraBinoss ExtraBinoss changed the title WIP: add Quick Snip, shared editors and reliable Linux input access feat: add Quick Snip, shared editors and reliable Linux input access Sep 13, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@ExtraBinoss
ExtraBinoss merged commit 73f51ea into master Sep 13, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants