Tool Morrowind active
S3LightFixes
Generate a plugin that retunes every light in your OpenMW load order: color, radius, duration and flicker, from one command.
"org.dreamweave.s3lightfixes" = "1.1.0"- Stable
- 1.1.0 2026-10-23
- Package
- Jess package
- License
- MIT
Overview
S3LightFixes reads every plugin in your OpenMW load order and writes one more:
S3LightFixes.omwaddon, a fixed copy of every light record it found. Firelight turns softer and
reaches further, colored lights keep their color, flicker stops, negative lights go dark, and
carried lights burn longer. Enable it last, and every light in the game follows the same rules,
whichever mod it came from.
The program is what jess fetches; the plugin is not. It is built from your load order, on your machine, and has to be built again when your mods change.
One run, one plugin
S3LightFixes reads the lights and interior cells of every plugin in your load order and writes the fixed versions into one plugin that loads after them.
-
source
openmw.cfg
Your load order: every content= file, found through the data= directories.
-
tool
s3lightfixes
Takes the last version of each light record, recolors it, resizes its radius, stretches its duration and strips its flicker.
-
result
S3LightFixes.omwaddon
Every light, fixed, plus the interior cells you asked to relight. Enable it last.
How the pieces relate
- openmw.cfg s3lightfixes
- s3lightfixes S3LightFixes.omwaddon
- lightconfig.toml settings s3lightfixes
- s3lightfixes writes lightconfig.log
jess workspace run --trusted s3lightfixes
That is a whole run: it finds your openmw.cfg, reads the lights, writes the plugin to your
data-local folder, or the one you ran it in, and prints what it changed. Morrowind's torch, for one:
LIGH "torch" from "Morrowind.esm": color [245, 140, 40, 0] -> [140, 74, 46, 0], radius 256 -> 307, duration 210 -> 525, flags LightFlags(DYNAMIC | CAN_CARRY | FIRE | OFF_BY_DEFAULT | FLICKER_SLOW) -> LightFlags(DYNAMIC | CAN_CARRY | FIRE | OFF_BY_DEFAULT)
Everything it does is a setting:
- Multipliers: hue, saturation, brightness and radius for firelight and for colored light,
and one for duration.
- Overrides: a color, radius, duration or flags of your own for any light, and ambient light,
sunlight and fog for any interior, chosen by regular expression.
- Exclusions: lights, cells and whole plugins to leave alone.
- Enabling:
--auto-enableadds the plugin to youropenmw.cfg, after backing the file up.
It descends from vtastek's Lightfixes.pl and wazabear's Waza-lightfixes, which did the same through
tes3cmd. S3LightFixes is a Jess package, org.dreamweave.s3lightfixes, written in Luau: it runs
wherever jess does, with nothing else to install.
Documentation§
- Start here: get it, generate the plugin, enable it, and read what it
changed.
- What a run changes: the arithmetic applied to every light.
- Overrides and exclusions: one light, one cell, or none at all.
- Command line and lightconfig.toml: every option
and setting.
These pages describe the default branch, which the development build carries. The Rust program,
0.5.0 and its downloads for each platform, lives on the rust branch.
Install
Jess package · 1.1.0
DreamWeave clientsCHIMERA and other tools that read the manifest
Give the tool this page's address, or the manifest directly. It finds the release for its channel, checks compatibility and dependencies, downloads from any listed source and refuses bytes whose SHA-256 does not match.
- Project id
- 55e873c9-1ddc-4b13-b59a-0eb790bb2565
- Manifest
- https://dreamweave-mp.github.io/S3LightFixes/dreamweave/projects/55e873c9-1ddc-4b13-b59a-0eb790bb2565.json
What is in the archive
- s3lightfixes.zip
- the mod's filesone data directory
- s3lightfixes-dwmod.tomlthe project's mod.toml
- dreamweave.release.jsonwhat this archive is, for tools
After installing
It reads your load order from openmw.cfg and writes S3LightFixes.omwaddon; enable that plugin
last in your load order, and run it again whenever your mods change.
Notes
S3LightFixes runs through jess. In a workspace that names
it under [dev-dependencies], jess workspace sync fetches it and
jess workspace run --trusted s3lightfixes runs it. Start here walks
through a first run.
Releases
-
1.1.0 stable
S3LightFixes finds OpenMW's own configuration when none is named, as the original does.
Added
- With neither
--confignor OPENMW_CONFIG, the openmw.cfg in the folder OpenMW keeps its own in on this platform: Documents\My Games\OpenMW on Windows, wherever Documents was moved, Library/Preferences/openmw on macOS, and the XDG config folder elsewhere. Its?userconfig?and?userdata?are OpenMW's own folders. Needs jess 0.2.1 or later.
org.dreamweave.s3lightfixes-1.1.0.jpkVerify · sha256 a1d41dac5ffc…ae82461b0
- Release
- 1.1.0 (stable)
- Size
- 74413 bytes
- SHA-256
- a1d41dac5ffca9fb0192e64e2faaaccf6576e78a7a8862475b1668eae82461b0
- Commit
- 1a608873d150
- Package
org.dreamweave.s3lightfixes- Content digest
- 4bdabef4b5b7888ff531d172cf54a0a873bc542d16039e2c62c0bef00696b3e9
- Sources
- 1
Check it yourself:
sha256sum org.dreamweave.s3lightfixes-1.1.0.jpkmust print the digest above. - With neither
-
1.0.0 stable
S3LightFixes is a Jess package, written in Luau; the Rust program continues on the rust branch at 0.5.0.
Breaking changes
- The tool is the Jess package
org.dreamweave.s3lightfixes, run through jess rather than as a downloaded binary, so the per-platform downloads, the PortMaster build and the AUR package end with 0.5.0. The Rust program stays on its GitHub releases and this repository'srustbranch, and is no longer developed on main.
org.dreamweave.s3lightfixes-1.0.0.jpkVerify · sha256 daa4dfe1fc0c…663fd33dd
- Release
- 1.0.0 (stable)
- Size
- 73985 bytes
- SHA-256
- daa4dfe1fc0cb5191f66b10f8a07dd6d9c6b61c1deb3488386ddecc663fd33dd
- Commit
- 128f85d19ff3
- Package
org.dreamweave.s3lightfixes- Content digest
- f0c8c2a9b5ee74a6525883b4f38cf0098ac98d994e29e88abd2083dae75d598f
- Sources
- 1
Check it yourself:
sha256sum org.dreamweave.s3lightfixes-1.0.0.jpkmust print the digest above. - The tool is the Jess package
-
0.5.0 stable unreleased
A cleaned-up command line, runs that check or preview without writing anything, a log of every change, RGB colors in overrides, and the MIT license.
Breaking changes
-Vis--version, and--colored-valueno longer has a short form.-i,--infois gone: use--version.-l,--write-logandsave_log, which wrote the whole plugin as text, are gone: every run writeslightconfig.loginstead.- Light flags in overrides are spelled as in the Construction Set,
FLICKER_SLOWandPULSE_SLOW;FLICKERSLOWandPULSESLOWare errors. --ambientcolors on the command line arered,greenandblue, 0 to 255, nothue,saturationandvalue.lightconfig.tomlstill reads the old form.--openmw-cfgtakes a folder holdingopenmw.cfg, or a file named exactlyopenmw.cfg, and stops the run with exit code 127 on anything else.
Added
--dry-runreads everything and prints every change without writing a file.--validate-configcheckslightconfig.toml, the options and every pattern, and stops. It fails on a key inlightconfig.tomlit does not know, which a run warns about and ignores.dry_runandvalidate_configinlightconfig.toml.red,greenandblueas a fixed color in light overrides, andred_mult,green_multandblue_mult, applied last.flagin light overrides takes any of the nine light flags, or a list of them, so an override can keepCAN_CARRY.--disable-negative-lightsanddisable_negative_lights: negative lights can be kept.lightconfig.log: the config, output and counts of a run, and one line per changed record. Every run also prints it.--auto-enablebacks upopenmw.cfgtoopenmw.cfg.s3lightfixes.bakbefore editing it, and edits nothing if the backup fails.--generate-completionfor bash, elvish, fish, PowerShell and zsh, and--generate-manpage.- Android and PortMaster archives.
- A Rust library,
s3lightfixes, with the settings, overrides and light arithmetic the program uses.
Changed
- Licensed MIT, instead of GPL-3.0-or-later.
openmw.cfgis found as OpenMW finds its root config:OPENMW_CONFIG,OPENMW_CONFIG_DIR, beside the program, the Linux global config, then the user's.- The Linux builds need glibc 2.34 or newer, down from 2.39.
- Every archive holds
s3lightfixes,s3lightfixes-README.md,s3lightfixes-LICENSEand a Sigstore bundle. - openmw-config 1.1, and updated dependencies.
Fixed
- The user
openmw.cfgis read when no other is found, on Windows and macOS too. - Exclusions and light and ambient overrides match ids and plugin names in any case. An override pattern with a capital letter matched nothing.
- Infinite lights stay infinite, unless an override gives them a fixed duration.
- A plugin named
S3LightFixesis never read as input, whatever its extension. - An unreadable
lightconfig.tomlexits with status 1. On Linux and macOS it exited 0. - Messages are printed when no dialog can be shown, such as on Linux without zenity, kdialog or yad.
- Saving rewrites
lightconfig.tomlunder the name it was found with, instead of adding a second file on a case-sensitive system. - A dry run piped into
headno longer ends in an error.
Migration
Most runs need no change. Scripts and launchers that pass options do:
-Vis now--version, so give--colored-valuein full; use--versionfor-i; drop-l, since every run writeslightconfig.log. Spell light flagsFLICKER_SLOWandPULSE_SLOW, and give--ambientcolors asred,greenandblue.--openmw-cfgneeds a folder, or a file named exactlyopenmw.cfg. Then runs3lightfixes --validate-config: it sayssave_logcan be deleted fromlightconfig.toml, and fails on any other key it does not read.
Credits
- MaintainerDreamWeave
- Lightfixes.pl, the tes3cmd script this all descends fromvtastek
- Waza-lightfixes, the program S3LightFixes succeedswazabear
- tes3, the Rust library that reads and writes the pluginsGreatness7
- Infinite lights that stay infiniteArrean