Download on GitHub

Manage GDEMU SD cards for Sega Dreamcast

Download on GitHub

Requires macOS Sonoma 14.0 or later
Last updated: 2026-09-29

Screenshot 1
Screenshot 2
Screenshot 3
Screenshot 4
Screenshot 5

Katana is a native Mac app for GDEMU and GDEMU-compatible SD cards. Open a card and the whole library appears—every slot with its real title, serial, format, and size. Renames, adds, and deletes go straight to the card as you make them. Reordering waits in Arrange until you Apply. ⌘Z undoes renames, soft deletes, and an applied reorder, and deleted games wait in the card’s own trash until you empty it.

There’s no waiting for preloading or saving, and no need to click “Done” at any point. A 276-game card reopens from cache in about 50 ms.

No preload, no save

Other GDEMU managers make you preload metadata, then Save Changes when you’re done. Katana doesn’t.

  • Card opens from a snapshot cache when nothing’s changed (~50 ms for a large card)
  • Titles and serials show immediately; sizes and hashes fill in while you work
  • Every rename, reorder, and delete writes now—not in a later batch
  • Cache updates in place as you add, delete, reorder, rebuild, and hash, so the next open stays instant
  • Entries arrive in batches of 24, so the table fills smoothly instead of in one lump
  • Card I/O stays off the main thread, so the UI never beachballs
  • Rescan, or Clear Cache and Rescan (⌘R), when you’ve changed things outside the app

Only the irreversible asks

Deletes go to .katana-trash and come back with ⌘Z. The two things you confirm are the two that can’t be undone: Empty Card Trash, and Delete Immediately (⌥⌫, or hold ⌥ to swap it into the Game and context menus). Quit with a stale menu and you get Rebuild & Quit.

Open a card

Point at the root of the card—the folder with 01, 02, 03, and so on. Works with a mounted SD card or any local folder laid out the same way.

  • Recents via app-scoped security bookmarks
  • Session restore reopens the last card from cache
  • Multipass mode: sidebar Recent list for multiple cards
  • Cards tracked by volume UUID, so a Finder rename doesn’t lose cache, sort, or duplicate marks
  • Capacity meter—amber under 25%, red under 10%—plus trash size
  • Title bar shows game count, percent used, menu type, and read-only
  • Read-only cards flagged before you start writing
  • Write access held for the whole session, and re-bound from the bookmark—or offered as Grant Access…—if a remount takes it away
  • Eject from toolbar, sidebar, or ⇧⌘E; optional eject on quit

The game list

Multi-select Mac table: slot, title, serial, format, size, plus a Disc column. On an openMenu Extended card, Folder and Type are shown as well.

Sorting the view is not the same as sorting the card.

  • Column headers sort the view only—slot numbers on the card stay put
  • Status strip when a non-slot sort is active, with Newest First and Slot Order
  • Display sort remembered per card
  • Apply A–Z to Card renumbers every folder alphabetically. Arrange is how you set any other order

Control-click a header to show or hide Serial, Folder, Type, Disc, Format, Size, or Cover. Folder and Type start hidden unless the card is openMenu Extended; widths and visibility persist per menu type. Search by name, serial, folder, type, or slot. Right-click for row actions. Reveal in Finder.

  • New! Cover column — Custom for a loose 0GDTEX.PVR (that wins), Disc for art inside the disc image, or None. Hidden until you turn it on. Slot 01 is None. Menu box art in BOX.DAT still shows in the inspector; this column does not read it

Arrange

Drag and the move commands stage an order. Folders change only when you Apply.

  • Drag a selected block to a new position. A drag that starts on an unselected row extends the selection
  • Move Up / Down (⌘↑ / ⌘↓) moves the row you see. In Newest First, up is a higher slot
  • Move to Top / Bottom (⌥⌘↑ / ⌥⌘↓) jumps the selection to slot 02 or the last slot
  • The pending order follows the current table sort, so Newest First stays newest-first
  • Slot 01 stays the menu
  • Apply renames the numbered folders once. Cancel discards the pending order. Return applies, Escape cancels
  • Only folders whose slot number changes are renamed

