Skip to content

Improve v2 usability, preview flow, and configuration without changing the core detection algorithm#158

Open
TheAutomatic wants to merge 40 commits intocirquit:v2from
TheAutomatic:v2.1
Open

Improve v2 usability, preview flow, and configuration without changing the core detection algorithm#158
TheAutomatic wants to merge 40 commits intocirquit:v2from
TheAutomatic:v2.1

Conversation

@TheAutomatic
Copy link
Copy Markdown

Hi,

I’ve spent a fair amount of time working on top of the v2 branch because I really like the project and wanted to make it easier to use day to day.

One important note up front: I did not intentionally change the core frame-duplication / framerate detection algorithm. I wasn’t trying to “improve” that part without fully understanding it, so I kept my changes focused on usability, preview/render flow, configuration, packaging, and CI.

This PR mainly includes:

  • YAML preset loading and more configurable GUI options
  • real-time preview and seek rendering improvements
  • redraw throttling so preview updates don’t run unnecessarily fast and drive GPU usage too high
  • async/profiling/export pipeline improvements
  • a lot of UI/layout polish, dark mode and translation fixes, and better multi-video behavior
  • FPS/frametime overlay fixes and readability improvements, especially in multi-video layouts
  • packaging / release / CI workflow cleanup
  • a few compatibility fixes around metadata handling, encoder probing, and video pipeline robustness

So the goal here was not to change how TRDrop decides what is a duplicate frame. The goal was to make the v2 branch easier to use, easier to test/package, and more stable in actual use.

I realize this is a fairly broad PR. If you’d prefer, I’m happy to split it into smaller PRs by area, for example:

  • GUI / usability
  • preview / rendering / performance
  • packaging / CI / release workflow

Thanks again for the project.

Replace hardcoded font size 12 with cfg.label_font_size (default 20)
in both FpsPlotConfig and FrametimePlotConfig.
…k mode

- Real-time preview: live composited frame display during processing
- Seek rendering: compositor renders full overlays on seek
- HEVC encoding: prefer hevc_videotoolbox/nvenc over h264, with fallback
- Export FPS: configurable via YAML (10-120 range, default: source fps)
- Multi-video fixes: multi-file picker, add/remove in READY state,
  FPS text positioned per-video region instead of all at top-left
- Video filenames: shown in top-right of each video region with color
- Dark mode: removed hardcoded colors, uses system QPalette
- Plot overlay: bold text with black outline (DF-style), scaled spacing
- QPainter state isolation: save/restore prevents rendering artifacts
- Default FPS text font_size increased to 0.048
- Example preset YAML template added
- Replace broken 5-stage FFmpeg filter pipeline with numba-accelerated
  256^3 3D LUT approach (PQ EOTF + BT.2020→BT.709 gamut + Reinhard
  tonemap + BT.709 OETF), ~13ms per 4K frame
- Mark output video stream as BT.709 SDR to prevent players from
  double-tonemapping
- Add comprehensive README.md (EN) and README_CN.md (CN) with usage
  guide, control bar reference, workflow, and HDR support docs
- Add full comments to trdrop_preset.example.yaml explaining every
  parameter
Add PyInstaller spec and runtime hook to produce a ~102MB standalone
Windows EXE. Icon path resolution is now freeze-aware via a new
frozen.py helper so source-tree runs on all platforms are unaffected.

Optimizations applied:
- Exclude numba test suite from bundle
- Exclude unused PyQt6 modules (QtPdf, QtSvg, QtNetwork, etc.)
- Strip unnecessary Qt plugins and translation files
- Runtime hook pre-loads FFmpeg DLLs in dependency order
chore(release): clean up unused code in GitHub release workflow
@cirquit
Copy link
Copy Markdown
Owner

cirquit commented Apr 3, 2026

Hi, thanks for the contribution! I want to be very upfront about the state of the project - this is essentially a pet project that I ultimately want to bring into a useful shape, but life gets in the way.

I can't guarantee that I will find time in the near future to parse to your proposed changes, but I do want to keep the flexibility to scrap ideas and rework the API if need be. In any way, I will definitely take all of your changes into consideration whenever I find the time to progress here and potentially build on top of them/include them.

Please feel free to continue pushing to this branch rather than creating multiple PRs, this allows me to see your work holistically and understand your motivation/ideas behind the changes.

@TheAutomatic
Copy link
Copy Markdown
Author

Hi,
Thank you for the candid reply! I completely understand that this is a personal project and real life always comes first. Please don't feel any pressure to review or merge this PR. Take your time, and whenever you do have the time, you are more than welcome to use, scrap, or completely rewrite any of these ideas to fit your vision.

I fully agree with your perspective on keeping the API flexible. To be completely frank, I'm pretty much a beginner when it comes to the complex coding parts. That's why my changes are strictly focused on the UI and usability layer. I didn't touch the core detection algorithm—and I don't plan to—simply because I don't have the technical depth to mess with it! My main motivation was just to provide a straightforward "click-and-play" experience so that I and some of my console-gaming friends can use the app effortlessly.

I am more than happy to follow your suggestion and just keep pushing my updates to this single branch. That way, you'll have a holistic view of the changes in one place whenever you want to check them out.

Lastly, even if you decide not to merge any of this code, I highly recommend downloading and trying out the new UI build just for fun, to see how the experience feels!

Thanks again for the amazing foundational work on the v2 branch. Wishing you all the best with your work and life!

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