doom-eternal 1.4.0

Rust CLI for the Xylex DOOM Eternal texture and install workflow
Documentation
# Xylex Slayer Logo Skin


current version: `1.4.0`
Rust-first workspace for turning the Slayer RTX pack into a jet-black Xylex-branded DOOM Eternal mod.

The main entrypoint is the `doom-eternal` Rust CLI:

```powershell
cargo run -p doom-eternal -- status
```

If you want the UI, use the Tauri desktop studio in [`desktop/`](./desktop/README.md).

## What This Repo Does


- imports fresh SAMUEL texture exports into the repo editable tree
- can pack those exports into chunked mirror zips for remote hosting
- applies the Xylex logo placement map and jet-black finish pass
- rebuilds an installable mod zip
- installs the mod into DOOM Eternal through the native Rust injector flow
- repairs the base game or cleans modded state back to vanilla when you need to reset the install
- stages a publishable `base/` folder for `idStudio`

## Current Defaults


The repo currently resolves to:

- source pack: `./rtx-slayer`
- source set: `set52`
- working target set: `set16`
- editable root: `./build/rtx-editable-source-set16`
- output pack root: `./dist/xylex-rtx-slayer-pack`
- output zip: `./dist/xylex-rtx-slayer-pack.zip`
- game root on this machine: `C:\Program Files (x86)\Steam\steamapps\common\DOOMEternal`
- expected SAMUEL export roots on this machine: `C:\Users\floris\Downloads\exports` and `C:\Users\floris\Downloads\modelExports`

Use `cargo run -p doom-eternal -- examples` when you want the fully expanded local paths for this checkout.

## How To


### 1. Check What The CLI Sees


```powershell
cargo run -p doom-eternal -- status
cargo run -p doom-eternal -- examples
```

`status` shows the detected source pack, source set, target set, editable root, output zip, converter path, game root, installed mod versions, and `idStudio` root.

`examples` prints copy/paste PowerShell commands with all local paths already filled in.

### 2. Get Fresh Exports From SAMUEL


Download and launch SAMUEL through the Rust CLI:

```powershell
cargo run -p doom-eternal -- tools download samuel
cargo run -p doom-eternal -- tools launch samuel
```

Export textures into:

- `C:\Users\floris\Downloads\exports`
- `C:\Users\floris\Downloads\modelExports`

Then import them:

```powershell
cargo run -p doom-eternal -- import `
  --samuel-export-root "C:/Users/floris/Downloads/exports" `
  --model-export-root "C:/Users/floris/Downloads/modelExports"
```

You can omit both flags if you want the CLI to auto-detect those default Downloads folders.

### 2b. Pack A Hosted Mirror From The Current Exports

```powershell
cargo run -p doom-eternal -- mirror pack `
  --samuel-export-root "C:/Users/floris/Downloads/exports" `
  --model-export-root "C:/Users/floris/Downloads/modelExports" `
  --output-root "./dist/samuel-export-mirror" `
  --chunk-size-mb 24
```

That writes:

- `./dist/samuel-export-mirror/mirror-manifest.json`
- `./dist/samuel-export-mirror/mirror-part-0001.zip`
- additional `mirror-part-*.zip` chunks as needed

Host those files on any static mirror. Later runs can hydrate from that URL instead of local Downloads exports.

### 3. Build The Mod


Craft from the current repo defaults:

```powershell
cargo run -p doom-eternal -- craft
```

The current craft path reuses cached target outputs when nothing relevant changed, so small placement tweaks do not force a full rebuild every time.

### 3b. Build A Blank Black Variant


Use the separate blank config when you want a clean black set with no Xylex decals and no leftover RTX badge or helmet sigil:

```powershell
cargo run -p doom-eternal -- craft `
  --placement-config "./config/rtx-pack-blank-black-placements.json" `
  --output-mod-root "./dist/xylex-blank-black-pack" `
  --zip-output "./dist/xylex-blank-black-pack.zip"
```

That writes the blank variant to:

- `./dist/xylex-blank-black-pack`
- `./dist/xylex-blank-black-pack.zip`

### 4. Fast Path: Import, Build, And Install In One Run


```powershell
cargo run -p doom-eternal -- run `
  --mirror-url "https://example.com/doom-mirror" `
  --game-root "C:/Program Files (x86)/Steam/steamapps/common/DOOMEternal" `
  --install `
  --install-tools