openMenu Extended

Three menu types: GDmenu, stock openMenu, and openMenu Extended. Folder and Type columns, and Assign Folder, only appear for Extended. A card already using ateam stays on Extended.

  • Folder is an editable combo: type a path, or autocomplete from paths already on the card. Nested folders use backslashes (Games\RPGs). Clear the field to unfile
  • Also in holds up to five extra paths, separated by semicolons, so one disc appears in more than one folder
  • Type is Game, Other (audio CD or VCD—openMenu exits to the BIOS), or PSX (Bleemcast! or Bloom)
  • Right-click Assign Folder to set the same path on a multi-select: None, paths already on the card, or Type a Path…
  • Writes folder.txt and type.txt immediately. Rebuild puts folder= and type= into OPENMENU.INI, so an ateam card survives a Katana bake
  • Disc, Region, and Serial in the inspector write disc.txt, region.txt, and serial.txt. A shared serial plus 1/4, 2/4 keeps a multi-disc set grouped in openMenu Compact. Region is any mix of J, U, and E, stored in that order

Renaming

ActionHow
Inline renameDouble-click, right-click → Rename, or Return
Inspector renameEdit title, press Return
Sentence / Title / Upper / LowerGame → Manually Rename
From GameDB / folder / file nameGame → Automatically Rename

All of these work on a multi-row selection. Renames write name.txt immediately (compatible with other GDEMU managers) and are undoable with ⌘Z.

Auto-rename looks the IP.BIN serial up in a bundled database of 4,208 Dreamcast title mappings (1,400 primaries plus aliases), falling back to the product name in the disc header. Folder rename skips slot numbers; file rename turns underscores and dots into spaces.

Adding & removing

  • Add Games (⌘I) into the lowest free slot—including an empty numbered folder left behind—or drag straight from Finder onto the list
  • GDI (full track set), CDI, CCD (.img / .sub / .cue), a ZIP archive, or a folder already laid out as a GDEMU game
  • Multi-select a .gdi with its tracks and Katana groups them into one game—only the cue and referenced tracks get copied
  • New slots appear in the list as they copy, with byte-weighted progress on the top edge bar; writes bypass the macOS cache, so the bar tracks bytes actually on the card
  • Added games are named from the GameDB by default—hold ⌥ to keep the source names, and build-tag filenames keep theirs either way
  • Folders renumber first when digit count grows (99 → 100)
  • Content hashes computed after the copy
  • Soft delete to .katana-trash—undoable; reclaimable size in the sidebar
  • Delete Immediately (⌥⌫) when you want the space back now
  • Empty Card Trash reclaims it permanently, AppleDouble companions included
  • Remaining slots pack down with single-pass renames

Inspector

Trailing inspector with collapsible sections that remember open/closed.

New! Slot 01 is the menu, not a game. Selecting it shows the installed menu—its name, which of GDmenu, openMenu, or openMenu Extended it is, and whether the list is out of date—with Rebuild Menu… and Reveal in Finder. Rename, cover, and delete stay on games.

  • Title—name, slot, format, size
  • Duplicate—grade, signals, peers
  • IP.BIN—product title, version, disc number, VGA, serial, region, CRC, Code Breaker. Serial, disc, and region can be overridden; see openMenu Extended
  • New! Replacing a game or the menu drops the previous serial, version, and date
  • Cover—see below
  • On Card—image name and path
  • Actions—rename, Reveal in Finder, delete

Multi-select switches to a summary: count, combined size, preview list, bulk actions.

Cover art

Katana decodes Dreamcast PVR itself: RGB565, ARGB1555, and ARGB4444, square and rectangle, twiddled or not.

  • A loose 0GDTEX.PVR next to the disc wins
  • Otherwise a GDI’s high-density ISO track is searched for the texture
  • New! If the game has neither, Cover shows the openMenu box from slot 01’s BOX.DAT, matched by serial (hyphens ignored). Nothing on the card reads No cover
  • New! Change Cover Image… — hover the thumbnail, its menu, or the Game menu. A PNG, JPEG, or any picture macOS can open keeps its orientation, is centre-cropped, scaled to 256×256, and saved as a loose 0GDTEX.PVR. A .pvr Katana can read is copied unchanged
  • New! Remove Custom Cover deletes that loose file. Art already inside the disc image stays put
  • New! On the Dreamcast, openMenu looks artwork up in slot 01’s BOX.DAT and ICON.DAT. Rebuilding the menu copies each loose 0GDTEX.PVR into those files

