Skip to content

Add replay library and built-in clip editor - #8

Merged
FaulMit merged 3 commits into
mainfrom
agent/captail-v0.1.4
Aug 2, 2026
Merged

Add replay library and built-in clip editor#8
FaulMit merged 3 commits into
mainfrom
agent/captail-v0.1.4

Conversation

@FaulMit

@FaulMit FaulMit commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Summary

  • show every saved replay in a virtualized, vertically scrollable library
  • replace hard replay-card glow with compact animated hover actions
  • add built-in trimming with responsive preview, one visual range, audio-track controls, copy, and confirmed overwrite
  • show live estimated trim size, source size, resolution, FPS, and codec
  • add automatic desktop/game switching and game-only capture mode
  • bundle a pinned, SHA-256-verified FFmpeg runtime
  • refresh English README and cursor-free screenshots for v0.1.4

Validation

  • Debug and Release builds: 0 warnings, 0 errors
  • dotnet format --verify-no-changes
  • NuGet vulnerable packages: none
  • English/Russian resource parity: 257 keys
  • AV1, HEVC, and H.264 recording QA with separate audio tracks
  • three-cycle watchdog recovery QA
  • replay segments, preview geometry, capability model, and update-check QA
  • self-contained Portable archive contents and SHA-256 verified

@chatgpt-codex-connector chatgpt-codex-connector Bot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ac7c4b3d83

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +236 to +240
"-ss", start.TotalSeconds.ToString("0.###", CultureInfo.InvariantCulture),
"-i", sourcePath,
"-t", (end - start).TotalSeconds.ToString("0.###", CultureInfo.InvariantCulture),
"-map", "0:v:0",
"-c", "copy",

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Re-encode cuts that start between keyframes

For nearly every trim whose start is not a keyframe, placing -ss before the input while using -c copy does not produce the selected start time. FFmpeg's -ss documentation explains that input seeking with stream copy preserves the segment between the preceding seek point and the requested position; with this project's two-second keyframe interval, a saved or overwritten clip can therefore contain up to roughly two seconds that the user excluded in the editor. Use an accurately decoded/re-encoded boundary or another exact-cut strategy.

Useful? React with 👍 / 👎.

Comment on lines +1233 to +1234
if (Interlocked.Exchange(ref _libraryRefreshInProgress, 1) != 0)
return;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Queue overlapping library refresh requests

When a replay finishes saving while a library refresh is already processing metadata or thumbnails, NotifyReplaySaved calls this method but the new request returns immediately. If the running scan enumerated files before that save completed, its eventual result omits the new replay and no later automatic refresh is scheduled, leaving the newly saved clip absent until the user manually refreshes or reopens the window. Record a pending refresh and run it after the active one completes.

Useful? React with 👍 / 👎.

Comment on lines +258 to +262
<ScrollViewer x:Name="RecentReplaysScrollViewer" Grid.Row="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
PanningMode="VerticalOnly" Padding="0,0,6,0">
<ItemsControl x:Name="RecentReplaysList"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Let the virtualizing panel own scrolling

With many saved replays, placing the ItemsControl inside this external ScrollViewer gives its VirtualizingStackPanel unbounded vertical space, so every replay container is measured and realized despite the virtualization flags. The new “every replay” library will therefore become progressively slower and more memory-heavy as collections grow. Use a scrolling items control whose internal ScrollViewer delegates scrolling to the virtualizing panel, or otherwise constrain the panel's viewport.

Useful? React with 👍 / 👎.

@FaulMit
FaulMit merged commit 8b385c3 into main Aug 2, 2026
5 of 6 checks passed
@FaulMit
FaulMit deleted the agent/captail-v0.1.4 branch August 2, 2026 16:37
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.

1 participant