Skip to content

Releases: homaaio/HomRec

v1.7.0-b

Choose a tag to compare

@homaaio homaaio released this 04 Jul 10:30
663906c

Added

  • Video format selector — choose .mp4 or .mkv in Settings → Video
  • Separate audio export — Advanced Settings → Audio → "Save audio as separate .mp3"
  • Overlays system — Advanced Settings → Overlays tab:
    • Text overlays (rendered live via FFmpeg drawtext filter)
    • Webcam overlay (cam index selector)
    • Image overlay (browse for .png/.jpg/.bmp)
    • Per-overlay: opacity slider, X/Y position (%), W/H size (%)
    • Preview window — OBS-style drag-to-position: live screen grab + draggable handles
  • !check.er terminal command — interactive integrity scanner:
    • !check.er 1 — scan most recent video file
    • !check.er 2 — scan all videos in output folder
    • !check.er 3 — HomRec self-diagnostics (FFmpeg, DLL, ddagrab, audio, overlays)
    • !check.er scan #file="path" — scan a specific file

Fixed

  • Bug 1 — Minecraft/game capture single frame: Added DXGI Desktop Duplication (ddagrab) support. HomRec now auto-detects if your FFmpeg supports ddagrab and uses it instead of GDI. Works with fullscreen D3D11/D3D12/Vulkan games.
  • Bug 2 — CMD windows on startup: All subprocess calls now use CREATE_NO_WINDOW on Windows. No more flashing black console windows.
  • Bug 3 — terminal.exe freezes on connect: Added pipe keepalive heartbeat thread (2s NUL ping). Terminal's ReadFile no longer blocks indefinitely.
  • Bug 4 — -ret incorrect behavior: -ret / -return now wraps execution and prints (1) on success or (0) on failure in the console.
  • Bug 5 — ddagrab + scaling filter conflict: Fixed FFmpeg error "Simple and complex filtering cannot be used together" when recording with ddagrab at non-standard resolutions (e.g., 1200x674). The -vf filter is no longer applied when -filter_complex (scaling) is active, preventing the incompatible filter mix.

Changed

  • All UI strings and terminal output translated to English (Russian locale strings preserved in the "ru" language dict)
  • Welcome dialog simplified — no more redundant tips block
  • .mkv output fully supported: filenames, audio merge temp files all use correct extension
  • Overlay VF chain merges cleanly with existing scale/crop filters
  • Removed RU language, only EN now (but you still can add your language from .hrl)

v1.6.4

Choose a tag to compare

@homaaio homaaio released this 09 Jun 15:10
5d829f6

Added

!start --terminal as @ terminal command — launches hr_terminal.exe as an
external terminal window directly from the console. The command is handled
natively in hr_console.cpp (ShellExecuteExW next to the DLL) and mirrored
in hr_console_bridge.py (subprocess.Popen next to the script).
Appears in !help output under the !start group.

Fixed

Version bumped to 1.6.4
Console version bumped to 1.2.2
Minor bugs has been fixed (Tray bugs, icons bugs etc.)

v1.6.3

Choose a tag to compare

@homaaio homaaio released this 07 Jun 11:26
87bb817

Added

hr_terminal.exe - standalone external terminal window for HomRec console.
Runs as a separate process with its own Win32 window (Rich Edit output,
Unicode input field, Catppuccin Mocha color scheme matching the DLL console).
Multiple instances supported simultaneously (up to 8 concurrent connections).

Fixed

Minor bugs has been fixed
Version bumped to 1.6.3

v1.6.2

Choose a tag to compare

@homaaio homaaio released this 06 Jun 13:51
3aeed01

Added

In the View menu, there is a new item Show Log (appears before the Theme submenu)

Fixed

Version bumped to 1.6.2

v1.6.1

Choose a tag to compare

@homaaio homaaio released this 05 Jun 11:13
6006bc7

Added

More C++ scripts
Command "!homrec --version"

Fixed

Version bumped to 1.6.1
Console version bumped to 1.2.0
Core version bumped to 1.4.3

v1.6.0

Choose a tag to compare

@homaaio homaaio released this 04 Jun 10:46
2a9d80f

Added

Console

v1.5.0

Choose a tag to compare

@homaaio homaaio released this 31 May 07:07
e893f00

Added

Native C/C++ performance extensions (homrec_core, hr_encoder_helpers,
hr_preview, hr_ringbuf, hr_framequeue, hr_stopwatch, hr_display_info,
hr_dxgi_capture, hr_pipeline) — compiled as .dll/.so, loaded at runtime
via ctypes. Auto-discovered next to homrec.py — no config needed.
Graceful fallback to pure Python if any module is missing.

hr_pipeline: unified C++ capture thread — DXGI Desktop Duplication →
BGRA→YUV420p → named pipe (FFmpeg reads) + preview thumbnail.
Eliminates Python-side mss.grab() loop entirely on Windows.

hr_stopwatch: sub-millisecond frame-pacing timer using
QueryPerformanceCounter (Windows) / clock_gettime CLOCK_MONOTONIC (POSIX).
Fixes the 15 ms sleep granularity jitter on Windows that caused frame drops.

hr_dxgi_capture: GPU-accelerated screen capture via DXGI Desktop
Duplication API. Captures frames the moment the compositor presents them
(~1 display cycle latency vs 1-2 frame lag with GDI/BitBlt).

hr_display_info: fast monitor enumeration with per-monitor DPI via
GetDpiForMonitor (Windows) / xrandr (Linux).

homrec_native.py: Python ctypes wrapper for all native libraries with
full Python fallbacks for every function.