Duplicates

Big cards accumulate copies. Grades by confidence:

GradeEvidence
ExactSHA-256 of the disc payload matches
StrongSame payload size, plus serial and/or a strong name match
LikelySame payload size alone, or serial plus a similar name
WeakSerial alone, or name similarity alone
  • Each match shows which signals fired
  • Multi-disc sets that share a serial (e.g. Shenmue) stay intact unless size or hash also match
  • Sequel-aware: Virtua Tennis and Virtua Tennis 2 aren’t the same game
  • Lowest slot in a group is the keep candidate; the rest are extras
  • Sidebar: groups, flagged, exact, extras, ignored, unhashed
  • Select All Duplicates, Exact Extras, All Extras, or one group’s extras
  • Not a Duplicate marks saved per card
  • Show Duplicates Only dims the rest in place
  • Whole toolset can be switched off once the card is clean

Hashes run in the background: SHA-256 of the payload, written to sidecars on the card. Sidebar shows count, throughput, percentage, and ETA; stop any time and it resumes. Hashing and menu rebuild can’t run at once—both need exclusive card access.

Rebuilding the menu

Renaming and reordering only change the card. The console reads the menu image in slot 01.

  • Bakes GDmenu (LIST.INI), stock openMenu, or openMenu Extended (OPENMENU.INI) into slot 01
  • New! Opening a card detects the type from slot 01. A stock openMenu card stays on openMenu. A switch you have not rebuilt yet is kept
  • New! Bundled openMenu is 1.7.0-ateam, the Virtual Folder Bundle: Dreamcast Now!, mouse support, a scrollbar in Folders mode, and navigation from every controller. Stock openMenu and Extended share that pack; Extended is what writes folder and disc-type lines
  • New! Cover data already in the menu image is written back, and each loose 0GDTEX.PVR is copied into BOX.DAT and ICON.DAT
  • Real multi-track GDI: ISO 9660 Level 1, LBA 45000, truncate and CDDA handling, MIL-CD-safe
  • Written in Swift—no .NET runtime, no helper binary, no bundled dylibs; asset zips unpack in-process
  • Warning strip when names or order no longer match the baked menu—fingerprint-based, so it clears if you reverse the change
  • Prompted on quit if the menu is stale
  • IP.BIN headers cached on your Mac’s local disk, so rebuilds skip re-reading every GDI (”270 cached · 12 from card”)
  • GDmenu and that openMenu pack both ship in the app

Safety

  • No Save button—writes are immediate
  • Undo (⌘Z) for renames, bulk renames, soft deletes, and an applied reorder
  • Soft delete before anything is destroyed
  • Read-only cards caught up front
  • Scanning, hashing, importing, and rebuilding never overlap
  • Sandboxed—only the card you open
  • Network only for the optional GitHub Releases update check

A REAL MAC-ASSED APP

  • SwiftUI: sidebar, table, trailing inspector
  • Customisable toolbar—Open, Add, Delete, Rebuild, Arrange, A–Z, Eject, Inspector by default; Move Up/Down and Duplicates in the palette
  • Listed as a Utility, so macOS doesn’t turn on Game Mode
  • Dark Mode, full screen, window restoration
  • Welcome window (Help menu to reopen)
  • Settings for adding, duplicates, size units, menu type, multipass, cache, eject
  • One chunked edge bar for scanning, importing, deleting, and rebuilding—no blocking sheets
  • New! Katana on GitHub… in the Help menu opens the project page. Check for Updates… is there too, plus a quiet check at launch
  • Notarized and stapled, so Gatekeeper lets it straight through

Keyboard shortcuts

