Releases: raman78/sets-warp
v2.8.1
Fix: dual-spec BOFF seat cluster matching (warp_dialog.py)
When a seat like "Commander Engineering-Temporal Operative" had all recognised abilities
from the spec profession (Temporal), _find_cluster('Engineering', 'Temporal') failed because
c_primary == 'Temporal' ≠ 'Engineering'. Added fallback: if the base-profession search fails
for a seat with a spec, also try _find_cluster(spec_prof, None). Covers all dual-spec seat
combinations (Tactical-Temporal, Science-Command, etc.) symmetrically.
Fix: X-position gap detection for BOFF slot index assignment (warp_dialog.py)
Replaced sequential rank_slot = 0, 1, 2, … filling with position-based index mapping.
New _slot_indices_from_x(cluster_items, rank) helper:
- Computes minimum X-gap between detected ability icons as the baseline "1 slot" step
- A gap of ~2× step → slot index jumps by 2 (1 missing slot between)
- Single ability defaults to slot 0
- Slot indices are logged alongside ability names for diagnostics (
slots=[0, 2, 3])
Previously an empty slot 1 between two detected abilities caused abilities to land on slot 1 and
slot 2 instead of slot 0 and slot 2.
Feature: empty / inactive BOFF slot position detection (layout_detector.py, warp_importer.py, warp_dialog.py)
_fill_boff_gaps(bboxes_abs, img, icon_est, x_min, max_slots=4) — new method on LayoutDetector:
- Called after
_find_icon_bboxes_in_stripin both OCR (Strategy A) and color (Strategy B) paths of_detect_boffs - Scans expected grid positions at
stepintervals from the leftmost active icon - For each position without an active bbox: extracts a crop and calls
_classify_cell()→'empty'or'inactive' - Returns 5-tuples
(x, y, w, h, state)— active icons unchanged, virtual positions added
warp_importer._process_image(): - Detects 5-element bboxes before the normal
bx, by, bw, bh = bboxunpack - For
state in ('empty', 'inactive'): createsRecognisedItem(name='__empty__'/'__inactive__', conf=1.0)directly — no icon matcher call - Virtual items flow into BOFF clusters alongside active abilities
warp_dialog.pyPhase 3: VIRTUAL_ITEM_NAMEScheck before boff-cache lookup — silentcontinue, no "not in cache" log noise- Virtual items contribute their X-position to
_slot_indices_from_xfor precise gap anchoring even when only 1 active ability is present in a seat
Training pipeline for __empty__ / __inactive__ crops
sync.py has no filter on virtual names — confirmed __empty__/__inactive__ crops are uploaded to
HuggingFace alongside normal equipment crops. admin_train.py includes them as regular EfficientNet
classes. When the model matures, icon_matcher will output these labels directly, making gap detection
independent of _fill_boff_gaps heuristics.
v2.8
Fix: dual-spec BOFF seat cluster matching (warp_dialog.py)
When a seat like "Commander Engineering-Temporal Operative" had all recognised abilities
from the spec profession (Temporal), _find_cluster('Engineering', 'Temporal') failed because
c_primary == 'Temporal' ≠ 'Engineering'. Added fallback: if the base-profession search fails
for a seat with a spec, also try _find_cluster(spec_prof, None). Covers all dual-spec seat
combinations (Tactical-Temporal, Science-Command, etc.) symmetrically.
Fix: X-position gap detection for BOFF slot index assignment (warp_dialog.py)
Replaced sequential rank_slot = 0, 1, 2, … filling with position-based index mapping.
New _slot_indices_from_x(cluster_items, rank) helper:
- Computes minimum X-gap between detected ability icons as the baseline "1 slot" step
- A gap of ~2× step → slot index jumps by 2 (1 missing slot between)
- Single ability defaults to slot 0
- Slot indices are logged alongside ability names for diagnostics (
slots=[0, 2, 3])
Previously an empty slot 1 between two detected abilities caused abilities to land on slot 1 and
slot 2 instead of slot 0 and slot 2.
Feature: empty / inactive BOFF slot position detection (layout_detector.py, warp_importer.py, warp_dialog.py)
_fill_boff_gaps(bboxes_abs, img, icon_est, x_min, max_slots=4) — new method on LayoutDetector:
- Called after
_find_icon_bboxes_in_stripin both OCR (Strategy A) and color (Strategy B) paths of_detect_boffs - Scans expected grid positions at
stepintervals from the leftmost active icon - For each position without an active bbox: extracts a crop and calls
_classify_cell()→'empty'or'inactive' - Returns 5-tuples
(x, y, w, h, state)— active icons unchanged, virtual positions added
warp_importer._process_image(): - Detects 5-element bboxes before the normal
bx, by, bw, bh = bboxunpack - For
state in ('empty', 'inactive'): createsRecognisedItem(name='__empty__'/'__inactive__', conf=1.0)directly — no icon matcher call - Virtual items flow into BOFF clusters alongside active abilities
warp_dialog.pyPhase 3: VIRTUAL_ITEM_NAMEScheck before boff-cache lookup — silentcontinue, no "not in cache" log noise- Virtual items contribute their X-position to
_slot_indices_from_xfor precise gap anchoring even when only 1 active ability is present in a seat
Training pipeline for __empty__ / __inactive__ crops
sync.py has no filter on virtual names — confirmed __empty__/__inactive__ crops are uploaded to
HuggingFace alongside normal equipment crops. admin_train.py includes them as regular EfficientNet
classes. When the model matures, icon_matcher will output these labels directly, making gap detection
independent of _fill_boff_gaps heuristics.
Release v2.1
Automated release for version v2.1
Release v2.0
v2.0 — Official release, beta phase complete
First non-beta release of SETS-WARP.
What's new since v1.9b
- Upstream SETS merge — integrated 738 commits from Shinga13/SETS: skill tree, markdown export, settings page, picker improvements, legacy build conversion, modifier refinements
- WARP separation complete — all WARP-specific logic lives in
warp/;src/is now a clean upstream-compatible layer scripts/upstream_sync.py— semi-automated future upstream merge helperdocs/src_patches.md— re-application guide for future upstream merges- 3 fixes contributed back to upstream SETS — item normalization, Intel Holoship uni_consoles, species sets expansion
- WARP CORE fixes — NON_ICON_SLOT annotation workflow (10 commits), Shift anchor cursor fix
Installation
Linux/macOS: run sets_warp.sh
Windows: run sets_warp.bat
Both scripts set up a virtual environment and install dependencies automatically.
Release v1.9b
Automated release for version v1.9b
Release v1.8b
Automated release for version v1.8b
v1.5b — OCR trainer fixes & thread safety
Changes
- Fix: slot change on confirmed bboxes now triggers re-matching (lazy crop loading)
- Fix: confirmed bboxes revert to pending on slot change
- Fix: QThread crash on exit - graceful worker cleanup
- Ship Name field editable with OCR pre-fill
- OCR typo correction learns from manual overrides
v1.4b
Fixes
- Windows taskbar icon — set via Win32
LoadImageW+WM_SETICONafterwindow.show(), works with any Python launcher - Charmap crash on Polish Windows — all JSON files in
warp/now opened withencoding='utf-8'; previouslyopen()without encoding failed on cp1250 systems (byte 0x88 undefined) - sets_warp.bat — reverted to original
python.exelauncher, removedpythonw.exedependency - ML model download — force re-download when
model_version.jsonis absent (e.g. after SETS→SETS+WARP upgrade); writemodel_version.jsonfrom backend metadata after download - Early log rotation —
sets_warp_early.logand setup log now keep one.baksession backup
v1.3b — ML pipeline fixes & community training improvements
What's new in v1.3b
Bug fixes
- WARP CORE add bbox: fixed crash "too many values to unpack" — `match()` returns 4 values, not 3
- Local trainer: fixed backbone weights never loading from `icon_classifier.pt` (was checking `.onnx` — cosmetic only, weights never applied)
- Local trainer: fixed stratified train/val split — flat random split caused classes with 1 sample to land in val only → `val_acc = 0%` → early stop at epoch 5
- Screen type trainer: same backbone loading and stratified split fixes as local trainer
- Backbone loading: `strict=False` does not ignore shape mismatches — fixed by stripping `classifier.*` keys before `load_state_dict`
- Updater: fixed loop showing update dialog on every launch — `_repo_root()` returned wrong path, causing `git describe` to fail and fall back to stale version constant
- gitignore: `.SETS_settings.ini` and `*.ini` user settings files excluded from repo
Community pipeline improvements
- ModelUpdater now fires at app startup (15 s after launch), not just when WARP CORE is opened
- Auto-accept defaults to ON in WARP CORE
Desktop integration
- Each install path gets its own `.desktop` entry (keyed by path hash) — multiple installations coexist without overwriting each other
- Uninstall SETS-WARP option added to Settings
Installation
Download `sets-warp.tar.gz`, extract, run `./sets_warp.sh` (Linux/macOS) or `sets_warp.bat` (Windows).
v1.2b
v1.2b
Installation
- SETS-only vs SETS+WARP choice — first-run setup asks which installation type to use (graphical cards in GUI, plain-text prompt in headless mode); selection saved to
.config/install_mode.txt - Disk space check — warns before install if free space is below threshold (1.5 GB SETS-only / 4 GB SETS+WARP)
- Community ML model on first run — fresh SETS+WARP installs automatically download the latest community icon classifier during setup
- Settings → Installation checkbox — switch between SETS-only and SETS+WARP from inside the app; restarts automatically and runs the installer on next launch
_quick_check_venv— health check now reads the saved install mode and validates only relevant packages
Linux desktop integration
installer/install_desktop.sh— installs.desktopentry and app icon to~/.local/(no root required); supports--uninstallsets_warp.sh— fixed leading empty line before shebang that prevented KDE Plasma 6 from launching the app via the desktop icon (execv()requires shebang at byte 0)install_desktop.sh—.desktopfile now includesStartupNotify=trueandPath=
UI — dark theme unification
warp/style.py(new) — single source of truth for all WARP/WARP CORE colours;apply_dark_style(widget)applies QPalette + QSS- WARP dialog and WARP CORE — unified dark theme across all windows and dialogs
- Recognition Review list — selected item now shows the bbox state colour (green/red/yellow) instead of a fixed foreground colour; fixed by removing
color:override fromQListWidget::item:selectedQSS
Windows installer
installer/sets_warp.iss— icon fixes for installer and shortcuts
Documentation
WARP_GUIDE.md(new) — full user guide: preparing screenshots, WARP import walkthrough, WARP CORE interface (toolbar, panels, bbox colours, screen type confirmation, Ship Type/Tier overlap), training the ML model, community sync, keyboard shortcuts, troubleshootingSETS_GUIDE.md(new) — full SETS guide: screen layout, all tabs (Space, Ground, Skills), sidebar, all settings options, save/load behaviour, right-click context menu, exportREADME.md— rewritten with correct install options, SETS-only vs SETS+WARP size table, Linux desktop integration, updating workflowwarp/warp_core.md— rewritten as developer reference; cyan text slot docs, Ship Type/Tier overlap annotation guide