webadderall
7f587a39a8
fix: address CodeRabbit review feedback
...
- Use videoSourcePath instead of fromFileUrl(videoPath) for cursor
telemetry — fixes broken path when videoPath is an HTTP media-server URL
- Validate filePath against approvedLocalReadPaths in get-local-media-url
IPC handler before returning a URL
- Use fs.realpath() instead of path.resolve() to close symlink bypass
- Fix range parser to handle suffix ranges (bytes=-500) and guard
against NaN values
- Add CORS headers (Access-Control-Allow-Origin) to media server
responses to prevent canvas tainting when using video frames
- Handle OPTIONS preflight requests
- Clear stale resolvedWebcamVideoUrl before resolving new URL to
prevent flash of stale content
2026-04-18 16:09:16 +10:00
webadderall
45b6879d86
fix: serve video files via local HTTP server to fix loading on Windows
...
On Windows, the packaged app serves the renderer from http://127.0.0.1:PORT ,
which causes Chromium to block file:// URLs in <video> elements — even with
webSecurity disabled. This affects all users running the packaged build.
Add a local media HTTP server (random port) that streams approved video files
with range request support for seeking. The renderer now resolves video paths
through this server instead of using file:// URLs directly.
- electron/mediaServer.ts: HTTP server with path validation against
approvedLocalReadPaths and Content-Range support
- IPC handler 'get-local-media-url' converts file paths to HTTP URLs
- resolveVideoUrl() in renderer falls back to file:// if server unavailable
- Improved <video> onError to log actual MediaError details
Fixes #244
2026-04-18 15:55:43 +10:00
webadderall
12d7608a1e
Merge pull request #254 from webadderall/refactor/handlers-modules
...
refactor handles.ts into smaller files
2026-04-17 21:32:58 +10:00
webadderall
528a31b16f
fix: clean up ipc edge cases
2026-04-17 21:25:13 +10:00
webadderall
0b3169ffff
fix: address ipc review follow-ups
2026-04-17 21:11:58 +10:00
webadderall
87ec8fca93
fix: revert overly strict isAllowedLocalReadPath to OR logic
...
The AND gate broke access to user-selected files outside the allowlist
(wallpapers, user videos, etc). Keep isPathInsideDirectory normalization fix,
revert the existsSync AND guard back to the original OR behavior.
2026-04-17 20:56:50 +10:00
webadderall
2ae0aa9a92
fix: address CodeRabbit review feedback
...
- Remove dead helperExists local in recording/windows.ts
- Hoist fs/promises import out of close handler in recording/ffmpeg.ts
- Guard fs.readdir with mkdir in recording/prune.ts (ENOENT resilience)
- Derive companion audio suffixes from COMPANION_AUDIO_LAYOUTS in prune.ts
- Guard mousemove hook registration to Linux only in cursor/interaction.ts
- Replace dynamic require('electron') with static import in cursor/monitor.ts
- Wrap nodeRequire in try/catch in ffmpeg/binary.ts for fallback safety
- Fix hardcoded timeOffsetMs: 0 in project/session.ts (use normalizer)
- Fix isPathInsideDirectory to normalize candidatePath in project/manager.ts
- Fix isAllowedLocalReadPath security: require path to be in allowlist (AND not OR)
- Derive extension regex from constants in project/manager.ts
- Consolidate duplicate Duration parsers in recording/diagnostics.ts
- Refactor ensureReadableFile to use options object instead of description string
- Make swiftc compilation async (execFile) in paths/binaries.ts
- Add socket timeout to httpsGet in captions/whisper.ts
2026-04-17 20:35:08 +10:00
webadderall
673dfdadd3
refactor: extract registerIpcHandlers into 8 focused register/ modules
...
handlers.ts reduced from 2930 → 65 lines (pure delegation).
New files under electron/ipc/register/:
- sources.ts — get-sources, select-source, show-source-highlight, open-source-selector
- recording.ts — start/stop/pause native + ffmpeg, mux, store, set-recording-state, get-cursor-telemetry
- permissions.ts — accessibility/screen permissions, open-external-url
- assets.ts — wallpaper thumbnails, asset-base-path, list-asset-dir, read-local-file
- export.ts — native-video-export-*, save-exported-video
- captions.ts — whisper model, file pickers, generate-auto-captions
- project.ts — project files, recordings dir, video/session state, delete-recording
- settings.ts — shortcuts, recording prefs, countdown, platform info
Also moved shared helpers:
- getMacPrivacySettingsUrl, approveUserPath → utils.ts
- isTrustedProjectPath → project/manager.ts
2026-04-17 20:13:47 +10:00
webadderall
099ce2bbb5
refactor: split handlers.ts into focused sub-modules
...
handlers.ts was ~5967 lines. Extracted into 22 focused modules:
- ipc/types.ts — shared TypeScript interfaces and types
- ipc/constants.ts — module-level constants
- ipc/state.ts — all mutable state with typed setters
- ipc/utils.ts — shared low-level utilities (getScreen, normalizePath, etc.)
- ipc/ffmpeg/binary.ts — ffmpeg binary resolution
- ipc/ffmpeg/filters.ts — audio sync/filter builders
- ipc/captions/parser.ts — SRT/Whisper JSON parsers
- ipc/captions/whisper.ts — Whisper model download/status
- ipc/captions/generate.ts — auto-caption generation
- ipc/paths/binaries.ts — native binary path resolution
- ipc/cursor/monitor.ts — cursor monitor process management
- ipc/cursor/telemetry.ts — cursor sampling and telemetry
- ipc/cursor/bounds.ts — window bounds capture and resolution
- ipc/cursor/interaction.ts — mouse hook and interaction capture
- ipc/recording/events.ts — recording lifecycle events
- ipc/recording/diagnostics.ts — media validation and diagnostics
- ipc/recording/prune.ts — auto-recording cleanup
- ipc/recording/ffmpeg.ts — FFmpeg screen capture
- ipc/recording/windows.ts — Windows native capture (WGC)
- ipc/recording/mac.ts — Mac ScreenCaptureKit integration
- ipc/export/native-video.ts — native video export sessions
- ipc/project/session.ts — recording session manifests
- ipc/project/manager.ts — project library and file management
handlers.ts reduced from 5967 → 2930 lines (registerIpcHandlers + helpers only)
2026-04-17 19:57:26 +10:00
webadderall
d86425a83e
fix(timeline): restore clip marker indent lines, major ticker dots, and hover-only end caps
2026-04-17 14:52:37 +10:00
webadderall
9e506b2d91
Merge pull request #249 from webadderall/feat/settings-extensions
...
feat: settings tab with language picker, extension fixes, and i18n expansion
2026-04-17 14:09:51 +10:00
webadderall
41142af68f
Merge remote-tracking branch 'origin/main' into feat/settings-extensions
...
# Conflicts:
# src/components/video-editor/timeline/TimelineEditor.tsx
2026-04-17 14:07:46 +10:00
webadderall
0313dfd954
Merge pull request #248 from webadderall/feat/timeline-editor
...
feat: overhaul timeline drag/resize, zoom playback, and recording hooks
2026-04-17 14:00:20 +10:00
webadderall
d9b06bcfd9
Merge remote-tracking branch 'origin/main' into feat/settings-extensions
...
# Conflicts:
# src/components/video-editor/ExtensionManager.tsx
# src/components/video-editor/SettingsPanel.tsx
# src/components/video-editor/TutorialHelp.tsx
# src/components/video-editor/VideoEditor.tsx
# src/components/video-editor/index.ts
# src/components/video-editor/projectPersistence.ts
# src/components/video-editor/timeline/TimelineEditor.tsx
# src/components/video-editor/types.ts
# src/i18n/locales/nl/launch.json
2026-04-17 13:58:36 +10:00
webadderall
fdb8389883
Merge remote-tracking branch 'origin/main' into feat/timeline-editor
...
# Conflicts:
# src/components/video-editor/timeline/Item.tsx
# src/components/video-editor/timeline/TimelineEditor.tsx
2026-04-17 13:54:19 +10:00
webadderall
e66a3aa583
Merge pull request #247 from webadderall/feat/export-pipeline
...
feat: add H.264 stream-copy export, overhaul exporter pipeline, rename native binaries
2026-04-17 13:48:40 +10:00
webadderall
8d925281fc
Merge remote-tracking branch 'origin/main' into feat/export-pipeline
...
# Conflicts:
# electron/electron-env.d.ts
# electron/ipc/handlers.ts
2026-04-17 13:47:15 +10:00
webadderall
ab2cbd9202
Merge pull request #246 from webadderall/feat/ui-overhaul
...
feat: ui overhaul — Phosphor icons, redesigned launcher, editor layout, and component refresh
2026-04-17 13:36:28 +10:00
webadderall
ec4d4318d4
fix: clear annotation selection for zoom edits
2026-04-17 12:03:37 +10:00
webadderall
ff2b19a61b
fix: finish remaining settings review items
2026-04-17 12:00:42 +10:00
webadderall
6861a41ff9
fix: address remaining CodeRabbit feedback
2026-04-17 11:56:31 +10:00
webadderall
c7ed81129e
fix: stabilize editor settings and extension UI
2026-04-17 01:50:14 +10:00
webadderall
0206e38e2c
fix: address remaining settings review feedback
2026-04-17 01:03:24 +10:00
webadderall
cf51e713e7
fix: address remaining zoom timing review feedback
2026-04-17 00:47:30 +10:00
webadderall
e6ce742f58
fix: address final export pipeline review follow-ups
2026-04-17 00:41:32 +10:00
webadderall
ae6ac0d81e
fix: address remaining ui overhaul review feedback
2026-04-17 00:27:46 +10:00
webadderall
f91e29abba
fix: address remaining timeline review feedback
2026-04-17 00:23:52 +10:00
webadderall
aa27e7cbd1
fix: address remaining export pipeline review feedback
2026-04-17 00:17:54 +10:00
webadderall
8071c6bb0e
fix: address remaining ui overhaul review feedback
2026-04-16 23:39:27 +10:00
webadderall
a83a58c671
fix: address ui overhaul review feedback
2026-04-16 22:36:23 +10:00
webadderall
1dc758e535
fix: address timeline editor review feedback
2026-04-16 19:34:02 +10:00
webadderall
993c7aff9c
fix: address settings and extensions review feedback
2026-04-16 19:16:20 +10:00
webadderall
f81a740614
fix: address export pipeline review feedback
2026-04-16 18:49:01 +10:00
webadderall
9a5ff5c0a2
feat: ui overhaul — Phosphor icons, redesigned launcher, editor layout, and component refresh
...
- Replace all lucide-react imports with @phosphor-icons/react across every
component (LaunchWindow, AnnotationSettingsPanel, ExtensionManager,
ExtensionIcon, VideoPlayback, AnnotationOverlay, CropControl, TutorialHelp,
PlaybackControls, all shadcn ui/ primitives, etc.)
- ExtensionIcon: new Phosphor-based resolver with Lucide name alias map for
backwards-compatible extension manifests
- LaunchWindow / SourceSelector: full redesign — new icon rail layout,
updated backgrounds, improved source selection UX, audio/video controls,
countdown overlay
- VideoPlayback: overhaul playback controls and preview panel layout
- Timeline items: border-radius 16px→8px, cyan→blue unification, pill height
85% for breathing room, resize handle vertical centering
- shadcn ui/: refresh accordion, dialog, dropdown, select, slider, switch,
tabs, toggle, popover, button, card, input, label, sonner, content-clamp,
audio-level-meter
- App.tsx / index.css / App.css / tailwind.config: global style updates
- types.ts, captionLayout.ts, captionStyle.ts, webcamOverlay.ts: data model
updates to support new timeline and export features
- package.json: add @phosphor-icons/react, bump dependencies
- scripts/, .eslintrc, biome, tsconfig, vite.config: tooling alignment
- extension-sources: update built-in extension bundles
2026-04-16 18:01:04 +10:00
webadderall
8cdf21e125
feat: overhaul timeline drag/resize, zoom playback, and recording hooks
...
- TimelineEditor: rewrite drag/resize with neighbour clamping — items cannot
overlap; drag preserves original duration; resize clamps to adjacent item
boundaries instead of rejecting; floating drag/resize tooltip via direct
DOM (no re-renders)
- TimelineWrapper: new wrapper component for cleaner TimelineContext wiring
- Track: extract Track component with empty-row hint slot
- AudioWaveform, Row, Subrow, KeyframeMarkers, Timeline.module.css: dark
theme timeline overhaul
- zoomSuggestionUtils: smarter auto-zoom region suggestion from cursor telemetry
- videoPlayback (zoom): fix zoomRegionUtils edge cases at timeline bounds;
rework zoomTransform for cursor-follow camera
- videoPlayback (cursor): cursorFollowCamera, cursorSway, cursorLoopTelemetry,
cursorViewport — new cursor motion and snapping pipeline
- videoPlayback (layout): layoutUtils, overlayUtils, focusUtils, motionSmoothing
- useScreenRecorder: hardened recording lifecycle, pause segment tracking,
improved WGC and SCK integration
- useVideoDevices / useMicrophoneDevices / useAudioLevelMeter improvements
2026-04-16 17:53:51 +10:00
webadderall
48cdb5c203
feat: settings tab with language picker, extension fixes, and i18n expansion
...
- SettingsPanel: new 'settings' section — in-app language picker (all 5
locales), auto-apply fresh recording zooms toggle, connect-neighboring-
zooms toggle, keybinds shortcut into KeyboardShortcutsDialog
- VideoEditor: wire autoApplyFreshRecordingAutoZooms preference through to
SettingsPanel; connect zoom settings into new section
- editorPreferences: add autoApplyFreshRecordingAutoZooms field; update tests
- extensionMarketplace: filter __MACOSX sidecar dirs when unzipping extensions
uploaded from macOS Finder (fixes manifest-not-found on Finder zips)
- useExtensions: guard window.electronAPI for SSR safety; reformat to tabs
- I18nContext: expose setLocale; persist locale preference
- ShortcutsContext: shortcut registration improvements
- lib/extensions: renderHooks, extensionHost, fileUrls, cursorCoordinates
updated for new extension capability surface
- i18n: expand extension locale strings across all 5 supported languages
2026-04-16 17:52:53 +10:00
webadderall
8abceaa914
feat: add H.264 stream-copy export, overhaul exporter pipeline, rename native binaries
...
- IPC: new inputMode 'h264-stream' — browser VideoEncoder output stream-copied
into MP4 via ffmpeg rather than piping raw RGBA frames, cuts memory usage
- Security: replace flat approvedLocalReadPaths with userApprovedPaths fed from
dialog pickers and project load; isAllowedLocalReadPath uses it alongside
dir prefix / existsSync checks
- nativeVideoExport: add buildNativeH264StreamExportArgs for stream-copy path
- frameRenderer / modernFrameRenderer: cursor-follow camera integration,
annotation blur post-processing, shadow profile, squircle geometry
- audioEncoder / streamingDecoder / gifExporter / muxer: full pipeline
hardening — drift correction, backpressure, proper teardown
- Rename native helpers openscreen-* → recordly-* on darwin-arm64 and
darwin-x64; update helpers-manifest.json for win32-x64
- electron/main, windows, updater, rendererServer: startup and window
lifecycle improvements
- preload: expose inputMode and new IPC surface to renderer
2026-04-16 17:51:41 +10:00
webadderall
0eee64310b
Update EXTENSIONS.md
2026-04-15 20:55:56 +10:00
webadderall
38e54e2b12
fix: allow local export media files
v1.1.23
2026-04-15 18:02:46 +10:00
webadderall
60d364a4ed
fix: hotfix export regressions
2026-04-15 17:19:49 +10:00
webadderall
0026698b17
chore: apply low-risk lint cleanup
2026-04-15 14:59:02 +10:00
webadderall
71e557c325
docs: sync Chinese README with English version
2026-04-15 14:42:43 +10:00
webadderall
e34881fec4
fix(export): remove output path restriction
v1.1.22
2026-04-14 22:28:30 +10:00
webadderall
cb61814e78
Merge pull request #228 from Wing900/fix/silent-mp4-exports
...
Fix silent MP4 exports with FFmpeg audio fallback
2026-04-13 20:38:45 +10:00
webadderall
8f50cc1010
Merge pull request #224 from afostr/feature/preserve-hud-position
...
fix(hud): preserve user-dragged position across recording state changes
2026-04-13 20:37:26 +10:00
Wing900
654ed79ba8
Fix silent MP4 exports with FFmpeg audio fallback
2026-04-12 20:55:34 +08:00
webadderall
3017d8fc9a
Add Francesco to the list of supporters
2026-04-12 20:37:34 +10:00
webadderall
443fcda886
Update README.md
2026-04-12 20:34:58 +10:00
webadderall
4455bef9d6
Update README.md
2026-04-12 20:14:09 +10:00
webadderall
bc5909613d
Update README for new video
...
Refactor README to enhance clarity and encourage contributions.
2026-04-12 20:11:55 +10:00