Manage GDEMU SD cards for Sega Dreamcast
Requires macOS Sonoma 14.0 or later
Last updated: 2026-08-09
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, reorders, adds, and deletes go straight to the card as you make them. ⌘Z undoes any of them, 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.
-
Instant OpenReopen a card in ~50 ms from cache
-
Add GamesDrag GDI, CDI, CCD, or ZIP into free slots
-
Find DuplicatesGraded by serial, size, name, and SHA-256
-
Title Database4,208 Dreamcast titles bundled in the app
-
Rename & ReorderInline rename, bulk case, and A–Z on card
-
InspectorIP.BIN fields plus native PVR cover art
-
Menu RebuildBake GDmenu or openMenu into slot 01
-
Safe WritesImmediate writes, on-card trash, and undo
-
Native macOS appSwiftUI, Dark Mode, and full keyboard control
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.
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 is the separate action that renumbers folders
Control-click a header to show or hide Serial, Format, or Size; widths and visibility persist. Search by name, serial, or slot. Right-click for row actions. Reveal in Finder.
Renaming
| Action | How |
|---|---|
| Inline rename | Double-click, right-click → Rename, or Return |
| Inspector rename | Edit title, press Return |
| Sentence / Title / Upper / Lower | Game → Manually Rename |
| From GameDB / folder / file name | Game → 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 next free slots, 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
.gdiwith 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.
- Title—name, slot, format, size
- Duplicate—grade, signals, peers
- IP.BIN—product title, version, disc number, VGA, serial, region, CRC, Code Breaker
- Cover—
0GDTEX.PVR(own PVR decoder: RGB565 / ARGB1555 / ARGB4444; square and rectangle twiddled layouts; pulls from a loose file or the high-density ISO track inside a GDI) - 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.
Duplicates
Big cards accumulate copies. Grades by confidence:
| Grade | Evidence |
|---|---|
| Exact | SHA-256 of the disc payload matches |
| Strong | Same payload size, plus serial and/or a strong name match |
| Likely | Same payload size alone, or serial plus a similar name |
| Weak | Serial 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 TennisandVirtua Tennis 2aren’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) or openMenu (OPENMENU.INI) into slot 01 - 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”)
- Stock GDmenu and openMenu asset trees ship in the app
Safety
- No Save button—writes are immediate
- Undo (
⌘Z) for renames, bulk renames, soft deletes, and reorders - 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, A–Z, Eject, Inspector by default; Move Up/Down and Duplicates in the palette
- 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
- Check for Updates from the Help menu, plus a quiet check at launch
- Notarized and stapled, so Gatekeeper lets it straight through
Keyboard shortcuts
| Shortcut | Action |
|---|---|
⌘O | Open Card |
⌘I | Add Games |
⌘S | Rebuild Menu List |
⌘R | Clear Cache and Rescan |
⇧⌘E | Eject Card |
⌘A | Select All |
⌫ | Delete Selected |
⌥⌫ | Delete Immediately |
| Return | Rename selected game |
⌘Z | Undo |
⇧⌘Z | Redo |
⌥⌘I | Show / Hide Inspector |
⌘D | Duplicate Tools |
⌥⌘D | Show Duplicate Markers |
Optimised
- Only 4 MB to download
- Universal for Apple silicon and Intel
- No .NET runtime, no helper binaries, no bundled dylibs
Compared to GDMENU Card Manager
| Katana | GDMENU Card Manager | |
|---|---|---|
| Platform | macOS | Windows, Linux, macOS |
| Built with | Swift / SwiftUI | C# / .NET / Avalonia |
| Runtime to install | None | .NET 6 Desktop Runtime |
| Applying changes | Immediate | “Save Changes” step |
| Loading metadata | Background, never blocks | Reads headers on save |
| Reopening a card | From cache, ~50 ms | Full re-read |
| GDmenu and openMenu | ✓ | ✓ |
| Menu GDI bake | Native Swift | Bundled 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 order | – | ✓ |
| Move up / down on card | ✓ | – |
| Auto-rename from GameDB / IP.BIN | ✓ | ✓ |
| Build-tag filenames kept on auto-rename | ✓ | – |
| Bulk case conversion | ✓ | – |
| Inline Finder-style rename | ✓ | – |
| Cover art (0GDTEX.PVR) | ✓ | ✓ |
| 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 | ✓ | ✓ |
| Licence | MIT | GPL 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, 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. Title database from GameDB-Dreamcast.
Katana is an independent project, not affiliated with or endorsed by SEGA. Dreamcast is a trademark of SEGA.