```

That does:

1. import fresh exports
2. or download the hosted mirror chunks into the local cache when `--mirror-url` is used
3. craft the pack
4. install the zip into the game
5. download injector tooling if needed
6. run the injector worker chain from Rust

### 5. Install A Built Zip Manually

```powershell
cargo run -p doom-eternal -- install `
  --mod-zip "./dist/xylex-rtx-slayer-pack.zip" `
  --game-root "C:/Program Files (x86)/Steam/steamapps/common/DOOMEternal" `
  --install-tools
```

This writes repo-local backup manifests under `./build/game-mod-backups/`.

If you want the CLI to show what is currently enabled in `Mods/` and let you choose from the built zips under `dist/`, use the interactive picker:

```powershell
cargo run -p doom-eternal -- install `
  --picker `
  --game-root "C:/Program Files (x86)/Steam/steamapps/common/DOOMEternal" `
  --install-tools
```

The picker:

- prints the currently enabled mod zip entries from `DOOMEternal/Mods`
- reads `name` and `version` from each candidate zip's `EternalMod.json`
- records installed metadata in `DOOMEternal/Mods/.xylex-mods.json`

### 6. Publish Or Package Through idStudio


Stage the current crafted output into a normal `idStudio` `base/` folder:

```powershell
cargo run -p doom-eternal -- stage-idstudio
```

On this machine that stages into:

- `C:\Users\floris\Documents\id Software\idStudio\xylex-rtx-slayer-pack\base`

Then:

1. open `idStudio`
2. package from that staged `base/` folder
3. publish through `My Creations`

### 7. Restore The Previous Install


```powershell
cargo run -p doom-eternal -- restore
```

Or restore a specific backup manifest:

```powershell
cargo run -p doom-eternal -- restore `
  --manifest "./build/game-mod-backups/<timestamp>/backup-manifest.json"
```

## Desktop Studio

The desktop app is now a read-only companion shell. The CLI is the native source of truth:

- view the native CLI entry points
- copy the command structure mentally into your terminal workflow
- keep the desktop shell out of the real workflow path

If you want the pure command-line path, stay in `cargo run -p doom-eternal -- ...` and skip the desktop shell entirely.

```powershell
cd desktop
pnpm tauri:dev
```

Use it when you want to:

- move logos visually
- reload the preview texture
- run import, craft, install, and restore from one surface
- inspect the resolved repo paths and tool state

If the preview is blank, the usual cause is that there is no editable PNG yet for the current target. Run `import` or `craft` once first so the preview has something real to load.

More detail lives in [`desktop/README.md`](./desktop/README.md).

## Useful Commands


```powershell
cargo run -p doom-eternal -- status
cargo run -p doom-eternal -- examples
cargo run -p doom-eternal -- tools download samuel
cargo run -p doom-eternal -- tools download injector
cargo run -p doom-eternal -- import
cargo run -p doom-eternal -- mirror pack
cargo run -p doom-eternal -- mirror fetch --mirror-url "https://example.com/doom-mirror"
cargo run -p doom-eternal -- craft
cargo run -p doom-eternal -- install --install-tools
cargo run -p doom-eternal -- install --picker --install-tools
cargo run -p doom-eternal -- stage-idstudio
cargo run -p doom-eternal -- restore
cargo run -p doom-eternal -- repair
cargo run -p doom-eternal -- clean
```

## Repo Layout


- `crates/doom-eternal/` owns the Rust CLI and workflow logic
- `config/rtx-pack-logo-placements.json` owns the placement map and target routing
- `config/rtx-pack-blank-black-placements.json` owns the no-logo black variant
- `assets/source/logos/` stores the logo source PNGs
- `rtx-slayer/` is the current source pack
- `build/` holds editable textures, tool cache, staged runtime files, and backups
- `dist/` holds the rebuilt mod output and final zip
- `desktop/` is the Tauri placement editor and workflow UI

## Related Docs


- [`docs/prefilled-command-examples.md`]./docs/prefilled-command-examples.md
- [`docs/rtx-pack-automation.md`]./docs/rtx-pack-automation.md
- [`docs/doom-eternal-texture-workflow.md`]./docs/doom-eternal-texture-workflow.md
- [`desktop/README.md`]./desktop/README.md