{"id":3400,"date":"2025-03-18T14:01:44","date_gmt":"2025-03-18T20:01:44","guid":{"rendered":"https:\/\/www.lunarg.com\/?p=3400"},"modified":"2025-03-18T14:01:44","modified_gmt":"2025-03-18T20:01:44","slug":"how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture","status":"publish","type":"post","link":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/","title":{"rendered":"How to Trim a GFXR File Using GFXReconstruct &#8220;Recapture&#8221;"},"content":{"rendered":"<p>If you&#8217;re working with graphics debugging or Vulkan application analysis, you\u2019ve likely encountered GFXReconstruct\u2014a powerful open-source tool by LunarG for capturing and replaying graphics API calls. But sometimes, those capture files can balloon in size\u2014especially if you\u2019re recording an entire session when you only need a small slice of it to reproduce a bug or analyze a specific moment.<\/p>\n<p>One of the lesser-known but incredibly useful features of GFXReconstruct is the ability to &#8220;recapture&#8221; during replay, allowing you to trim a lengthy GFXR capture file down to a shorter, more focused version. In this blog post, we\u2019ll go through the process step-by-step. (The discussion here refers to execution on a Windows or Linux or macOS desktop system. Trimming on Android is significantly different and will be the topic of a future tutorial.)<\/p>\n<h3>What is GFXReconstruct &#8220;Recapture&#8221;?<\/h3>\n<p>GFXReconstruct\u2019s &#8220;recapture&#8221; process involves replaying an existing GFXR file with the capture layer enabled, letting you record a new, trimmed capture file that includes only the frames or sections you care about. This method leverages the replay process to create a new file\u2014perfect for isolating specific moments in a graphics workload without slogging through the entire original capture.<\/p>\n<h3>Why Trim a GFXR File?<\/h3>\n<p>Trimming is invaluable when:<\/p>\n<ul>\n<li>You\u2019re debugging a bug that occurs in a specific frame range.<\/li>\n<li>You want to share a concise capture with a colleague or report a bug without sending gigabytes of data.<\/li>\n<li>You need to optimize replay performance by focusing on a smaller subset of frames.<\/li>\n<\/ul>\n<p>Let\u2019s dive into how to do it!<\/p>\n<h2>Step-by-Step Guide to Trimming a GFXR File with Recapture<\/h2>\n<h3>Prerequisites<\/h3>\n<p>Before starting, ensure you have:<\/p>\n<ul>\n<li><strong>GFXReconstruct installed<\/strong>: You\u2019ll need the tools (gfxrecon-replay, etc.) from the latest Vulkan SDK or built from the GitHub repository.<\/li>\n<li><strong>A source GFXR file<\/strong>: This is the original capture you want to trim (e.g., original_capture.gfxr).<\/li>\n<li><strong>A working Vulkan environment<\/strong>: Since recapture uses replay, your system must support Vulkan and be able to run the original capture successfully.<\/li>\n<li><strong>Python:<\/strong> The gfxrecon-capture-vulkan.py script requires Python 3.5 or higher<\/li>\n<\/ul>\n<h3>Step 1: Understand Your Source File<\/h3>\n<p>First, get a sense of what\u2019s in your original GFXR file. Use the gfxrecon-info tool to inspect it:<\/p>\n<p style=\"color: #008000; font-family: Courier; background-color: #d0d0d0; text-indent: 50px;\">gfxrecon-info original_capture.gfxr<\/p>\n<p>This will output details like the total frame count, helping you decide which frames to trim to. For example, if your bug appears around frame 100 to 150, that\u2019s your target range.<\/p>\n<h3><strong>Step 2: Capture API calls with a Python<\/strong> Convenience<strong> Script<\/strong><\/h3>\n<div><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">The trick to trimming is replaying the original capture while enabling the GFXReconstruct capture layer again. We\u2019ll use <\/span><\/span><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-z32n2g r-z2wwpe r-1hkscgl r-1471scf r-1aiqnjv r-1hq4qhi r-16dba41 r-ilng1c r-trst2h r-1noe1sz r-njp1lv\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">gfxrecon-capture-vulkan.py<\/span><\/span><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\"> to orchestrate this, as it handles the layer setup nicely. Here\u2019s the command structure:<\/span><\/span><\/div>\n<p style=\"color: #008000; font-family: Courier; background-color: #d0d0d0; text-indent: 50px;\">python gfxrecon-capture-vulkan.py -o trimmed_capture.gfxr &#8211;capture-frames 100-150 gfxrecon-replay original_capture.gfxr<\/p>\n<p>Explanation:<\/p>\n<ul>\n<li>-o trimmed_capture.gfxr: Specifies the file name for the new, trimmed capture file.<\/li>\n<li>&#8211;capture-frames 100-150: Specifies the frame range to recapture (replace with your desired range).<\/li>\n<li>gfxrecon-replay original_capture.gfxr: The capture file that is to be replayed and trimmed.<\/li>\n<\/ul>\n<p>(Note: On some systems you may have to specify python3 instead of python.)<\/p>\n<p>When you execute this command, here&#8217;s what happens:<\/p>\n<div>\n<ul>\n<li>\n<div class=\"css-146c3p1 r-bcqeeo r-1ttztb7 r-qvutc0 r-37j5jr r-a023e6 r-rjixqe r-16dba41\" dir=\"ltr\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">The script launches <\/span><\/span><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-z32n2g r-z2wwpe r-1hkscgl r-1471scf r-1aiqnjv r-1hq4qhi r-16dba41 r-ilng1c r-trst2h r-1noe1sz r-njp1lv\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">gfxrecon-replay<\/span><\/span><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\"> with the capture layer enabled.<\/span><\/span><\/div>\n<\/li>\n<li>The commands in original_capture.gfxr are replayed.<\/li>\n<li>\n<div class=\"css-146c3p1 r-bcqeeo r-1ttztb7 r-qvutc0 r-37j5jr r-a023e6 r-rjixqe r-16dba41\" dir=\"ltr\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">As the replay runs, the capture layer monitors the frame count and starts recording at frame 100, stopping after frame 150.<\/span><\/span><\/div>\n<\/li>\n<li>\n<div class=\"css-146c3p1 r-bcqeeo r-1ttztb7 r-qvutc0 r-37j5jr r-a023e6 r-rjixqe r-16dba41\" dir=\"ltr\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">The output is written to <\/span><\/span><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-z32n2g r-z2wwpe r-1hkscgl r-1471scf r-1aiqnjv r-1hq4qhi r-16dba41 r-ilng1c r-trst2h r-1noe1sz r-njp1lv\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">trimmed_capture.gfxr<\/span><\/span><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3 r-a8ghvy\"><span class=\"css-1jxf684 r-bcqeeo r-1ttztb7 r-qvutc0 r-poiln3\">.<\/span><\/span><\/div>\n<\/li>\n<\/ul>\n<\/div>\n<p>You\u2019ll see output indicating the replay process, and possibly a note like [gfxrecon] INFO &#8211; Recording graphics API capture to game_capture.gfxr if logging is not explicitly disabled.<\/p>\n<p>GFXR will also add the trimming info and a timestamp to a capture file, so in this case it would output &#8220;game_capture_frames_100_through_150_{timestamp}.gfxr&#8221; where &#8220;timestamp&#8221; is something like &#8220;20250305T111451&#8221;.<\/p>\n<h3>Step 3: Verify the Trimmed File<\/h3>\n<p>Once the replay finishes, check your new file with gfxrecon-info:<\/p>\n<p style=\"color: #008000; font-family: Courier; background-color: #d0d0d0; text-indent: 50px;\">gfxrecon-info trimmed_capture.gfxr<\/p>\n<p>Confirm the frame count matches your expected range (e.g., 51 frames for 100-150). You can also replay it to ensure it captures the intended section:<\/p>\n<p style=\"color: #008000; font-family: Courier; background-color: #d0d0d0; text-indent: 50px;\">gfxrecon-replay trimmed_capture.gfxr<\/p>\n<h3>Tips and Tricks<\/h3>\n<ul>\n<li><strong>Trim During \u201cLive Capture\u201d: <\/strong>You don\u2019t have to capture instructions into a file. You can \u201ctrim\u201d during a live session. The same options\u00a0 and benefits apply, especially in combination with specifying the conditions for capturing data. It is still called &#8220;trimming&#8221; even though there&#8217;s no source file to trim (i.e., we&#8217;re \u201ctrimming\u201d the commands from the live app).<\/li>\n<li><strong>Logging for Debugging<\/strong>: If something goes wrong, set GFXRECON_LOG_LEVEL=debug to get detailed output during recapture.<\/li>\n<li><strong>Performance<\/strong>: Recapture requires a live GPU, so ensure your system matches the original capture system\u2019s configuration (same operating system, GPU, and driver version).\u00a0 Ideally recapture should occur soon after capture, on the same system.<\/li>\n<li><strong>Hotkey Alternative<\/strong>: Instead of a frame range, you can use &#8211;trigger {key}(e.g., use\u00a0 F12 for \u201c{key}\u201d) to manually start\/stop capturing during replay by pressing the hotkey. This is less precise but useful for interactive trimming.\u00a0 Optionally provide &#8211;trigger-frames to limit triggered frames to a count.<\/li>\n<li><strong>Optimize the Result<\/strong>: If your trimmed file still feels bloated, run\n<p style=\"color: #008000; font-family: Courier; background-color: #d0d0d0; text-indent: 50px;\">gfxrecon-optimize trimmed_capture.gfxr optimized_capture.gfxr<\/p>\n<p>to remove unused resource data.<\/li>\n<\/ul>\n<h3>Why Not a Dedicated Trim Tool?<\/h3>\n<p>You might wonder why we\u2019re jumping through these hoops instead of using a simple offline trim utility. While GFXReconstruct supports capturing specific frames during initial recording, trimming an existing file currently relies on this recapture method. A dedicated tool has been proposed (see GitHub issue #1109), but for now, recapture gets the job done\u2014albeit with a bit more setup.<\/p>\n<h3>Wrap-Up<\/h3>\n<p>Trimming a GFXR file with GFXReconstruct\u2019s recapture feature is a straightforward way to focus on the frames that matter. Whether you\u2019re debugging a glitch, analyzing performance, or sharing a concise repro, this technique saves time and disk space. Give it a try next time you\u2019re drowning in a sea of frames\u2014your future self will thank you!<\/p>\n<p>Got questions or run into issues? You can find the user\u2019s guide for GFXReconstruct <a href=\"https:\/\/vulkan.lunarg.com\/doc\/sdk\/1.4.304.1\/windows\/capture_tools.html\">here<\/a>. If that\u2019s not sufficient, drop a comment below or hit up the GFXReconstruct community on GitHub. Happy debugging!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;re working with graphics debugging or Vulkan application analysis, you\u2019ve likely encountered GFXReconstruct\u2014a powerful open-source tool by LunarG for capturing and replaying graphics API calls. But sometimes, those capture files can balloon in size\u2014especially if you\u2019re recording an entire session when you only need a small slice of it to reproduce a bug or [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":3401,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[130],"tags":[29],"class_list":["post-3400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-vulkan-sdk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Trim a GFXR File Using GFXReconstruct &quot;Recapture&quot; - LunarG<\/title>\n<meta name=\"description\" content=\"A step-by-step tutorial on how to utilize powerful features of GFXReconstruct to find and fix bugs\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Trim a GFXR File Using GFXReconstruct &quot;Recapture&quot; - LunarG\" \/>\n<meta property=\"og:description\" content=\"A step-by-step tutorial on how to utilize powerful features of GFXReconstruct to find and fix bugs\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\" \/>\n<meta property=\"og:site_name\" content=\"LunarG\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-18T20:01:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Randi Rost\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Randi Rost\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\"},\"author\":{\"name\":\"Randi Rost\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/person\/d4a06431509767fbe7599f7a0f777e7c\"},\"headline\":\"How to Trim a GFXR File Using GFXReconstruct &#8220;Recapture&#8221;\",\"datePublished\":\"2025-03-18T20:01:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\"},\"wordCount\":1044,\"publisher\":{\"@id\":\"https:\/\/www.lunarg.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg\",\"keywords\":[\"Vulkan SDK\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\",\"url\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\",\"name\":\"How to Trim a GFXR File Using GFXReconstruct \\\"Recapture\\\" - LunarG\",\"isPartOf\":{\"@id\":\"https:\/\/www.lunarg.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg\",\"datePublished\":\"2025-03-18T20:01:44+00:00\",\"description\":\"A step-by-step tutorial on how to utilize powerful features of GFXReconstruct to find and fix bugs\",\"breadcrumb\":{\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage\",\"url\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg\",\"contentUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg\",\"width\":1600,\"height\":800,\"caption\":\"How to Trim a GFXR File Using GFXReconstruct \\\"Recapture\\\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.lunarg.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Trim a GFXR File Using GFXReconstruct &#8220;Recapture&#8221;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.lunarg.com\/#website\",\"url\":\"https:\/\/www.lunarg.com\/\",\"name\":\"LunarG\",\"description\":\"3D Graphics Software Solutions\",\"publisher\":{\"@id\":\"https:\/\/www.lunarg.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.lunarg.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.lunarg.com\/#organization\",\"name\":\"LunarG\",\"url\":\"https:\/\/www.lunarg.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png\",\"contentUrl\":\"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png\",\"width\":767,\"height\":304,\"caption\":\"LunarG\"},\"image\":{\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/person\/d4a06431509767fbe7599f7a0f777e7c\",\"name\":\"Randi Rost\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.lunarg.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e2d17f25d1e453284a5bc16a7b1458e?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e2d17f25d1e453284a5bc16a7b1458e?s=96&d=retro&r=pg\",\"caption\":\"Randi Rost\"},\"url\":\"https:\/\/www.lunarg.com\/author\/randi-rost\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Trim a GFXR File Using GFXReconstruct \"Recapture\" - LunarG","description":"A step-by-step tutorial on how to utilize powerful features of GFXReconstruct to find and fix bugs","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/","og_locale":"en_US","og_type":"article","og_title":"How to Trim a GFXR File Using GFXReconstruct \"Recapture\" - LunarG","og_description":"A step-by-step tutorial on how to utilize powerful features of GFXReconstruct to find and fix bugs","og_url":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/","og_site_name":"LunarG","article_published_time":"2025-03-18T20:01:44+00:00","og_image":[{"width":1600,"height":800,"url":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg","type":"image\/jpeg"}],"author":"Randi Rost","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Randi Rost","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#article","isPartOf":{"@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/"},"author":{"name":"Randi Rost","@id":"https:\/\/www.lunarg.com\/#\/schema\/person\/d4a06431509767fbe7599f7a0f777e7c"},"headline":"How to Trim a GFXR File Using GFXReconstruct &#8220;Recapture&#8221;","datePublished":"2025-03-18T20:01:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/"},"wordCount":1044,"publisher":{"@id":"https:\/\/www.lunarg.com\/#organization"},"image":{"@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg","keywords":["Vulkan SDK"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/","url":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/","name":"How to Trim a GFXR File Using GFXReconstruct \"Recapture\" - LunarG","isPartOf":{"@id":"https:\/\/www.lunarg.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage"},"image":{"@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg","datePublished":"2025-03-18T20:01:44+00:00","description":"A step-by-step tutorial on how to utilize powerful features of GFXReconstruct to find and fix bugs","breadcrumb":{"@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#primaryimage","url":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg","contentUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2025\/03\/How-to-Trim-With-GFXReconstruct.jpg","width":1600,"height":800,"caption":"How to Trim a GFXR File Using GFXReconstruct \"Recapture\""},{"@type":"BreadcrumbList","@id":"https:\/\/www.lunarg.com\/how-to-trim-a-gfxr-file-using-gfxreconstruct-recapture\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lunarg.com\/"},{"@type":"ListItem","position":2,"name":"How to Trim a GFXR File Using GFXReconstruct &#8220;Recapture&#8221;"}]},{"@type":"WebSite","@id":"https:\/\/www.lunarg.com\/#website","url":"https:\/\/www.lunarg.com\/","name":"LunarG","description":"3D Graphics Software Solutions","publisher":{"@id":"https:\/\/www.lunarg.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lunarg.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.lunarg.com\/#organization","name":"LunarG","url":"https:\/\/www.lunarg.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png","contentUrl":"https:\/\/www.lunarg.com\/wp-content\/uploads\/2020\/05\/logo.png","width":767,"height":304,"caption":"LunarG"},"image":{"@id":"https:\/\/www.lunarg.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.lunarg.com\/#\/schema\/person\/d4a06431509767fbe7599f7a0f777e7c","name":"Randi Rost","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lunarg.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e2d17f25d1e453284a5bc16a7b1458e?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e2d17f25d1e453284a5bc16a7b1458e?s=96&d=retro&r=pg","caption":"Randi Rost"},"url":"https:\/\/www.lunarg.com\/author\/randi-rost\/"}]}},"_links":{"self":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/posts\/3400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/comments?post=3400"}],"version-history":[{"count":0,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/posts\/3400\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/media\/3401"}],"wp:attachment":[{"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/media?parent=3400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/categories?post=3400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lunarg.com\/wp-json\/wp\/v2\/tags?post=3400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}