"Disable Preview" option in Settings → Advanced → Performance.
Shows a placeholder screen instead of live preview — saves CPU during
recording on low-end hardware.

"Update" button appears in corner when new version is detected
Welcome window shown on first launch

Changed

Capture loop: preview thread now skips mss.grab() entirely during
recording — no GDI bandwidth competition with FFmpeg.

Codec pipeline: QP range clamped (min qp=23) to prevent near-lossless
encoding (~150 Mbit/s) that saturated weak GPU encoders.

QSV encoder: removed -async_depth 1 which blocked the capture thread
waiting for GPU acknowledgement on each frame, halving FPS on i3/i5.

QSV encoder on UHD Graphics: added -low_power 1 (VDENC fixed-function
path, 2-3× faster than shader PAK) and -look_ahead 0 (removes CPU-side
lookahead overhead).

CPU encoder (libx264): thread count now set to 1 on systems with ≤4
logical cores, avoiding competition with FFmpeg for CPU time.

GIL switch interval raised from 5 ms to 20 ms — reduces GIL contention
between capture, audio and UI threads on weak CPUs. One GIL switch per
frame at 60 FPS instead of three.

OpenCV thread count set to 1 on systems with ≤4 logical cores — preview
resize does not need multiple threads.

gdigrab input: thread_queue_size reduced from 512 to 128, added
-rtbufsize 16M to limit memory pressure on systems with shared CPU+GPU RAM.

Preview update interval during recording raised from 1000 ms to 2000 ms —
capture thread sleeps 500 ms anyway so polling faster was pointless.

Audio recording stop: non-blocking teardown — streams closed before
joining threads so read() unblocks immediately. Eliminates the previous
30-second hang on stop.

Fixed

hr_audio_rms: int32_t accumulator replaced with int64_t — prevented
integer overflow on buffers larger than ~2M samples.

hr_blend_rgba: alpha compositing rounding bias corrected from +127 to
+128, fixing a systematic 1-LSB error in badge/watermark blending.

hr_framequeue: push() race condition — slot is now written before head
is advanced so the consumer can never observe a null pointer.

hr_framequeue: size() used mismatched memory orders (acquire/relaxed),
now both acquire for correct cross-thread visibility.

hr_ringbuf: wrap-around memcpy off-by-one at exact power-of-2 boundaries
fixed by computing first from mask(h) rather than raw cursor.

hr_ringbuf: reset() now zeroes buffer contents — prevents stale PCM data
from a previous recording being read after reset.

hr_display_info: missing #include caused std::stable_sort
to be invisible under MinGW, producing a build error.

hr_encoder_helpers: hr_memcpy_nt now uses _mm_stream_si128 (real NT
stores) instead of _mm_storeu_si128 (cached stores) — the function
previously claimed to be non-temporal but was not.

hr_encoder_helpers: BGRA→YUV420p and RGB→YUV420p chroma now averages
all four luma pixels in each 2×2 block instead of sampling only the
top-left pixel — visibly reduces chroma blur on fine detail.

hr_preview: restrict keyword replaced with HR_RESTRICT macro — restrict
is C99-only and caused a cascade of "not declared in this scope" errors
when compiled as C++ under MinGW g++.

homrec_native.py: duplicate _DxgiCaptureAPI singleton at module level
removed — dxcap was created twice, second instance silently overwrote
the first.

homrec_native.py: preview thumbnail now uses ctypes data_as() instead
of .tobytes() — eliminates a full buffer copy on every preview frame.

Quality loaded from old settings.json is now clamped to 50–100% to
prevent a saved value of 95–100 (quality=100 → qp=18 → ~150 Mbit/s)
from saturating the encoder on first launch after upgrade.

Application freeze after stopping recording
General optimization improvements
Tray icon logo visibility improved on dark/light taskbars

Performance

BGRX→RGB (1080p): ~6 ms → ~1.2 ms (5× faster)
Bilinear preview resize: ~4 ms → ~0.8 ms (5× faster)
Audio RMS per chunk: ~0.15 ms → ~0.04 ms (3.5× faster)
Badge blend (RGBA): ~1.2 ms → ~0.25 ms (5× faster)
Capture loop latency: ~30 ms → ~12 ms (2.5× faster)
UI thread block time: ~20 ms → ~3 ms (7× faster)
Preview thumbnail: no intermediate RGB copy (BGRA→thumb direct)

v1.4.4

Choose a tag to compare

@homaaio homaaio released this 16 May 05:21
0fd2853

Changed

Added new icons

Version bumped to 1.4.4

v1.4.3

Choose a tag to compare

@homaaio homaaio released this 04 May 15:54
70c26df

Fixed

Minor interface errors have been fixed.

Version bumped to 1.4.3

v1.4.2

Choose a tag to compare

@homaaio homaaio released this 04 May 06:57
fc28fc9

Fixed

Duplicate tray icon on second launch — added Windows single-instance
mutex (CreateMutexW). If HomRec is already running, second launch exits
immediately instead of creating another tray icon.

Microphone [Errno -9999] Unanticipated host error — now retries with
multiple channel/sample rate combinations (stereo/mono × 44100/48000/22050)
before giving up. Handles devices that only support specific configurations.

System audio [Errno -9999] — same retry logic applied to Stereo Mix device
open attempts.

Settings window not closing after Save — messagebox was shown after
dialog.destroy(), causing the window to become unresponsive. Fixed order:
show message first, then destroy.

Advanced Settings window blocking Settings from closing — added
grab_release() before destroy() so the parent window regains focus.

Version bumped to 1.4.2