Frametime capture and analysis tool
Capture, analyze, and compare game performance on Windows. CapFrameX combines Intel's PresentMon with hardware monitoring, frametime and FPS charts, and configurable overlays.
Version 1.9.0 introduces a refreshed interface, a system information dashboard, a built-in hook-free overlay, expanded GPU telemetry, and lower background polling overhead. The application now runs on .NET 10.
If you are a reviewer or a youtuber using CapFrameX to get your data, it would be nice to mention us and link to our software. If you want to use images of the CapFrameX analysis, you could use the built in screenshot function so that our logo and name gets added to the images.
CapFrameX is sponsored by Hone. We thank Hone for supporting the project and its continued development.
Download CapFrameX v1.9.0:
The revised packages contain application version 1.9.0.8. The CapFrameX in-game overlay is disabled and its injection components are omitted until our code-signing certificate is available. BENCHLAB monitoring remains available with a separately installed compatible service; the service is no longer bundled.
When replacing an earlier 1.9.0 portable package, extract this revision into a new folder and copy over your Portable data folder if needed. This prevents old hook, Vulkan, or service files from remaining beside the new application.
| Package | Use |
|---|---|
| Installer | Extract the ZIP and run CapFrameXBootstrapper.exe. Setup installs the application and removes obsolete CapFrameX Vulkan layer registrations. |
| Portable | Extract the complete ZIP and run CapFrameX.exe. Keep portable.json beside it to store settings, captures, and logs in the portable folder. |
Install the .NET 10 Desktop Runtime (x64) before running setup or the portable application. The Desktop Runtime is required even if another .NET version or the plain .NET Runtime is already installed.
See the release notes for changes and package checksums, Portable Mode for configuration, and all releases for older versions. Development builds are available from the build archive.
The following tips address the most common issues reported by users and can help resolve stability, overlay, and capture-related problems efficiently. We recommend working through them in order if you encounter unexpected behavior.
Ensure you are running the latest version
Install the latest stable release and its required .NET Desktop Runtime. Version 1.9.0 requires .NET 10 Desktop Runtime (x64); the installer checks for it before proceeding.
Reset application settings
In some cases, corrupted or outdated configuration files may cause problems. Close CapFrameX, back up your configuration, and rename
%appdata%/CapFrameX/Configuration/AppSettings.json
to let CapFrameX recreate its default settings on the next start. In portable mode, use the configuration folder specified in portable.json instead.
Reset overlay configuration files
If overlay-related problems persist, close CapFrameX and back up or rename the overlay configuration files located at
%appdata%/CapFrameX/Configuration/OverlayEntryConfiguration_(0/1/2).json.
These files will be recreated automatically on the next application start.
Restore missing or zero-value overlay entries
When overlay entries are missing or display constant zero values, open the Overlay tab and use the Reset button to restore all overlay entries to a valid default state.
Fix incorrect overlay entry order
If the order of overlay entries appears inconsistent or unintentionally rearranged, use the Sort button in the Overlay tab to restore a clean and logical ordering.
Resolve frametime anomalies after updates
Close CapFrameX and any other capture tools before updating. If a capture service remains running after an application has exited, close its leftover PresentMon process before starting a new capture session.
Avoid conflicts with other monitoring tools
Applications such as HWiNFO or AIDA64 that implement their own FPS or frametime metrics may conflict with CapFrameX’s capture service, as they also rely on PresentMon-based mechanisms. Disabling overlapping FPS or frametime monitoring features in those tools is strongly recommended when using CapFrameX.
Configure the capture hotkey, duration, sensor logging, and run history. The process list determines which application is captured.
The Info tab brings together CPU, GPU, memory, and mainboard details with live telemetry and system features such as Resizable BAR, HAGS, and Windows Game Mode.
Choose a renderer under Overlay → OSD options:
| Renderer | Behavior |
|---|---|
| CapFrameX hook-free | Built-in overlay without injecting into the game. This is the default for new configurations and offers an output-display picker and chart refresh control. |
| CapFrameX in-game (Experimental) | Unavailable in v1.9.0. The option remains disabled and will be delivered in a later update once our code-signing certificate is available. |
| RTSS | Uses RivaTuner Statistics Server, which must be installed separately. |
Configure individual entries, colors, groups, and three profiles in Overlay items. OSD options include opacity, zoom, placement, a position hotkey, and PresentMon replay buffering. Existing RTSS and hook-free selections are preserved. An earlier in-game selection is migrated to hook-free.
Inspect frametimes, FPS, percentiles, stuttering, distributions, and recorded sensor data for an individual capture.
Combine multiple runs using their raw frametimes, with configurable outlier handling. Aggregation is available for recorded captures and directly from the capture run history.
Compare captures using bar charts, time series, distributions, and variance views. Select metrics and labels, sort results, and highlight individual series.
Choose which available CPU, GPU, memory, and storage sensors to record. Version 1.9.0 adds GPU memory allocation telemetry, NVIDIA memory temperature and estimated bandwidth readings, and AMD Anti-Lag/FLM integration on supported hardware.
Collect selected captures in a table, choose the reported metrics, and display an average row. Copy the results from the context menu to use them in Excel or other tools.
Share captures through upload IDs and download shared records for local analysis.
CapFrameX ships an in-process MCP server that lets compatible AI clients read recorded captures, compute statistics, diagnose issues, and query the live system. It also exposes tools to start and stop captures and update application, overlay, and sensor settings. The server runs only while CapFrameX is running and is reachable on http://localhost:/mcp (default port 1337; if taken, CapFrameX falls back to a free port and persists the choice in AppSettings.json).
No additional install. The MCP server is part of CapFrameX.exe.
Make sure CapFrameX is running.
Look up the active port in %appdata%/CapFrameX/Logs/CapFrameX.log (search for the line MCP endpoint available at http://localhost:/mcp) or open %appdata%/CapFrameX/Configuration/AppSettings.json and read WebservicePort.
Register the server with Claude Code (one-time):
claude mcp add -s user capframex --transport http http://localhost:/mcp
Verify:
claude mcp list
Expected:
capframex: http://localhost:/mcp (HTTP) - ✓ Connected
In any new Claude Code session, type /mcp to see the server in the active connection list. The tools become available to the model.
If CapFrameX is not running, the connection appears as disconnected. Start CapFrameX and the connection comes back live.
Add this to your claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"capframex": {
"url": "http://localhost:/mcp"
}
}
}
Restart Claude Desktop. The CapFrameX tools appear in the MCP picker.
| Tool | Purpose |
|---|---|
cfx_ping |
Connectivity check (returns pong). |
cfx_list_records |
Lists capture records from the configured directory; optional substring filter on game/process. |
cfx_get_record |
Full metadata of a record (system info, run count, settings). |
cfx_search_records |
Free-text search across game/comment/CPU/GPU/OS/RAM. |
cfx_get_metrics |
FPS metrics (Average, P1, P0.2, Min, Max, AdaptiveStd, …) — single run or all runs. |
cfx_compare_records |
Side-by-side metric table across multiple records with absolute and percentage deltas. |
cfx_get_sensor_summary |
Per-sensor avg/min/max for CPU/GPU/RAM/VRAM channels. |
cfx_analyze_bottleneck |
Classifies a run as cpu-bound, gpu-bound, balanced, thermal-throttling, or power-limited (with confidence + reasoning). |
cfx_diagnose_capture |
Scans recent log entries for capture-related failures. Pattern library: ETW conflicts, anti-cheat, permissions, PresentMon errors, blacklisted processes, etc. |
cfx_diagnose_general |
Same as above but with focus area (capture / sensors / overlay / all). |
cfx_get_capture_timeline |
Chronological capture-related events from the log (hotkey, PresentMon start/stop, session save, errors). |
cfx_get_current_system |
Live system info: CPU, GPU, RAM, OS, motherboard, Resizable BAR (HW + D3D + Vulkan), HAGS, GameMode, PCI BAR sizes. |
cfx_get_capture_status |
Read-only capture state: isCapturing, isLocked, current state (Started, Processing, Stopped, …). |
The table above covers analysis and diagnostics. Additional tools include cfx_list_processes, cfx_start_capture, cfx_stop_capture, cfx_get_config, cfx_set_config, cfx_get_overlay_entries, cfx_set_overlay_entry, and cfx_set_logged_sensors. Capture-control and configuration tools change application state; the MCP interface is not read-only.
Ask Claude in natural language. Below are three concrete examples that exercise multiple tools.
Claude internally calls cfx_search_records with "Cyberpunk", takes the three most recent ids, then calls cfx_compare_records with default metrics (Average, P1, P0.2, Min, Max). Output: a tabular comparison with deltas highlighting which run was best/worst.
Claude calls cfx_list_records filtered by Spider-Man, picks the newest, then calls cfx_get_metrics to confirm the average, cfx_get_sensor_summary to see CPU/GPU load, and cfx_analyze_bottleneck to get a verdict. Typical answer: "GPU load averaged 74 %, CPU max-thread load 82 % — the run is CPU-bound; this is consistent with Spider-Man 2's known DX12 main-thread bottleneck."
Claude calls cfx_diagnose_capture (default 30-min lookback) and cfx_get_capture_timeline. Typical findings: an ET
No open issues yet, or sync has not completed.