Cloud Profiles¶
Cloud Profiles — міст між твоїм Bambu Cloud аккаунтом і BamDude. Після входу твої filament / process / printer presets з'являються у slice modal поряд з локально імпортованими (див. Local Profiles), printer-firmware checks отримують доступ до списку Bambu-девайсів, а slicing-пайплайни можуть резолвити ті самі імена presets, що й Bambu Studio.
Інтеграція per-user. Кожен BamDude-акк тримає свій Bambu Cloud token — твій колега, що логіниться у свій Bambu-акк, не вибиває тебе, і твій токен не тече до нього.
Користуєшся ще й хмарою OrcaSlicer?
BamDude може паралельно логінитись в Orca Cloud — Supabase profile sync з OrcaSlicer 2.4.0-alpha — і показувати ті профілі поряд з Bambu Cloud presets у slice modal (вище за Bambu Cloud). Обидві інтеграції незалежні; підключай одну, обидві або жодну.
Per-user регіон (BamDude розширення)¶
Bambu Cloud розділений на два регіональні backend-и — bambulab.com (global) і bambulab.cn (China) — і твій акк живе рівно на одному. Upstream Bambuddy зберігає регіон глобально, тож install з мікс-юзерами не міг мати одного на global і одного на China одночасно.
BamDude піднімає це обмеження міграцією m011: кожен User-рядок несе свою колонку cloud_region (global / china / null). Sign-in пише регіон, який ти обрав, і кожен наступний запит від цього юзера йде до відповідного backend-хоста, навіть після рестарту. Два юзери на різних регіонах в одному install — підтримувана конфігурація.
| Зберігається | Поле | Default |
|---|---|---|
users рядок (auth увімкнений) |
cloud_token, cloud_email, cloud_region |
null до входу |
settings таблиця (auth вимкнений) |
bambu_cloud_token, bambu_cloud_email, bambu_cloud_region |
Fallback — single global cred bag |
null / порожній / unknown регіон трактується як global для legacy-рядків, які старіші за колонку.
Sign-in флоу¶
Settings → Cloud Profiles → Connect to Bambu Cloud. Три sub-флоу, обираються по MFA-сетапу твого акка або вподобанням:
1. Email + пароль + email OTP¶
Стандартний Bambu Cloud login для акків без TOTP.
- Обери регіон (Global / China)
- Введи Bambu email + пароль
- Submit — BamDude дзвонить
/v1/user-service/user/loginі отримуєneeds_verification=true - Bambu емейлить 6-значний код; забий у verify-діалог
- BamDude дзвонить
/cloud/verifyз кодом → токен зберігається на твоєму user-рядку → статус flips на Connected
2. Email + пароль + TOTP¶
Для акків з authenticator-app TOTP.
- Перші три кроки ті самі, але login-відповідь має
verification_type='totp'+tfa_key - Відкрий Google Authenticator / Authy / 1Password
- Введи поточний 6-значний код
- BamDude дзвонить
/cloud/verifyзtfa_key+ кодом
Флоу авто-детектить, який метод використовує твій акк — діалог рендерить правильний промпт, ти не вибираєш.
TOTP > email
Якщо акк має обидва — TOTP швидший (без email-round-trip) і працює offline. Перевір, що годинник пристрою синхронізований — TOTP-вікна 30 с, drift > 1 хв і кожен код виглядатиме хибним.
3. Direct access-token paste¶
Для headless-сетапів, SSO-акків або середовищ, де email/OTP round-trip не пройде.
- Натисни Use access token instead
- Дістань Bambu Cloud bearer через
bambu-lab-cloud-api, або з браузера, авторизованого в MakerWorld (DevTools → Application → Cookies →token). Bambu Studio більше не показує токен у жодному UI, тож старий спосіб «взяти зі Studio» вже не працює. Стався до значення cookie як до секрету. - Встав у поле Access token, обери регіон
- BamDude перевіряє токен дзвінком
/v1/user-service/user/profile. На успіх — токен зберігається на твоєму user-рядку
Акаунти регіону Китай мусять входити через токен
Китайські Bambu-акаунти прив'язані до номера телефону, а не email, тож email/пароль-флоу недоступний — шлях через access-токен вище єдиний.
Cloud Access Token vs Printer Access Code
Cloud Access Token — bearer для Bambu API + MQTT, ось що ця сторінка хоче. Printer Access Code на екрані принтера (Network settings) — per-printer LAN-кред, інше поле, інша сторінка (Printers).
Час життя токена¶
Bambu Cloud bearer-и не вічні. З 0.5.5 BamDude зберігає й refresh-токен із відповіді логіну, і коли Bambu повідомляє, що збережений токен протермінувався, спершу тихо оновлює пару — з'єднання самозцілюється за лічені хвилини замість вимагати повторний вхід з email-кодом раз на кілька місяців. Лише коли відхилено саме оновлення, з'являється флоу «вхід протермінувався» нижче. Вставлені вручну access-токени refresh-токена не мають і поводяться по-старому.
BamDude перевіряє збережений токен у самої Bambu Lab, а не припускає, що той досі працює — тож Connected означає, що Bambu його прийняла, а не просто що він десь збережений. Відповідь кешується на кілька хвилин, щоб кілька місць, які її опитують, не платили кожне за окремий round-trip.
Коли вхід протермінувався¶
Коли токен спливає, усі функції Bambu Cloud зупиняються одночасно — хмарні профілі, MakerWorld, пресети слайсера й перевірка прошивок — бо всі вони несуть той самий токен. Перше справжнє відхилення записується один раз і поширюється, тож усі дізнаються про це в один момент, а не кожне окремо.
Сторінка Профілі знову показує форму входу з явною позначкою, що вхід протермінувався, щоб було зрозуміло, чому вона повернулась. Увійди там знову — і все відновиться; більше нічого переналаштовувати не треба.
Збій — це не протермінування
Протермінуванням вважається лише документована відповідь Bambu про протермінування. Випадковий 401 — відмова, специфічна для регіону чи ендпоінта, сторінка-заглушка Cloudflare, коротка непритомність — вважається тимчасовим і не виводить тебе з системи. Якщо Bambu Lab взагалі недосяжна, зберігається останній відомий статус, тож збій на їхньому боці ніколи не вижене тебе з робочої сесії.
Той самий токен гейтить також MakerWorld import — якщо MakerWorld-сторінка раптом показує can_download=false, expired Bambu Cloud token найчастіша причина.
Що тягнеться¶
Після підключення slice modal та інші consumers читають твої Bambu Cloud дані live:
| Дані | Endpoint | Хто використовує |
|---|---|---|
| Filament / process / printer presets | GET /api/v1/cloud/settings |
Slice modal, AMS slot config |
| Single preset detail (повний setting JSON) | GET /api/v1/cloud/settings/{id} |
"Inspect preset" / inheritance display |
| Bound printer devices | GET /api/v1/cloud/devices |
Printer-add wizard, Bambu-Cloud firmware check |
| Per-device firmware | GET /api/v1/cloud/firmware-updates |
Cloud-side firmware check (різний від LAN-only шляху в Firmware Updates) |
| Filament-id → name resolution | POST /api/v1/cloud/filament-info |
AMS tray tooltips, K-profile filament labels |
| Офіційні назви філаментів | GET /api/v1/cloud/builtin-filaments |
Віддається з вбудованого каталогу сімей — хардкод-таблиці, яку він читав, більше нема |
Custom (private) presets ідуть першими у списку, public (built-in) presets — після. Slicer-presets unifier (/slicer/...) мерджить ці з Local Profiles по імені і виставляє єдиний дедуплікований список slice-modal-у.
Вкладка показує лише ваші пресети (0.5.5)
Вкладка Bambu Cloud перелічує приватну половину листингу — ваші власні пресети — як Orca-вкладка робила завжди. Публічний каталог хмари там більше не гортається: профіль, який хочете бачити, приїздить після того, як ви збережете чи ввімкнете його у слайсері. Фільтр принтера перелічує моделі з ваших пресетів, а варіанти написання «A1M» / «A1 mini» зведені в один рядок.
CRUD на cloud presets¶
Cloud Profiles не read-only:
| Дія | Endpoint | Ефект |
|---|---|---|
| Create | POST /api/v1/cloud/settings |
Створює новий preset на Bambu Cloud — inherit-ить від base, зберігає тільки diff |
| Update | PUT /api/v1/cloud/settings/{id} |
Перейменовує або оновлює setting JSON |
| Delete | DELETE /api/v1/cloud/settings/{id} |
Прибирає preset з Bambu Cloud — без undo |
Field-definition каталог GET /api/v1/cloud/fields/{filament|process|printer} живить форму — каже UI, які ключі існують для кожного типу, label, одиниці, valid-межі, dropdown-options.
Dropdown базового пресета в «Новому пресеті» має дві групи: ваші власні пресети і сім'ї (кастомний філамент, створений у BamDude, з'являється тут після пушу — новий пресет на його базі стає дитиною тієї сім'ї) та стандартні пресети, звужені до моделей принтерів вашої ферми, а не повний список для кожної машини Bambu.
Вкладка також має кнопку Створити філамент — діалог Create Filament з Bambu Studio, із сім'єю, що народжується просто у хмарі. Див. Сім'ї філаментів.
Permissions і шифрування¶
| Permission | Дозволяє |
|---|---|
cloud:auth |
Sign in / out, list / inspect / create / update / delete cloud presets, read connection status |
printers:read |
List bound cloud devices (/cloud/devices) |
firmware:read |
Read cloud-side firmware status (/cloud/firmware-updates) |
inventory:read |
Read filament-info / built-in filament fallback (для AMS tray tooltips) |
Дефолтні групи дають cloud:auth Administrators і Operators; Viewers — ні (read-only юзери не повинні писати токени на чийсь акк).
At-rest шифрування¶
Коли install має MFA_ENCRYPTION_KEY (Fernet ключ), TOTP-секрети та інші MFA-cluster поля зашифровані at rest. Bambu Cloud token field не Fernet-encrypted сьогодні — зберігається як простий String(500) на users-рядку. Якщо потрібно encryption-at-rest — крути BamDude на encrypted DB-volume; токен не тече через API-відповіді (наверх вилазять тільки auth-status flag, email, регіон).
Headless / API key access¶
API keys, створені в BamDude, можуть дзвонити cloud routes так само, як будь-які інші. Постав can_read_status, якщо ключ читає presets / девайси, і стандартні X-API-Key правила (див. API Keys).
Створені через UI API keys стампляться id юзера-творця, тож cloud-side дзвінки бігтимуть проти per-user Bambu Cloud-токена цього юзера — за умови, що при створенні ключа ввімкнено тогл Use Bambu Cloud. Без цього opt-in cloud:* маршрути відмовляються від виклику, замість того щоб мовчки витрачати cloud-token власника. Pre-0.4.3 ownerless ключі (значок "Legacy" у списку API keys) у cloud-spend не підняти — при збереженні з user_id IS NULL тогл відхиляється. Щоб мігрувати, перестворіть ключ під своїм юзер-аккаунтом.
Для сетапів без per-user Bambu Cloud (single-user / auth-disabled), global Settings cred-bag — природне сховище, і Cloud-флагнуті ключі все одно падають туди як last resort.
Troubleshooting¶
Login повертає Invalid credentials, але той самий пароль працює у Bambu Studio
Region mismatch — найчастіша причина. Обрав Global, коли акк зареєстрований на China backend (або навпаки) — повертає generic auth fail без friendly "wrong region" хінта. Перемкни region dropdown і retry.
TOTP код відкидається
Clock drift. Відкрий Settings → Date & time → ввімкни Network-provided time. TOTP-вікна 30 с, drift > хвилини відкине кожен код. Re-enrol у authenticator app, якщо drift хронічний.
Connected, але preset list порожній
Дві типові причини. (1) Зайшов у sub-акк без presets — log out, log in під parent-акком. (2) Slicer-presets кеш stale; slice-modal перепопулує його на наступному відкритті (5-min TTL) або форс-перевідкрий modal.
Статус показує Disconnected через тиждень
Токен expired або revoked server-side. Прогони sign-in заново. Якщо постійно повторюється на тому ж акку — Bambu Cloud примусово re-auth; access-token paste тримається довше для деяких акків, ніж email/password.
Інші юзери бачать мої cloud presets
Не повинні — cloud_token зберігається на users.{your-id} і /cloud/* route-handler-и завжди тягнуть current_user.cloud_token. Якщо реально бачиш — крутиш з вимкненим auth (де всі юзери шарять global Settings cred bag); ввімкни auth, і кожен отримає свій токен.
China регіон — login працює, presets не вантажаться
TOTP-verify має йти на TFA-endpoint bambulab.cn, не bambulab.com. BamDude роутить по region-полю verify-дзвінка — переконайсь, що регіон, який обрав на login, збігається з тим, що verify-діалог відправляє.