Bambu Filament Manager is a local-first Mac-friendly filament dashboard built with plain HTML, CSS, and vanilla JavaScript. It tracks a normalized Bambu Lab catalog, your owned inventory, usage logs, wishlist items, and low-stock alerts without needing a backend or build step.
bambu-filament-manager/
index.html
styles/
app.css
scripts/
app.js
data-store.js
render.js
filters.js
modals.js
seed-catalog.js
data/
bambu_catalog.json
inventory.json
usage_log.json
README.md
Double-click [index.html](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/index.html).
When opened this way, browsers usually block automatic fetch() access to local JSON files. The app still works because it falls back to:
- Bundled starter data from [seed-catalog.js](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/scripts/seed-catalog.js)
- Your saved browser edits in
localStorage
From [bambu-filament-manager](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager):
python3 -m http.server 8000Then open http://localhost:8000.
This mode lets the app automatically load the editable JSON files in [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json), [data/inventory.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/inventory.json), and [data/usage_log.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/usage_log.json).
The app uses three separate datasets:
- Catalog data in [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json)
- Owned inventory data in [data/inventory.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/inventory.json)
- Usage history in [data/usage_log.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/usage_log.json)
On startup:
- The app loads each dataset from
localStoragefirst if you already edited something in the browser. - If there is no browser-saved data, it loads from the JSON files when served over
http://localhost. - If the app is opened directly from disk, it falls back to the starter data bundled in [scripts/seed-catalog.js](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/scripts/seed-catalog.js).
Open [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json) in any text editor and add another object to the array.
Example:
{
"id": "pla-matte-ice-blue",
"brand": "Bambu Lab",
"family": "pla",
"material": "PLA Matte",
"color": "Ice Blue",
"hex": "#9CCBEA",
"swatch": "#9CCBEA",
"bambuCode": "11601",
"productUrl": "https://us.store.bambulab.com/products/pla-matte",
"reorderLabel": "Ice Blue (11601)",
"amsCompatible": true,
"active": true
}Rules that keep the data clean:
idshould stay unique and lowercase with hyphens.familyshould group related materials likepla,petg,tpu,asa,abs,support, orengineering.swatchcan be the same ashexfor normal colors.bambuCodeshould only be added when it is clearly supported by official product data.productUrlshould point to the official Bambu family product page when available.- Keep
catalogIdvalues in inventory and usage entries matched to an existing catalogid.
This catalog pass was built from official Bambu sources first:
- The official filament collection page on the Bambu US Store for which filament families are currently listed
- Official Bambu store product pages that expose hex code tables for current colors
- Official Bambu support material comparison content for support-filament color availability
The catalog intentionally avoids adding fake placeholder colors for materials where the current official page was visible but the exact live color list was not clearly exposed in the available official sources.
You have two easy paths.
Add a new entry to [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json), then refresh the browser.
[scripts/seed-catalog.js](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/scripts/seed-catalog.js) includes helper functions:
slugify(...)catalogEntry(...)buildCatalogFromPairs(...)dedupeCatalog(...)sortCatalog(...)createGradientSwatch(...)productUrlByMaterialbambuCodeByMaterial
That file is meant to stay beginner-friendly. The recommended maintenance flow is:
- Add or update colors in [scripts/seed-catalog.js](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/scripts/seed-catalog.js)
- Keep each material grouped in its own
buildCatalogFromPairs(...)block - Let the helper dedupe and sort the final catalog
- Regenerate [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json) from the seed file
Example regeneration command:
node <<'NODE'
const fs = require('fs');
const vm = require('vm');
const context = { window: {} };
vm.createContext(context);
vm.runInContext(fs.readFileSync('./scripts/seed-catalog.js', 'utf8'), context);
fs.writeFileSync('./data/bambu_catalog.json', JSON.stringify(context.window.BambuSeeds.catalog, null, 2) + '\n');
NODEExample helper usage:
var newPlaMatteColors = window.BambuSeeds.helpers.buildCatalogFromPairs(
"PLA Matte",
"pla",
true,
[
{ id: "pla-matte-cloud-white", color: "Cloud White", hex: "#F2F4F4" },
{ id: "pla-matte-forest-green", color: "Forest Green", hex: "#53684A" }
]
);Each filament card supports:
- Editing owned status
- Total rolls and open rolls
- Remaining percentage
- Low-stock threshold
- Notes
- Wishlist toggling
- Usage logging
Low-stock state turns on automatically when:
remainingPct <= lowThreshold
The UI includes three useful data actions:
- Normal app edits auto-save to browser
localStorageimmediately after they succeed. That includes inventory edits, usage logs, wishlist toggles, quick add-to-inventory flows, clear-entry actions, imports, and reset. Import JSONloads one or more JSON files and stores them into browserlocalStorage.Save JSON Fileswrites JSON files into a folder if your browser supports the File System Access API. If not, it falls back to downloads.Download Backupdownloads one combined backup file containing the catalog, inventory, and usage datasets together.
Import JSON now supports both:
- Separate files such as
bambu_catalog.json,inventory.json, andusage_log.json - The combined backup file created by
Download Backup
The importer also validates cross-references so inventory and usage entries cannot point to catalog IDs that do not exist.
For a manual backup, also copy these files somewhere safe:
- [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json)
- [data/inventory.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/inventory.json)
- [data/usage_log.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/usage_log.json)
If you have browser-only edits you want to preserve, use the in-app Download Backup button before clearing browser storage.
This project is set up so that:
- Clicking a card opens the inventory editor
- Clicking
Edit InventoryorLog Usagegoes directly to the matching modal action - Invalid modal data stays open instead of silently closing
- Usage totals, latest usage context, and low-stock state update after every successful auto-save
- Reset only clears browser-saved overrides and then reloads JSON or bundled seed data
The starter catalog currently includes:
- Every filament you listed as currently owned
- A much larger official-source-driven Bambu catalog with normalized ids
- Official support materials and engineering materials where current colors could be verified
- A seed-helper structure that is much easier to extend later
Use these files for the most common changes:
- [data/bambu_catalog.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/bambu_catalog.json) for materials and colors
- [data/inventory.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/inventory.json) for what you own
- [data/usage_log.json](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/data/usage_log.json) for print history
- [styles/app.css](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/styles/app.css) for visual styling
- [scripts/app.js](/Users/anthonylarosa/CODEX/Bambu Filament Dashboard/bambu-filament-manager/scripts/app.js) for app behavior
Because this app has no backend:
- Editing a card saves to browser storage immediately.
- A different browser profile will have different local changes.
- JSON files on disk do not update automatically unless you use
Save JSON Filesor downloaded backups.