Commit Graph

1032 Commits

Author SHA1 Message Date
Sid 9a83062302 Merge pull request #633 from AjTheSpidey/codex/webcam-mirror-toggle
Add webcam mirror toggle
2026-06-01 18:59:38 -07:00
AjTheSpidey b56daaee3e Merge upstream main into webcam mirror toggle 2026-06-01 09:39:02 +08:00
Sid d2dd44ad3b Merge pull request #577 from makaradam/feature/open-studio-and-import
Studio Dasboard with Separated UI for future scalability and Fixes
2026-05-31 09:18:26 -07:00
makaradam 0f554e72ae test: import jest-dom matchers in SourceSelector test
SourceSelector.test.tsx uses toBeInTheDocument but never imported
@testing-library/jest-dom, and vitest.config.ts has no setupFiles to
register the matchers globally. It only passed when test ordering
happened to leak the matcher from another file, making CI intermittently
red on main (e.g. the #652 merge). Importing jest-dom directly makes the
test self-sufficient and deterministic.
2026-05-31 09:48:21 +02:00
makaradam 00191c479e feat(editor): Studio Dashboard empty state + project lifecycle
- EditorEmptyState shown when no video is loaded: Import Video, Load
  Project, and drag-drop of .openscreen files.
- "Open Studio" button in the recording HUD (replaces the two separate
  open-video / open-project buttons).
- New Project flow that clears back to the dashboard, prompting to save
  on unsaved changes; Load Project now prompts too (variant-aware dialog).
- Rebuilt on current main, preserving main's export refactor, cursor-clip
  / zoom-preview / trim-waveform work and the vertical/horizontal HUD tray.
2026-05-31 09:40:21 +02:00
makaradam 34ef71b363 feat(electron): project import/new-project IPC, menu wiring, HUD/editor anti-flash
- preload + native bridge: getPathForFile, loadProjectFileFromPath, and
  onMenuNewProject / onMenuImportVideo listeners.
- main process: New Project File-menu item (Cmd/Ctrl+N) + menu-new-project.
- handlers: broaden import video formats (.m4v, .wmv, .flv, .ts).
- windows: keep main's HUD geometry + draggable handler; re-apply the
  show-on-ready-to-show anti-flash for the HUD and editor windows.
2026-05-31 09:40:21 +02:00
makaradam 1f43ef8004 i18n: add Studio Dashboard, New Project, and import strings across locales 2026-05-31 09:40:20 +02:00
Sid c491b7ca68 Merge pull request #652 from kimsr96/main
Fix screen source selection recovery flow
2026-05-30 14:29:18 -07:00
Sid 2cacedf0a0 Merge pull request #664 from enstie/font-animation
Add text animation presets for annotations
2026-05-30 14:26:42 -07:00
Sid 180a1eafd5 Merge pull request #515 from AbhinRustagi/feature/timeline-handle-snap
Add Timeline Snap Guides
2026-05-30 14:06:41 -07:00
Sid 19be540053 Merge pull request #648 from Arunsiva003/feature/vertical-menu-tray-layout
Add vertical tray layout toggle
2026-05-30 14:04:23 -07:00
Sid 324f4e01d7 Merge pull request #671 from kaili-yang/mac-native-cursor-capture
feat: native macOS cursor capture using NSCursor
2026-05-30 14:04:10 -07:00
Siddharth ff767a5e86 Fix tutorial help translations test for pt-BR locale
Add pt-BR to the dialogsByLocale map so the test covers the
newly added locale instead of crashing on an undefined entry.
2026-05-30 13:43:07 -07:00
arunkumar.a 993f693b5c Refine vertical tray appearance 2026-05-30 20:48:03 +05:30
Justice Entsie fb49ee1f1c Add Portuguese (pt-BR) dialogs to tutorial help translations 2026-05-30 14:47:39 +01:00
Justice Entsie 82b41da2d8 Add Portuguese (pt-BR) dialogs to tutorial help translations 2026-05-30 14:31:48 +01:00
Justice Entsie 2aa6e90edb Refactor text animation options to use translation keys for localization 2026-05-30 13:23:15 +01:00
Justice Entsie c34a600138 Update src/i18n/locales/ko-KR/settings.json
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-05-30 12:59:11 +01:00
Justice Entsie 0b06900a9c Add textAnimation keys to ja-JP, ko-KR, and ru locales 2026-05-30 11:54:01 +00:00
Justice Entsie c0702b5e91 Add text animation i18n keys to all locale files 2026-05-30 11:48:29 +00:00
Justice Entsie 928e1c5e01 Merge branch 'siddharthvaddem:main' into font-animation 2026-05-30 11:21:34 +00:00
Justice Entsie 545c35d4cd chore: format codebase and update i18n locale files 2026-05-30 12:13:38 +01:00
Kelly Yang eac5cc63b4 fix: address review comments on PR #671
- Replace lastEmittedAssetId with a process-wide Set<String> so each unique
  cursor shape is serialised at most once even across non-adjacent repeats
  (e.g. arrow → text → arrow no longer resends the arrow bitmap)
- Wrap the sampling loop body in autoreleasepool{} to prevent Cocoa objects
  (NSBitmapImageRep, PNG Data, base64 String) from accumulating for the
  lifetime of the helper during long recordings
- Update stale Accessibility comments: missing Accessibility only disables
  text/pointer affordance detection; native bitmap capture is unaffected
2026-05-29 13:48:44 -07:00
Kelly Yang e82fc0d8cc feat: capture native cursor bitmaps on macOS
Capture the real system cursor image during macOS recording so custom and
default cursors render natively instead of being mapped to bundled SVGs,
bringing macOS in line with the Windows WGC capture path.

- macOS cursor helper grabs NSCursor.currentSystem as a PNG asset (SHA256 id,
  intrinsic scale factor, pixel hotspot); the bitmap payload is emitted once per
  shape and referenced by assetId thereafter
- helper returns nil cursorType instead of an arrow fallback so default/custom
  cursors fall through to the captured bitmap while text/pointer stay beautified
- MacNativeCursorRecordingSession collects deduped assets, tags samples with
  assetId, and reports provider "native" when bitmaps are captured
2026-05-29 11:33:01 -07:00
Sid cf74b76d39 Merge pull request #581 from nxc-7/feat/pt-BR-translation
feat: add Brazilian Portuguese (pt-BR) translation
2026-05-28 22:05:53 -07:00
Sid afc76c368f Merge branch 'main' into feat/pt-BR-translation 2026-05-28 22:05:36 -07:00
Sid 0abe134218 Merge pull request #647 from davideme/claude/trusting-mcnulty-1089a4
Add Waveform as Background of the Trim Track - Easier to size the Trim
2026-05-28 21:17:44 -07:00
Sid 391817d648 Merge pull request #663 from enstie/font-addition
Add more built-in annotation font options
2026-05-28 21:12:33 -07:00
Sid df6c821700 Merge pull request #665 from zhenya-band/feature/keyboard-shortcut-to-open-OpenScreen
feat: add configurable global shortcut to open app
2026-05-28 21:10:25 -07:00
Sid dd2513d958 Merge pull request #667 from zhenya-band/fix/shortcuts-reset-button-hover-text
fix: remove conflicting hover style from shortcuts reset button
2026-05-28 21:07:39 -07:00
Yauheni Bandziukevich ed5ef32280 fix: remove conflicting hover style from shortcuts reset button 2026-05-28 23:42:27 +02:00
Yauheni Bandziukevich ff40a73a1b fix: keep shortcuts dialog open on registration failure 2026-05-28 23:21:41 +02:00
Yauheni Bandziukevich 59c9a19269 fix: preserve working shortcut when new registration fails 2026-05-28 23:18:35 +02:00
Yauheni Bandziukevich 902d4e4d8a fix: show error feedback when global shortcut registration fails 2026-05-28 23:09:51 +02:00
Yauheni Bandziukevich d86c17407a fix: convert special keys to valid Electron accelerators
Maps KeyboardEvent.key values (e.g., "ArrowDown", " ") to their
Electron accelerator equivalents (e.g., "Down", "Space") to prevent
global shortcut registration failures.
2026-05-28 22:11:38 +02:00
Yauheni Bandziukevich f1a8552046 refactor: update ShortcutBinding import path in main and preload scripts 2026-05-28 21:50:55 +02:00
Yauheni Bandziukevich 480890bcce feat: add configurable global shortcut to open app 2026-05-28 21:50:53 +02:00
Justice Entsie 62000c6dcf Add text animation presets for annotations 2026-05-28 20:07:03 +01:00
Justice Entsie 202c670090 Add more built-in annotation font options 2026-05-28 19:14:47 +01:00
Davide Mendolia 3d572b272d Merge branch 'siddharthvaddem:main' into claude/trusting-mcnulty-1089a4 2026-05-28 09:51:14 +02:00
Davide Mendolia fca17f901e revert(timeline): restore polygon waveform, remove per-column bar approach
The per-column fillRect skipped columns with amplitude < 0.5 px, causing
the waveform to disappear entirely at certain zoom levels. Revert to the
closed polygon + top-edge stroke which always renders something.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:50:24 +02:00
Davide Mendolia abb4413932 fix(timeline): correct waveform vertical alignment and silent baseline
Two fixes:
1. topInset/bottomInset both set to 3 — items are center-aligned in the
   36 px row (3 px gap top and bottom), so the drawing zone must match.
   topInset=0 was drawing 3 px above the trim box top.
2. Replace closed polygon with per-column fillRect so silent sections
   (barH < 0.5 px) produce no pixels instead of a flat green baseline.
   The top-edge stroke lifts the pen across silent gaps.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:45:14 +02:00
Davide Mendolia d8ab206b80 fix(timeline): draw waveform within item bounds, not CSS canvas bounds
Replace the single `verticalInset` CSS prop (which tried to shrink the
canvas element) with `topInset`/`bottomInset` drawing-space offsets.
The canvas remains `absolute inset-0` (full row height); the polygon
baseline is drawn at `H - bottomInset` and the amplitude is scaled to
`drawHeight * 0.9` — so the waveform is guaranteed to stay within
[topInset, H - bottomInset] regardless of sub-pixel CSS rounding.

Trim row: topInset=0, bottomInset=6 (row minHeight 36 − item height 30)
eliminates the faint green line that was visible below the trim box.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:38:06 +02:00
Davide Mendolia 489f157eef fix(timeline): align waveform bounds with trim box height
The trim item content is 30 px tall inside a 36 px row, leaving 3 px of
vertical padding top and bottom. Previously the canvas used `inset-0` so
the waveform filled the full row height. A new `verticalInset` prop
(defaulting to 0) offsets the canvas top/bottom edges; the trim row
passes `verticalInset={3}` so the waveform top and bottom align exactly
with the trim box bounds.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:33:59 +02:00
Davide Mendolia 60cbb449e8 feat(timeline): rectified (half) waveform style
Replace the bipolar ±center polygon with a rectified half-waveform:
amplitude per column is max(|min|, |max|) and the filled shape rises
from the bottom of the row upward, matching the single-sided waveform
display common in audio/video editors.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:30:30 +02:00
Davide Mendolia 0d39f65af1 feat(timeline): green filled polygon waveform style
Switch the trim-row waveform from faint white vertical strokes to a
green filled polygon (upper max edge left→right, lower min edge
right→left) with crisp edge strokes — matching the look of Final Cut
Pro / DaVinci Resolve waveform displays.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-28 09:22:56 +02:00
Sid 8117d4826f Merge pull request #657 from aaravshirpurkar/main
fix: increase rounding snap tolerance to 4px to prevent background line bleed when padding is 0
2026-05-26 22:35:42 -07:00
Sid b70994b079 Merge pull request #658 from neurot1cal/fix/streaming-recording-duration
Fix: stream long recordings to disk and patch WebM duration on save (#616)
2026-05-26 22:27:09 -07:00
neurot1cal 5c5cab6903 fix: don't stream when the append IPC is unavailable
Codex re-review: if openRecordingStream exists but appendRecordingChunk
does not (renderer/main version skew), the recorder would open the stream
and switch to streaming mode, but every append silently no-ops and the
save ends up empty. Require both IPC methods before streaming; otherwise
fall back to in-memory buffering. Adds a regression test.

Verified: tsc --noEmit clean; biome clean; vitest 183/183.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 16:39:53 -07:00
neurot1cal 36d7d2bdd0 fix: tighten streaming failure handling from re-review
Addresses the CodeRabbit + Codex re-review of the prior commit.

- Normalize a rejected append (channel/handler error, not just a
  { success: false } result) into appendError, so the write queue never
  rejects and isStreaming() stays consistent after a failure (CodeRabbit).
- Handle a rejected open-stream IPC the same as a failed open: fall back
  to in-memory buffering instead of leaving the recorder stuck "pending"
  with an unhandled rejection (CodeRabbit).
- Discard a streamed webcam whose write failed even when the screen save
  succeeds. The cleanup gate is now per-recorder, so a webcam omitted from
  a successful screen-only save no longer leaks its stream and partial
  file (Codex).

Adds tests for the rejected-append and rejected-open paths.

Verified: tsc --noEmit clean; biome clean; vitest 182/182.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 16:28:50 -07:00