TITAN – Tool for Interpreting and Transforming Archival Nodes. CLI and library for Ultima file formats (U8: Pagan, U7: Black Gate & Serpent Isle).
Project description
titan-ultima
TITAN – Tool for Interpreting and Transforming Archival Nodes.
A Python CLI and library for working with Ultima file formats — currently supporting Ultima 8: Pagan and Ultima 7: The Black Gate / Serpent Isle. TITAN reads, converts, extracts, and reconstructs the games' proprietary archive and data formats — from sprite sheets and sound effects to full isometric world maps.
Run
titan --helpfor a full list of commands, ortitan u8 --help/titan u7 --helpfor game-specific options.
What TITAN can do
| Category | Capability |
|---|---|
| Archives | Read, list, extract, create, and patch Flex (.flx) archives; auto-detect embedded name tables (SOUND.FLX, MUSIC.FLX) for human-readable filenames and per-record .meta.txt metadata sidecars |
| Shapes | Decode RLE-compressed sprite frames to PNG; re-import edited PNGs; create new shapes from scratch |
| Fonts | Interactive wizard (font-create) builds U7 FONTS.VGA-compatible shapes from TrueType fonts — mono, multi-shade, or hollow gradient rendering (stroke outline + vertical colour fill) with 30 gradient presets (with colour swatches), 11 stock presets (BG & SI), 6 bundled TTFs, palette LUT mapping, hex-to-palette colour resolution, ASCII art preview. Scans game directories for font archives, shows live slot tables from actual Flex data, auto-generates Exult Studio preview placeholder for non-standard glyph layouts (Gargish, Runic). Parses exult.cfg to auto-resolve the correct font archive path (including mod patch directories). Non-interactive batch mode via TOML config |
| Palette | Export the VGA 6-bit palette as a colour swatch |
| Sound | One-step Sonarc audio export from SOUND.FLX to WAV (u8 sound-export-all); single-file decode (u8 sound-export); speech FLX archives (E44.FLX, E80.FLX, …) extract dialogue transcripts + Sonarc audio; Creative Voice (.voc) decoder for U7 speech (INTROSND.DAT, U7SPEECH.SPC) |
| Dialogue web | End-user dialogue web pipeline for U8: prepare runtime dialogue artifacts, validate generated outputs, and launch a local static web viewer that can interact with U8 NPC conversations and items (titan dialogue prepare, titan dialogue validate, titan dialogue launch) |
| Music | One-step XMIDI→MIDI export from Flex archives (u8 music-export, u7 music-export); multi-track XMIDI support (MIDI Format 1) |
| Maps | U8: Render full isometric or top-down world maps from FIXED.DAT + GLOBs with engine-accurate dependency-graph depth sorting; merge live NPCs and items from save files; filter by all 16 TYPEFLAG bits; chunk coordinate grid overlay. U7: Render parallel-oblique world maps from U7MAP + U7CHUNKS + SHAPES.VGA with IFIX fixed objects and optional IREG dynamic objects; classic/flat/steep projection views; sprite-accurate dependency-DAG depth sorting; RLE terrain promotion with nearby-flat fill; colour-sampled world minimap (map-sample); --full world render; filter by TFA flags; chunk + superchunk grid overlay with coordinate labels; world-tile rectangle highlights with per-rectangle hex colours |
| Type data | U8: Decode TYPEFLAG.DAT shape physics/flag metadata. U7: Parse TFA.DAT flag array + SHPDIMS.DAT + WGTVOL.DAT |
| Gumps | Dump GUMPAGE.DAT container UI layout |
| Credits | Decrypt XOR-encoded ECREDITS.DAT / QUOTES.DAT |
| Saves | U8: List and extract entries from U8 save archives. U7: Read Exult .sav files (ZIP & FLEX formats), list/extract entries, dump global flags (flaginit), inspect save metadata & party (save-info), dump full NPC stats (save-npcs), dump NPC schedules (save-schedules) |
Installation
pip install titan-ultima
Requires Python 3.9+, NumPy ≥ 1.24, Pillow ≥ 10.0, Typer ≥ 0.15.
Getting started
Option A — first-time wizard (recommended)
Run the interactive setup wizard once. It auto-detects Ultima 8 plus
Ultima 7 (Black Gate / Serpent Isle) install locations, handles
Pentagram/ScummVM save paths for U8, writes titan.toml, and optionally
extracts the U8 shape and glob archives for you.
titan setup
After setup, U8 commands need no path arguments, and U7 map/typeflag/save-npcs
can use config defaults via --game bg|si:
titan u8 map-render -m 5 # renders map_005_iso_classic.png
titan u8 map-render -m 0 --no-roof # roof tiles removed
titan u8 map-render -m 39 --no-editor --no-ignore # player-accurate
titan u8 map-render-all --maps 0 5 39 --views iso_classic iso_high
# U7 defaults from titan.toml
titan u7 map-render --game bg --sc 85 -o britain_bg.png
titan u7 typeflag-dump --game si -f csv -o tfa_si.csv
Ultima 8 dialogue web viewer (end-user flow)
After titan setup, you can run the dialogue pipeline without passing
--usecode manually.
# 1) Build runtime dialogue artifacts
titan dialogue prepare
# 2) Validate artifacts
titan dialogue validate
# 3) Launch viewer (standard command)
titan dialogue launch
# Advanced optional override
titan dialogue launch --host 127.0.0.1 --port 4173
Open http://127.0.0.1:4173/ in your browser if it does not open automatically.
If launch reports missing dialogue meta assets, reinstall TITAN from the latest release/CI wheel.
If launch reports a placeholder dialogue shell, reinstall TITAN from the latest release/CI wheel.
Option B — manual setup (no config file)
# One-time: extract the shape and glob archives
titan flex-extract U8SHAPES.FLX -o shapes/
titan flex-extract GLOB.FLX -o globs/
# Render an Ultima 8 map
titan u8 map-render \
--fixed FIXED.DAT --shapes shapes/ --globs globs/ \
--palette U8PAL.PAL --typeflag TYPEFLAG.DAT \
--map 5 -o map_005.png
Quick Ultima 7 examples
# Export a U7 shape from SHAPES.VGA
titan u7 shape-export SHAPES.VGA --shape 150 -p PALETTES.FLX -o shape_150/
# Batch-export all faces
titan u7 shape-batch FACES.VGA -p PALETTES.FLX -o faces/
# Export all 12 palettes
titan u7 palette-export PALETTES.FLX -o palettes/
# Extract U7 music to MIDI
titan u7 music-export MT32MUS.DAT -o music/
titan u7 music-export ENDSCORE.XMI -o music/
# Export U7 music rewritten for General MIDI devices (SC-55/SC-88)
# Writes .MID files, strips MT-32 SysEx, and injects GM reset
titan u7 music-export MT32MUS.DAT --target gm -o music_gm/
# Decode the Guardian's intro speech (VOC → WAV)
titan u7 voc-export INTROSND.DAT -o speech/
# Extract all speech samples from U7SPEECH.SPC
titan u7 speech-export U7SPEECH.SPC -o speech_wav/
# Render a U7 map region (superchunk 85 / 0x55 = Britain; hex and decimal both accepted)
titan u7 map-render STATIC/ --sc 0x55 -o britain.png
# Render the entire world map
titan u7 map-render STATIC/ --full -o u7_world.png
# Highlight world-tile rectangles with per-rectangle hex colours
titan u7 map-render STATIC/ --full \
--highlight-tile-rect "2054,1698,2589,2386,#00BFFF,Moonshade" \
--highlight-tile-rect "895,1604,1172,1959,#FF6B35,Fawn" \
--highlight-tile-rect "670,2430,1134,2799,#7CFC00,Monitor" \
--highlight-width 4 \
--highlight-fill-alpha 128 \
--highlight-lift 8 \
--highlight-labels \
-o u7_world_marked.png
# Use built-in zone profiles (can be combined with manual highlights)
titan u7 map-render STATIC/ --full \
--zone-profile si_zones \
--zone-id 3 --zone-id 13 --zone-id 14 \
--highlight-tile-rect "2054,1698,2589,2386,#FFFFFF,Check" \
-o u7_si_zones_subset.png
# Render all zones from a profile
titan u7 map-render STATIC/ --full --zone-profile bg_zones --all-zones -o u7_bg_regions.png
# Remove building-class shapes (roofs, windows, mountain tops)
titan u7 map-render STATIC/ --sc 85 --exclude no_building -o britain_no_roofs.png
# Remove only transparent shapes (narrower filter — mostly interior rooftops)
titan u7 map-render STATIC/ --sc 85 --exclude no_transparent -o britain_open.png
# World minimap (768×768) with superchunk grid
titan u7 map-sample STATIC/ --scale 4 --grid -o minimap.png
# Dump U7 type flag summary
titan u7 typeflag-dump STATIC/
# Export detailed per-shape reference
titan u7 typeflag-dump STATIC/ -f detail -o tfa_reference.txt
# Export as CSV for analysis
titan u7 typeflag-dump STATIC/ -f csv -o tfa_data.csv
# List entries in an Exult savegame
titan u7 save-list exult00bg.sav
# Extract all files from a save
titan u7 save-extract exult00bg.sav -o save_bg/
# Dump global flags from a save (detail format)
titan u7 gflag-dump exult00bg.sav -f detail
# Export global flags as CSV
titan u7 gflag-dump exult00bg.sav -f csv -o bg_gflags.csv
# Show save metadata: identity, party, game clock, state
titan u7 save-info exult00bg.sav
# Dump all NPC stats (use --static for reliable container detection)
titan u7 save-npcs exult00bg.sav --static STATIC/ -f detail
# Dump NPC schedules
titan u7 save-schedules exult00bg.sav -f detail
# Create a font shape interactively
titan u7 font-create
# Create a font shape from a TOML recipe (non-interactive)
titan u7 font-create --config my_font_recipe.toml -o my_font.shp
Other useful commands (no config needed)
# U8 music — one step: MUSIC.FLX → MIDI (68 tracks)
titan u8 music-export MUSIC.FLX -o music_midi/
# U8 sound effects — one step: SOUND.FLX → WAV (133 effects)
titan u8 sound-export-all SOUND.FLX -o sound_wav/
# Extract speech audio (one FLX per NPC — E=English, G=German, etc.)
# record 0 = dialogue transcript (.txt), records 1+ = Sonarc audio (.raw)
titan flex-extract E44.FLX -o speech_e44/
titan flex-extract E80.FLX -o speech_e80/
titan u8 sound-batch speech_e44/ -o speech_e44_wav/
# Export all U8 shapes to PNG
titan u8 shape-batch shapes/ -p U8PAL.PAL -o shapes_png/
Run titan <command> --help for per-command options, or see the full
CLI reference.
Configuration (titan.toml)
titan.toml stores default paths so map and other commands work without
repeating long paths on every invocation. CLI flags always override config
values.
File location
TITAN looks for the config in this order:
./titan.toml— current working directory (recommended)~/.config/titan/config.toml— Linux / macOS%APPDATA%\titan\config.toml— Windows
Use titan --config /other/path.toml <command> to override.
Format
titan setup now writes the multi-game format by default. Legacy
[game]/[paths] is still supported for backward compatibility.
[u8.game]
base = "C:/ultima8" # root of your Ultima 8 install
language = "ENGLISH" # ENGLISH, FRENCH, GERMAN, etc.
[u8.paths]
# Relative paths are auto-expanded to <base>/<language>/STATIC/<name>
fixed = "FIXED.DAT"
palette = "U8PAL.PAL"
typeflag = "TYPEFLAG.DAT"
# Pre-extracted directories (relative to your working directory)
shapes = "shapes/"
globs = "globs/"
# Live objects — relative expands to <base>/cloud_saves/SAVEGAME/<name>
# Absolute paths (e.g. Pentagram/ScummVM) are used unchanged
nonfixed = "U8SAVE.000"
[u7bg.game]
base = "C:/GOG Games/Ultima VII/ULTIMA7"
variant = "blackgate"
[u7bg.paths]
static = "STATIC/"
shapes = "STATIC/SHAPES.VGA"
palette = "STATIC/PALETTES.FLX"
[u7si.game]
base = "C:/GOG Games/Ultima VII/SERPENT"
variant = "serpentisle"
[u7si.paths]
static = "STATIC/"
shapes = "STATIC/SHAPES.VGA"
palette = "STATIC/PALETTES.FLX"
A fully annotated template is available in
titan.toml.example.
Rules:
language = ""enables flat mode — all files expected directly inbase/; useful when you copy game files to your working directory.nonfixedwith an absolute path (e.g. a Pentagram save) is used as-is.shapesandglobsare always relative to the working directory, not the game install.
Inspecting the active config
titan config # show all resolved paths with OK / NOT FOUND status
titan config --edit # open titan.toml in your system editor
Library quick start
TITAN is also a Python library. Every CLI command has a corresponding module.
U8-specific modules live under titan.u8, U7-specific under titan.u7.
Backward-compatible imports (e.g. from titan.shape import U8Shape) still work.
# Flex archives (shared)
from titan.flex import FlexArchive
archive = FlexArchive.from_file("U8SHAPES.FLX")
archive.extract_all("shapes/")
# U8 shapes + palette
from titan.u8.shape import U8Shape
from titan.palette import U8Palette
pal = U8Palette.from_file("U8PAL.PAL")
shape = U8Shape.from_file("shapes/0001.shp")
frames = shape.to_pngs(pal)
frames[0].save("frame0.png")
# U7 shapes + palette
from titan.u7.shape import U7Shape
from titan.u7.palette import U7Palette
pal7 = U7Palette.from_file("PALETTES.FLX")
shape7 = U7Shape.from_file("POINTERS.SHP")
frames = shape7.to_pngs(pal7)
frames[0].save("pointer0.png")
# U7 music + speech
from titan.u7.music import extract_music
from titan.u7.sound import VocDecoder
extract_music("MT32MUS.DAT", "music/") # MIDI tracks
pcm, rate = VocDecoder.decode_file("INTROSND.DAT") # VOC → raw PCM
VocDecoder.to_wav("INTROSND.DAT", "speech/guardian.wav")
# U8 map rendering
from titan.u8.map import U8MapRenderer
renderer = U8MapRenderer(
fixed_path = "FIXED.DAT",
shapes_dir = "shapes/",
globs_dir = "globs/",
palette_path = "U8PAL.PAL",
typeflag_path = "TYPEFLAG.DAT",
)
img = renderer.render_map(map_num=5, view="iso_classic")
img.save("map_005.png")
# U7 map rendering
from titan.u7.map import U7MapRenderer, U7MapSampler
from titan.u7.palette import U7Palette
pal7 = U7Palette.from_file("STATIC/PALETTES.FLX")
renderer = U7MapRenderer("STATIC/")
img = renderer.render_superchunk(85, pal7)
img.save("superchunk_85.png")
minimap = U7MapSampler.sample_map(renderer, pal7, scale=4)
minimap.save("minimap.png")
# U8 save archives
from titan.u8.save import U8SaveArchive
save = U8SaveArchive.from_file("U8SAVE.000")
for name, size in save.list_entries():
print(f"{name} {size:,} bytes")
Supported formats
Shared
| Format | Module | Game file(s) |
|---|---|---|
| Flex archive | titan.flex |
*.FLX |
| XMIDI music | titan.music |
MUSIC.FLX, ENDSCORE.XMI — single- and multi-track |
Ultima 8
| Format | Module | Game file(s) |
|---|---|---|
| Shape sprites | titan.u8.shape |
U8SHAPES.FLX → .shp |
| VGA palette | titan.palette |
U8PAL.PAL |
| Sonarc audio | titan.u8.sound |
SOUND.FLX (one-step via u8 sound-export-all); E*.FLX / G*.FLX → speech |
| World map (static) | titan.u8.map |
FIXED.DAT, GLOB.FLX |
| World map (dynamic) | titan.u8.map |
NONFIXED.DAT / U8SAVE.000 |
| Type flags | titan.u8.typeflag |
TYPEFLAG.DAT |
| Gump layout | (cli only) | GUMPAGE.DAT |
| XOR credits | titan.u8.credits |
ECREDITS.DAT, QUOTES.DAT |
| Colour transforms | titan.u8.xformpal |
XFORMPAL.DAT |
| Save archives | titan.u8.save |
U8SAVE.000–.005 |
Ultima 7
| Format | Module | Game file(s) |
|---|---|---|
| Shape sprites | titan.u7.shape |
SHAPES.VGA, FACES.VGA, GUMPS.VGA, SPRITES.VGA, POINTERS.SHP |
| Palettes | titan.u7.palette |
PALETTES.FLX (12 palettes) |
| Music (MIDI) | titan.u7.music |
ADLIBMUS.DAT, MT32MUS.DAT, INTROADM.DAT, INTRORDM.DAT, ENDSCORE.XMI |
| Voice / speech | titan.u7.sound |
INTROSND.DAT (VOC), U7SPEECH.SPC (Flex of VOC) |
| World map | titan.u7.map |
U7MAP, U7CHUNKS, U7IFIX*, SHAPES.VGA; gamedat/u7ireg* (optional) |
| Type flags | titan.u7.typeflag |
TFA.DAT, SHPDIMS.DAT, WGTVOL.DAT |
| Save archives | titan.u7.save |
Exult .sav (ZIP & FLEX): identity, saveinfo.dat, gamewin.dat, schedule.dat, npc.dat, flaginit |
Game files
TITAN requires the original game files. If you own the games through GOG, the default install locations are:
| Platform | Game | Default path |
|---|---|---|
| Windows | Ultima 8 (GOG Galaxy) | C:\Program Files (x86)\GOG Galaxy\Games\Ultima 8 |
| Windows | Ultima 8 (GOG Offline) | C:\GOG Games\Ultima 8 |
| Windows | Ultima 7 (GOG) | C:\GOG Games\Ultima VII\ULTIMA7 (BG), C:\GOG Games\Ultima VII\SERPENT (SI) |
| Linux | GOG / Heroic | ~/GOG Games/Ultima 8, ~/GOG Games/Ultima VII, ~/Games/Heroic/Ultima 8, ~/Games/Heroic/Ultima 7, ~/Games/Heroic/Ultima 7 - Serpent Isle |
titan setup auto-detects these paths and others (legacy EA/Origin disc
installs, common manual redirects such as C:\ULTIMA8).
Typical GOG directory layout
<install root>\
├── ENGLISH\ ← language folder (FRENCH / GERMAN for other editions)
│ ├── STATIC\ ← core game data
│ │ ├── FIXED.DAT world map static objects
│ │ ├── GLOB.FLX reusable object groups (extract → globs/)
│ │ ├── U8SHAPES.FLX all sprites (extract → shapes/)
│ │ ├── U8PAL.PAL VGA colour palette
│ │ ├── TYPEFLAG.DAT shape physics / flag metadata
│ │ ├── GUMPAGE.DAT container gump UI layout
│ │ ├── XFORMPAL.DAT colour-transform palette
│ │ ├── ECREDITS.DAT encrypted credits text
│ │ ├── QUOTES.DAT encrypted quote text
│ │ ├── U8FONTS.FLX font shapes
│ │ ├── U8GUMPS.FLX UI gump shapes
│ │ └── EINTRO.SKF / ENDGAME.SKF
│ ├── SOUND\ ← audio
│ │ ├── SOUND.FLX sound effects (extract → sound_raw/)
│ │ ├── MUSIC.FLX music tracks (extract → music_xmi/)
│ │ └── E*.FLX language-specific voice/effects
│ └── USECODE\ ← game bytecode
│ └── EUSECODE.FLX
│
└── cloud_saves\ ← all GOG saves live here (not in the language folder)
└── SAVEGAME\
├── SGHEADER.DAT save slot names
└── U8SAVE.000–005 save archives
Note: GOG does not write saves into
ENGLISH\SAVEGAME\; all save files go tocloud_saves\SAVEGAME\.titan setupconfigures thenonfixedpath accordingly.
Pentagram save locations
| Platform | Settings folder | Save file |
|---|---|---|
| Windows | %APPDATA%\Pentagram\ |
%APPDATA%\Pentagram\u8-save\U8SAVE.000 |
| macOS | ~/Library/Application Support/Pentagram/ |
~/Library/Application Support/Pentagram/u8-save/U8SAVE.000 |
titan setup detects Pentagram saves on both Windows and macOS automatically.
Module → file reference
| TITAN module | Files needed | Location |
|---|---|---|
titan.flex |
Any .flx archive |
STATIC/ or SOUND/ |
titan.palette |
U8PAL.PAL |
STATIC/ |
titan.music |
.xmi files (extracted) or MUSIC.FLX directly |
STATIC/ or output of flex-extract |
titan.u8.shape |
.shp files (extracted) |
Output of flex-extract U8SHAPES.FLX |
titan.u8.sound |
SOUND.FLX directly or .raw files (extracted) |
STATIC/ or output of flex-extract |
titan.u8.map |
FIXED.DAT, TYPEFLAG.DAT, extracted shapes/ + globs/; U8SAVE.000 (optional) |
STATIC/, SAVEGAME/ |
titan.u8.typeflag |
TYPEFLAG.DAT |
STATIC/ |
titan.u8.credits |
ECREDITS.DAT, QUOTES.DAT |
STATIC/ |
titan.u8.save |
U8SAVE.000–.005 |
SAVEGAME/ or cloud_saves/SAVEGAME/ |
titan.u7.shape |
SHAPES.VGA, FACES.VGA, GUMPS.VGA, POINTERS.SHP |
STATIC/ |
titan.u7.palette |
PALETTES.FLX |
STATIC/ |
titan.u7.music |
ADLIBMUS.DAT, MT32MUS.DAT, ENDSCORE.XMI |
STATIC/ |
titan.u7.sound |
INTROSND.DAT, U7SPEECH.SPC |
STATIC/ |
titan.u7.map |
U7MAP, U7CHUNKS, U7IFIX*, SHAPES.VGA, TFA.DAT; gamedat/u7ireg* (optional) |
STATIC/, gamedat/ |
titan.u7.typeflag |
TFA.DAT, SHPDIMS.DAT, WGTVOL.DAT |
STATIC/ |
Requirements
- Python 3.9+
- NumPy ≥ 1.24
- Pillow ≥ 10.0
- Typer ≥ 0.15
- tomli ≥ 2.0 (Python < 3.11 only — for
titan.tomlsupport)
Credits
TITAN uses the following excellent open-source tools:
- LeRF (Jiacheng Li, Chang Chen, et al.)
- Learning Steerable Function for Efficient Image Resampling (CVPR 2023)
- LeRF: Learning Resampling Function for Adaptive and Efficient Image Interpolation (IEEE T-PAMI 2025)
Adaptive downscaling and geometric transforms (rotation/skew for birdseye view) are powered by LeRF's official LUTs and NumPy implementation.
Bundled fonts
The font-create wizard ships six TrueType fonts for Ultima script
systems. See FONTS_CREDITS.md for full attribution
and licensing details. One font (dosVga437-win.ttf by VileR / int10h.org)
is distributed under CC BY-SA 4.0; the
remaining five are fan recreations released under permissive terms.
License
MIT
Third-party components
TITAN also distributes a modified fold component derived from the
Pentagram project as part of dialogue tooling. That component is
licensed under GNU GPL v2 or later and is not covered by TITAN's
MIT license.
See THIRD_PARTY_NOTICES.md and
src/titan/third_party/fold/ for:
- attribution and license scope
- corresponding source mapping (exact upstream/branch commit)
- build entry points used to produce the distributed binary
- bundled GPL license text
Important note
Ultima (Copyright 1981–1999, Electronic Arts)
To use this fan-made tool you must own a legitimate copy of the original games (Ultima 8, Ultima 7). This project is not affiliated with Electronic Arts. All rights to Ultima remain with Electronic Arts.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file titan_ultima-0.6.3.tar.gz.
File metadata
- Download URL: titan_ultima-0.6.3.tar.gz
- Upload date:
- Size: 7.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b29b2b03d50fb826cd3a4ac626a5a93d3471280387404fc6407e4f9d7d36037d
|
|
| MD5 |
cc256aa97edb0c17839acbde647808df
|
|
| BLAKE2b-256 |
68d1ee593e55b850614a558340b8e3462f9c0c3f5bd0bb8d90130ca0894f3092
|
Provenance
The following attestation bundles were made for titan_ultima-0.6.3.tar.gz:
Publisher:
build-release.yml on theGreyWanderer-uc/tgwUltima
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
titan_ultima-0.6.3.tar.gz -
Subject digest:
b29b2b03d50fb826cd3a4ac626a5a93d3471280387404fc6407e4f9d7d36037d - Sigstore transparency entry: 1430010696
- Sigstore integration time:
-
Permalink:
theGreyWanderer-uc/tgwUltima@c01d0906b7c270700b82ddb284f0433225215f43 -
Branch / Tag:
refs/tags/titan/v0.6.3 - Owner: https://github.com/theGreyWanderer-uc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-release.yml@c01d0906b7c270700b82ddb284f0433225215f43 -
Trigger Event:
push
-
Statement type:
File details
Details for the file titan_ultima-0.6.3-py3-none-any.whl.
File metadata
- Download URL: titan_ultima-0.6.3-py3-none-any.whl
- Upload date:
- Size: 8.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36c1a6e9397e95e6f47135f0ecde6dc1e4eab3f2f649f698036fea4aac4bdd68
|
|
| MD5 |
513d7aaf244e02f939c097a5071ef188
|
|
| BLAKE2b-256 |
25b51b1fe7d1e30a87394bcdac2d72522934511e6770435df3e97fc4b4552921
|
Provenance
The following attestation bundles were made for titan_ultima-0.6.3-py3-none-any.whl:
Publisher:
build-release.yml on theGreyWanderer-uc/tgwUltima
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
titan_ultima-0.6.3-py3-none-any.whl -
Subject digest:
36c1a6e9397e95e6f47135f0ecde6dc1e4eab3f2f649f698036fea4aac4bdd68 - Sigstore transparency entry: 1430010703
- Sigstore integration time:
-
Permalink:
theGreyWanderer-uc/tgwUltima@c01d0906b7c270700b82ddb284f0433225215f43 -
Branch / Tag:
refs/tags/titan/v0.6.3 - Owner: https://github.com/theGreyWanderer-uc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
build-release.yml@c01d0906b7c270700b82ddb284f0433225215f43 -
Trigger Event:
push
-
Statement type: