diff --git a/.gitignore b/.gitignore index 99b0e139..89cea72d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ .opencode/ .omo/ doc-outside/ +.playwright-mcp/ +.ruff_cache/ +.claude/ diff --git a/.omo/run-continuation/ses_071067c3affer89vWhtchwUwi1.json b/.omo/run-continuation/ses_071067c3affer89vWhtchwUwi1.json deleted file mode 100644 index 1c49284a..00000000 --- a/.omo/run-continuation/ses_071067c3affer89vWhtchwUwi1.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "sessionID": "ses_071067c3affer89vWhtchwUwi1", - "updatedAt": "2026-07-23T12:39:20.556Z", - "sources": { - "background-task": { - "state": "idle", - "updatedAt": "2026-07-23T12:39:20.556Z" - } - } -} \ No newline at end of file diff --git a/.playwright-mcp/page-2026-07-23T13-57-55-137Z.yml b/.playwright-mcp/page-2026-07-23T13-57-55-137Z.yml deleted file mode 100644 index 06bee949..00000000 --- a/.playwright-mcp/page-2026-07-23T13-57-55-137Z.yml +++ /dev/null @@ -1,274 +0,0 @@ -- generic [active] [ref=e1]: - - generic [ref=e2]: - - banner [ref=e3]: - - generic [ref=e4]: - - heading "Polymaker Filament Presets" [level=1] [ref=e5]: - - img "Polymaker" [ref=e6] - - generic [ref=e7]: Filament Presets - - generic [ref=e8]: - - button "Manual Installation" [ref=e9] [cursor=pointer]: How to use? - - button "Switch language" [ref=e11] [cursor=pointer]: - - generic [ref=e12]: EN - - generic [ref=e13]: ▾ - - button "Toggle theme" [ref=e14] [cursor=pointer] - - paragraph [ref=e16]: Select your slicer to view and download Polymaker print profiles and filament presets for Bambu Studio, OrcaSlicer, ElegooSlicer, and PrusaSlicer - - generic [ref=e19]: - - generic [ref=e20]: Select Your Slicer - - generic [ref=e21]: - - button "Select Slicer" [ref=e22] [cursor=pointer] - - generic: - - generic: BambuStudio - - generic: CrealityPrint - - generic: ElegooSlicer - - generic: OrcaSlicer - - generic: OrcaSlicer (Snapmaker) - - generic: PrusaSlicer - - generic [ref=e25]: - - heading "Known Issues" [level=2] [ref=e26] - - generic [ref=e27]: - - generic [ref=e28]: - - button "BambuStudio Preset Import Mismatch - Fixed" [ref=e29] [cursor=pointer]: - - generic [ref=e31]: ▼ - - generic [ref=e32]: - - paragraph [ref=e33]: - - strong [ref=e34]: "Issue:" - - text: BambuStudio matches filament presets to printers by checking whether the full printer preset name (e.g. "Bambu Lab X1 Carbon 0.4 nozzle") appears inside the preset's - - code [ref=e35]: name - - text: field. Polymaker source files use the abbreviation - - code [ref=e36]: "@BBL X1" - - text: ", so the substring check fails and AMS slot temperature / type do not populate when assigning the imported filament." - - paragraph [ref=e37]: - - strong [ref=e38]: "Solution:" - - text: This website now automatically splits BambuStudio downloads into per-printer files and rewrites the - - code [ref=e39]: name - - text: field to contain the full printer preset name. Download presets using the - - strong [ref=e40]: JSON - - text: or - - strong [ref=e41]: .bbsflmt - - text: buttons on this page — do not copy raw JSON files directly from GitHub. - - paragraph [ref=e42]: - - 'link "View GitHub Issue #14 →" [ref=e43] [cursor=pointer]': - - /url: https://github.com/Polymaker3D/Polymaker-Preset/issues/14 - - generic [ref=e44]: - - button "P2S Overheating Issue - Temporary Fix Applied" [ref=e45] [cursor=pointer]: - - generic [ref=e47]: ▼ - - generic [ref=e48]: - - paragraph [ref=e49]: - - strong [ref=e50]: "Issue:" - - text: P2S printer may overheat when printing materials with vitrification temperature > 50°C due to starting G-code issues. - - paragraph [ref=e51]: - - strong [ref=e52]: "Solution:" - - text: We have implemented a temporary fix by adding cooling G-code commands to P2S presets with vitrification temperature > 50°C. This is a temporary workaround until Bambu Lab fixes this issue. - - paragraph [ref=e53]: Thanks to alexbreinig and capsel22 for identifying this issue. - - generic [ref=e54]: - - button "BambuStudio Restart Required After Import" [ref=e55] [cursor=pointer]: - - generic [ref=e57]: ▼ - - generic [ref=e58]: - - paragraph [ref=e59]: - - strong [ref=e60]: "Issue:" - - text: BambuStudio may not correctly apply newly imported filament presets until the application is restarted. Slicing or printing without restarting may use incorrect temperature, flow rate, or other filament settings. - - paragraph [ref=e61]: - - strong [ref=e62]: "Solution:" - - text: Always restart BambuStudio after importing Polymaker presets, before you start slicing or printing. A warning popup will also remind you when downloading BambuStudio presets from this page. - - paragraph [ref=e63]: - - 'link "View BambuStudio Issue #10583 →" [ref=e64] [cursor=pointer]': - - /url: https://github.com/bambulab/BambuStudio/issues/10583 - - contentinfo [ref=e65]: - - generic [ref=e66]: - - generic [ref=e67]: - - heading "Links" [level=3] [ref=e68] - - generic [ref=e69]: - - 'link "官方网站: https://polymaker.com.cn/" [ref=e70] [cursor=pointer]': - - /url: https://polymaker.com.cn/ - - generic [ref=e71]: "官方网站:" - - generic [ref=e72]: https://polymaker.com.cn/ - - 'link "天猫旗舰店: Polymaker天猫旗舰店" [ref=e73] [cursor=pointer]': - - /url: https://polymaker.tmall.com/shop/view_shop.htm?appUid=RAzN8HWZMKqC7EJdHZM3c35RSQRndtENLvV1XDNbLHeRrNjDDQD&spm=a21n57.1.hoverItem.3 - - generic [ref=e74]: "天猫旗舰店:" - - generic [ref=e75]: Polymaker天猫旗舰店 - - 'link "京东: Polymaker京东官方旗舰店" [ref=e76] [cursor=pointer]': - - /url: https://mall.jd.com/index-11480242.html?from=pc - - generic [ref=e77]: "京东:" - - generic [ref=e78]: Polymaker京东官方旗舰店 - - 'link "拼多多: Polymaker拼多多官方旗舰店" [ref=e79] [cursor=pointer]': - - /url: https://mobile.yangkeduo.com/mall_page.html?ps=hWbVcDDvRE - - generic [ref=e80]: "拼多多:" - - generic [ref=e81]: Polymaker拼多多官方旗舰店 - - generic [ref=e82]: - - heading "Social Accounts" [level=3] [ref=e83] - - generic [ref=e84]: - - link " 哔哩哔哩" [ref=e85] [cursor=pointer]: - - /url: https://b23.tv/9TArcE9 - - generic [ref=e86]:  - - generic [ref=e87]: 哔哩哔哩 - - link " 抖音" [ref=e88] [cursor=pointer]: - - /url: https://v.douyin.com/TuUsFvE0wVM/ - - generic [ref=e89]:  - - generic [ref=e90]: 抖音 - - link " 小红书" [ref=e91] [cursor=pointer]: - - /url: https://xhslink.com/m/7IsxNt6IGIS - - generic [ref=e92]:  - - generic [ref=e93]: 小红书 - - link " 快手" [ref=e94] [cursor=pointer]: - - /url: https://v.kuaishou.com/J7Elnm5y - - generic [ref=e95]:  - - generic [ref=e96]: 快手 - - link " 微博" [ref=e97] [cursor=pointer]: - - /url: https://weibo.com/u/8020822581 - - generic [ref=e98]:  - - generic [ref=e99]: 微博 - - paragraph [ref=e100]: - - link "苏ICP备2025214399号" [ref=e101] [cursor=pointer]: - - /url: https://beian.miit.gov.cn/ - - dialog: - - generic: - - generic: - - heading [level=2]: ⚠️ Duplicate Files Detected - - button - - generic: - - paragraph: "Multiple presets are generating the same filename. Please select which preset to keep for each duplicate:" - - generic: - - button: Cancel - - button: Confirm Export - - dialog: - - generic: - - generic: - - heading [level=2]: ⚠️ Restart BambuStudio Required - - button - - generic: - - generic: - - paragraph: - - strong: "Important:" - - text: After importing presets into BambuStudio, you - - strong: must restart the slicer - - text: before slicing and printing. Failure to restart may cause incorrect settings to be applied. - - paragraph: - - link: - - /url: https://github.com/bambulab/BambuStudio/issues/10583 - - text: "View GitHub Issue #10583 →" - - generic: - - button: Cancel - - button: Continue Download - - dialog: - - generic: - - generic: - - heading [level=2]: ⚠️ Some Nozzle Options Have No Preset - - button - - generic: - - generic: - - paragraph: "Some selected presets don't include every nozzle/extruder option for this printer. We didn't make presets for these variants:" - - paragraph: You can still download — those nozzle options just won't have tuned values. - - generic: - - button: Continue Download - - dialog: - - generic: - - generic: - - heading [level=2]: 📦 Manual Installation - - button - - generic: - - generic: - - heading [level=3]: Bambu Studio - - heading [level=4]: "Method 1: Bundle Method (Recommended)" - - list: - - listitem: - - text: Download the preset - - strong: .bbsflmt - - text: file (or bundle ZIP) from the - - link: - - /url: https://presets.polymaker.com.cn - - text: download page - - text: . - - listitem: If it's a ZIP file, unzip it to extract the .bbsflmt file(s). - - listitem: Open Bambu Studio. - - listitem: - - text: Go to - - strong: File - - text: → - - strong: Import - - text: → - - strong: Import Preset... - - text: . - - listitem: - - text: Select the - - strong: .bbsflmt - - text: file(s). - - listitem: Click on a material in the project consumables list, select the imported custom preset, and the preset will appear in the preset list. - - paragraph: - - strong: "Note:" - - text: .bbsflmt bundles are only available for BambuStudio. The bundle download button appears when BambuStudio presets are selected. - - heading [level=4]: "Method 2: Individual File Method" - - list: - - listitem: - - text: Download the preset JSON file (or single-file ZIP) from the - - link: - - /url: https://presets.polymaker.com.cn - - text: download page - - text: . - - listitem: Open Bambu Studio. - - listitem: - - text: Go to - - strong: File - - text: → - - strong: Import - - text: → - - strong: Import Preset... - - text: . - - listitem: Select a JSON or ZIP file. - - listitem: Click on a material in the project consumables list, select the imported custom preset, and the preset will appear in the preset list. - - generic: - - heading [level=3]: OrcaSlicer / ElegooSlicer - - list: - - listitem: - - text: Download the preset as - - strong: JSON - - text: or - - strong: single-file ZIP - - text: from the - - link: - - /url: https://presets.polymaker.com.cn - - text: download page - - text: . - - listitem: Open OrcaSlicer or ElegooSlicer. - - listitem: - - text: Go to - - strong: File - - text: → - - strong: Import - - text: ":" - - list: - - listitem: - - text: For a - - strong: JSON - - text: "file: choose" - - strong: Import Configs... - - text: (OrcaSlicer) or - - strong: Import Preset... - - text: (ElegooSlicer), then select the JSON file. - - listitem: - - text: For a - - strong: ZIP - - text: "file: choose" - - strong: Import Zip Archive... - - text: (or the equivalent, e.g. "Import Zip Archive…" in ElegooSlicer), then select the ZIP file (no need to unzip). - - listitem: The preset will appear in your preset list. - - generic: - - heading [level=3]: PrusaSlicer - - list: - - listitem: - - text: Download the preset as an - - strong: INI - - text: file from the - - link: - - /url: https://presets.polymaker.com.cn - - text: download page - - text: . - - listitem: Open PrusaSlicer. - - listitem: - - text: Go to - - strong: File - - text: → - - strong: Import - - text: → - - strong: Import Config... - - text: ", then select the INI file." - - listitem: The filament preset will appear in your preset list. \ No newline at end of file diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 00000000..870359d4 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,135 @@ +# Polymaker Filament Presets Design System + +## 1. Atmosphere & Identity + +The interface is a compact, technical download workspace with translucent panels, restrained typography, and Polymaker teal used as the identifying accent. Its signature is the same information-dense surface system in two contexts: a dark standalone theme and a light wiki embed theme. + +## 2. Color + +### Core tokens + +| Role | Token | Dark theme | Wiki theme | Usage | +| --- | --- | --- | --- | --- | +| Page background | `--bg-dark` | `#0d0d12` | `var(--wiki-bg-tint)` | Page canvas | +| Card background | `--bg-card` | `rgba(255, 255, 255, 0.05)` | `rgba(255, 255, 255, 0.96)` | Cards, sections, modal surfaces | +| Card hover | `--bg-card-hover` | `rgba(255, 255, 255, 0.08)` | `rgba(230, 250, 250, 1)` | Hovered surfaces | +| Border | `--border` | `rgba(255, 255, 255, 0.1)` | `rgba(15, 23, 42, 0.08)` | Panel and control outlines | +| Primary text | `--text` | `#e4e4e7` | `#111827` | Headings and body text | +| Muted text | `--text-muted` | `#a1a1aa` | `#6B7280` | Labels and secondary copy | +| Brand accent | `--accent` | `#00CCCC` | Inherited | Links, focus, primary actions | +| Accent highlight | `--accent-light` | `#4DE1E1` | Inherited | Hover and highlighted links | +| Gradient start | `--gradient-start` | `#00A3A3` | Inherited | Brand gradients and wiki links | +| Gradient end | `--gradient-end` | `#00CCCC` | Inherited | Brand gradients | +| Wiki tint | `--wiki-bg-tint` | `#E6FAFA` | `#E6FAFA` | Wiki background tint | +| Wiki link | `--wiki-link` | Not set | `var(--accent)` | Wiki link states | +| Wiki link hover | `--wiki-link-hover` | Not set | `var(--accent)` | Wiki link hover states | + +### Theme rules + +- The dark theme is the default `:root` system. +- `body.theme-wiki` overrides surface, border, text, shadow, and link tokens without changing component structure. +- Existing semantic tokens must be reused before adding direct color values. + +## 3. Typography + +### Font stack + +- Primary: self-hosted `Figtree`, followed by `Noto Sans SC`, then `sans-serif`. +- Figtree provides normal and italic variable faces from weight `300` through `900`, with `font-display: swap`. +- Code inside installation steps keeps the project font stack and adds `monospace` as its final fallback. + +### Existing scale and hierarchy + +| Pattern | Size | Weight | Line height / tracking | +| --- | --- | --- | --- | +| Hero title | `clamp(1.25rem, 3vw, 1.6rem)` | `700` | `1`; `-0.01em` in English | +| Section and modal titles | `1rem` to `1.05rem` | `600` | Inherited | +| Product and control titles | `0.88rem` to `0.95rem` | `600` | `1.25` where declared | +| Control and button text | `0.8rem` to `0.9rem` | `500` to `600` | Inherited | +| Supporting copy | `0.75rem` to `0.8rem` | `400` to `500` | `1.3` to `1.5` where declared | +| Small labels and credits | `0.7rem` to `0.75rem` | `500` to `600` | Uppercase labels use `0.03em` tracking | + +Chinese hero text uses the existing language-specific spacing adjustments in `style.css`; translations do not alter component hierarchy. + +## 4. Spacing & Layout + +### Page layout + +- `.page` is centered with `max-width: 1400px`, horizontal padding of `1rem`, and a full-viewport-height flex column. +- The mobile breakpoint is `640px`; page horizontal padding becomes `0.75rem` there. +- Filters use an auto-fitting grid and become two columns at the mobile breakpoint. +- The preset list is a flexible panel with scrollable table content and a maximum height of `60vh`. + +### Existing spacing conventions + +- Compact inline and control gaps use the existing `0.15rem`, `0.2rem`, `0.28rem`, `0.3rem`, `0.35rem`, `0.4rem`, and `0.5rem` values. +- Panel and component padding primarily uses `0.5rem`, `0.6rem`, `0.75rem`, and `1rem` combinations. +- Section separation uses `1rem`; accordion items use a `0.5rem` gap. +- Preserve these established values when extending an existing selector. Do not introduce a new spacing scale for a one-off change. + +### Shape tokens + +| Token | Value | Usage | +| --- | --- | --- | +| `--radius` | `8px` | Controls, accordion items, nested panels | +| `--radius-lg` | `12px` | Cards, issue sections, modal surfaces | + +Pill controls use the existing `999px` radius where a circular or capsule shape is required. + +## 5. Components + +### Cards and sections + +- **Structure:** `.card` or a semantic section wrapper around its title and content. +- **Surface:** `--bg-card`, `--border`, `--radius-lg`, backdrop blur, and the shared shadow convention. +- **Variants:** filters, slicer selector, preset list, warnings, and known issues. +- **Responsive behavior:** compact padding at the `640px` breakpoint. + +### Buttons and controls + +- **Structure:** native buttons with inherited typography; SVG is used for action icons. +- **Variants:** primary, secondary, download, icon, theme toggle, and dropdown toggle. +- **States:** hover, focus-visible, disabled, loading, selected, and hidden states are represented by selectors or state classes. +- **Accessibility:** retain native button semantics and visible focus treatment. + +### Dropdowns and filters + +- **Structure:** `.dropdown`, `.dropdown-toggle`, and `.dropdown-menu` with `.dropdown-option` children. +- **States:** `.is-open`, `.is-active`, and `.is-disabled` control interaction and visibility. +- **Theme behavior:** dark and wiki themes share structure and override only presentation. + +### Preset table + +- **Structure:** a semantic table inside `.table-wrap` with a sticky header and scrollable overflow. +- **Presentation:** fixed layout, compact type, tokenized borders, and theme-specific header treatment. +- **Responsive behavior:** cell padding and type size reduce at the mobile breakpoint. + +### Modals + +- **Structure:** `.modal`, overlay, content, header, body, and action controls. +- **State:** `.is-open` enables pointer interaction and reveals the modal; ARIA state is updated by JavaScript. +- **Surface:** uses the shared card tokens, large radius, and elevated modal shadow. +- **Conversion guide variant:** uses a wider modal, a warning panel, localized step text, and language-specific screenshots with reserved dimensions and lazy loading. + +### Accordion + +- **Structure:** `.accordion` contains `.accordion-item`; each item contains a native `.accordion-header` button followed by `.accordion-content` and `.accordion-body`. +- **Initial folded state:** apply `.is-collapsed` to `.accordion-item` and `aria-expanded="false"` to its header button. +- **Expanded state:** the shared JavaScript removes `.is-collapsed` and sets `aria-expanded="true"`. +- **Behavior:** `app.js` binds every `.accordion-header`, so issue sections must reuse this exact class and ARIA pattern rather than add a separate interaction. +- **Resolved history:** `.resolved-issues-group` is the final compact `.accordion-item` inside the Known Issues accordion. A plain divider and muted text distinguish it from ongoing warning items; its header has no background or padding. A centered minimum height balances the label vertically between the divider and card edge. A small arrow sits directly after the label and rotates with the shared accordion state. The collapsed header is the only resolved-history row visible initially, and expanding it reveals the semantic `.resolved-issue-title` and issue details without nesting another accordion. + +## 6. Motion & Interaction + +| Convention | Value | Usage | +| --- | --- | --- | +| Shared transition | `--transition: 0.15s ease` | Borders, backgrounds, colors, shadows, and small transforms | +| Accordion icon | `transform 0.2s ease` | Rotates when an item is collapsed | +| Accordion content | `max-height 0.3s ease, padding 0.3s ease` | Existing expand and collapse behavior | +| Modal content | `transform 0.2s ease` | Scale and vertical entrance | + +Interactive components preserve the existing hover and focus-visible states. State changes are represented by classes such as `.is-open`, `.is-collapsed`, `.is-active`, `.is-disabled`, and `.is-hidden`, with ARIA attributes updated alongside visual state where implemented. + +## 7. Depth & Surface + +The existing strategy is mixed: translucent tonal surfaces are separated by tokenized borders, backdrop blur, and shadows. Standard cards use `--shadow: 0 2px 12px rgba(0, 0, 0, 0.35)` in the dark theme and `0 8px 28px rgba(148, 163, 184, 0.35)` in the wiki theme. Modals and open dropdowns use stronger existing shadows to indicate elevation. New sections that belong to an established component family must share that family’s surface and depth rules rather than introduce a distinct treatment. diff --git a/app.js b/app.js index e29cb17c..5ff57cb3 100644 --- a/app.js +++ b/app.js @@ -1999,6 +1999,41 @@ function initModal() { }); } +function initConversionModal() { + var modal = document.getElementById('conversion-guide-modal'); + var guideBtn = document.getElementById('conversion-guide-btn'); + if (!modal || !guideBtn) return; + + var closeBtn = document.getElementById('conversion-guide-modal-close'); + var overlay = modal.querySelector('.modal-overlay'); + var previousFocus = null; + + function openModal() { + previousFocus = document.activeElement; + modal.setAttribute('aria-hidden', 'false'); + modal.classList.add('is-open'); + document.body.style.overflow = 'hidden'; + if (closeBtn) closeBtn.focus(); + } + + function closeModal() { + modal.setAttribute('aria-hidden', 'true'); + modal.classList.remove('is-open'); + document.body.style.overflow = ''; + if (previousFocus) previousFocus.focus(); + } + + guideBtn.addEventListener('click', openModal); + if (closeBtn) closeBtn.addEventListener('click', closeModal); + if (overlay) overlay.addEventListener('click', closeModal); + + document.addEventListener('keydown', function (e) { + if (e.key === 'Escape' && modal.classList.contains('is-open')) { + closeModal(); + } + }); +} + // Duplicate Resolution Modal functionality var duplicateModalState = { duplicates: [], @@ -2461,6 +2496,7 @@ initLangSwitcher(); init(); initModal(); +initConversionModal(); initDuplicateModal(); initBambuRestartModal(); initMissingVariantModal(); diff --git a/assets/conversion-guide/en-step-1.png b/assets/conversion-guide/en-step-1.png new file mode 100644 index 00000000..1cf54d5d Binary files /dev/null and b/assets/conversion-guide/en-step-1.png differ diff --git a/assets/conversion-guide/en-step-2.png b/assets/conversion-guide/en-step-2.png new file mode 100644 index 00000000..b95f875e Binary files /dev/null and b/assets/conversion-guide/en-step-2.png differ diff --git a/assets/conversion-guide/en-step-3.png b/assets/conversion-guide/en-step-3.png new file mode 100644 index 00000000..1ccbd852 Binary files /dev/null and b/assets/conversion-guide/en-step-3.png differ diff --git a/assets/conversion-guide/en-step-4.png b/assets/conversion-guide/en-step-4.png new file mode 100644 index 00000000..48d001d9 Binary files /dev/null and b/assets/conversion-guide/en-step-4.png differ diff --git a/assets/conversion-guide/en-step-5.png b/assets/conversion-guide/en-step-5.png new file mode 100644 index 00000000..b41b282c Binary files /dev/null and b/assets/conversion-guide/en-step-5.png differ diff --git a/assets/conversion-guide/en-step-6.png b/assets/conversion-guide/en-step-6.png new file mode 100644 index 00000000..85654bac Binary files /dev/null and b/assets/conversion-guide/en-step-6.png differ diff --git a/assets/conversion-guide/en-step-7.png b/assets/conversion-guide/en-step-7.png new file mode 100644 index 00000000..86152e69 Binary files /dev/null and b/assets/conversion-guide/en-step-7.png differ diff --git a/assets/conversion-guide/zh-step-1.png b/assets/conversion-guide/zh-step-1.png new file mode 100644 index 00000000..335d5af8 Binary files /dev/null and b/assets/conversion-guide/zh-step-1.png differ diff --git a/assets/conversion-guide/zh-step-2.png b/assets/conversion-guide/zh-step-2.png new file mode 100644 index 00000000..c83a72d8 Binary files /dev/null and b/assets/conversion-guide/zh-step-2.png differ diff --git a/assets/conversion-guide/zh-step-3.png b/assets/conversion-guide/zh-step-3.png new file mode 100644 index 00000000..f99cf97b Binary files /dev/null and b/assets/conversion-guide/zh-step-3.png differ diff --git a/assets/conversion-guide/zh-step-4.png b/assets/conversion-guide/zh-step-4.png new file mode 100644 index 00000000..e55dc5a9 Binary files /dev/null and b/assets/conversion-guide/zh-step-4.png differ diff --git a/assets/conversion-guide/zh-step-5.png b/assets/conversion-guide/zh-step-5.png new file mode 100644 index 00000000..01288ef2 Binary files /dev/null and b/assets/conversion-guide/zh-step-5.png differ diff --git a/assets/conversion-guide/zh-step-6.png b/assets/conversion-guide/zh-step-6.png new file mode 100644 index 00000000..2698602c Binary files /dev/null and b/assets/conversion-guide/zh-step-6.png differ diff --git a/assets/conversion-guide/zh-step-7.png b/assets/conversion-guide/zh-step-7.png new file mode 100644 index 00000000..31d391bb Binary files /dev/null and b/assets/conversion-guide/zh-step-7.png differ diff --git a/i18n.js b/i18n.js index a6c91fd1..21ed7442 100644 --- a/i18n.js +++ b/i18n.js @@ -21,6 +21,8 @@ var I18N = (function () { // Filters 'filter.slicer.label': 'Select Your Slicer', 'filter.slicer.placeholder': 'Select Slicer', + 'filter.slicer.notice': 'Each preset we provide is tuned for a specific combination of material, printer model, and slicer. If a preset is unavailable for your slicer but available for another, you can adapt it manually.', + 'filter.slicer.guide': 'Open conversion guide', 'filter.series.label': 'Series', 'filter.brand.label': 'Printer Brand', 'filter.model.label': 'Printer Model', @@ -81,6 +83,20 @@ var I18N = (function () { 'modal.missingvariant.note': "You can still download — those nozzle options just won't have tuned values.", 'modal.missingvariant.ack': 'Continue Download', + 'modal.convert.title': 'How to Import Bambu Studio Presets into Orca Slicer', + 'modal.convert.warning': 'WARNING: Polymaker does not officially support manual preset conversion. Conversion can remove settings, assign incorrect values, or cause other parameter errors. These errors can cause unpredictable printing results. Review all imported parameters and run a test print before you use the converted preset.', + 'modal.convert.intro': "This guide explains how to import print profiles from Bambu Studio, or another printer brand's slicer, into Orca Slicer.", + 'modal.convert.steps': [ + '

Select Printer and Filament

In Bambu Studio, first make sure you have correctly selected the Printer and Filament you want to export, and have applied the parameter configurations you wish to export.

Printer and filament selection in Bambu Studio', + '

Save Project As 3MF File

Once configured, click on the File menu and select Save Project As to save the current project as a .3mf file.

Save Project As command in Bambu Studio', + '

Open Project in Orca Slicer

Open Orca Slicer, click Open Project in the File menu, or drag the saved .3mf file into the Orca Slicer window.

Open Project command in Orca Slicer', + '

Review Import Errors

Orca Slicer can show errors for unsupported parameters while it opens the file. Review each message, then confirm or close it to continue.

Unsupported parameter message in Orca Slicer', + '

Edit Filament

After the project loads, find the imported filament and process settings in the left panel. Click the Edit button next to the filament. Check the parameters, then click the Save icon.

Edit filament settings in Orca Slicer', + '

Save as User Preset

In the save dialog, select User preset, then confirm the save. Orca Slicer will store the configuration as a custom preset.

Save as User preset option in Orca Slicer', + '

Check Correctness

Check the imported process and filament parameters, including layer height, extruder temperature, bed temperature, and speed. Compare them with the original Bambu Studio settings before you print.

Imported preset parameters in Orca Slicer' + ], + 'modal.convert.complete': 'After you save the custom preset, you can select it directly from the Orca Slicer preset menu.', + // Install modal 'modal.install.title': '\ud83d\udce6 Manual Installation', 'modal.bambu.title': 'Bambu Studio', @@ -119,6 +135,7 @@ var I18N = (function () { // Known Issues 'issues.title': 'Known Issues', + 'issues.resolved.title': 'Resolved Issues', 'issues.import.title': 'BambuStudio Preset Import Mismatch - Fixed', 'issues.import.issue': 'Issue: BambuStudio matches filament presets to printers by checking whether the full printer preset name (e.g. "Bambu Lab X1 Carbon 0.4 nozzle") appears inside the preset\'s name field. Polymaker source files use the abbreviation @BBL X1, so the substring check fails and AMS slot temperature / type do not populate when assigning the imported filament.', 'issues.import.solution': 'Solution: This website now automatically splits BambuStudio downloads into per-printer files and rewrites the name field to contain the full printer preset name. Download presets using the JSON or .bbsflmt buttons on this page — do not copy raw JSON files directly from GitHub.', @@ -172,6 +189,8 @@ var I18N = (function () { // Filters 'filter.slicer.label': '选择切片软件', 'filter.slicer.placeholder': '请选择', + 'filter.slicer.notice': '我们提供的每个预设均针对特定的耗材、打印机型号和切片软件组合进行调校。如果您的切片软件没有所需预设,但其他切片软件有可用预设,您可以手动进行转换。', + 'filter.slicer.guide': '打开转换指南', 'filter.series.label': '耗材系列', 'filter.brand.label': '打印机品牌', 'filter.model.label': '打印机型号', @@ -232,6 +251,20 @@ var I18N = (function () { 'modal.missingvariant.note': '你仍然可以下载 —— 这些喷嘴选项只是没有调校好的数值。', 'modal.missingvariant.ack': '继续下载', + 'modal.convert.title': '如何将 Bambu Studio 预设文件导入到 Orca Slicer', + 'modal.convert.warning': '警告:Polymaker 不正式支持手动转换预设。转换过程可能导致设置丢失、数值错误或其他参数异常。这些问题可能造成不可预测的打印结果。使用转换后的预设前,请检查所有导入参数并进行测试打印。', + 'modal.convert.intro': '本指南介绍如何将 Bambu Studio 或其他打印机品牌自有切片软件中的打印配置导入到 Orca Slicer。', + 'modal.convert.steps': [ + '

选择设备和耗材

在 Bambu Studio 中,确认已经选择要导出的打印机设备耗材类型,并应用需要导出的参数配置。

在 Bambu Studio 中选择打印机和耗材', + '

将项目另存为 3MF 文件

配置完成后,打开文件菜单,选择另存为保存项目,将当前项目保存为 .3mf 文件。

在 Bambu Studio 中将项目另存为 3MF 文件', + '

在 Orca Slicer 中打开项目

打开 Orca Slicer,在文件菜单中选择打开项目,或将保存的 .3mf 文件拖到 Orca Slicer 主界面中。

在 Orca Slicer 中打开 3MF 项目', + '

检查导入错误

Orca Slicer 打开文件时,可能提示部分参数不受支持。请检查每条提示,然后确认或关闭提示以继续导入。

Orca Slicer 中不支持参数的提示', + '

编辑耗材

项目加载后,在左侧面板中找到导入的耗材和工艺配置。单击耗材旁边的编辑按钮,检查参数,然后单击上方的保存图标

在 Orca Slicer 中编辑耗材设置', + '

保存为用户预设

在保存对话框中选择 User preset(用户预设),然后确认保存。Orca Slicer 会将该配置保存为自定义预设。

在 Orca Slicer 中选择用户预设', + '

检查正确性

检查导入的工艺和耗材参数,包括层高、挤出机温度、热床温度和速度。打印前,请将这些参数与 Bambu Studio 中的原始设置进行比较。

检查 Orca Slicer 中导入的预设参数' + ], + 'modal.convert.complete': '成功保存自定义预设后,您可以直接从 Orca Slicer 的预设下拉菜单中选择并使用该配置。', + // Install modal 'modal.install.title': '📦 手动安装', 'modal.bambu.title': 'Bambu Studio', @@ -270,6 +303,7 @@ var I18N = (function () { // Known Issues 'issues.title': '已知问题', + 'issues.resolved.title': '已解决问题', 'issues.import.title': 'BambuStudio 预设导入不匹配 - 已修复', 'issues.import.issue': '问题:BambuStudio 通过检查完整的打印机预设名称(例如 "Bambu Lab X1 Carbon 0.4 nozzle")是否出现在预设的 name 字段中来匹配耗材预设。Polymaker 源文件使用缩写 @BBL X1,导致子字符串检查失败,分配导入的耗材到 AMS 槽位时温度/类型无法自动填充。', 'issues.import.solution': '解决方案:本网站现已自动将 BambuStudio 下载拆分为按打印机分类的文件,并将 name 字段重写为完整的打印机预设名称。请使用本页面的 JSON.bbsflmt 按钮下载预设 — 不要直接从 GitHub 复制原始 JSON 文件。', diff --git a/index.html b/index.html index cb7c3a57..357c7766 100644 --- a/index.html +++ b/index.html @@ -10418,6 +10418,10 @@

+

+ We tune each preset for a specific material, printer, and slicer combination. If you cannot find the preset you need, you can adapt one manually. + +

'.length); +} + +function countOccurrences(content, value) { + return content.split(value).length - 1; +} + +describe('Resolved Issues group', () => { + it('keeps resolved history collapsed inside Known Issues', () => { + const knownIssues = extractSection('known-issues-section'); + const resolvedGroupMarker = '