<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://skynett81.github.io/3dprintforge/en/blog</id>
    <title>3DPrintForge Blog</title>
    <updated>2026-06-11T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://skynett81.github.io/3dprintforge/en/blog"/>
    <subtitle>3DPrintForge Blog</subtitle>
    <icon>https://skynett81.github.io/3dprintforge/en/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[v1.1.24 — Spoolman Server, OBS Overlay, PA Pattern Calibration & a Big QoL/Accessibility Pass]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.24</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24"/>
        <updated>2026-06-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A large quality release. 3DPrintForge becomes a drop-in Spoolman server, ships an embeddable OBS/kiosk streaming overlay, adds the line-pattern pressure-advance calibration method, and lands a broad quality-of-life, undo-safety and accessibility sweep across the whole UI — plus authenticator-app 2FA for Bambu Cloud login and several real fixes for features that silently did nothing.]]></summary>
        <content type="html"><![CDATA[<p>A large quality release. 3DPrintForge becomes a drop-in Spoolman server, ships an embeddable OBS/kiosk streaming overlay, adds the line-pattern pressure-advance calibration method, and lands a broad quality-of-life, undo-safety and accessibility sweep across the whole UI — plus authenticator-app 2FA for Bambu Cloud login and several real fixes for features that silently did nothing.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="spoolman-server">Spoolman server<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#spoolman-server" class="hash-link" aria-label="Direct link to Spoolman server" title="Direct link to Spoolman server" translate="no">​</a></h2>
<ul>
<li class="">Serve a Spoolman-compatible v1 API so Klipper front-ends (Mainsail / Fluidd) can read, consume and now <strong>fully manage</strong> your inventory: create / update / delete spools, filaments and vendors, plus <code>/use</code> weight/length reporting</li>
<li class="">Settings toggle to enable it, with copy-to-clipboard for the base URL</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="streaming-overlay">Streaming overlay<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#streaming-overlay" class="hash-link" aria-label="Direct link to Streaming overlay" title="Direct link to Streaming overlay" translate="no">​</a></h2>
<ul>
<li class="">Embeddable OBS / kiosk streaming overlay per printer (camera + live status), with query options for camera, status-bar position and background</li>
<li class="">"Streaming overlay" entry point from the camera card</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="calibration">Calibration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#calibration" class="hash-link" aria-label="Direct link to Calibration" title="Direct link to Calibration" translate="no">​</a></h2>
<ul>
<li class="">Pressure-advance / linear-advance <strong>pattern (line) generator</strong> — the Sineos/Ellis method, complementing the existing tuning-tower ramp; each row prints a slow → fast → slow line at a stepped PA value so you pick the cleanest one</li>
<li class="">"Read the guide" links to Andrew Ellis' Print Tuning Guide from the pressure-advance, retraction, flow and first-layer tests</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="quality-of-life">Quality of life<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#quality-of-life" class="hash-link" aria-label="Direct link to Quality of life" title="Direct link to Quality of life" translate="no">​</a></h2>
<ul>
<li class=""><strong>Undo-on-delete across the whole app</strong> — spools, queues, printers, filament profiles, tags, backups, KB articles, screenshots, scheduled events, library files, CRM customers, orders and AI jobs (backups and screenshots previously deleted on a single click with no confirmation)</li>
<li class="">Sidebar quick-search to jump to any panel, plus a "Pinned" section for favourite panels</li>
<li class="">A "What's new" modal (now with a navbar button to reopen it), keyboard-shortcut help, compact-density toggle, "continue where you left off", persisted inventory filters, sticky table headers, dialog auto-focus and copy-to-clipboard helpers</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="accessibility">Accessibility<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#accessibility" class="hash-link" aria-label="Direct link to Accessibility" title="Direct link to Accessibility" translate="no">​</a></h2>
<ul>
<li class="">Accessible names on icon-only buttons, focus trap and focus restore for dialogs, and a focusable skip-link</li>
<li class="">WCAG AA contrast (axe-core audited): raised muted-text contrast and darker text variants for accent colours used as text, while surfaces keep the brand colour</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bambu-cloud--camera">Bambu Cloud &amp; camera<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#bambu-cloud--camera" class="hash-link" aria-label="Direct link to Bambu Cloud &amp; camera" title="Direct link to Bambu Cloud &amp; camera" translate="no">​</a></h2>
<ul>
<li class="">Authenticator-app 2FA (TOTP) login with the real error surfaced; auto-fill LAN IP for cloud-imported Bambu printers; discovery no longer hangs</li>
<li class="">RTSP transcode preserves aspect ratio; the REC badge shows the selected resolution</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixes-for-features-that-silently-did-nothing">Fixes for features that silently did nothing<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#fixes-for-features-that-silently-did-nothing" class="hash-link" aria-label="Direct link to Fixes for features that silently did nothing" title="Direct link to Fixes for features that silently did nothing" translate="no">​</a></h2>
<ul>
<li class=""><strong>Smart ETA</strong> now actually learns — the slicer-vs-actual recorder was never wired into print completion</li>
<li class=""><strong>Input Shaper Wizard</strong> accepts real Klipper resonance CSVs (the parser expected the wrong column names)</li>
<li class=""><strong>Camera usage analytics</strong> and <strong>filament estimate-vs-actual accuracy</strong> are recorded — the writers were never called</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="maintenance">Maintenance<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.24#maintenance" class="hash-link" aria-label="Direct link to Maintenance" title="Direct link to Maintenance" translate="no">​</a></h2>
<ul>
<li class="">Delete maintenance-log and spool core-weight catalog entries, completing their CRUD</li>
</ul>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.23 — Waste Analytics, Colour-Order Optimiser & Slicer Fleet Control]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.23</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.23"/>
        <updated>2026-06-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This release lands purge/waste analytics, a lowest-purge colour-ordering recommender, and a full remote-control surface for the 3DPrintForge Slicer to drive fleet printers. From this release the 3DPrintForge Slicer and Server share one product version and are released together.]]></summary>
        <content type="html"><![CDATA[<p>This release lands purge/waste analytics, a lowest-purge colour-ordering recommender, and a full remote-control surface for the 3DPrintForge Slicer to drive fleet printers. From this release the 3DPrintForge Slicer and Server share one product version and are released together.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="waste-analytics">Waste analytics<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.23#waste-analytics" class="hash-link" aria-label="Direct link to Waste analytics" title="Direct link to Waste analytics" translate="no">​</a></h2>
<ul>
<li class="">Tool-changer-aware purge accounting for multi-material prints</li>
<li class="">Colour-aware single-nozzle purge accounting</li>
<li class="">A smart colour-ordering recommender that finds the lowest-purge filament sequence, with a dedicated frontend panel</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="slicer--fleet-control">Slicer ⇄ fleet control<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.23#slicer--fleet-control" class="hash-link" aria-label="Direct link to Slicer ⇄ fleet control" title="Direct link to Slicer ⇄ fleet control" translate="no">​</a></h2>
<p>A full remote-control API so the 3DPrintForge Slicer can drive your fleet printers directly:</p>
<ul>
<li class="">Live printer state: <code>GET /api/printers/:id/state</code> (read-only)</li>
<li class="">Print control: <code>POST /api/printers/:id/control</code> (pause / resume / stop)</li>
<li class="">Rich motion control: home / move / extrude / temperature / tool change</li>
<li class="">Fan, light and speed actions for Bambu + Moonraker printers</li>
<li class="">Filament load / unload / change for G-code printers</li>
<li class=""><code>GET /api/printers</code> now exposes vendor and online/offline state</li>
<li class="">On-demand profile push: <code>POST /api/slicer/profiles/push</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixes">Fixes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.23#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes" translate="no">​</a></h2>
<ul>
<li class="">Preserve the printer access code on edit (issue #12 follow-up)</li>
</ul>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.22 — Inventory Weight Accuracy, DB Performance, TOTP Login & Security Hardening]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.22</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.22"/>
        <updated>2026-06-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A maintenance-and-accuracy release. The headline work is a top-to-bottom pass on AMS/spool weight tracking, a sweep of composite database indexes that removes temp-b-tree sorts from the hottest queries, TOTP two-factor at the login screen, and a security/dependency hardening pass that clears all open npm audit advisories. Also fixes the per-printer settings that wouldn't save (#12).]]></summary>
        <content type="html"><![CDATA[<p>A maintenance-and-accuracy release. The headline work is a top-to-bottom pass on AMS/spool weight tracking, a sweep of composite database indexes that removes temp-b-tree sorts from the hottest queries, TOTP two-factor at the login screen, and a security/dependency hardening pass that clears all open npm audit advisories. Also fixes the per-printer settings that wouldn't save (<a href="https://github.com/skynett81/3dprintforge/issues/12" target="_blank" rel="noopener noreferrer" class="">#12</a>).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filament-inventory--ams-accuracy">Filament inventory &amp; AMS accuracy<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.22#filament-inventory--ams-accuracy" class="hash-link" aria-label="Direct link to Filament inventory &amp; AMS accuracy" title="Direct link to Filament inventory &amp; AMS accuracy" translate="no">​</a></h2>
<ul>
<li class="">AMS 2 Pro / H2D load-cell weight is read <strong>directly</strong> instead of estimated from percent</li>
<li class="">Recalibrate remaining weight from print history, from live AMS signals, or both combined — with new UI</li>
<li class="">Sensor-floor guard: extrusion tracking is trusted when the load cell drops below ~20 g (it loses resolution near empty)</li>
<li class=""><code>used_weight_g</code> capped at the initial spool weight; existing over-counted rows repaired (migration v142)</li>
<li class="">Non-Bambu spools (Elegoo, Polymaker, generic) auto-detected; auto-created profiles named from the tray hex</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="printers--connectivity">Printers &amp; connectivity<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.22#printers--connectivity" class="hash-link" aria-label="Direct link to Printers &amp; connectivity" title="Direct link to Printers &amp; connectivity" translate="no">​</a></h2>
<ul>
<li class=""><strong>Per-printer settings now persist</strong> (<a href="https://github.com/skynett81/3dprintforge/issues/12" target="_blank" rel="noopener noreferrer" class="">#12</a>) — LAN Developer Mode, Camera Resolution, and every other type-specific field round-trip through a new <code>config_json</code> column and survive a restart. Camera Resolution actually drives the stream (1080p / 720p / 480p)</li>
<li class="">Per-brand credentials are masked in the API response and restored from storage on unchanged edits</li>
<li class="">ffmpeg exit code 8 maps to an actionable "enable LAN Live View" hint instead of a generic camera error</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="authentication--security">Authentication &amp; security<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.22#authentication--security" class="hash-link" aria-label="Direct link to Authentication &amp; security" title="Direct link to Authentication &amp; security" translate="no">​</a></h2>
<ul>
<li class="">TOTP two-factor prompt wired into the login UI, with two silent-failure bugs closed</li>
<li class="">Second-pass NIST/CVE audit fixes and hardened security headers</li>
<li class="">Dependency security upgrades clear all open npm audit advisories</li>
<li class=""><code>.env</code>-based secret handling and HTTP response compression</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="performance">Performance<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.22#performance" class="hash-link" aria-label="Direct link to Performance" title="Direct link to Performance" translate="no">​</a></h2>
<ul>
<li class="">Composite database indexes remove temp-b-tree sorts from the hottest queries</li>
</ul>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.21 — 3DPrintForge Slicer Integration, Filament Overhaul, Security Hardening]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.21</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21"/>
        <updated>2026-05-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Three concurrent tracks in v1.1.21: a REST integration with our skynett81/OrcaSlicer fork, a top-to-bottom rewrite of the filament inventory experience (Storage tab, drag-and-drop, bulk-add), and a security audit that closed six CVE-class issues. Plus an i18n overhaul that fixed a broken-fallback pattern across 504 call sites, a tabbed Analytics dashboard, and 6 new database migrations.]]></summary>
        <content type="html"><![CDATA[<p>Three concurrent tracks in v1.1.21: a REST integration with our <a href="https://github.com/skynett81/OrcaSlicer" target="_blank" rel="noopener noreferrer" class="">skynett81/OrcaSlicer</a> fork, a top-to-bottom rewrite of the filament inventory experience (Storage tab, drag-and-drop, bulk-add), and a security audit that closed six CVE-class issues. Plus an i18n overhaul that fixed a broken-fallback pattern across 504 call sites, a tabbed Analytics dashboard, and 6 new database migrations.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3dprintforge-slicer-integration">3DPrintForge Slicer integration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#3dprintforge-slicer-integration" class="hash-link" aria-label="Direct link to 3DPrintForge Slicer integration" title="Direct link to 3DPrintForge Slicer integration" translate="no">​</a></h2>
<p>3DPrintForge can now drive the <a href="https://github.com/skynett81/OrcaSlicer" target="_blank" rel="noopener noreferrer" class="">skynett81/OrcaSlicer</a> fork in REST service mode instead of spawning the slicer CLI per request. The fork hosts a small embedded HTTP service (cpp-httplib); 3DPrintForge probes it, mirrors profiles automatically, and routes slicing through it when available — falling back to the CLI bridge or native engine if not.</p>
<p><strong>What you get:</strong></p>
<ul>
<li class="">Live status pill in the dashboard header</li>
<li class="">Slice models with live progress (stage, layer counter, percent) over Server-Sent Events</li>
<li class="">Slice-and-Send to printer in one click</li>
<li class="">Profile catalog mirrored automatically every 5 minutes</li>
<li class="">Cancel button mid-slice</li>
<li class="">Multi-extruder filament breakdown</li>
<li class="">Toast notifications on disconnect/reconnect</li>
<li class="">Outage notifications via the existing 7-channel notifier (Telegram, Discord, email, etc.)</li>
</ul>
<p><strong>Surface area:</strong></p>
<ul>
<li class="">12 REST proxy endpoints under <code>/api/slicer/forge/*</code></li>
<li class="">Settings card auto-mounts in Slicer Studio AND System → Integrations</li>
<li class="">Pterodactyl egg env vars (<code>FORGE_SLICER_URL</code>, <code>FORGE_SLICER_TOKEN</code>)</li>
<li class="">Docker Compose env var examples</li>
<li class="">Norwegian translations (27 keys) for the entire UI surface</li>
<li class="">Setup guide and full REST contract on the docs site</li>
</ul>
<p><strong>For fork-side dev:</strong></p>
<ul>
<li class=""><code>tools/forge-slicer-mock.js</code> — full Node implementation of the contract incl. SSE, so the integration can be tested end-to-end without waiting for a C++ build</li>
<li class=""><code>website/docs/forge-slicer-cpp/</code> — Phase-1 cpp-httplib + nlohmann/json skeleton, CMakeLists fragment, step-by-step <code>main_integration.md</code></li>
<li class="">33 new tests covering probe + cache, multipart slice, SSE error handling, fallback chain, sync idempotency, and more</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="security-hardening">Security hardening<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#security-hardening" class="hash-link" aria-label="Direct link to Security hardening" title="Direct link to Security hardening" translate="no">​</a></h2>
<p>A focused security audit closed six issues this release:</p>
<table><thead><tr><th>Severity</th><th>Issue</th><th>Fix</th></tr></thead><tbody><tr><td>CRITICAL</td><td>Path traversal in milestone file serving (CWE-22)</td><td>Boundary check on resolved path, plus 5 regression tests</td></tr><tr><td>HIGH</td><td>Settings export leaked all notification secrets (CWE-200)</td><td>Shared <code>_maskNotificationSecrets()</code> helper covers all 8 sensitive fields</td></tr><tr><td>HIGH</td><td>XSS via printer-supplied filenames (CWE-79)</td><td>Switched inline <code>onclick=</code> strings to <code>dataset</code> + delegated click handler</td></tr><tr><td>HIGH</td><td>SSRF in <code>/api/spoolman/test</code> (CWE-918)</td><td>New <code>_isDangerousUrl()</code> blocks link-local and non-HTTP schemes</td></tr><tr><td>MEDIUM</td><td>Slicer profile paths could escape profileDir (CWE-22)</td><td><code>pathResolve()</code> + boundary validation</td></tr><tr><td>MEDIUM</td><td>Bearer token leaked from <code>/api/slicer/forge/status</code></td><td>Masked to <code>'***'</code> with <code>token_set: bool</code> flag</td></tr></tbody></table>
<p>The audit also confirmed clean state on hardcoded secrets (none), <code>npm audit</code> (0 vulnerabilities), SQL injection (all parameterized), and command injection in <code>updater.js</code> (semver regex prevents tag-string abuse).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filament-inventory-overhaul">Filament inventory overhaul<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#filament-inventory-overhaul" class="hash-link" aria-label="Direct link to Filament inventory overhaul" title="Direct link to Filament inventory overhaul" translate="no">​</a></h2>
<p>Major UX rewrite:</p>
<ul>
<li class=""><strong>Top-level Storage tab</strong> with location overview, drag-and-drop discoverability, first-time empty state</li>
<li class=""><strong>Drag spools to/from Active Filament slots</strong> in every view mode (was only grid + table). Clearer swap interaction when dragging onto an occupied slot. File-drop overlay no longer hijacks internal drags.</li>
<li class=""><strong>Bulk-add multiple spools</strong> with a prominent quantity field. <strong>"Add another"</strong> registers a second reel of the same filament without re-entering the metadata.</li>
<li class=""><strong>Spool detail view</strong> shows storage method, last dried timestamp, and tare weight</li>
<li class=""><strong>Stats / Storage / Database</strong> now show the full inventory, not just used spools. Stats auto-refreshes on tab switch with material reclassification. Usage Predictions surfaces both Total runway and per-material runway.</li>
<li class=""><strong>Visual</strong> — icons added to inventory tabs for faster scanning</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="analytics-dashboard">Analytics dashboard<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#analytics-dashboard" class="hash-link" aria-label="Direct link to Analytics dashboard" title="Direct link to Analytics dashboard" translate="no">​</a></h2>
<p><code>analytics-panel.js</code> rewritten as a tabbed dashboard with auto-refresh and drill-downs across Overview, Statistics, Calendar, Filament, Cost, Waste, and Comparison views.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="i18n--504-site-fix">i18n — 504-site fix<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#i18n--504-site-fix" class="hash-link" aria-label="Direct link to i18n — 504-site fix" title="Direct link to i18n — 504-site fix" translate="no">​</a></h2>
<p><code>window.t(key, varsOrFallback)</code> previously short-circuited on missing keys (the function returned the truthy key string, so <code>t('foo') || 'Default'</code> never used the fallback — users saw the raw key like <code>📊analytics.tab_overview</code>). 504 sites across 28 files used that pattern. The helper now accepts a string fallback as the second argument and all call sites have been migrated.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="database--six-new-migrations">Database — six new migrations<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#database--six-new-migrations" class="hash-link" aria-label="Direct link to Database — six new migrations" title="Direct link to Database — six new migrations" translate="no">​</a></h2>
<ul>
<li class=""><strong>v136-138</strong> — color hex storage normalisation (drops the leading <code>#</code> so <code>'#' + color_hex</code> no longer produces <code>##8c8c8c</code>)</li>
<li class=""><strong>v139</strong> — comprehensive eSUN filament catalogue</li>
<li class=""><strong>v140</strong> — ~80 missing profiles seeded across 10 vendors</li>
<li class=""><strong>v141</strong> — material classification normalisation: product-line strings like "Rapid" or "PLA-Basic" roll to base materials (PLA / PETG / ABS / TPU) so Stats buckets correctly</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="internal">Internal<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#internal" class="hash-link" aria-label="Direct link to Internal" title="Direct link to Internal" translate="no">​</a></h2>
<ul>
<li class=""><strong>CI tests</strong> — <code>.github/workflows/test.yml</code> runs <code>npm test</code> plus JSON validation for language files and the Pterodactyl egg on every push and PR to main</li>
<li class=""><strong>Test count</strong> — 762 tests pass (up from ~720 at v1.1.20)</li>
<li class=""><strong>Service-worker cache</strong> bumped to v196</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-notes">Upgrade notes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.21#upgrade-notes" class="hash-link" aria-label="Direct link to Upgrade notes" title="Direct link to Upgrade notes" translate="no">​</a></h2>
<p>If you set up the 3DPrintForge Slicer integration, see <a class="" href="https://skynett81.github.io/3dprintforge/en/docs/forge-slicer-setup">the setup guide</a> for how to launch the fork in service mode and wire it up. The integration is <strong>opt-in</strong> — leaving <code>FORGE_SLICER_URL</code> blank disables it and slicing continues through the existing CLI bridge or native engine.</p>
<p>Restart your container (or run <code>git pull &amp;&amp; npm install</code>) to pick up the fixes. For Pterodactyl users, the egg env vars are visible after the next panel-side egg refresh.</p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.20 — Native Slicer, Scene Composer, AI Model Forge, 17-Brand Coverage]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.20</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20"/>
        <updated>2026-04-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[3DPrintForge now has its own slicing engine — pure JavaScript, written from scratch, runs without any external dependency. Plus a 3D Scene Composer with BSP-tree CSG, AI-powered Model Forge with text-to-3D intent parsing, automatic Mesh Repair, and expanded coverage to 17 printer brands across 75+ models.]]></summary>
        <content type="html"><![CDATA[<p>3DPrintForge now has its <strong>own slicing engine</strong> — pure JavaScript, written from scratch, runs without any external dependency. Plus a 3D Scene Composer with BSP-tree CSG, AI-powered Model Forge with text-to-3D intent parsing, automatic Mesh Repair, and expanded coverage to 17 printer brands across 75+ models.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="native-slicer-engine">Native Slicer Engine<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#native-slicer-engine" class="hash-link" aria-label="Direct link to Native Slicer Engine" title="Direct link to Native Slicer Engine" translate="no">​</a></h2>
<p>A complete pure-JS slicing pipeline:</p>
<ul>
<li class=""><strong><code>server/native-slicer.js</code></strong> — mesh→polygon→infill→G-code, fully integrated with mesh repair</li>
<li class=""><code>sliceLayer</code> — z-plane intersection with edge-deduplication</li>
<li class=""><code>offsetPolygon</code> — bbox-aware shrink (returns empty for degenerate over-shrink)</li>
<li class=""><code>lineInfill</code> — adjustable density and angle</li>
<li class=""><code>layersToGcode</code> + <code>sliceMeshToGcode</code> — produces print-ready G-code</li>
</ul>
<p>No external slicer required, no WASM blob, no shell-out. Just JavaScript.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="slicer-studio">Slicer Studio<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#slicer-studio" class="hash-link" aria-label="Direct link to Slicer Studio" title="Direct link to Slicer Studio" translate="no">​</a></h2>
<p>A full standalone slicer program inside 3DPrintForge:</p>
<ul>
<li class=""><strong>Three.js viewport</strong> with orbit controls and per-layer preview</li>
<li class=""><strong>Profile system</strong> — 23 default profiles seeded (12 printers, 7 filaments, 4 quality)</li>
<li class=""><strong>Send to printer</strong> — one-click upload after slicing</li>
<li class=""><strong>Profile editor</strong> — create, edit, duplicate, set as default</li>
</ul>
<p>Reach it from the sidebar <strong>Library → Slicer Studio</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="slicer-bridge-optional">Slicer Bridge (Optional)<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#slicer-bridge-optional" class="hash-link" aria-label="Direct link to Slicer Bridge (Optional)" title="Direct link to Slicer Bridge (Optional)" translate="no">​</a></h2>
<p>For users who already have OrcaSlicer, BambuStudio, or Snapmaker Orca installed, the Bridge wraps their CLI for headless slicing. Auto-detects via flatpak listings and AppImage paths — no configuration required.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="scene-composer">Scene Composer<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#scene-composer" class="hash-link" aria-label="Direct link to Scene Composer" title="Direct link to Scene Composer" translate="no">​</a></h2>
<p>A 3D scene editor with <strong>BSP-tree CSG</strong> (Evan Wallace algorithm) for boolean mesh operations:</p>
<ul>
<li class="">Union, subtract, intersect on imported STL/3MF</li>
<li class="">Mesh primitives (cube, sphere, cylinder, torus)</li>
<li class="">Mesh transforms (translate, rotate, scale)</li>
<li class="">Export combined scene as STL</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ai-model-forge">AI Model Forge<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#ai-model-forge" class="hash-link" aria-label="Direct link to AI Model Forge" title="Direct link to AI Model Forge" translate="no">​</a></h2>
<p>Text-to-3D generation with intent parsing. Type natural-language descriptions ("a 60mm phone stand", "a hexagonal storage box with lid") and the engine routes through <code>ai-forge-generators.js</code> to produce print-ready meshes.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mesh-repair-toolkit">Mesh Repair Toolkit<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#mesh-repair-toolkit" class="hash-link" aria-label="Direct link to Mesh Repair Toolkit" title="Direct link to Mesh Repair Toolkit" translate="no">​</a></h2>
<p>Automatic detection and repair of broken STL/3MF files:</p>
<ul>
<li class="">Non-manifold edge fixing</li>
<li class="">Hole filling</li>
<li class="">Normal recalculation</li>
<li class="">Watertight verification via <code>lib3mf.IsManifoldAndOriented</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="g-code-reference--estimator">G-code Reference &amp; Estimator<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#g-code-reference--estimator" class="hash-link" aria-label="Direct link to G-code Reference &amp; Estimator" title="Direct link to G-code Reference &amp; Estimator" translate="no">​</a></h2>
<p>Built-in G-code reference (Marlin, Klipper, RepRap, Bambu) with per-command documentation, plus a time estimator that parses G-code and predicts print duration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="17-brands-75-models">17 Brands, 75+ Models<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#17-brands-75-models" class="hash-link" aria-label="Direct link to 17 Brands, 75+ Models" title="Direct link to 17 Brands, 75+ Models" translate="no">​</a></h2>
<p>Three new protocol clients added in this release:</p>
<ul>
<li class=""><strong>Duet/RRF</strong> (<code>server/duet-client.js</code>) — Duet 3D control boards via REST/WebSocket</li>
<li class=""><strong>FlashForge FNet</strong> (<code>server/flashforge-client.js</code>) — FlashForge proprietary protocol</li>
<li class=""><strong>Repetier-Server</strong> (<code>server/repetier-client.js</code>) — multi-printer server with REST API</li>
</ul>
<p>Combined with existing connectors:</p>
<table><thead><tr><th>Protocol</th><th>Brands</th></tr></thead><tbody><tr><td>Bambu MQTT</td><td>Bambu Lab (P1/P2/X1/A1/H2)</td></tr><tr><td>Moonraker WS</td><td>Snapmaker U1, Voron, Creality, Elegoo, AnkerMake (Klipper), QIDI, RatRig</td></tr><tr><td>PrusaLink HTTP</td><td>Prusa MK4, MK3.9, Mini+, XL</td></tr><tr><td>OctoPrint REST</td><td>Ender 3, Prusa MK3, Anycubic, Artillery</td></tr><tr><td>Snapmaker SACP</td><td>J1, J1s, Artisan</td></tr><tr><td>Snapmaker 2.0 HTTP</td><td>A150, A250, A350</td></tr><tr><td>AnkerMake MQTT</td><td>M5, M5C</td></tr><tr><td>Duet/RRF</td><td>Duet 3, Duet 2</td></tr><tr><td>FlashForge FNet</td><td>FlashForge Adventurer/Creator</td></tr><tr><td>Repetier-Server</td><td>Any printer behind Repetier-Server</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="printer-image-service">Printer Image Service<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#printer-image-service" class="hash-link" aria-label="Direct link to Printer Image Service" title="Direct link to Printer Image Service" translate="no">​</a></h2>
<p>Real product images sourced from OrcaSlicer's GitHub repository (<code>raw.githubusercontent.com/SoftFever/OrcaSlicer/main/resources/profiles/{Vendor}/{Model}_cover.png</code>). Three-tier fallback:</p>
<ol>
<li class="">Local cache (<code>data/printer-images/</code>)</li>
<li class="">OrcaSlicer GitHub URL</li>
<li class="">Generated SVG placeholder (per-model distinct)</li>
</ol>
<p>Visible on the <strong>Fleet</strong> view (<code>#fleet</code>).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-improvements">Other Improvements<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#other-improvements" class="hash-link" aria-label="Direct link to Other Improvements" title="Direct link to Other Improvements" translate="no">​</a></h2>
<ul>
<li class=""><strong>23 slicer profiles</strong> seeded via migration v135 — ready out of the box</li>
<li class=""><strong>Multi-column UI grid</strong> — optimized layout for large screens</li>
<li class=""><strong>Command Palette fix</strong> — Ctrl+K now shows all 25 panels</li>
<li class=""><strong>Sidebar Library badge</strong> corrected from 11 to 12 after Slicer Bridge</li>
<li class=""><strong>System sidebar fix</strong> — proper grouping</li>
<li class=""><strong>725+ tests passing</strong> — full suite green</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="download">Download<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.20#download" class="hash-link" aria-label="Direct link to Download" title="Direct link to Download" translate="no">​</a></h2>
<p>Download from the <a href="https://github.com/skynett81/3dprintforge/releases/tag/v1.1.20" target="_blank" rel="noopener noreferrer" class="">release page</a>.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> clone https://github.com/skynett81/3dprintforge.git</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> 3dprintforge</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">./install.sh</span><br></span></code></pre></div></div>
<p>Or download the desktop installer for your platform from the <a href="https://github.com/skynett81/3dprintforge/releases/tag/v1.1.20" target="_blank" rel="noopener noreferrer" class="">release page</a>.</p>
<p>Full changelog: <a class="" href="https://skynett81.github.io/3dprintforge/en/project/changelog">v1.1.20 Changelog</a></p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.19 — Model Forge 51 Tools, JSCAD Studio, Electron Desktop App, 10-Brand Deep Integration]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.19</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19"/>
        <updated>2026-04-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The biggest release yet: 30 commits, 123 files changed, 19,592 lines added. 3DPrintForge is now a desktop app with native installers for every platform, deep integration for all 10 printer brands, and 51 parametric 3D generators.]]></summary>
        <content type="html"><![CDATA[<p>The biggest release yet: <strong>30 commits</strong>, <strong>123 files changed</strong>, <strong>19,592 lines added</strong>. 3DPrintForge is now a desktop app with native installers for every platform, deep integration for all 10 printer brands, and 51 parametric 3D generators.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="model-forge-51-parametric-3d-tools">Model Forge: 51 Parametric 3D Tools<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#model-forge-51-parametric-3d-tools" class="hash-link" aria-label="Direct link to Model Forge: 51 Parametric 3D Tools" title="Direct link to Model Forge: 51 Parametric 3D Tools" translate="no">​</a></h2>
<p>34 new tools join the existing 17, organized across 8 categories:</p>
<table><thead><tr><th>Category</th><th>New Tools</th></tr></thead><tbody><tr><td><strong>Organization</strong></td><td>Gridfinity Baseplate, Bin, Lid, Tool Holder</td></tr><tr><td><strong>Mechanical</strong></td><td>Spur Gear, Timing Belt Pulley, Spring, Hinge, Snap-fit</td></tr><tr><td><strong>Printer</strong></td><td>Spool Adapter, Cable Chain, First Layer Test, Nozzle Storage, Scraper Holder</td></tr><tr><td><strong>Home</strong></td><td>Wall Hook, Cable Clip, Plant Pot, Desk Organizer, Wall Bracket, Wall Plate, Lidded Box, Peg Rail</td></tr><tr><td><strong>Tech</strong></td><td>Phone Stand, Headphone Stand, VESA Mount, Electronics Case, Battery Holder</td></tr><tr><td><strong>Creative</strong></td><td>Voronoi Tray, Topographic Map, 3D QR Code, Shape Extruder, Honeycomb Tile, Dice Tower, Miniature Base</td></tr></tbody></table>
<p>All tools verified watertight via <code>lib3mf.IsManifoldAndOriented</code> — print as-is, no mesh repair needed.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="jscad-studio">JSCAD Studio<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#jscad-studio" class="hash-link" aria-label="Direct link to JSCAD Studio" title="Direct link to JSCAD Studio" translate="no">​</a></h2>
<p>A full JavaScript-based parametric 3D modelling environment built into 3DPrintForge:</p>
<ul>
<li class="">Write code using <code>@jscad/modeling</code> primitives, booleans, transforms, extrusions</li>
<li class="">Define parameters via <code>getParameterDefinitions()</code> — UI controls generated automatically</li>
<li class="">Server-side rendering in a sandboxed Node VM (10s timeout)</li>
<li class="">Binary STL export with triangle count verification</li>
<li class="">4 built-in examples: Cube, Spur Gear, Text Plate, Honeycomb Pattern</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="complete-prusa-ecosystem">Complete Prusa Ecosystem<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#complete-prusa-ecosystem" class="hash-link" aria-label="Direct link to Complete Prusa Ecosystem" title="Direct link to Complete Prusa Ecosystem" translate="no">​</a></h2>
<p>The deepest integration of any dashboard with Prusa's open-source ecosystem:</p>
<ul>
<li class=""><strong>6,735 filament profiles</strong> + <strong>1,539 print profiles</strong> + <strong>254 printer models</strong> from PrusaSlicer's 104+ vendor INI files</li>
<li class=""><strong>968 error codes</strong> from Prusa-Error-Codes (buddy, MMU, SLA)</li>
<li class=""><strong>26 G-code commands</strong> (M572, M862.x, M701/702, etc.)</li>
<li class="">PrusaLink OpenAPI-compliant endpoints</li>
<li class="">Auto-refresh every 7 days</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="all-10-brands-deep">All 10 Brands Deep<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#all-10-brands-deep" class="hash-link" aria-label="Direct link to All 10 Brands Deep" title="Direct link to All 10 Brands Deep" translate="no">​</a></h2>
<p>Every supported brand now has dedicated error codes, G-code reference, and firmware tracking:</p>
<table><thead><tr><th>Brand</th><th>Error Codes</th><th>G-codes</th><th>Extras</th></tr></thead><tbody><tr><td>Bambu Lab</td><td>230 HMS</td><td>20</td><td>MQTT + Cloud API</td></tr><tr><td>Prusa</td><td>968</td><td>26</td><td>8,500+ profiles</td></tr><tr><td>OctoPrint</td><td>—</td><td>—</td><td>402 plugins + 50 events + admin API</td></tr><tr><td>Snapmaker</td><td>10</td><td>14</td><td>SACP + Cloud + dev commits</td></tr><tr><td>Creality</td><td>56</td><td>9</td><td>K1/K2/Ender 3 V3</td></tr><tr><td>Elegoo</td><td>20</td><td>7</td><td>Neptune 4 Pro/Max</td></tr><tr><td>Voron</td><td>30</td><td>17</td><td>12 mod catalog entries</td></tr><tr><td>AnkerMake</td><td>12</td><td>8</td><td>ankerctl protocol</td></tr><tr><td>QIDI</td><td>20</td><td>8</td><td>X-Plus 3/Q1 Pro</td></tr><tr><td>Klipper</td><td>—</td><td>32</td><td>Generic for all brands</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="electron-desktop-app">Electron Desktop App<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#electron-desktop-app" class="hash-link" aria-label="Direct link to Electron Desktop App" title="Direct link to Electron Desktop App" translate="no">​</a></h2>
<p>3DPrintForge is now a proper desktop application:</p>
<ul>
<li class=""><strong>System tray</strong> with printer status, context menu, double-click to open</li>
<li class=""><strong>Native notifications</strong> via OS notification center</li>
<li class=""><strong>Auto-start at login</strong> (minimized to tray)</li>
<li class=""><strong>Auto-updater</strong> via GitHub releases</li>
<li class=""><strong>Application menu</strong> with keyboard shortcuts (Cmd/Ctrl+D, Shift+F, etc.)</li>
<li class=""><strong>Deep linking</strong> via <code>3dprintforge://</code> protocol</li>
<li class=""><strong>File associations</strong> for .3mf, .stl, .gcode</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="desktop-installers">Desktop Installers<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#desktop-installers" class="hash-link" aria-label="Direct link to Desktop Installers" title="Direct link to Desktop Installers" translate="no">​</a></h2>
<table><thead><tr><th>Platform</th><th>Formats</th></tr></thead><tbody><tr><td><strong>Windows</strong></td><td>NSIS Setup, Portable EXE, MSIX (Microsoft Store ready)</td></tr><tr><td><strong>macOS</strong></td><td>ZIP, DMG</td></tr><tr><td><strong>Linux</strong></td><td>AppImage, .deb, .rpm, Flatpak, Arch pkg.tar.zst, tar.gz</td></tr></tbody></table>
<p>Download from the <a href="https://github.com/skynett81/3dprintforge/releases/tag/v1.1.19" target="_blank" rel="noopener noreferrer" class="">release page</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="unified-firmware-system">Unified Firmware System<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#unified-firmware-system" class="hash-link" aria-label="Direct link to Unified Firmware System" title="Direct link to Unified Firmware System" translate="no">​</a></h2>
<ul>
<li class="">Checks firmware across all brands: Bambu Cloud, Snapmaker Wiki, PrusaLink GitHub, Moonraker update_manager</li>
<li class="">Tracks open-source dev commits (Snapmaker U1 klipper/moonraker/fluidd repos)</li>
<li class="">Formatted release notes with collapsible Markdown renderer</li>
<li class="">Dismiss / Mark as Updated for manual updates</li>
<li class="">Bambu firmware 01.02.00.00: Print While Drying, motor disable, bed low-power, manual filament change</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug Fixes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h2>
<ul>
<li class="">Defect auto-pause crash (undefined variable in closure)</li>
<li class="">Rediscovery broadcast stale IP</li>
<li class="">Bambu Cloud firmware array safety</li>
<li class="">Camera polling exponential backoff (stops spamming when offline)</li>
<li class="">6 additional fixes from rigorous audit</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade">Upgrade<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.19#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> 3dprintforge </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> pull </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><br></span></code></pre></div></div>
<p>Or download the desktop installer for your platform from the <a href="https://github.com/skynett81/3dprintforge/releases/tag/v1.1.19" target="_blank" rel="noopener noreferrer" class="">release page</a>.</p>
<p>Full changelog: <a class="" href="https://skynett81.github.io/3dprintforge/en/project/changelog">v1.1.19 Changelog</a></p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.18 — Universal Multi-Printer UI, Analytics, OctoPrint & Snapmaker Deep Integration]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.18</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18"/>
        <updated>2026-04-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Every Panel, Every Printer]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="every-panel-every-printer">Every Panel, Every Printer<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#every-panel-every-printer" class="hash-link" aria-label="Direct link to Every Panel, Every Printer" title="Direct link to Every Panel, Every Printer" translate="no">​</a></h2>
<p>The biggest UI milestone yet: <strong>all 35+ dashboard panels now work with all 8 printer types</strong>. Whether you're running a Bambu Lab P2S, a Snapmaker U1, a Prusa MK4 via PrusaLink, an Ender 3 via OctoPrint, or a Voron via Moonraker — every panel shows the right data. Per-printer-type configuration UI means each connector type gets its own tailored settings.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="awstats-inspired-analytics">AWStats-Inspired Analytics<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#awstats-inspired-analytics" class="hash-link" aria-label="Direct link to AWStats-Inspired Analytics" title="Direct link to AWStats-Inspired Analytics" translate="no">​</a></h2>
<p>A full web analytics system built right into 3DPrintForge:</p>
<ul>
<li class="">Requests per hour (7-day chart)</li>
<li class="">Top endpoints, active sessions, device &amp; browser breakdown</li>
<li class="">Print farm overview cards: success rate, print hours, filament used, queue status</li>
<li class="">System info bar with version, uptime, memory, DB size</li>
</ul>
<p>All data is collected locally — no external analytics services.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="octoprint-complete-rewrite">OctoPrint Complete Rewrite<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#octoprint-complete-rewrite" class="hash-link" aria-label="Direct link to OctoPrint Complete Rewrite" title="Direct link to OctoPrint Complete Rewrite" translate="no">​</a></h2>
<p>OctoPrint support has been completely rewritten from the ground up:</p>
<ul>
<li class=""><strong>WebSocket</strong> real-time connection replaces polling</li>
<li class="">Native OctoPrint API with full feature parity</li>
<li class="">Camera snapshots, file management, temperature control, job control</li>
<li class="">API key authentication and state mapping</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="snapmaker-deep-integration">Snapmaker Deep Integration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#snapmaker-deep-integration" class="hash-link" aria-label="Direct link to Snapmaker Deep Integration" title="Direct link to Snapmaker Deep Integration" translate="no">​</a></h2>
<p>Massive expansion of Snapmaker support across the entire product line:</p>
<table><thead><tr><th>Feature</th><th>Details</th></tr></thead><tbody><tr><td>SACP Rewrite</td><td>Complete binary protocol rewrite with deep U1 improvements</td></tr><tr><td>J1/Artisan</td><td>SACP connector for IDEX printers — mirror, duplicate, multi-material modes</td></tr><tr><td>Snapmaker 2.0</td><td>HTTP connector for A150/A250/A350</td></tr><tr><td>Cloud Sync</td><td>Snapmaker Cloud integration with firmware checks</td></tr><tr><td>Power Monitoring</td><td>Real-time power consumption tracking</td></tr><tr><td>Ray UDP</td><td>Laser/CNC commands and mDNS discovery</td></tr><tr><td>Filament Profiles</td><td>Expanded material database for all Snapmaker models</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adminlte-4-ui-framework">AdminLTE 4 UI Framework<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#adminlte-4-ui-framework" class="hash-link" aria-label="Direct link to AdminLTE 4 UI Framework" title="Direct link to AdminLTE 4 UI Framework" translate="no">​</a></h2>
<p>Complete migration to AdminLTE 4 with Bootstrap 5:</p>
<ul>
<li class="">Offcanvas panels, accordions, list groups, input groups, alerts, progress bars</li>
<li class="">Info-boxes, table enhancer, validation controls, dropdowns, breadcrumbs, pagination</li>
<li class="">Sidebar mini-mode and tooltip migration</li>
<li class="">Custom components aligned with Bootstrap 5 standards</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="responsive-design--mobile">Responsive Design &amp; Mobile<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#responsive-design--mobile" class="hash-link" aria-label="Direct link to Responsive Design &amp; Mobile" title="Direct link to Responsive Design &amp; Mobile" translate="no">​</a></h2>
<p>Full mobile/tablet optimization:</p>
<ul>
<li class="">Responsive design overhaul across all pages</li>
<li class="">iOS native app (IPA) download with QR codes at <code>/app</code></li>
<li class="">Multiple QR code fixes for iPhone compatibility and LAN IP resolution</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filament-tracking-improvements">Filament Tracking Improvements<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#filament-tracking-improvements" class="hash-link" aria-label="Direct link to Filament Tracking Improvements" title="Direct link to Filament Tracking Improvements" translate="no">​</a></h2>
<ul>
<li class="">Per-spool tracking using OrcaSlicer metadata + NFC color matching</li>
<li class="">Spool recalculation with Moonraker tray tracking</li>
<li class="">Live filament tracking for all Moonraker/Klipper printers</li>
<li class="">Quick actions: mark empty, set weight, swap, refill</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="12-bug-fixes">12 Bug Fixes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#12-bug-fixes" class="hash-link" aria-label="Direct link to 12 Bug Fixes" title="Direct link to 12 Bug Fixes" translate="no">​</a></h2>
<p>Critical fixes for stability and reliability:</p>
<ul>
<li class=""><strong>Rate limiting</strong> — replaced 50 individual cost-estimate API calls with a single batch request (<code>POST /api/inventory/cost-estimate/batch</code>)</li>
<li class=""><strong>Memory safety</strong> — capped 3 unbounded proxy caches at 500 entries each (MakerWorld, Printables, Thingiverse)</li>
<li class=""><strong>Crash prevention</strong> — queue panel, analytics panel, library panel now validate API responses before array operations</li>
<li class=""><strong>Database</strong> — migration ordering corrected, weightToLength null handling fixed, cost report NaN resolved</li>
<li class=""><strong>Camera cleanup</strong> — ffmpeg.kill() wrapped in try-catch to prevent cleanup cascade failure</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade">Upgrade<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.18#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> 3dprintforge </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> pull </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><br></span></code></pre></div></div>
<p>Or use the one-liner:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-fsSL</span><span class="token plain"> https://raw.githubusercontent.com/skynett81/3dprintforge/main/install.sh </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">bash</span><br></span></code></pre></div></div>
<p>Full changelog: <a class="" href="https://skynett81.github.io/3dprintforge/en/project/changelog">v1.1.18 Changelog</a></p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.17 — Security Hardening, Model Forge Expansion, 3D Viewer Enhancements]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.17</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17"/>
        <updated>2026-04-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Model Forge Expanded to 17 Tools]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="model-forge-expanded-to-17-tools">Model Forge Expanded to 17 Tools<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#model-forge-expanded-to-17-tools" class="hash-link" aria-label="Direct link to Model Forge Expanded to 17 Tools" title="Direct link to Model Forge Expanded to 17 Tools" translate="no">​</a></h2>
<p>6 new parametric 3D generators join the existing 11:</p>
<table><thead><tr><th>Tool</th><th>Description</th></tr></thead><tbody><tr><td>Lattice Structure</td><td>BCC/FCC/octet/diamond/cubic cells with configurable strut diameter</td></tr><tr><td>Multi-Color</td><td>Multi-object 3MF for AMS/MMU color assignment (stack/side-by-side/inlay)</td></tr><tr><td>Advanced Vase</td><td>7 profiles: cylinder, sine, bulge, flare, twist, hourglass, tulip</td></tr><tr><td>Threads &amp; Joints</td><td>M3-M20 bolts, nuts, standoffs, snap-fit clips with helical geometry</td></tr><tr><td>Texture Surface</td><td>8 patterns: diamond plate, knurl, honeycomb, waves, brick, carbon fiber, dots, crosshatch</td></tr><tr><td>3MF Validator</td><td>Validate files, check mesh integrity, detect extensions, match colors against inventory</td></tr></tbody></table>
<p>New MeshBuilder methods: <code>addRevolutionSurface</code>, <code>addHelicalStrip</code>, <code>addCylindricalHeightmap</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="security-hardening-16-improvements">Security Hardening (16 Improvements)<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#security-hardening-16-improvements" class="hash-link" aria-label="Direct link to Security Hardening (16 Improvements)" title="Direct link to Security Hardening (16 Improvements)" translate="no">​</a></h2>
<p>Full security audit with CIS Controls v8 and NIS2 alignment. All CRITICAL, HIGH, MEDIUM, and LOW findings resolved:</p>
<ul>
<li class=""><strong>CRITICAL:</strong> Command injection via ffmpeg replaced with spawnSync + input validation</li>
<li class=""><strong>HIGH:</strong> SSRF guard on webhooks, auth disabled warning, metrics behind auth, camera WS auth, backup path traversal guard</li>
<li class=""><strong>MEDIUM:</strong> First-message WS auth, trusted proxy validation (TRUSTED_PROXIES), TOFU cert pinning for MQTT, plugin integrity (SHA-256 manifest), SMS header sanitization</li>
<li class=""><strong>LOW:</strong> Session invalidation on role change, TOTP rate limiting (5/15min), CSP hardened (removed unsafe-eval, added frame-ancestors), secret masking (getSafeConfig), health endpoint stripped</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3d-viewer-enhancements">3D Viewer Enhancements<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#3d-viewer-enhancements" class="hash-link" aria-label="Direct link to 3D Viewer Enhancements" title="Direct link to 3D Viewer Enhancements" translate="no">​</a></h2>
<ul>
<li class=""><strong>Layer scrubber</strong> — slider for height-based model clipping</li>
<li class=""><strong>Parts panel</strong> — per-object visibility toggle, double-click to isolate</li>
<li class=""><strong>Materials panel</strong> — unique color swatches with part counts</li>
<li class="">Parts button auto-shown for multi-object models</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="server-management">Server Management<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#server-management" class="hash-link" aria-label="Direct link to Server Management" title="Direct link to Server Management" translate="no">​</a></h2>
<p>New section in Settings &gt; System &gt; Updates:</p>
<ul>
<li class=""><strong>Restart Server</strong> — auto-reconnects when server is back</li>
<li class=""><strong>Clear Browser Cache</strong> — unregisters SW, clears all caches</li>
<li class=""><strong>Unregister Service Worker</strong> — fixes stale cache issues</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="i18n--code-quality">i18n &amp; Code Quality<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#i18n--code-quality" class="hash-link" aria-label="Direct link to i18n &amp; Code Quality" title="Direct link to i18n &amp; Code Quality" translate="no">​</a></h2>
<ul>
<li class="">Merged 7 duplicate i18n keys in en.json — restored 266 lost translation keys</li>
<li class="">Replaced 77+ Norwegian fallback strings and log messages with English</li>
<li class="">Fixed filament analytics tabs (lazy i18n loading at render time)</li>
<li class="">Switched formatters from hardcoded nb-NO to dynamic locale</li>
<li class=""><code>docs/</code> symlinked to <code>website/docs/</code> for unified documentation</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="knowledge-base--community">Knowledge Base &amp; Community<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#knowledge-base--community" class="hash-link" aria-label="Direct link to Knowledge Base &amp; Community" title="Direct link to Knowledge Base &amp; Community" translate="no">​</a></h2>
<ul>
<li class="">32 printers across 8 brands, 60 accessories, 93 filaments, 81 profiles</li>
<li class="">54 learning courses</li>
<li class="">Full EULA (GeekTech.no)</li>
<li class="">NFC Filament Tag (OpenSpool), 3MF Converter (Bambu to Snapmaker)</li>
<li class="">Klipper Macro Manager, Quick Actions</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug Fixes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h2>
<ul>
<li class="">Camera WSS mixed content on HTTPS</li>
<li class="">False v4l2-mpp detection (probes /status instead of /snapshot)</li>
<li class="">Service worker skips /lang/ files for fresh translations</li>
<li class="">EULA modal null check and global scope</li>
<li class="">Printer isolation on switch</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="install--upgrade">Install / Upgrade<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.17#install--upgrade" class="hash-link" aria-label="Direct link to Install / Upgrade" title="Direct link to Install / Upgrade" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> pull </span><span class="token operator">&amp;&amp;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><br></span></code></pre></div></div>
<p>Or fresh install:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> clone https://github.com/skynett81/3dprintforge.git</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> 3dprintforge</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> start</span><br></span></code></pre></div></div>
<p><strong>Full changelog:</strong> <a class="" href="https://skynett81.github.io/3dprintforge/en/project/changelog">docs/project/changelog</a></p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.16 — Model Forge, Snapmaker Deep Integration, Multi-Brand Support]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.16</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16"/>
        <updated>2026-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Model Forge — 3D Model Generation Suite]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="model-forge--3d-model-generation-suite">Model Forge — 3D Model Generation Suite<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#model-forge--3d-model-generation-suite" class="hash-link" aria-label="Direct link to Model Forge — 3D Model Generation Suite" title="Direct link to Model Forge — 3D Model Generation Suite" translate="no">​</a></h2>
<ul>
<li class="">8 parametric generators: Sign Maker, Lithophane, Storage Box, Text Plate, Keychain, Cable Label, Image Relief, Stencil</li>
<li class="">Shared MeshBuilder with heightmap surface, tube, rounded box primitives</li>
<li class="">Pure JS PNG decoder for image-to-3D conversion (no npm deps)</li>
<li class="">All models exported as 3MF via lib3mf WASM</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="snapmaker-u1-deep-integration">Snapmaker U1 Deep Integration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#snapmaker-u1-deep-integration" class="hash-link" aria-label="Direct link to Snapmaker U1 Deep Integration" title="Direct link to Snapmaker U1 Deep Integration" translate="no">​</a></h2>
<ul>
<li class="">13 custom Klipper modules: machine state, NFC filament, feed system, defect detection, timelapse, print config, flow calibration, power loss, purifier</li>
<li class="">NFC filament spool cards with vendor, type, color, weight, temp profiles</li>
<li class="">Auto-load/unload with live progress, entangle detection</li>
<li class="">AI defect detection (spaghetti, residue, bed, nozzle) with configurable auto-pause</li>
<li class="">Print task config toggles, calibration wizard</li>
<li class="">20 filament profiles + 5 process presets from OrcaSlicer</li>
<li class="">U1 bed STL model + texture for 3D visualization</li>
<li class="">SACP binary protocol client for older Snapmaker machines (A150/A250/A350/J1/Artisan)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bambu-lab-deep-integration">Bambu Lab Deep Integration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#bambu-lab-deep-integration" class="hash-link" aria-label="Direct link to Bambu Lab Deep Integration" title="Direct link to Bambu Lab Deep Integration" translate="no">​</a></h2>
<ul>
<li class="">12 printer capability configs from BambuStudio (exact feature flags per model)</li>
<li class="">40+ new MQTT commands: calibration, camera, AMS advanced, multi-nozzle, fan v3, HMS</li>
<li class="">12 job states with transition tracking (Pausing/Resuming/Finishing/Stopping)</li>
<li class="">HMS error system: 4 severity levels, 16 module IDs</li>
<li class="">Filament blacklist (TPU/CF restrictions per AMS)</li>
<li class="">Calibration + Camera + System cards in controls panel</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="multi-brand-printer-support">Multi-Brand Printer Support<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#multi-brand-printer-support" class="hash-link" aria-label="Direct link to Multi-Brand Printer Support" title="Direct link to Multi-Brand Printer Support" translate="no">​</a></h2>
<ul>
<li class="">PrusaLink REST client with digest auth (Prusa MK4/MK3.9/Mini+/XL)</li>
<li class="">Creality, Elegoo, AnkerMake, Voron, RatRig, QIDI via Moonraker</li>
<li class="">Combined discovery: Bambu SSDP + Moonraker HTTP + SACP broadcast</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="moonraker-api-integrations">Moonraker API Integrations<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#moonraker-api-integrations" class="hash-link" aria-label="Direct link to Moonraker API Integrations" title="Direct link to Moonraker API Integrations" translate="no">​</a></h2>
<ul>
<li class="">File Manager: list, metadata with thumbnails, delete, download, upload</li>
<li class="">Job Queue: enqueue, start, pause, remove</li>
<li class="">Webcam: snapshot proxy, stream URL</li>
<li class="">Update Manager + Spoolman integration</li>
<li class="">Send files directly from Library to any printer</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="network--remote-access">Network &amp; Remote Access<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#network--remote-access" class="hash-link" aria-label="Direct link to Network &amp; Remote Access" title="Direct link to Network &amp; Remote Access" translate="no">​</a></h2>
<ul>
<li class="">SSL certs auto-include all local IPs and hostname</li>
<li class="">Cloudflare Tunnel integration (Settings &gt; System &gt; Remote Access)</li>
<li class="">Camera snapshot polling on HTTPS (no mixed content errors)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-tools--features">New Tools &amp; Features<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#new-tools--features" class="hash-link" aria-label="Direct link to New Tools &amp; Features" title="Direct link to New Tools &amp; Features" translate="no">​</a></h2>
<ul>
<li class="">G-code Analyzer: layers, extrusion, temps, warnings, filament weight</li>
<li class="">G-code 3D Toolpath Viewer with layer scrubber</li>
<li class="">Pre-print confirmation dialog</li>
<li class="">PWA push notifications</li>
<li class="">Plugin system: route registration, UI panels, timers, DB access</li>
<li class="">Community filament reviews + per-printer settings</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug Fixes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h2>
<ul>
<li class="">Camera WSS for HTTPS access via IP/hostname</li>
<li class="">Printer isolation: full re-render on switch</li>
<li class="">Sign Maker: mirrored text fixed, proportional preview</li>
<li class="">Norwegian fallback strings translated to English</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="stats">Stats<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.16#stats" class="hash-link" aria-label="Direct link to Stats" title="Direct link to Stats" translate="no">​</a></h2>
<ul>
<li class="">740+ API endpoints</li>
<li class="">99 tests (all passing)</li>
<li class="">10 supported printer brands</li>
<li class="">8 Model Forge tools</li>
<li class="">6 npm dependencies (unchanged)</li>
</ul>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.15 — 3MF Consortium Integration, Gcode Toolpath & Universal 3D Preview]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.15</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15"/>
        <updated>2026-04-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[3MF Consortium Integration]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3mf-consortium-integration">3MF Consortium Integration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#3mf-consortium-integration" class="hash-link" aria-label="Direct link to 3MF Consortium Integration" title="Direct link to 3MF Consortium Integration" translate="no">​</a></h2>
<ul>
<li class=""><strong>lib3mf WASM</strong> (<code>@3mfconsortium/lib3mf</code> v2.5.0) for spec-compliant 3MF file parsing</li>
<li class=""><strong>3mfViewer</strong> from <a href="https://github.com/3MFConsortium/3mfViewer" target="_blank" rel="noopener noreferrer" class="">3MFConsortium</a> embedded as iframe viewer — full scene tree, materials, wireframe, beam lattice support</li>
<li class="">3MF file validation endpoint (<code>POST /api/library/validate</code>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="gcode-toolpath-viewer">Gcode Toolpath Viewer<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#gcode-toolpath-viewer" class="hash-link" aria-label="Direct link to Gcode Toolpath Viewer" title="Direct link to Gcode Toolpath Viewer" translate="no">​</a></h2>
<ul>
<li class="">Server-side gcode parser extracts G0/G1 toolpath with per-layer colour gradient</li>
<li class="">Automatic download from Moonraker HTTP API or Bambu FTPS</li>
<li class="">Gzipped caching for instant repeat views</li>
<li class="">Works for <strong>all printer types</strong></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="threejs-enhanced-viewer">Three.js Enhanced Viewer<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#threejs-enhanced-viewer" class="hash-link" aria-label="Direct link to Three.js Enhanced Viewer" title="Direct link to Three.js Enhanced Viewer" translate="no">​</a></h2>
<ul>
<li class=""><strong>Three.js r183</strong> vendored with OrbitControls</li>
<li class="">Smooth shading, 3-point lighting, build plate grid</li>
<li class="">Print progress clipping plane with per-layer vertex colours</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="universal-3d-preview">Universal 3D Preview<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#universal-3d-preview" class="hash-link" aria-label="Direct link to Universal 3D Preview" title="Direct link to Universal 3D Preview" translate="no">​</a></h2>
<ul>
<li class=""><code>/api/preview-3d</code> resolves 3MF from: library, slicer uploads, history, printer FTPS/HTTP</li>
<li class="">Per-printer strategy via <code>printer-capabilities.js</code> (Bambu FTPS, Moonraker HTTP, local files)</li>
<li class="">Falls back to gcode toolpath when no 3MF mesh available</li>
<li class="">Extracts embedded gcode from Bambu <code>gcode.3mf</code> files</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="3d-preview-everywhere">3D Preview Everywhere<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#3d-preview-everywhere" class="hash-link" aria-label="Direct link to 3D Preview Everywhere" title="Direct link to 3D Preview Everywhere" translate="no">​</a></h2>
<ul>
<li class=""><strong>History</strong> — 3D button + upload/replace/delete linked 3MF files</li>
<li class=""><strong>Library</strong> — 3mfViewer for all 3MF files</li>
<li class=""><strong>Queue</strong> — 3D button on queued items</li>
<li class=""><strong>Scheduler</strong> — 3D button on scheduled events</li>
<li class=""><strong>Gallery</strong> — 3D button on gallery items</li>
<li class="">Drag-and-drop 3MF upload when model unavailable</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="printer-capabilities">Printer Capabilities<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#printer-capabilities" class="hash-link" aria-label="Direct link to Printer Capabilities" title="Direct link to Printer Capabilities" translate="no">​</a></h2>
<ul>
<li class="">New <code>printer-capabilities.js</code> — per-brand/model config for file access, camera, features</li>
<li class="">Model-specific overrides (P2S, A1, X1C, Snapmaker U1, Voron, Creality)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="auto-3mf-caching">Auto 3MF Caching<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#auto-3mf-caching" class="hash-link" aria-label="Direct link to Auto 3MF Caching" title="Direct link to Auto 3MF Caching" translate="no">​</a></h2>
<ul>
<li class="">Background download from Bambu printer at print start</li>
<li class="">Extracts model name and MakerWorld designId from 3MF metadata</li>
<li class="">Non-blocking with 10s timeout</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="infrastructure">Infrastructure<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.15#infrastructure" class="hash-link" aria-label="Direct link to Infrastructure" title="Direct link to Infrastructure" translate="no">​</a></h2>
<ul>
<li class="">Removed deprecated <code>--experimental-sqlite</code> flag (built-in since Node 22.5+)</li>
<li class="">Updated install.sh, uninstall.sh, Dockerfile, start.sh</li>
<li class="">New data dirs: <code>library</code>, <code>model-cache</code>, <code>history-models</code>, <code>toolpath-cache</code></li>
<li class="">MIME types: <code>.wasm</code>, <code>.jpg</code>, <code>.jpeg</code>, <code>.gif</code>, <code>.webp</code></li>
<li class="">CSP: <code>unsafe-eval</code> (WASM), <code>worker-src blob:</code>, <code>frame-src 'self'</code></li>
<li class="">DB migration v112: <code>linked_3mf</code> column on <code>print_history</code></li>
<li class="">6 npm dependencies (added <code>@3mfconsortium/lib3mf</code>)</li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/skynett81/3dprintforge/compare/v1.1.14...v1.1.15" target="_blank" rel="noopener noreferrer" class="">https://github.com/skynett81/3dprintforge/compare/v1.1.14...v1.1.15</a></p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.14 — AdminLTE 4, CRM System & Achievement Landmarks]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.14</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14"/>
        <updated>2026-03-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[AdminLTE 4 Integration]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adminlte-4-integration">AdminLTE 4 Integration<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#adminlte-4-integration" class="hash-link" aria-label="Direct link to AdminLTE 4 Integration" title="Direct link to AdminLTE 4 Integration" translate="no">​</a></h2>
<ul>
<li class="">Complete HTML restructuring migrated to AdminLTE 4 framework</li>
<li class="">Treeview sidebar with Bootstrap Icons and proper section toggling</li>
<li class="">Modern UI with teal accent, gradient titles, hover glow effects</li>
<li class="">Improved dark theme with better text contrast</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="crm-system">CRM System<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#crm-system" class="hash-link" aria-label="Direct link to CRM System" title="Direct link to CRM System" translate="no">​</a></h2>
<p>Full customer relationship management for print service businesses (requires GeekTech.no license):</p>
<ul>
<li class=""><strong>Customers</strong> — CRUD with search, order history, revenue tracking</li>
<li class=""><strong>Orders</strong> — create from scratch or from print history, auto-cost calculation, status workflow (draft → pending → printing → completed → shipped)</li>
<li class=""><strong>Invoices</strong> — professional HTML invoice generation with company header, line items, tax/MVA, payment info, print-friendly</li>
<li class=""><strong>Business Settings</strong> — company info, org number, bank account, tax rate, payment terms</li>
<li class=""><strong>CRM Dashboard</strong> — revenue trend, orders by status, top customers, activity feed</li>
<li class="">107 CRM keys translated to all 2 languages</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="achievement-landmarks-18-world-landmarks">Achievement Landmarks (18 World Landmarks)<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#achievement-landmarks-18-world-landmarks" class="hash-link" aria-label="Direct link to Achievement Landmarks (18 World Landmarks)" title="Direct link to Achievement Landmarks (18 World Landmarks)" translate="no">​</a></h2>
<p>Legendary long-term goals based on real-world 1:1 scale 3D printing:</p>
<ul>
<li class="">🕰️ Prague Orloj (150 kg) · 🐲 Wawel Dragon (200 kg) · 🏯 Gyeongbokgung (400 kg)</li>
<li class="">🏡 Dutch Windmill (600 kg) · 🏛️ Brandenburg Gate (800 kg) · ✝️ Cristo Redentor (1.2t)</li>
<li class="">⚔️ Motherland Monument (1.5t) · 🏗️ Turning Torso (2.5t) · ⛵ Viking Ship (3t)</li>
<li class="">🕌 Hagia Sophia (5t) · 🏛️ Budapest Parliament (6t) · ⛪ Sagrada Família (8t)</li>
<li class="">🏟️ Colosseum (15t) · 🗽 Statue of Liberty (46t) · 🧱 Great Wall 1km (50t)</li>
<li class="">🗼 Tokyo Tower (90t) · 🔔 Big Ben (120t) · 🗼 Eiffel Tower (180t)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ams--filament">AMS &amp; Filament<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#ams--filament" class="hash-link" aria-label="Direct link to AMS &amp; Filament" title="Direct link to AMS &amp; Filament" translate="no">​</a></h2>
<ul>
<li class="">AMS humidity 5-level rating (Best/Good/OK/Poor/Bad) with temperature assessment</li>
<li class="">EXT spool shown inline with AMS spools, always visible when linked</li>
<li class="">Filament section redesigned with large spools, full info (brand, weight, temp, RFID)</li>
<li class="">Click on spool opens detail popup with material info</li>
<li class="">Live filament tracking during printing via cloud estimate fallback</li>
<li class="">Filament change time in cost estimator with visible counter</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dashboard-layout">Dashboard Layout<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#dashboard-layout" class="hash-link" aria-label="Direct link to Dashboard Layout" title="Direct link to Dashboard Layout" translate="no">​</a></h2>
<ul>
<li class="">2-column default optimized for 24–27" monitors</li>
<li class="">3D/camera fills available space, filament/AMS compact below</li>
<li class="">Temperature/fans info in stats strip only (cards hidden)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="sound-notifications">Sound Notifications<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#sound-notifications" class="hash-link" aria-label="Direct link to Sound Notifications" title="Direct link to Sound Notifications" translate="no">​</a></h2>
<ul>
<li class="">9 configurable events with custom audio upload (MP3/OGG/WAV, max 10s)</li>
<li class="">Printer buzzer support via M300 G-code melodies</li>
<li class="">Countdown sound at 1 minute remaining</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="activity-log">Activity Log<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#activity-log" class="hash-link" aria-label="Direct link to Activity Log" title="Direct link to Activity Log" translate="no">​</a></h2>
<ul>
<li class="">Persistent timeline from all database tables (prints, errors, maintenance, notifications)</li>
<li class="">Accessible via #logs → Activity tab with type filters</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="knowledge-base">Knowledge Base<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#knowledge-base" class="hash-link" aria-label="Direct link to Knowledge Base" title="Direct link to Knowledge Base" translate="no">​</a></h2>
<ul>
<li class="">5 new KB pages: ASA, PC, PVA/HIPS, Bambu Lab series, compatibility matrix</li>
<li class="">Filament material database with 15 materials, plate compatibility, drying info</li>
<li class="">All KB pages translated to 2 languages</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="internationalization">Internationalization<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#internationalization" class="hash-link" aria-label="Direct link to Internationalization" title="Direct link to Internationalization" translate="no">​</a></h2>
<ul>
<li class="">Complete i18n audit: 3,252 keys × 2 languages = 0 missing</li>
<li class="">Guided tour, achievements, CRM, material tips all fully translated</li>
<li class="">Auto-build docs on install and server start</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bug-fixes">Bug Fixes<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.14#bug-fixes" class="hash-link" aria-label="Direct link to Bug Fixes" title="Direct link to Bug Fixes" translate="no">​</a></h2>
<ul>
<li class="">Sidebar works correctly with AdminLTE 4 treeview</li>
<li class="">Ctrl+Shift+R keeps you on current page</li>
<li class="">Camera fills card properly</li>
<li class="">Toast notifications in bottom-right, no longer blocking UI</li>
<li class="">HMS error codes show human-readable descriptions</li>
<li class="">Service worker uses network-first strategy (no stale cache)</li>
</ul>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.13 — Filament Tracking Accuracy & Complete i18n]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/1.1.13</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/1.1.13"/>
        <updated>2026-03-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Filament Tracking]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filament-tracking">Filament Tracking<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.13#filament-tracking" class="hash-link" aria-label="Direct link to Filament Tracking" title="Direct link to Filament Tracking" translate="no">​</a></h2>
<ul>
<li class="">Consistent <code>Math.min(AMS sensor, spool database)</code> across <strong>all</strong> filament displays</li>
<li class=""><strong>EXT spool detection</strong> for P2S/A1 AMS Lite via MQTT <code>mapping</code> field</li>
<li class="">4-tier filament tracking fallback: AMS diff → EXT direct → cloud estimate → duration estimate</li>
<li class="">Cloud estimate fetched at both print start and end (fixes server restart race condition)</li>
<li class="">Waste double-counting fix for failed/cancelled prints</li>
<li class="">Cost calculation properly handles failed prints without double-counting</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ams--dashboard">AMS &amp; Dashboard<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.13#ams--dashboard" class="hash-link" aria-label="Direct link to AMS &amp; Dashboard" title="Direct link to AMS &amp; Dashboard" translate="no">​</a></h2>
<ul>
<li class=""><strong>LIVE</strong> badge with pulse animation on filament card</li>
<li class="">Data source indicator showing AMS sensor vs database values</li>
<li class="">EXT spool shown correctly in filament ring, active filament panel, and AMS panel</li>
<li class=""><code>_getActiveFilament()</code> correctly reads EXT spool data from inventory</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="maintenance-panel">Maintenance Panel<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.13#maintenance-panel" class="hash-link" aria-label="Direct link to Maintenance Panel" title="Direct link to Maintenance Panel" translate="no">​</a></h2>
<ul>
<li class="">New nozzle types: Brass, HS01 (Bambu) with correct lifespans from knowledge base</li>
<li class="">New components: Z-axis, linear bearings, AMS, AMS sensors, filament drying</li>
<li class="">New "Guide" tab with maintenance cards linking to documentation</li>
<li class="">Recommended intervals, nozzle lifespan, and build plate lifespan tables</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="internationalization">Internationalization<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.13#internationalization" class="hash-link" aria-label="Direct link to Internationalization" title="Direct link to Internationalization" translate="no">​</a></h2>
<ul>
<li class=""><strong>Complete i18n</strong>: all 2 languages now have 100% coverage (2,944 keys)</li>
<li class="">1,174+ missing keys translated per language across 45+ sections</li>
<li class="">Languages: nb, en, de, fr, es, it, ja, ko, nl, pl, pt-BR, sv, tr, uk, zh-CN, cs, hu</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other">Other<a href="https://skynett81.github.io/3dprintforge/en/blog/1.1.13#other" class="hash-link" aria-label="Direct link to Other" title="Direct link to Other" translate="no">​</a></h2>
<ul>
<li class="">Ko-fi donation button in dashboard sidebar and documentation</li>
</ul>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v1.1.12 — Modular Architecture, Documentation & E-Commerce]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/v1.1.12</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12"/>
        <updated>2026-03-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Major update focusing on code quality, comprehensive documentation, and e-commerce integration.]]></summary>
        <content type="html"><![CDATA[<p>Major update focusing on code quality, comprehensive documentation, and e-commerce integration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="modular-architecture">Modular Architecture<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#modular-architecture" class="hash-link" aria-label="Direct link to Modular Architecture" title="Direct link to Modular Architecture" translate="no">​</a></h2>
<ul>
<li class=""><code>database.js</code> (10,306 lines) split into 16 domain modules under <code>server/db/</code></li>
<li class="">69 automated tests (Node.js built-in test runner)</li>
<li class="">80 input validation points across API endpoints</li>
<li class="">37 silent catch blocks fixed with proper logging</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="print-tracking">Print Tracking<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#print-tracking" class="hash-link" aria-label="Direct link to Print Tracking" title="Direct link to Print Tracking" translate="no">​</a></h2>
<ul>
<li class=""><strong>Server restart during print:</strong> Correctly calculates start time and filament usage from MQTT data</li>
<li class=""><strong>Cloud estimate:</strong> Fetches filament/time estimates from Bambu Cloud as fallback</li>
<li class=""><strong>Model names:</strong> Stores and displays MakerWorld model names and links in history, gallery, and scheduler</li>
<li class=""><strong>Milestone capture:</strong> 3-tier fallback (live frame → TLS JPEG → RTSP)</li>
<li class=""><strong>False temp alerts eliminated</strong> (Bambu standby at 140°C now ignored)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-plate-compatibility">Build Plate Compatibility<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#build-plate-compatibility" class="hash-link" aria-label="Direct link to Build Plate Compatibility" title="Direct link to Build Plate Compatibility" translate="no">​</a></h2>
<ul>
<li class="">62/62 filaments with plate compatibility ratings (Cool/Engineering/HT/Textured PEI)</li>
<li class="">62/62 filaments with glue stick recommendations (required/recommended/optional)</li>
<li class="">Compatibility matrix with legend, glue stick column, and tips in filament tools</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pricing-model-print-farm-academy">Pricing Model (Print Farm Academy)<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#pricing-model-print-farm-academy" class="hash-link" aria-label="Direct link to Pricing Model (Print Farm Academy)" title="Direct link to Pricing Model (Print Farm Academy)" translate="no">​</a></h2>
<ul>
<li class="">Cost estimator upgraded: labor, waste, markup, suggested selling prices (2×, 2.5×, 3×)</li>
<li class="">New settings: setup time, markup percentage, nozzle cost, waste factor</li>
<li class=""><code>labor_rate_hour</code> bug fixed (labor cost was always 0)</li>
<li class="">Pricing model integrated into the order panel</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="e-commerce--license-geektechno">E-Commerce &amp; License (GeekTech.no)<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#e-commerce--license-geektechno" class="hash-link" aria-label="Direct link to E-Commerce &amp; License (GeekTech.no)" title="Direct link to E-Commerce &amp; License (GeekTech.no)" translate="no">​</a></h2>
<ul>
<li class="">License validation against GeekTech API (<code>POST /api/license/verify</code>)</li>
<li class="">Supports domain, IP, MAC, and IP+MAC binding</li>
<li class="">32-character hex license key with automatic IP/MAC detection</li>
<li class="">Complete CRUD for orders (create, edit, delete, duplicate)</li>
<li class="">Cost summary with suggested selling prices per project</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="docusaurus-documentation">Docusaurus Documentation<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#docusaurus-documentation" class="hash-link" aria-label="Direct link to Docusaurus Documentation" title="Direct link to Docusaurus Documentation" translate="no">​</a></h2>
<ul>
<li class=""><strong>82 documentation pages</strong> in Norwegian (72 docs + 10 guides)</li>
<li class=""><strong>Fully translated to 2 languages</strong> (1,400+ files)</li>
<li class="">Guides: first print, filament setup, daily use, plate selection, troubleshooting, notifications, OBS</li>
<li class="">Knowledge base: filaments, build plates, maintenance, troubleshooting</li>
<li class=""><strong>GitHub Pages:</strong> <a href="https://skynett81.github.io/3dprintforge/" target="_blank" rel="noopener noreferrer" class="">skynett81.github.io/3dprintforge</a></li>
<li class="">Accessible at <code>/docs/</code> from the dashboard</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="security--performance">Security &amp; Performance<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#security--performance" class="hash-link" aria-label="Direct link to Security &amp; Performance" title="Direct link to Security &amp; Performance" translate="no">​</a></h2>
<ul>
<li class="">Secure flag on session cookies when HTTPS is active</li>
<li class="">N+1 query in <code>getSpools</code> fixed with batch query</li>
<li class="">New database index on <code>print_history.started_at</code></li>
<li class=""><code>readBody</code> returns 400 on invalid JSON instead of silent fallback</li>
<li class="">Intervals cleaned up on shutdown (no memory leaks)</li>
<li class="">Docker healthcheck fixed for HTTPS mode</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="all-bambu-lab-printers-supported">All Bambu Lab Printers Supported<a href="https://skynett81.github.io/3dprintforge/en/blog/v1.1.12#all-bambu-lab-printers-supported" class="hash-link" aria-label="Direct link to All Bambu Lab Printers Supported" title="Direct link to All Bambu Lab Printers Supported" translate="no">​</a></h2>
<p>X1C, X1C Combo, X1E, P1S, P1S Combo, P1P, P2S, P2S Combo, A1, A1 Combo, A1 mini, H2S, H2D (dual nozzle), H2C (toolchanger)</p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Welcome to 3DPrintForge]]></title>
        <id>https://skynett81.github.io/3dprintforge/en/blog/welcome</id>
        <link href="https://skynett81.github.io/3dprintforge/en/blog/welcome"/>
        <updated>2026-03-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[3DPrintForge is a self-hosted dashboard for all your 3D printers. It connects directly to your printer via MQTT and gives you full control and overview.]]></summary>
        <content type="html"><![CDATA[<p>3DPrintForge is a self-hosted dashboard for all your 3D printers. It connects directly to your printer via MQTT and gives you full control and overview.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-can-you-do">What can you do?<a href="https://skynett81.github.io/3dprintforge/en/blog/welcome#what-can-you-do" class="hash-link" aria-label="Direct link to What can you do?" title="Direct link to What can you do?" translate="no">​</a></h2>
<ul>
<li class=""><strong>Real-time monitoring</strong> — see temperature, speed, progress, and camera live</li>
<li class=""><strong>Filament inventory</strong> — track all spools with AMS sync, drying, and usage statistics</li>
<li class=""><strong>Print history</strong> — complete history with statistics, model names, and MakerWorld links</li>
<li class=""><strong>Printer controls</strong> — temperature, speed, fans, G-code, and macros</li>
<li class=""><strong>Scheduler</strong> — calendar view with automatic logging of completed prints</li>
<li class=""><strong>OBS overlay</strong> — stream print status to your livestream</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started">Getting started<a href="https://skynett81.github.io/3dprintforge/en/blog/welcome#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<ol>
<li class="">Install Node.js 22+</li>
<li class=""><code>git clone</code> and <code>npm install</code></li>
<li class=""><code>npm start</code></li>
<li class="">Open <code>https://localhost:3443</code> and connect your printer</li>
</ol>
<p>Read more in the <a class="" href="https://skynett81.github.io/3dprintforge/en/intro">documentation</a>.</p>]]></content>
        <author>
            <name>SkyNett81</name>
            <uri>https://github.com/skynett81</uri>
        </author>
        <category label="Guide" term="Guide"/>
    </entry>
</feed>