Файловий менеджер¶
Переглядайте, завантажуйте та керуйте файлами у локальній бібліотеці BamDude. Друкуйте напряму або додавайте до черги.
Огляд¶
Файловий менеджер дозволяє:
- Переглядати файли у локальній бібліотеці
- Монтувати зовнішні папки з NAS, USB або мережевих ресурсів
- Завантажувати файли, включаючи ZIP-архіви
- Друкувати напряму на будь-якому принтері
- Додавати до черги нарізані файли для подальшого друку
- Перейменовувати та видаляти файли і папки
Sidebar навігація¶
Дерево папок ліворуч — основна навігація. Клік на будь-яку папку — заходиш всередину; клік на breadcrumb-и зверху — крок назад. Два маленькі toggle-и в хедері sidebar-у тонко налаштовують рендеринг — обидві preferences зберігаються у браузері і застосовуються на кожен наступний load.
| Toggle | Що робить |
|---|---|
| Wrap | Коли off (default), довгі імена папок обрізаються трикрапкою. Коли on, довгі імена переносяться на кілька рядків — повне ім'я лишається видимим. |
| Collapse | Коли off (default), дерево папок відкривається з усіма рівнями розкритими. Коли on, на load показані лише top-level папки — клік по chevron-у розкриває гілку. Перемикання preference одразу пере-collapse-ить чи пере-розкриває поточне дерево. |
Коли вмикати Collapse
Якщо в бібліотеці багато вкладених папок, вмикання Collapse тримає sidebar компактним — бачиш лише top-level папки і drill-иш у гілку, коли треба. Маленькі плоскі бібліотеки різниці не помітять — toggle впливає лише на вкладені папки.
"All Files" vs "External"¶
Над деревом папок сидять два top-level записи — вони тримають твої власні аплоуди й вміст linked-папок у окремих в'ю, а не в одному плоскому списку.
| Запис | Що показує |
|---|---|
| All Files | Твої власні аплоуди в managed storage BamDude — нічого з linked/mounted папок. Саме це "All Files" і означало до появи external-папок. |
| External | Комбінований в'ю по всіх linked external-папках. З'являється лише коли залінкована хоч одна external-папка — бібліотеці з однією папкою він не потрібен, бо клік по самій папці не повільніший. |
Розділення не дає залінкованому NAS, що auto-імпортнув сотні файлів, потопити твої власні аплоуди. Клік по окремій папці в дереві не змінився — він завжди скоупить лише в ту папку. Щоб отримати старий combined-everything список, клікни External один раз.
Сортування і фільтрація¶
Сортування¶
Sort-dropdown над сіткою файлів:
- Name — A→Z / Z→A
- Date — newest / oldest first
- Size — largest / smallest first
- Type — згруповано за розширенням
Дати у змонтованій (зовнішній) папці — власні дати файлів
Файли на NAS чи USB-папці датуються часом модифікації на диску, який перечитується при кожному скані, а не миттю, коли BamDude їх виявив. Скан виявляє цілу папку в одну й ту саму мить, тож час виявлення давав усім файлам у ній однакову позначку, і порядок був справою випадку. Відредагуй файл на шарі — і наступний скан підніме його вгору.
Дата папки — це найновіше з усього, що всередині, на будь-якій глибині, а не лише на рівень нижче: через це папка, чиї моделі лежать у підпапках, виглядала незайманою місяцями. Наведи на назву папки, щоб побачити дату, за якою її відсортовано.
Не друковані¶
Перемикач поруч із випадайкою типів лишає в списку тільки файли, які жодного разу не додрукувалися. Він додається до решти фільтрів, а не заміняє їх, тож «Не друковані» плюс .gcode.3mf відповідає на питання, яке справді варто ставити: що я наслайсив і так і не запустив.
Перемикач не памʼятається між візитами — це питання, а не вподобання, і бібліотека, яка повернулася б наполовину порожньою без жодного пояснення на екрані, була б гіршою за один зайвий клік.
Чіпи типів файлів¶
Над сіткою — ряд чіпів, що фільтрують за розширенням:
.3mf— sliced або project bundle-и.gcode.3mf— лише sliced (підмножина.3mf).stl,.obj,.step— голі mesh / CAD.gcode— bare gcode (без вшитого metadata)
Чіпи AND-комбінуються з теги нижче — вибір multiplate + .gcode.3mf повертає лише мульти-плейт-сліцені файли. Ряд чіпів рендериться лише для типів, реально присутніх у завантаженому списку, тож плоскі бібліотеки бачать тісніший ряд.
Скидання фільтрів¶
Коли нічого не збігається, порожній вигляд пропонує Clear filters — і скидає всі: пошук, тип файла, Не друковані, поле «фільтр за користувачем» і фільтр тегів.
Останній важливий із причини, яку легко проґавити. Його застосовує сервер, тож комбінація тегів, що нічого не збігає, робить порожньою саму бібліотеку — і скид тепер пропонується й для цього випадку, а не пропозиція завантажити файли, яка була глухим кутом.
Прямий друк¶
- Знайдіть нарізаний файл (
.gcodeабо.gcode.3mf) - Натисніть іконку принтера або клацніть правою кнопкою для контекстного меню
- Виберіть Print
- Оберіть принтер(и), налаштуйте відповідність філаментів, задайте параметри друку
- Натисніть Print для запуску
Multi-printer + plate dispatch¶
Print-модалка підтримує multi-printer dispatch — обери кілька принтерів як target-и, і той самий файл відправиться кожному паралельно; корисно для print-farm, що ганяє ідентичні джоби на кількох машинах.
Для multi-plate .gcode.3mf файлів (один bundle, що експортує кілька плит) модалка рендерить grid вибору плит з мініатюрами:
| Крок | Що налаштовуєш |
|---|---|
| Printer | Один або кілька target-принтерів (чіпи) |
| Plate | Single-plate select для Print Now; multi-plate чекбокси для Add to Queue |
| Filament mapping | Який завантажений AMS-слот задовольняє кожен потрібний філамент |
| Schedule | ASAP, scheduled time або manual start (тільки queue) |
| Options | Mesh fast-check, swap macros, gcode injection, plate-clear gating |
Кожна вибрана плита стає окремим queue-елементом / архівом з індексом плити в рядку — див. Auto-Queue.
Куди їде файл перед стартом друку
Файл завантажується на SD-картку принтера по FTP. На X2D, P2S і сімействі H2, які тримають файли ще й у вбудованому сховищі, принтер без картки отримує файл туди — налаштовувати нічого не треба, і коли картка вставлена, нічого не змінюється.
Решті принтерів картка потрібна: без неї upload падає з чіткою помилкою. Вставлена, але нечитабельна чи захищена від запису картка зупиняє друк на будь-якому принтері, з внутрішнім сховищем чи без — непридатна картка означає, що з машиною щось не так, і тихий обхід це приховав би. Повідомлення каже, який саме з двох випадків.
Додавання до черги¶
Додавайте нарізані файли до черги для подальшого друку без попереднього створення архівів. Архіви створюються автоматично, коли друк реально стартує (див. Архіви — deferred archive creation тримає список архівів чистим від "queued but never printed" записів).
Масова постановка в чергу¶
Позначте потрібні файли й натисніть Запланувати. Кнопка зʼявляється, лише коли у вибірці є щось нарізане — STL надрукувати не можна, тож і пропонувати нічого.
Окремого масового діалогу немає. Звичайне вікно планування відкривається для першого файла з позначкою ⅓ біля заголовка, потім для наступного, і так далі. Кожен файл дістає повний набір рішень: принтер або кілька, чи авто-черга; які плити; мапінг філаменту; опції друку; кількість; і коли стартувати. Два файли з однієї вибірки рідко хочуть однакових відповідей — різні плити, різні кольори, заряджені в різні машини — тому одиницею є файл, а не партія.
Закрийте вікно будь-коли (Скасувати, ✕ або Escape) — прогін на цьому спиняється. Те, до чого не дійшли, лишається виділеним, тож галочки показують, що ще треба розподілити. Коли все поставлено в чергу, виділення очищається.
Невдала відправка не веде далі: вікно лишається на тому ж файлі з помилкою — саме там її і виправляють.
Вибір одного файла працює точно як раніше — одне вікно, без лічильника.
Файл, нарізаний під модель принтера, яка його не запустить, відхиляється, а не ставиться тихо в чергу, щоб упасти пізніше. Так само й файл, який ніколи не нарізали.
Завантаження файлів¶
Один файл¶
Клік на Download у контекстному меню файла — файл віддається напряму з оригінальним ім'ям.
Кілька файлів¶
Вибери кілька файлів через чекбокси, потім натисни Download Selected на тулбарі. BamDude on-the-fly пакує їх у ZIP, і браузер отримує один архів.
ZIP зберігає структуру папок, якщо ти вибрав файли з різних папок. Імена санітизуються, щоб уникнути дублікатів.
Завантаження ZIP-файлів¶
Завантажуйте ZIP-архіви для розпакування вмісту у бібліотеку:
- Натисніть Upload та виберіть
.zipфайл - Модалка завантаження детектить ZIP і показує опції розпакування
- Оберіть поведінку розпакування (опції нижче)
- Натисніть Extract
Опції розпакування¶
| Опція | Що робить |
|---|---|
| Preserve folder structure from ZIP | Зберігає структуру папок зсередини ZIP. Папки створюються за потреби. |
| Create folder from ZIP filename | Створює нову папку, названу за ZIP (MyProject.zip → MyProject/), і розпаковує всі файли в неї. |
| Flatten | Default, коли жодна з опцій вище не стоїть — кожен файл потрапляє в поточну папку, ігноруючи внутрішню структуру. |
Обидва чекбокси можна комбінувати — обидва увімкнені створюють папку за ім'ям ZIP і зберігають внутрішню структуру всередині неї.
Що саме видобувається¶
.3mf— на кожному запускається екстракція мініатюри і metadata.gcodeі.gcode.3mf— детект часу друку / ваги філаменту.stl,.obj,.step— додаються з опційним рендером мініатюри (див. нижче)- Будь-який інший підтримуваний тип
Прогрес показує per-file count під час видобування; помилки репортяться поодинці, тож partial extract-и видно. Nested ZIP-и додаються як звичайні файли, не auto-extract-яться.
Генерація мініатюр STL¶
STL / OBJ / STEP не несуть власного preview, тож BamDude рендерить його для картки файла. Рендерер використовує Trimesh + matplotlib на низькому пріоритеті у фоні — важкі mesh-і не блокують upload-pipeline.
Auto на upload¶
Upload-модалка має чекбокс Generate thumbnails for STL files. Коли увімкнено, кожен STL/OBJ/STEP в upload-і (або всередині розпакованого ZIP) отримує мініатюру в рамках upload flow.
Опція за замовчуванням off install-wide — увімкни в Settings → File Manager, якщо хочеш auto-on на кожен upload без галки щоразу.
Single-file context menu¶
Для файлів, що вже в бібліотеці:
- Right-click на файл або відкрий three-dot меню
- Вибери Generate Thumbnail
- Мініатюра оновлюється in-place, коли рендеринг завершиться
Batch-генерація¶
Кнопка Generate Thumbnails на тулбарі відкриває picker scope:
| Scope | Ефект |
|---|---|
| All missing | Лише файли без мініатюри |
| Selected files | Лише чекбоксом вибрані файли |
| Entire folder | Кожен STL-сумісний файл у поточній папці |
Технічні деталі¶
| Властивість | Значення |
|---|---|
| Renderer | Trimesh isometric view + matplotlib raster |
| Колір | Bambu green (#00AE42) на темному фоні |
| Формат | PNG, оптимізований під розмір картки |
| Priority | Background-task, низький пріоритет — не блокує upload-и чи перегляд |
Підтримуються і ASCII, і binary STL формати. Дуже складні mesh-і (100k+ вершин) рендеряться без падінь, просто довше.
Drag-and-drop завантаження¶
Перетягніть один або кілька файлів куди завгодно над зоною файлів (правою панеллю з тулбаром і сіткою/списком файлів) — модалка завантаження відкриється з вже доданими файлами. Та сама pipeline, що й picker / drop-зона у самій модалці, тож опції ZIP залишаються видимі і можна скасувати до фактичного аплоуду. Поточна вибрана тека зберігається як призначення.
Page-level drop захищено правом library:upload — у в'юверів без нього оверлей не з'являється і drop ігнорується.
Як зберігаються файли¶
Кожен файл бібліотеки — це рядок у таблиці library_files. Рядок несе:
-
Hash-дедуп на кожному шляху, яким файл може прийти — вміст SHA-256-иться і зіставляється з активними рядками ще до того, як щось запишеться, тож файл, який BamDude уже має, не зберігається вдруге. Це стосується завантаження, API, дропу на файловий менеджер чи на принтер, імпорту проєкту, повторного слайсу тієї самої моделі й Send-to-Printer зі слайсера. Те, що ви робили, продовжується з наявним рядком, і вам кажуть, який саме ваш файл використано замість надісланого.
Підключені теки теж. Зовнішні файли раніше пропускали заради швидкості, і через це цілий NAS лишався поза дедуплікацією. Тепер скан читає кожен файл один раз і запам'ятовує його відбиток поруч із розміром і датою зміни, які вже зберігав, тож наступні скани перечитують лише те, що справді змінилось.
Рядок, у якого зникли байти, отримує їх назад. Якщо бібліотека ще показує файл, а на диску його немає, повторне надсилання того самого вмісту відновлює його на місці — зі своїм ім'ям, текою, нотатками, тегами, проєктами й історією друків — замість створення порожнього нового запису.
⚠️ Беруть участь лише активні рядки. Файл, який ви поклали в кошик, не притягує до себе новоприбулий; див. Кошик бібліотеки. Відновлення з кошика — єдиний спосіб, що лишився, отримати два однакові файли, і воно спершу питає. - Мініатюри — витягуються з
Metadata/plate_*.pngвсередині 3MF при завантаженні (без on-the-fly екстракції). Повторний upload або "reparse" тригерять нову екстракцію. - STL thumbnail render — STL-завантаження (.stl,.zipзі STL всередині) отримують мініатюру, рендерену на upload через вбудований растеризатор, тож на картці видно справжню деталь, а не generic placeholder. -print_count+last_printed_at— лічильники використання, які підтримує dispatch.print_countрахує лише завершені друки, тож файл, який пробували й не додрукували, читається як недрукований; передрук з архіву його рухає. Число видно на картці й у списку поруч з рештою фактів про файл, а клік відкриває історію друків саме цього файла. На нулі не показується нічого — на це питання відповідає фільтр Не друковані вище. Заповнюються ретроактивно при апгрейді через міграціюm014. - JSON-колонкаfile_metadata— зберігає розпарсені metadata слайсера: ваги філаменту по котушках, кількість об'єктів, цільова модель принтера в слайсері, плюс прапорціgcode_label_objects/exclude_objectзMetadata/project_settings.configвихідного 3MF (витягуються в 0.4.1, заповнюються міграцієюm022). Прапорці label-objects є воротами для кнопки skip-objects на сторінці принтера під час друку — обидва мають бутиtrue, щоб кнопка засвітилася. Bambu Studio взагалі не має налаштування Label objects і вмикає Exclude objects за замовчуванням; OrcaSlicer показує обидва, причому Label objects увімкнений, а Exclude objects — вимкнений, тож на Orca-файлі зазвичай треба увімкнути саме його (див. Troubleshooting для чек-листа на стороні слайсера). -is_multi_plate+ per-plate cacheplates[](m023) — для multi-plate sliced 3MF (один.gcode.3mfз кількомаMetadata/plate_N.gcodeвсередині) BamDude передекстрактує повний per-plate breakdown — мініатюру, час друку, вагу пластика, кількість об'єктів, filament-стек, label-object прапорці — у той самийfile_metadataJSON. Список файлів повертає це без перевідкривання 3MF на кожен запит. - Прапорецьswap_compatible— визначається за маркером.swap.або.swaps.в імені файла, наприкладMyPart.swap.gcode.3mfабоTray.swaps.3mf. Маркер має бути через крапку, не через підкреслення —MyPart_swap.gcode.3mfНЕ позначиться. Swap-сумісні файли окремо виносяться в swap-mode picker. - Композитна колонкаfile_tags(m036 / m037) — неупорядкований JSON-список тегів-ідентичностей керує баджами на файлі. Від m128 той самий словник існує ще й рядкамиis_systemуlibrary_tags— саме їх питає фільтр тегів і каталог; колонка лишається похідним кешем, щоб бейджі й логіка вкладок прев'ю читали колонку рядка, який у них уже є. Обидва пише одна функція,sync_system_tags. Чотири семантичні групи: format (gcode/3mf/stl/obj/step— сліцений.gcode.3mfтримає композитну паруgcode + 3mf, тож візуальне розрізнення зберігається після колапсуfile_type), readiness (взаємовиключне:slicedдля слайсер-аутпуту,projectдля нерізаного.3mf-пакета,geometryдля голої сітки / CAD-джерела — один тоглер для "що ще треба нарізати?"), modifiers (swap/multiplate), provenance (makerworld). ФронтендsortTagsForDisplayпроектує на явний пріоритет так, що ряд читається справа-наліво: format → readiness → modifiers → provenance.
Теги¶
Родів тегів два, а ряд один.
Автоматичні теги — 3MF, SLICED, MULTI-PLATE, MAKERWORLD та інші — визначаються з самого файла. Вони показуються, але заблоковані: їх не можна перейменувати, видалити чи зняти з файла, і вони не пропонуються там, де теги призначають руками.
Ваші власні теги — будь-що: kid-safe, лише-PETG, іграшки. Створювати, перейменовувати й видаляти — кнопкою Tags у тулбарі.
Обидва роди в одному ряду фільтрів над списком файлів, автоматичні першими. Клік перемикає, вибране комбінується через AND, тож SLICED + kid-safe поверне лише нарізані файли з цією міткою. Фільтрує сервер, а не поточний екран, тож фільтр дістає всю бібліотеку, а не завантажену сторінку.
Автоматичний тег зʼявляється в ряду, лише коли його несе хоча б один файл у бібліотеці. Ваші власні показуються завжди, зокрема й порожні — невживаний тег саме той, який хочеться побачити, щоб почати ним користуватись.
Вибір не памʼятається між візитами. Бібліотека, яка повернулася звуженою без жодного пояснення на екрані, коштує дорожче за один клік.
Керування тегами¶
Діалог Tags показує обидва роди; автоматичні — окремою заблокованою секцією з лічильниками файлів.
- Перейменування на місці — клік по назві, текст, Enter. Escape скасовує.
- Видалення спершу питає і каже, скількох файлів це торкнеться.
- Позначте кілька — видаляться разом.
- Клік по рядку більше нічого не робить: не фільтрує й не закриває діалог.
Тегування одного файла¶
⋮ → Tag на будь-якому файлі відкриває короткий список ваших тегів, де вже поставлені позначені. Галочка застосовується одразу, без підтвердження. + новий тег унизу створює його й одразу вішає на файл.
3D / G-code в'ювер¶
Файли бібліотеки шерять той самий <ModelViewerModal>, що й архіви, з двома бібліотечно-специфічними штрихами:
- Видимість вкладок з
file_tags, а не з розширення файлу. Сліцений.gcode.3mf(у якого обидва розширення) показує тільки вкладку G-code — його вбудована сітка вже растерізована в gcode-лінії, рендерити її ще раз під "3D Model" — дублікат. Нерізанийproject3MF або голийgeometrymesh показує тільки 3D-вкладку. Вкладки питаються черезGET /library/files/{id}/capabilities(дзеркало давнього архівного ендпоінта). - Per-plate G-code picker для мульти-плейт бібліотечних файлів. Файли бібліотеки — для browse, тож G-code-вкладка отримує picker плит, що пере-ключає URL gcode-preview, коли перемикаєш плиту. Архіви тримають single-plate-поведінку, бо вони — запис одного конкретного друку.
- Вайрфрейм друкарського об'єму — 3D-в'ювер малює напівпрозорий бокс, що відповідає принтеру, для якого файл нарізано (читається з
printer_settings). G-code preview уже малював схожий бокс; тепер однаковий візуальний натяк на обох вкладках. - Спільні фічі модалки — підтримка OBJ, wireframe / X-ray-перемикач, theme-synced canvas, двохрукоятковий layer slider (Start + End), травел-перемикач, layer-play на швидкостях 1× / 2× / 4× / 8×, streaming-прогрес завантаження і Export-as-PNG. Повний breakdown — Архіви → 3D + G-code перегляд; library використовує той самий
<ModelViewerModal>verbatim.
Per-plate gallery (multi-plate 3MF)¶
Sliced 3MF з більш ніж однією плитою рендеряться як per-plate gallery на картці файла:
- Вертикальна paginator-стрічка ліворуч — одна кнопка на плиту, кожна з точкою стану виділення.
- Велика картка праворуч з мініатюрою цієї плити, назвою, часом друку, загальною вагою, кількістю об'єктів і per-filament breakdown (color swatch + тип + грами).
- Виділення (які плити друкуємо) і навігація (картка якої плити зараз видна) розв'язані — можна гортати плити, не міняючи селекшен.
При диспатчі можна вибрати одну плиту, кілька або всі — кожна вибрана плита стає окремим queue-елементом / архівом з індексом плити, записаним у рядок.
Single-plate файли gallery не рендерять — наявна головна мініатюра і так усе показує.
Прив'язка до виробів і тек¶
- Лінк на теку — прив'язка теки до одного чи кількох виробів прив'язує до них усі файли всередині, а файл, переміщений у теку пізніше, успадковує той самий список.
- Лінк на файл — кожен рядок файлу має власну кнопку, що відкриває той самий chip multi-select, незалежно від теки.
- Many-to-many — файл або тека можуть належати кільком виробам одночасно, а виріб — тримати багато файлів і тек. Прив'язка — це копія, а не перенос: файл, уже прив'язаний до чужого виробу, там і лишається.
- Що саме робить прив'язка — виріб отримує рядок-плиту на кожну плиту файлу, а кожна назва об'єкта на цих плитах резолвиться в друковану деталь цього виробу. Відв'язали файл — його плити пішли, а деталі лишились: кількості належать виробу, а не файлу.
- Per-chip відв'язування —
×на chip-і прибирає лише цю прив'язку й не чіпає решти.
До проєкту файли більше не прив'язуються. Замовлення називає свої вироби, а друк підшивають під замовлення тоді, коли його запускають або ставлять у чергу — див. Підшивання друку під замовлення.
Trash workflow¶
Видалені файли не зникають одразу — вони переходять у Trash і лежать там сконфігуровне retention-вікно (default 30 днів), доки background sweeper не hard-delete-не їх з диска. Це дає undo-вікно на випадкові видалення і bulk-операції.
Кожен шлях до видалення поводиться однаково. Видалення одного файлу, видалення виділення й видалення папки — усе кладе записи в кошик; раніше масові шляхи знищували файли одразу, і відновлювати було нічого. Файли, що лежали всередині видаленої папки, при відновленні повертаються на верхній рівень бібліотеки, бо папки, у якій вони жили, більше немає.
Файл, який не вдалося видалити, не звітується як видалений
Масове видалення пропускає файл, чий друк зараз триває. Результат каже, що сталося насправді і скільки пропущено, а не рахує все, що ти виділив.
Відновлення або остаточне видалення¶
Відкрий Trash (кнопка в хедері File Manager) — побачиш, що видалив. Звичайні юзери бачать свої trashed-файли; адміни — усіх.
| Дія | Ефект |
|---|---|
| Restore | Повертає файл у вихідну папку |
| Delete now | Назавжди видаляє файл з диска одразу, в обхід retention |
| Empty trash | Hard-delete-ить кожен файл у scope твого trash |
Адміни можуть змінити саме retention-вікно на сторінці Trash — від 1 до 365 днів, default 30.
Зовнішні файли обходять Trash
Файли в external / linked папках обходять trash повністю, бо їхні байти живуть поза контролем BamDude і не можуть бути відновлені. Видалення external-файлу просто прибирає DB-запис BamDude — файл на диску не чіпається.
Purge old files (admin)¶
Для бібліотек, що розрослися в гігабайти, у адмінів є bulk-action Purge old в хедері File Manager. Вибери age-threshold (напр. "файли, не друковані 90 днів"), побач live-прев'ю, скільки файлів переїде і скільки диска звільниться, потім підтверди.
Що відбувається на Purge¶
- Підходящі файли переїжджають у Trash — на диску ще не видалені
- З Trash їх можна Restore до закінчення retention
- Після retention sweeper hard-delete-ить
- Файли в external (linked) папках пропускаються — BamDude ніколи не видаляє байти, які йому не належать
Бо файли лише переїжджають у Trash, диск не звільняється одразу. Щоб повернути місце прямо зараз, empty Trash вручну після purge.
Як міряється "старе"¶
- Файли з історією друку → старіють за last-printed date
- Файли без друку → старіють за upload date, лише коли увімкнено чекбокс "Include files that have never been printed" (default). Зніми галку, щоб обмежити purge тільки реально друкованими файлами
Кнопка Purge old з'являється лише в юзерів з правом library:purge, яке за замовчуванням увімкнене на вбудованій ролі Administrators. Щоб дати Operator-у, додай library:purge у Settings → Users → Groups — див. Authentication.
Auto-purge (опційно)¶
Не хочеш пам'ятати про purge щомісяця? Settings → File Manager → Auto-purge old files запускає ту саму операцію автоматично раз на 24 години:
- Age-threshold (мін 7 днів, макс 10 років) — те ж правило, що manual button
- Чекбокс include-never-printed
- Default off; opt-in only, тож існуючим інсталам не буде сюрпризів
Auto-purge все одно поважає retention-вікно — файли йдуть в Trash, не одразу видаляються. Sweeper потім hard-delete-ить після retention-періоду.
Перейменування файлів і папок¶
Файли і папки можна перейменовувати прямо у File Manager без зовнішнього клієнта.
Перейменування файла¶
Grid view:
- Hover на картку файла
- Клік на three-dot меню (
:material-dots-vertical:) - Вибери Rename
- Введи нове ім'я
- Клік Rename для збереження
List view:
- Знайди файл у списку
- Клік на іконку олівця (
:material-pencil:) у колонці actions, або double-click на ім'я для in-place редагування - Введи нове ім'я
- Press Enter або клік Rename для збереження
Переміщення одного файла¶
Move стоїть у тому ж трикрапковому меню, що й Rename, у grid- і list-вигляді, і одразу відкриває вибір теки. Тікати файл перед цим не треба — мультиселект-тулбар і далі вміє переміщати кілька файлів, але одному файлу не потрібно проходити через виділення.
Гейт такий самий, як у Rename: користувач лише з *_own-дозволами бачить його на своїх файлах і більше ніде.
Перейменування папки¶
- Hover на папку у sidebar-і
- Клік на three-dot меню
- Вибери Rename
- Введи нове ім'я
- Клік Rename для збереження
Обмеження імен файлів
Імена файлів не можуть містити path-сепаратори (/ або \). Rename API відхиляє ці символи, і модалка показує помилку inline.
Видалення папки¶
У папок немає власника, тож видалення потребувало повного права «видаляти будь-що» (library:delete_all). Через це користувач міг створити папку, повидаляти з неї свої файли — і далі просити адміністратора прибрати порожню оболонку.
| Папка | Потрібне право |
|---|---|
| Порожня | library:delete_own — звичайне право на видалення |
| Містить файли чи підпапки | library:delete_all |
| Зовнішня / змонтована | library:delete_all |
| Залінкована з проєктом чи архівом | library:delete_all |
Видалення будь-якої з останніх трьох зачіпає більше, ніж саму папку, — тому вони й далі потребують адміністратора.
Що вважати «порожньою», вирішує сервер, а не те, що ти бачиш
Папка, у якій лежить файл, видалений кимось іншим, у дереві виглядає порожньою. Її видалення забрало б той файл назавжди й зламало б чуже відновлення — тому воно відхиляється, і сказано чому.
Монтування зовнішніх папок¶
Монтуйте директорії хоста (NAS-шари, USB-накопичувачі, мережеве сховище) у файловий менеджер без копіювання файлів. BamDude індексує папку у свою БД і читає файли напряму з оригінального шляху; диск не зайнятий копіями.
Налаштування зовнішньої папки¶
Крок 1: Bind-mount директорії в Docker. Додай host-директорію як volume у docker-compose.yml:
services:
bamdude:
image: ghcr.io/kainpl/bamdude:latest
volumes:
- /mnt/nas/3d-prints:/external/prints:ro
Перезапусти контейнер після зміни volumes.
Крок 2: Лінкуй папку в BamDude.
- Відкрий File Manager
- Натисни Link External на тулбарі
- Заповни форму:
| Поле | Значення |
|---|---|
| Display name | Що з'являється у sidebar (напр. NAS Prints) |
| Container path | Шлях всередині контейнера (напр. /external/prints) |
| Read-only | Default on — блокує upload-и, видалення, ZIP-extract у папку. Рекомендовано, якщо ти спеціально не хочеш керувати файлами через BamDude. |
| Show hidden files | Off за замовчуванням; вмикає dotfile-індексацію |
- Натисни Link Folder
Папка автоматично сканується, файли з'являються одразу.
Сканування і refresh¶
Зовнішні папки індексуються на створенні. Щоб підхопити нові або видалені файли:
- Клік на external folder у sidebar
- Натисни Scan / Refresh в info-bar
- Нові файли додаються в індекс, видалені на диску — викидаються
Read-only protection¶
Коли Read-only on (default):
- Upload-и в папку блокуються (
403) - Move файлів у папку блокується
- ZIP-extract з target-ом цієї папки блокується
- Файли все ще можна download-ити, друкувати, додавати в чергу і генерувати їм мініатюри
Захист у глибину
Юзай :ro у Docker volume mount для додаткового рівня read-only protection на рівні файлової системи — навіть якщо випадково знімеш галку BamDude, kernel однаково відхилить write.
Видалення зовнішніх папок¶
Коли видаляєш external folder з BamDude:
- DB-індекс прибирається
- Згенеровані мініатюри чистяться
- Файли на диску ніколи не видаляються — BamDude видаляє лише link, не source-файли
Підтримувані типи файлів¶
External folder scanning знаходить: .3mf, .gcode, .stl, .obj, .step, .stp, і image-файли (.png, .jpg, .gif, .webp, .svg).
Прив'язка файлів і тек до виробів¶
Right-click на теку (або через three-dot menu) → Прив'язати до виробів прив'язує її до будь-якої кількості виробів; пікер — chip multi-select, тож кілька виробів обираються одним заходом. Кожен рядок файлу пропонує те саме для одного файлу.
| Дія | Де |
|---|---|
| Прив'язати теку | Right-click на теку → «Прив'язати до виробів» |
| Додати / прибрати виріб | Відкрий діалог, перемикай chip-и, збережи |
| Прибрати один виріб | × на потрібному chip-і в діалозі |
| Прибрати всі вироби | Очисти всі chip-и і збережи |
Прив'язка теки зливається в дітей: те, що тека нав'язувала раніше, знімається, те, що нав'язує тепер, додається, а власна пряма прив'язка файлу до іншого виробу переживає це. Переміщення файлу в теку — інша заява, і воно заміщає список виробів файлу списком теки, включно з очищенням, коли ціль у корені або не прив'язана до жодного виробу.
Картка моделі файлу бібліотеки¶
Будь-який .3mf у бібліотеці має в меню пункт Картка моделі: картку, яку дизайнер поклав усередину файлу — опис, дизайнер, ліцензія, сторінка-джерело, — разом із картинками, специфікацією та інструкцією зі складання, прочитану просто з файлу й показану лише для читання. У файл при цьому нічого не пишеться: він лишається байт у байт тим, який ви завантажили.
З цієї картки створити виріб із цього файлу робить виріб одразу; файлу, вже прив'язаному до виробу, картка на додачу пропонує перечитати картку в цей виріб — обидві двері відкриті на тій самій картці. Див. Картка моделі.
Друк файлу питає, для якого це замовлення¶
Друкувати і Додати до черги на файлі бібліотеки показують поле Замовлення — відкриті замовлення, яким цієї плити ще бракує, скільки друків кожному з них не вистачає і для якого виробу воно. Перше замовлення, якому плити бракує, обране за вас, а Без замовлення доступне завжди. Див. Підшивання друку під замовлення.
API-ендпоінти¶
Бібліотека повністю доступна через REST API — корисно для скриптованої ingest-логіки, CI/CD-пайплайнів чи external slicer-плагінів.
| Endpoint | Method | Призначення |
|---|---|---|
/api/v1/library/files |
GET |
Список файлів (paginated; query-params на folder, sort, filter) |
/api/v1/library/files/{id} |
GET |
Детальна інформація файла (metadata, plates, file_tags) |
/api/v1/library/files/{id}/capabilities |
GET |
Які viewer-вкладки показувати (3D / G-code / per-plate) |
/api/v1/library/files |
POST |
Multipart upload (один або кілька файлів) — потрібен library:upload |
/api/v1/library/files/extract-zip |
POST |
Upload + extract ZIP з опціями |
/api/v1/library/files/{id} |
DELETE |
Soft-delete (move to trash) |
/api/v1/library/bulk-delete |
POST |
Soft-delete багато файлів одночасно |
/api/v1/queue/ |
POST |
Поставити файл бібліотеки (library_file_id) у чергу принтера — потребує queue:create, а не library-права |
/api/v1/library/folders |
POST |
Створити папку |
/api/v1/library/folders/external |
POST |
Лінкувати external folder |
/api/v1/library/folders/{id}/scan |
POST |
Re-scan external folder |
Усі ендпоінти потребують аутентифікованої сесії (JWT bearer або хедер X-API-Key). Потрібне право залежить від дії — library:read на читання, library:upload на upload-и, library:delete на видалення, library:purge на bulk-purge. Див. Authentication і повний API reference.
Mobile і PWA¶
File Manager оптимізований під touch-пристрої і працює як встановлений Progressive Web App.
Touch-friendly UI¶
- Action-кнопки завжди видимі на mobile — hover не потрібен
- Selection-чекбокси з'являються на кожній картці файла для multi-select
- Контекстні меню доступні через three-dot кнопку на кожній картці
- Responsive grid змінює кількість колонок за шириною екрана
Mobile-аплоди через Share menu¶
PWA BamDude реєструється як share target на iOS Safari і Android Chrome — share файла з будь-якого іншого додатку відкриває BamDude у picker-і:
- Встанови BamDude як PWA на телефон (Safari → Share → Add to Home Screen; Chrome → меню → Install app)
- У будь-якому додатку, що працює з 3MF / STL / gcode (Drive, Mail, AirDrop receiver, slicer), відкрий Share меню
- Вибери BamDude як target
- Library відкривається з файлом, попередньо staging-нутим у upload-модалці — підтверди destination folder і tap Upload
Поточна вибрана папка, коли заходиш у Library, — це default-destination. Відкрий потрібну папку перед share, якщо хочеш, щоб upload приземлився саме там.
PWA-поради¶
- Додай BamDude на home screen для native-app-experience (без browser-chrome)
- Browse-инг файлів працює offline проти кешованих даних
- Swipe-жести працюють природно на touch-пристроях
Поради¶
Підтримка кількох принтерів
Виберіть кілька принтерів, щоб надіслати один файл на всю ферму одночасно.
Позначки файлів
Шукайте позначки "sliced", щоб визначити файли, готові до друку.
Базується на документації Bambuddy.
Перевірка перед постановкою в чергу¶
Для нарізаного 3MF сервер перевіряє обрану плиту та її використані канали перед створенням завдання. Багатоплитний файл потребує явного вибору плит; Весь файл допустимий для однієї однозначної друкованої плити, зі збереженням її справжнього номера.
Неповні дані філаменту, відсутній G-code або потрібні прив'язки до сопел — причина виправити чи переслайсити файл. Тимчасово відсутній сумісний принтер — причина чекати в авточерзі. Це різні ситуації, які форма показує окремо.
Групове додавання зберігає спільні опції, але не переносить вибір каналів одного файлу на інший без перевірки. Правила AMS, зовнішньої подачі, кольорів і повторів описані в Призначенні філаменту.