Projects. Ideas. Edge.

Single post

Migrating an Oblivion Character to Oblivion Remastered

When I heard that there was no way to migrate saves from the original Oblivion, I was a bit disappointed. The real changes in Remastered were the graphics overhaul and running on Unreal Engine 5, with the same quests underneath. The original Oblivion game files are even used as a data source. I had spent hundreds of hours on my original character and didn’t really feel like starting from scratch.

That’s why I decided to build this script, with the help of agentic AI tools. Please note that this is highly experimental and definitely has a lot of limitations and bugs, but it is a start at migrating character builds from the original Oblivion.

Why a converter doesn’t exist

This is not a save-file converter, and it does not write or patch a Remastered .sav.

Original Oblivion saves are TES4 (TES4SAVEGAME). Remastered saves are Unreal Engine GVAS. There is no nested TES4 blob to transplant. Bethesda does not support official save transfer, and a byte-for-byte copy is not possible.

So the script takes a different path: read the original PC .ess, extract the character data that can be restored, and emit a Remastered console batch file (migrate.txt). You create a new Remastered character, then run exec migrate.txt in the in-game console.

Cyrodiil stays a mostly fresh Remastered world. The script restores character data onto whatever cell you are standing in.

What it actually restores

The generated batch applies things in this order: stats → inventory → spells → factions → map markers → quest stages → control / fast-travel unlock.

What it tries to bring over:

  • Level, attributes, skills, and health
  • Magicka and fatigue (with some auto-calc caveats)
  • Inventory deltas (additem / equipitem), including gold when it shows up as a save change
  • Spells (vanilla + official DLC FormIDs)
  • Faction ranks
  • Discovered world-map markers
  • Highest decoded quest stages
  • Tutorial / fast-travel unlock so you are not stuck in the sewers

What it does not restore:

  • World state (Kvatch, Oblivion Gates, NPC deaths, houses, horses, storage)
  • Position / cell (no teleport; coc to Imperial City Market District does not work in Remastered)
  • Face, race, class, birthsign, and name (those come from the new Remastered character)
  • Player-created spells and custom enchantments
  • Third-party mods (UOP, overhauls, etc. are skipped)
  • Time, fame/infamy, local-map fog of war

Quest stages are force-set with setstage. The journal can say you finished something while the world has not. Martin may not be where the quest log expects. --no-quests is often the more stable option if you mainly want the build and inventory.

How it works, briefly

OG .ess  →  parse character dump  →  migrate.txt  →  copy to Binaries\  →  in-game: exec migrate.txt

FormID high bytes are remapped from the original save’s plugin list onto Remastered plugins.txt. Plugins that do not exist in Remastered are listed as comments; their FormIDs are skipped instead of colliding with DLC slots.

PC only. Xbox, PlayStation, and Xbox 360 CON  container saves are not supported.

Highly experimental, back up first

This is unofficial, unfinished in spirit, and bugs are likely. Results can vary by save, load order, and Remastered patch.

Back up both original Oblivion .ess files and Oblivion Remastered character saves before you generate migrate.txt or run exec migrate.txt:

  • Original: Documents\My Games\Oblivion\Saves
  • Remastered: Documents\My Games\Oblivion Remastered\Saved\SaveGames

A few other gotchas:

  • Using the console disables achievements on that Remastered save
  • Running exec migrate.txt twice duplicates inventory
  • setstage can fire quest cinematics, freeze movement/menus, and abort the rest of the batch
  • Keep a Remastered save from before exec so you can retry with --no-quests

Not affiliated with Bethesda, ZeniMax, or Microsoft. Use at your own risk.

Building it with agentic AI

I built this as a Python stdlib tool (no pip packages) and used agentic AI tools as a pair programmer: planning the parser, the FormID remapping, the console export, and the known-issue list around Remastered’s exec behavior.

The interesting part was not “AI wrote a save converter.” It was working through why a converter is the wrong shape, then implementing the fallback that Remastered actually allows: a console batch applied onto a new character.

Human validation still mattered a lot here: binary save layout, plugin-index remapping, and in-game behavior after exec (especially quest scripts that freeze the player before enableplayercontrols runs).

Try it

The project is on GitHub: https://github.com/huhx0015/OblivionOG_to_Remastered_Character_Migration

From the repo folder:

python migrate.py migrate "C:\Users\You\Documents\My Games\Oblivion\Saves\Save 12.ess" --output migrate.txt

Copy migrate.txt into:

<Steam>\steamapps\common\Oblivion Remastered\OblivionRemastered\Binaries\

Start a new Remastered character, open the console, and run:

exec migrate.txt

exec only looks in OblivionRemastered\Binaries\. Putting the file next to the .exe in Binaries\Win64\ does nothing.

If you try it, back up your saves first, and treat it as a character-build transplant, not a continuation of the same Cyrodiil.

Write a Comment