v5.0.0-alpha
Pre-release
Pre-release
·
445 commits
to main
since this release
🚀 v5.0.0 — Video Editing, Trim System & Platform Stability
🎬 Full non-destructive video editing, a visual trim timeline, centralized keyboard shortcuts, and a sweeping round of Linux/GL stability fixes.
Key Updates
✂️ Video Editing Workflow
- Introduced a complete non-destructive video editing suite powered by a smooth OpenGL-accelerated preview pipeline.
- Added a visual trim timeline with thumbnail strip, draggable in/out handles, and real-time playhead clamping inside the trim range.
- Trim in/out points are saved to the sidecar file and persist across app restarts; the gallery duration badge now reflects the trimmed length.
- Playback progress bar is remapped to the active trim range so the scrubber always tracks the visible portion of the clip.
- Fixed stale progress bar after returning from edit mode — duration is force-synced when the video is reloaded.
- Added video transport keyboard shortcuts (seek, play/pause, frame-step) inside the video edit panel.
- Simplified the video edit sidebar section layout for a cleaner editing experience.
⌨️ Centralized Keyboard Shortcuts
- Introduced
AppShortcutManager— a single class that owns all application-level keyboard bindings, eliminating duplicated shortcut setup across components. - Space bar play/pause now works reliably in both gallery view and detail view.
- Added full gallery-mode video shortcuts: volume up/down, mute toggle (M key), and playback controls.
- Fixed M-key mute shortcut registration; renamed shortcut volume constant for clarity.
🔍 Zoom Handle in Gallery / Detail View
- Added a resize/zoom handle in the video header bar so users can adjust the preview size directly from the gallery and detail view without entering edit mode.
- Zoom state is emitted via
zoomChangedand properly synced when switching renderer surfaces or clearing a frame.
🐧 Linux GL Playback Stability
- Fixed a critical black-screen bug in adjusted (edited) video playback on Linux caused by Qt's QRhi context not owning the OpenGL state needed by the custom GL renderer.
- Aligned the Linux QRhi GL viewer with the Qt GL context; used Qt GL functions for VAO creation with an automatic fallback when QRhi rejects VAO binds.
- Hardened GL matrix uniform uploads and stabilized video frame dispatch on the GUI thread to eliminate flicker and rotation artifacts on Linux.
- Snapshots non-packed video frames before uploading to prevent intermittent corruption.
- Fixed Linux edit-preview viewport sizing and queuing of frames to avoid dropped frames during playback.
🖼️ Crop Overlay & Edit Transition Fixes
- Fixed crop overlay disappearing when the overlay VAO was unavailable — the renderer now falls back to default vertex-array state so the orange crop frame always renders.
- Cleared stale pre-existing GL errors before binding the overlay VAO; those errors were silently disabling the overlay on Linux.
- Restored correct crop-frame fade behavior: the orange border always remains visible; only handles and guides are suppressed in faded state.
- Deferred restoration of the detail chrome and filmstrip until the edit-exit animation fully completes, preventing layout jumps.
- Respected the user's filmstrip visibility preference when leaving edit mode.
- Fixed video canvas proportions after exiting edit mode by using
crop_center_zoom_strength=1.0in detail/non-edit mode.
🎞️ Video Metadata & Info Panel
- Implemented multi-level cross-brand lens extraction for both video and image assets — the info panel now resolves lens model, focal length, and aperture from multiple ExifTool fields across all major camera brands.
- ExifTool is invoked during video playback enrichment to populate lens/focal-length fields that are absent from the media container.
- Fixed normalization of raw
LensInfotuples (e.g."23 23 2 2") into human-readable strings ("23mm f/2"). - Eliminated duplicated focal-length/aperture suffixes when the lens string already contains mm notation.
- Fixed the
ƒaperture format in the info panel display.
🐛 Fixes of major bugs
- Fixed video rotation not refreshing immediately when changed in playback mode.
- Fixed
ExternalToolErrornot being caught explicitly during playback metadata enrichment, preventing silent failures. - Fixed
_restore_detail_video_previewto correctly usevideo_requires_adjusted_previewand pass raw adjustments on the native render path. - Fixed out-point reset when re-entering edit mode —
PlaybackCoordinatornow guards trim remapping in edit mode. - Fixed SHA-1 usage in temp file naming replaced with SHA-256 for stronger stability guarantees.
- Fixed GL
glBindTextureredundancy beforeglGenerateMipmapcalls. - Used
ctypes c_uintGL id buffers to avoid numpy dtype warnings on Windows. - Fixed
QShortcutparent widget to use the top-level window instead of a nested widget, preventing shortcuts from silently failing. - Fixed several other minor bugs and improved overall stability.
🚀 v5.0.0 — 视频编辑、裁剪系统与平台稳定性
🎬 全功能非破坏性视频编辑、可视化裁剪时间线、集中式快捷键管理,以及针对 Linux/GL 稳定性的大规模修复。
核心更新
✂️ 视频编辑工作流
- 引入了全套非破坏性视频编辑套件,由平滑的 OpenGL 加速预览管线驱动。
- 新增可视化裁剪时间线,包含缩略图条、可拖动的入点/出点手柄,以及裁剪范围内的实时播放头限制。
- 裁剪的入点和出点将保存至 Sidecar 文件并在应用重启后持久保存;图库中的时长角标现在会反映裁剪后的长度。
- 播放进度条已重新映射至激活的裁剪范围,确保进度滑块始终对应片段的可视部分。
- 修复了从编辑模式返回后进度条停滞的问题——在视频重新加载时强制同步时长。
- 在视频编辑面板中增加了视频传输快捷键(寻道、播放/暂停、逐帧步进)。
- 简化了视频编辑侧边栏的布局,提供更清爽的编辑体验。
⌨️ 集中式快捷键
- 引入
AppShortcutManager—— 统一管理所有应用级键盘绑定的类,消除了跨组件的重复快捷键设置。 - 空格键播放/暂停现在可在图库视图和详情视图中稳定运行。
- 增加了完整的图库模式视频快捷键:音量增减、静音切换(M 键)及播放控制。
- 修复了 M 键静音快捷键的注册问题;为清晰起见重命名了音量快捷键常量。
🔍 图库/详情视图缩放手柄
- 在视频标题栏增加了调整大小/缩放手柄,用户可以直接在图库和详情视图中调整预览尺寸,无需进入编辑模式。
- 缩放状态通过
zoomChanged发送,并在切换渲染表面或清除帧时保持同步。
🐧 Linux GL 播放稳定性
- 修复了 Linux 上调整(已编辑)视频播放时出现的严重黑屏错误;该错误是由 Qt 的 QRhi 上下文未持有自定义 GL 渲染器所需的 OpenGL 状态导致的。
- 将 Linux QRhi GL 视图与 Qt GL 上下文对齐;使用 Qt GL 函数创建 VAO,并在 QRhi 拒绝 VAO 绑定时自动回退。
- 强化了 GL 矩阵 Uniform 上传,并稳定了 GUI 线程上的视频帧调度,以消除 Linux 上的闪烁和旋转伪影。
- 在上传前对非打包视频帧进行快照处理,以防止间歇性的图像损坏。
- 修复了 Linux 编辑预览视口的大小计算和帧队列处理,避免播放过程中丢帧。
🖼️ 裁剪叠加层与编辑切换修复
- 修复了当叠加层 VAO 不可用时裁剪覆盖层消失的问题——渲染器现在会回退到默认顶点数组状态,确保橙色裁剪框始终显示。
- 在绑定叠加层 VAO 之前清除既有的 GL 错误;这些错误此前会在 Linux 上静默禁用叠加层。
- 恢复了正确的裁剪框淡出行为:橙色边框始终可见,仅在淡出状态下隐藏手柄和辅助线。
- 推迟了详情页装饰元素和胶片栏的恢复,直至退出编辑的动画完全结束,防止布局跳动。
- 退出编辑模式时,将遵循用户对胶片栏可见性的偏好设置。
- 通过在详情/非编辑模式下使用
crop_center_zoom_strength=1.0,修复了退出编辑模式后的视频画布比例。
🎞️ 视频元数据与信息面板
- 实现了针对视频和图像资源的多级跨品牌镜头信息提取——信息面板现在可以从所有主流相机品牌的多个 ExifTool 字段中解析镜头型号、焦距和光圈。
- 在视频播放增强过程中调用 ExifTool,以填充媒体容器中缺失的镜头/焦距字段。
- 修复了原始
LensInfo元组(如"23 23 2 2")向人类可读字符串(如"23mm f/2")的归一化处理。 - 当镜头字符串已包含 mm 符号时,消除了重复的焦距/光圈后缀。
- 修复了信息面板显示中的
ƒ光圈格式。
🐛 重大错误修复
- 修复了在播放模式下更改视频旋转角度后无法立即刷新的问题。
- 修复了在播放元数据增强期间未显式捕获
ExternalToolError的问题,防止静默失败。 - 修复了
_restore_detail_video_preview以正确使用video_requires_adjusted_preview并在原生渲染路径上传递原始调整参数。 - 修复了重新进入编辑模式时出点重置的问题——
PlaybackCoordinator现在会在编辑模式下保护裁剪映射。 - 临时文件命名中的 SHA-1 替换为 SHA-256,以提供更强的稳定性保障。
- 修复了
glGenerateMipmap调用前多余的 GLglBindTexture操作。 - 使用
ctypes c_uint作为 GL ID 缓冲区,以避免 Windows 上的 numpy dtype 警告。 - 修复了
QShortcut父级部件,使其指向顶级窗口而非嵌套部件,防止快捷键静默失效。 - 修复了其他若干细微 Bug 并提升了整体稳定性。