Skip to content

Releases: raman78/sets-warp

v2.8.1

06 Apr 09:21

Choose a tag to compare

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_strip in both OCR (Strategy A) and color (Strategy B) paths of _detect_boffs
  • Scans expected grid positions at step intervals 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 = bbox unpack
  • For state in ('empty', 'inactive'): creates RecognisedItem(name='__empty__'/'__inactive__', conf=1.0) directly — no icon matcher call
  • Virtual items flow into BOFF clusters alongside active abilities
    warp_dialog.py Phase 3:
  • VIRTUAL_ITEM_NAMES check before boff-cache lookup — silent continue, no "not in cache" log noise
  • Virtual items contribute their X-position to _slot_indices_from_x for 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

06 Apr 09:12

Choose a tag to compare

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_strip in both OCR (Strategy A) and color (Strategy B) paths of _detect_boffs
  • Scans expected grid positions at step intervals 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 = bbox unpack
  • For state in ('empty', 'inactive'): creates RecognisedItem(name='__empty__'/'__inactive__', conf=1.0) directly — no icon matcher call
  • Virtual items flow into BOFF clusters alongside active abilities
    warp_dialog.py Phase 3:
  • VIRTUAL_ITEM_NAMES check before boff-cache lookup — silent continue, no "not in cache" log noise
  • Virtual items contribute their X-position to _slot_indices_from_x for 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

29 Mar 07:42

Choose a tag to compare

Automated release for version v2.1

Release v2.0

28 Mar 18:39

Choose a tag to compare

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 helper
  • docs/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

28 Mar 10:33

Choose a tag to compare

Automated release for version v1.9b

Release v1.8b

27 Mar 19:37

Choose a tag to compare

Automated release for version v1.8b

v1.5b — OCR trainer fixes & thread safety

25 Mar 00:23

Choose a tag to compare

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

23 Mar 18:16

Choose a tag to compare

Fixes

  • Windows taskbar icon — set via Win32 LoadImageW+WM_SETICON after window.show(), works with any Python launcher
  • Charmap crash on Polish Windows — all JSON files in warp/ now opened with encoding='utf-8'; previously open() without encoding failed on cp1250 systems (byte 0x88 undefined)
  • sets_warp.bat — reverted to original python.exe launcher, removed pythonw.exe dependency
  • ML model download — force re-download when model_version.json is absent (e.g. after SETS→SETS+WARP upgrade); write model_version.json from backend metadata after download
  • Early log rotationsets_warp_early.log and setup log now keep one .bak session backup

v1.3b — ML pipeline fixes & community training improvements

23 Mar 00:15

Choose a tag to compare

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

22 Mar 20:44

Choose a tag to compare

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 .desktop entry and app icon to ~/.local/ (no root required); supports --uninstall
  • sets_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.desktop file now includes StartupNotify=true and Path=

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 from QListWidget::item:selected QSS

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, troubleshooting
  • SETS_GUIDE.md (new) — full SETS guide: screen layout, all tabs (Space, Ground, Skills), sidebar, all settings options, save/load behaviour, right-click context menu, export
  • README.md — rewritten with correct install options, SETS-only vs SETS+WARP size table, Linux desktop integration, updating workflow
  • warp/warp_core.md — rewritten as developer reference; cyan text slot docs, Ship Type/Tier overlap annotation guide