ShortcutAction
⌘OOpen Card
⌘IAdd Games
⌘SRebuild Menu List
⌘RClear Cache and Rescan
⇧⌘EEject Card
⌘ASelect All
⌫Delete Selected
⌥⌫Delete Immediately
ReturnRename selected game
⌘ZUndo
⇧⌘ZRedo
⌥⌘IShow / Hide Inspector
⌘↑Move Up (stages Arrange)
⌘↓Move Down (stages Arrange)
⌥⌘↑Move to Top
⌥⌘↓Move to Bottom
⌘DDuplicate Tools
⌥⌘DShow Duplicate Markers

Editing a title keeps ⌘A, ⌫, and ⌘Z in the field. ⌘S stays Rebuild Menu.

Optimised

  • Only 8.5 MB to download
  • Universal for Apple silicon and Intel
  • No .NET runtime, no helper binaries, no bundled dylibs

Compared to GDMENU Card Manager

KatanaGDMENU Card Manager
PlatformmacOSWindows, Linux, macOS
Built withSwift / SwiftUIC# / .NET / Avalonia
Runtime to installNone.NET 6 Desktop Runtime
Applying changesImmediate“Save Changes” step
Loading metadataBackground, never blocksReads headers on save
Reopening a cardFrom cache, ~50 msFull re-read
GDmenu, openMenu, and openMenu Extended✓✓
Menu GDI bakeNative SwiftBundled tooling
GDI / CDI / CCD✓✓
MDS images–✓
Zip import✓✓
RAR / 7z import–✓
GDI shrinking–✓
Add, delete, rename✓✓
Drag and drop to add✓✓
Live list and progress while adding✓–
Sort alphabetically✓✓
Drag-and-drop manual orderArrange, then Apply✓
Move up / down on card✓–
Move to top / bottom✓–
Virtual folders and disc type✓ateam fork
Disc, region, and serial overrides✓✓
Auto-rename from GameDB / IP.BIN✓✓
Build-tag filenames kept on auto-rename✓–
Bulk case conversion✓–
Inline Finder-style rename✓–
Cover art (0GDTEX.PVR)✓✓
Custom cover from an image or PVRLoose 0GDTEX.PVR, copied into BOX.DAT / ICON.DAT on rebuildBOX.DAT / ICON.DAT
openMenu box art when a game has no texture✓✓
Code Breaker detection✓✓
name.txt compatibility✓✓
Undo✓–
Soft delete and empty trash✓–
Delete immediately✓–
Duplicate detection✓–
Sequel-aware name matching✓–
SHA-256 content hashing✓–
Bundled title database✓–
Scan cache✓–
Display-only column sorting✓–
Toggleable / resizable columns✓–
Multi-card recents✓–
Read-only card detection✓–
Eject on quit✓–
In-app update check✓✓
LicenceMITGPL v3

Standing on shoulders

GDMENU Card Manager by sonik-br is the inspiration and the multi-platform reference. Katana follows the same on-disk conventions—numbered folders, name.txt / serial.txt, folder.txt / type.txt, disc.txt / region.txt, LIST.INI / OPENMENU.INI, folder width by magnitude, MIL-CD-safe GDI for slot 01.

No code from GDMENU Card Manager is used. What they share is the format GDmenu and openMenu themselves define. The menu GDI writer follows the multi-track approach the scene has used for years, from the MIT-licensed DiscUtils and GDIbuilder lineage—not from GDMENUCardManager.

On Windows or Linux, or if you need RAR / 7z archives, MDS, or GDI shrinking, use GDMENU Card Manager—it’s GPL v3. Thanks to sonik-br and contributors.

Katana exists because of the Dreamcast homebrew community: GDmenu, openMenu, the GDEMU hardware, and the people who documented the disc formats well enough to bake a GD-ROM image from Swift. The bundled openMenu image is openMenu Virtual Folder Bundle 1.7.0-ateam by Derek Pascarella. Title database from GameDB-Dreamcast.

Try my games

You might like to try some games I’ve made for Dreamcast:

Katana is an independent project, not affiliated with or endorsed by SEGA. Dreamcast is a trademark of SEGA.