{"id":2400,"date":"2025-09-04T10:30:00","date_gmt":"2025-09-04T00:30:00","guid":{"rendered":"https:\/\/digitalbbq.au\/?p=2400"},"modified":"2025-07-12T11:54:43","modified_gmt":"2025-07-12T01:54:43","slug":"optimising-ifc-files-in-python","status":"publish","type":"post","link":"https:\/\/digitalbbq.au\/index.php\/2025\/09\/04\/optimising-ifc-files-in-python\/","title":{"rendered":"Optimising IFC Files in Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I came across a Python-based IFC optimiser built on top of IfcOpenShell. It was solid, removing unused spaces, orphaned entities, and redundant metadata, but I saw room to push it further.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original script handled:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Removing empty attributes<\/li>\n\n\n\n<li>Cleaning up orphaned or unused relationships<\/li>\n\n\n\n<li>Removing tiny geometry<\/li>\n\n\n\n<li>Flattening the spatial hierarchy<\/li>\n\n\n\n<li>Deduplicating shape representations<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Good start. But I was dealing with a 517mb Ifc file and wanted to see what else I could get out of it, see if I could achieve some better results, and a few quality-of-life improvements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What I Added<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I forked the original and extended it with a few enhancements to make it more configurable and practical for day-to-day messy IFC exports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can find my version here: <a class=\"\" href=\"https:\/\/github.com\/ryanlenihan\/ifc_optimizer\">github.com\/ryanlenihan\/ifc_optimizer<\/a><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The file I was dealing with contained values to 8 decimal places! So I introduced lossy coordinate rounding based on the <a href=\"https:\/\/yushen-liu.github.io\/IFCCompressor\/index.html\" data-type=\"link\" data-id=\"https:\/\/yushen-liu.github.io\/IFCCompressor\/index.html\">IFCCompressor implementation<\/a>. It&#8217;s a regex-based pass over the raw IFC text to round IfcCartesianPoint coordinates. Reduces file size without breaking geometry. Especially useful for overly precise exports from BIM tools. Interestingly, the original author says they included this method, but I couldn&#8217;t see it.<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"># <span class=\"hljs-selector-tag\">Before<\/span>\n<span class=\"hljs-selector-tag\">IFCCARTESIANPOINT<\/span>((12345<span class=\"hljs-selector-class\">.12345678<\/span>, 67890<span class=\"hljs-selector-class\">.87654321<\/span>))\n\n# <span class=\"hljs-selector-tag\">After<\/span>\n<span class=\"hljs-selector-tag\">IFCCARTESIANPOINT<\/span>((12345<span class=\"hljs-selector-class\">.12<\/span>, 67890<span class=\"hljs-selector-class\">.88<\/span>))<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Cartesian point merging. IFC files often contain thousands of identical points. The script now merges duplicates, reducing geometric bloat.<\/li>\n\n\n\n<li>I added logic to merge duplicate instances of property sets and classifications. If two objects are identical, why store them twice?<\/li>\n\n\n\n<li>Placeholder property removal. You\u2019ve seen them. Properties with values like &#8220;-&#8221; or &#8220;N\/A&#8221; (although note that N\/A is a requirement on TfNSW projects if you don&#8217;t know the value). The script now strips these out, along with any empty sets left behind.<\/li>\n\n\n\n<li>Added support for .ifczip output, which is handy for sharing optimised models.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Other Refinements<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">There were a few elements that already existed but I tried to tidy up, they were:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CLI arguments cleaned up for easier use in terminal or CI\/CD pipelines<\/li>\n\n\n\n<li>Temporary files (e.g. after schema conversion or rounding) are auto-deleted<\/li>\n\n\n\n<li>Orphan removal logic now preserves critical relationships like IfcRelContainedInSpatialStructure, IfcRelDefinesByProperties, and IfcRelAssigns<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Results<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The updated optimiser still handles the basics such as unused materials, redundant spaces, orphaned geometry, but now offers a few extra features. Depending on the messiness of the source file, you can expect file size reductions in the 10\u201340% range. Lossy rounding and coordinate merging alone can yield surprising gains.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Real-World Testing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I threw the optimiser at a 517 MB IFC straight out of Revit. Based on the size of the original RVT model (80 MB), I expected a <em>big<\/em> reduction. But after all the tweaks of lossy rounding, point merging, orphan purging, the result was:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IFC file straight out of Revit (LOD: Low): 517 MB<\/li>\n\n\n\n<li>After optimisation: 472 MB<\/li>\n\n\n\n<li>Reduction: 45 MB (~9%)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Not bad, but not the earth-shattering kaboom I was hoping for. The file was still too large given the simplicity of the model.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I decided to try something different: change the <strong>LOD setting in Revit\u2019s IFC exporter<\/strong>. That\u2019s it. No code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This time I exported the same model with <strong>LOD set to &#8220;Extra Low&#8221;<\/strong>, and got:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Same model, exported from Revit with LOD set to \u201cExtra Low\u201d: 120 MB<\/li>\n\n\n\n<li>After optimisation: 117 MB<\/li>\n\n\n\n<li>Reduction: 3 MB (~2.5%)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The takeaway? The optimiser works, but the biggest gains came from upstream. Export settings matter. Authoring matters. You can\u2019t polish an IFC boulder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Visually, the \u201cExtra Low\u201d version looked fine. No perceptible loss in detail, no broken geometry. Just a much smaller file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The best optimisation isn\u2019t downstream, it\u2019s upstream. Clean authoring + sane export settings will always beat post-processing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Although, I&#8217;ll still say that having a solid optimiser in your toolkit is still very much worth it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I came across a Python-based IFC optimiser built on top of IfcOpenShell. It was solid, removing unused spaces, orphaned entities, and redundant metadata, but I saw room to push it further. The original script handled: Good start. But I was dealing with a 517mb Ifc file and wanted to see what else I could get out of it, see if&#8230;<\/p>\n","protected":false},"author":1,"featured_media":2427,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"Tweaked a Python IFC optimiser to clean up bloated exports. Added rounding, deduping and more. Small script, big savings.","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Bloated IFC exports? I took a solid Python optimiser and gave it a few upgrades.. smarter cleanup, lossy rounding, and some QoL tweaks.\n\nThe biggest lesson though? Good IFC starts with good authoring.\n\nRepo here if it\u2019s useful to you:\n\ud83d\udd17 github.com\/ryanlenihan\/ifc_optimizer\n\n#IFC #BIM #python #opensource #digitaldelivery","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[77,63],"class_list":["post-2400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital","tag-automation","tag-general"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/big-and-small-yellow-rubber-ducks-on-pink-background.jpg","jetpack-related-posts":[{"id":2686,"url":"https:\/\/digitalbbq.au\/index.php\/2026\/07\/16\/data-on-the-host-data-in-the-ifc-not-so-fast\/","url_meta":{"origin":2400,"position":0},"title":"Data on the Host, Data in the IFC? Not So Fast.","author":"Ryan Lenihan","date":"16 July 2026","format":false,"excerpt":"A few days after the last post, I got handed a model that seemed like it should have worked perfectly. The nested families were already set up as Shared. The IFC export was running. The geometry was coming through. But the asset data? Completely missing. When this happens, it\u2019s easy\u2026","rel":"","context":"In &quot;How to guides&quot;","block_context":{"text":"How to guides","link":"https:\/\/digitalbbq.au\/index.php\/category\/how-to-guides\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/colorful-wooden-toy-blocks-on-wood-floor-2026-01-07-06-18-37-utc.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/colorful-wooden-toy-blocks-on-wood-floor-2026-01-07-06-18-37-utc.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/colorful-wooden-toy-blocks-on-wood-floor-2026-01-07-06-18-37-utc.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/colorful-wooden-toy-blocks-on-wood-floor-2026-01-07-06-18-37-utc.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/colorful-wooden-toy-blocks-on-wood-floor-2026-01-07-06-18-37-utc.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/colorful-wooden-toy-blocks-on-wood-floor-2026-01-07-06-18-37-utc.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2018,"url":"https:\/\/digitalbbq.au\/index.php\/2024\/05\/16\/expanding-on-ifc-metadata-extraction-in-powerbi\/","url_meta":{"origin":2400,"position":1},"title":"Expanding on IFC Metadata Extraction in PowerBI","author":"Ryan Lenihan","date":"16 May 2024","format":false,"excerpt":"In a previous post, \"Extracting IFC Metadata Directly in Power BI Using Power Query,\" we explored how to use Power Query in PowerBI to directly extract metadata from IFC files using a Power Query shared by Shift Construction. If you haven't read that post, I recommend checking it out first\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"Currency exchange data graph and charts data","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/05\/currency-exchange-data-graph-and-charts-data.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/05\/currency-exchange-data-graph-and-charts-data.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/05\/currency-exchange-data-graph-and-charts-data.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/05\/currency-exchange-data-graph-and-charts-data.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/05\/currency-exchange-data-graph-and-charts-data.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/05\/currency-exchange-data-graph-and-charts-data.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2672,"url":"https:\/\/digitalbbq.au\/index.php\/2026\/07\/09\/a-short-story-about-how-nested-families-work-when-exported-to-ifc\/","url_meta":{"origin":2400,"position":2},"title":"A Short Story About How Nested Families Work When Exported to Ifc.","author":"Ryan Lenihan","date":"9 July 2026","format":false,"excerpt":"I had a question come through that\u2019ll sound familiar if you\u2019ve ever pushed Revit \u2192 IFC on a live job: Nested families are carrying asset data in Revit, but that data disappears in the IFC. LOI attributes, classification, IDs.. gone. What's going on? This comes up more than it should,\u2026","rel":"","context":"In &quot;How to guides&quot;","block_context":{"text":"How to guides","link":"https:\/\/digitalbbq.au\/index.php\/category\/how-to-guides\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/house-model-on-floor-real-estate-and-housing-aspi-2026-03-25-09-14-22-utc.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/house-model-on-floor-real-estate-and-housing-aspi-2026-03-25-09-14-22-utc.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/house-model-on-floor-real-estate-and-housing-aspi-2026-03-25-09-14-22-utc.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/house-model-on-floor-real-estate-and-housing-aspi-2026-03-25-09-14-22-utc.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/house-model-on-floor-real-estate-and-housing-aspi-2026-03-25-09-14-22-utc.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2026\/07\/house-model-on-floor-real-estate-and-housing-aspi-2026-03-25-09-14-22-utc.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2005,"url":"https:\/\/digitalbbq.au\/index.php\/2024\/05\/02\/extracting-ifc-metadata-directly-in-power-bi-using-power-query\/","url_meta":{"origin":2400,"position":3},"title":"Extracting IFC Metadata Directly in Power BI Using Power Query","author":"Ryan Lenihan","date":"2 May 2024","format":false,"excerpt":"If you work with Industry Foundation Classes (IFC) files and want an easy way to access and analyze the metadata, there's a great article you should check out. \"How to extract data from IFC files\" by Matthew Osment on Medium demonstrates how to use Power Query in Power BI to\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/04\/Shift_PowerBi_IFC.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/04\/Shift_PowerBi_IFC.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/04\/Shift_PowerBi_IFC.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/04\/Shift_PowerBi_IFC.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/04\/Shift_PowerBi_IFC.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2024\/04\/Shift_PowerBi_IFC.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2403,"url":"https:\/\/digitalbbq.au\/index.php\/2025\/07\/17\/why-your-pipe-fittings-are-missing-materials-in-ifc-exports-and-how-to-fix-it\/","url_meta":{"origin":2400,"position":4},"title":"Your Pipe Fittings Are Grey in IFC? Here&#8217;s Why (And How to Fix It)","author":"Ryan Lenihan","date":"17 July 2025","format":false,"excerpt":"You\u2019ve exported your model to IFC. Pipes look great. Fittings? Grey. Again. What\u2019s going on? This one trips up a lot of teams, because pipe fittings in Revit don\u2019t actually carry system data, even though they look like they do. So when you rely on system-assigned materials for your IFC\u2026","rel":"","context":"In &quot;How to guides&quot;","block_context":{"text":"How to guides","link":"https:\/\/digitalbbq.au\/index.php\/category\/how-to-guides\/"},"img":{"alt_text":"Set of blue PVC pipe fittings isolated on dark background. Blue plastic water pipe. PVC accessories","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/set-of-blue-pvc-pipe-fittings-isolated-on-dark-background-blue-plastic-water-pipe-pvc-accessories.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2413,"url":"https:\/\/digitalbbq.au\/index.php\/2025\/08\/07\/setting-ifc-material-overrides-for-cable-tray-and-conduit\/","url_meta":{"origin":2400,"position":5},"title":"Setting IFC Material Overrides for Cable Tray and Conduit","author":"Ryan Lenihan","date":"7 August 2025","format":false,"excerpt":"In a previous post, we looked at how to set IFC material overrides for pipe fittings. But when it comes to cable tray and conduit, things get a bit trickier. Unlike pipe and duct, cable tray and conduit don\u2019t belong to a system in Revit, so there's no MEP System\u2026","rel":"","context":"In &quot;Digital&quot;","block_context":{"text":"Digital","link":"https:\/\/digitalbbq.au\/index.php\/category\/digital\/"},"img":{"alt_text":"Low angle view of steel network cable trunking box.","src":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/digitalbbq.au\/wp-content\/uploads\/2025\/07\/low-angle-view-of-steel-network-cable-trunking-box-.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts\/2400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/comments?post=2400"}],"version-history":[{"count":3,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts\/2400\/revisions"}],"predecessor-version":[{"id":2429,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/posts\/2400\/revisions\/2429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/media\/2427"}],"wp:attachment":[{"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/media?parent=2400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/categories?post=2400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digitalbbq.au\/index.php\/wp-json\/wp\/v2\/tags?post=2400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}