Skip to content
Greenmote

Tool active

Greenmote

Turn placed grass into OpenMW groundcover, and fix groundcover that floats, sinks, sits on roads or water, or clips into rocks.

Stable
0.4.0 2026-09-30
Development
0.4.1-dev.0
Package
Program 6 platforms
License
MIT OR Apache-2.0

Overview

Morrowind places its grass, ferns, kelp and lilypads one static at a time, like any rock. OpenMW has a better home for them: plugins loaded with groundcover= are drawn as groundcover, in bulk, without collision, and thinned by the player’s density setting. Greenmote moves grass into that home and keeps it standing on the ground your load order actually has.

Two jobs, one load order

Convert and unclip both read the load order OpenMW reads, and both write plugins OpenMW loads as groundcover.

  1. source

    Your openmw.cfg

    The data folders, content files and groundcover= plugins OpenMW loads, found where OpenMW finds them.

  2. tool

    Greenmote

    Reads that load order the way OpenMW does: its statics, its terrain, its textures and its water.

  3. result

    OpenMW

    Grass drawn as groundcover, standing on the ground this load order has.

service

convert

Grass statics placed by your content files become groundcover.omwaddon; deleted_groundcover.omwaddon hides the originals.

service

unclip

A groundcover plugin is measured reference by reference; what floats, sinks, sits on a road or water, or clips into a rock is fixed or deleted.

How the pieces relate
  • Your openmw.cfg Greenmote
  • Greenmote groundcover= OpenMW
  • convert writes new plugins Greenmote
  • unclip rewrites a plugin Greenmote

Convert reads your load order, finds the grass statics every content file places in exterior cells, and writes two plugins: groundcover.omwaddon, which places that grass again as groundcover, and deleted_groundcover.omwaddon, which hides the originals. The meshes are copied beside them.

Unclip takes a groundcover plugin, such as a grass mod generated for somebody else’s landscape, and measures every reference in it against your terrain, water, roads and statics. Grass that floats is lowered, grass buried too deep is raised, tilts follow the slope, and grass on a road, under new water or inside a rock is moved or deleted. It reports first and writes only when asked, keeping the original beside the plugin.

greenmote convert --dry-run
greenmote unclip --plugin Rem_AI.esp
greenmote unclip --plugin Rem_AI.esp --write

Run greenmote with no arguments and both are in a window, with a Settings tab for greenmote.toml. The GUI speaks English, French, German, Russian, Spanish and Swedish.

Documentation#

  • Start here: a first conversion and a first unclip, in the GUI or on the command line.
  • Convert: what is matched, what is written, and how to enable it.
  • Unclip: what is measured, each action, and reading the report.
  • greenmote.toml and Command line: every setting and option.

Install

Program · 0.4.0

Download and runa program: one archive per platform, no installer
  1. Download the archive for your platform: Windows, macOS, Apple silicon, macOS, Intel, Linux, Android, PortMaster.
  2. Unzip it wherever you keep your tools. Nothing goes into the game's folders.
  3. Run greenmote, or greenmote.exe on Windows. From a terminal, greenmote --help lists what it can do.

Then the documentation takes it from there.

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
57ec3325-acb3-4307-9c0f-2031ab3354ef
Manifest
https://dreamweave-mp.github.io/greenmote/dreamweave/projects/57ec3325-acb3-4307-9c0f-2031ab3354ef.json

What is in the archive

  • greenmote-<platform>.zipone per platform
    • greenmotethe program; greenmote.exe on Windows

After installing

Convert writes groundcover.omwaddon, deleted_groundcover.omwaddon and Meshes/grass/ into your data-local folder. Enable them in openmw.cfg, or pass --auto-enable:

groundcover=groundcover.omwaddon
content=deleted_groundcover.omwaddon

Uninstalling

Remove the groundcover=groundcover.omwaddon and content=deleted_groundcover.omwaddon lines from openmw.cfg, then delete the two plugins and Meshes/grass/ from the output folder. Unclip keeps the plugin it first rewrote as <plugin>.greenmote-original; copy it back over the plugin to undo every unclip run.

Notes

Unzip the archive anywhere and run greenmote. With no arguments the Windows, macOS and Linux builds open the GUI; greenmote convert and greenmote unclip run from the command line. The Android and PortMaster builds are the command line only.

Greenmote finds your openmw.cfg the way OpenMW does. Start here walks through a first conversion and a first unclip.

  1. 0.4.0 stable 2026-09-30

    Unclip leaves references alone across terrain seams and caps how far it tilts them, convert keeps the newest plugin’s references, and the GUI closes the console Windows opens for it.

    Breaking changes

    • Greenmote is licensed MIT OR Apache-2.0, at your option, instead of GPL-3.0-only. 0.2.0 and 0.3.0 stay GPL-3.0-only.

    Added

    • The GUI window has Greenmote’s crescent-moon icon.
    • --max-tilt (and max_tilt in greenmote.toml) caps how far orient tilts a reference, 45 degrees by default; a value outside 0 to 90 is a usage error.
    • The unclip report states max_tilt beside the other tolerances.

    Changed

    • Unclip keeps a reference unchanged where the terrain under its mesh is a seam between landmasses, judged on the tilted base and on the grounded origin.
    • Convert skips Verdant Bitter Coast fern trees by default.
    • Unclip refuses Greenmote’s own convert output as a target.

    Fixed

    • Convert writes one CELL record per grid, so the newest plugin’s references win in game instead of the oldest.
    • Context plugins load with their headers, so inherited references resolve to their owning plugin instead of being dropped.
    • --output-plugin writes the plugin even when unclip changes nothing.
    • An [unclip] table that only sets max_tilt or max_sink_fraction is kept.
    • Unclip no longer stops on a static whose mesh cannot be loaded, and water-delete is a water-plane crossing test again.
    • A failed command prints its error as a message, and --help describes water-delete and static-delete as they behave.
    • The Unclip tab’s Open log button opens greenmote-unclip.log.
    • Starting the GUI from Explorer or a shortcut closes the console window Windows opens for it.
    greenmote-Windows-X64.zip 4.88 MB · Windows
    Verify · sha256 87e736027bc6…b13d06e1
    Release
    0.4.0 (stable)
    Size
    5120319 bytes
    SHA-256
    87e736027bc67962c10ff4a948d9ba0c36e8b688b8a767fff5354933b13d06e1
    Commit
    b29ab0e16711
    Sources
    1

    Check it yourself: sha256sum greenmote-Windows-X64.zip must print the digest above.

    greenmote-macOS-ARM64.zip 5.06 MB · macOS, Apple silicon
    Verify · sha256 f68349ee5ed4…7ffeff45
    Release
    0.4.0 (stable)
    Size
    5301679 bytes
    SHA-256
    f68349ee5ed4b7a449511b728d7227e03047c2caf66664dd235dc8ba7ffeff45
    Commit
    b29ab0e16711
    Sources
    1

    Check it yourself: sha256sum greenmote-macOS-ARM64.zip must print the digest above.

    greenmote-macOS-X64.zip 5.43 MB · macOS, Intel
    Verify · sha256 8bf7113b2776…34f9cf8e
    Release
    0.4.0 (stable)
    Size
    5692281 bytes
    SHA-256
    8bf7113b2776a4b4f8531a273985ae7617dc09a3f325926bfad25e9734f9cf8e
    Commit
    b29ab0e16711
    Sources
    1

    Check it yourself: sha256sum greenmote-macOS-X64.zip must print the digest above.

    greenmote-Linux-X64.zip 6.71 MB · Linux
    Verify · sha256 3cfde9efea40…01656bc1
    Release
    0.4.0 (stable)
    Size
    7032974 bytes
    SHA-256
    3cfde9efea402f5cbda6e6957d7ca662498cd050d62ad6d51085dc6901656bc1
    Commit
    b29ab0e16711
    Sources
    1

    Check it yourself: sha256sum greenmote-Linux-X64.zip must print the digest above.

    greenmote-Android-ARM64.zip 2.28 MB · Android
    Verify · sha256 8e38a3127c29…a0029b0f
    Release
    0.4.0 (stable)
    Size
    2393490 bytes
    SHA-256
    8e38a3127c29b34121cd87053ee096b49af0a1afca11317d43d00c89a0029b0f
    Commit
    b29ab0e16711
    Sources
    1

    Check it yourself: sha256sum greenmote-Android-ARM64.zip must print the digest above.

    greenmote-Portmaster-ARM64.zip 2.27 MB · PortMaster
    Verify · sha256 b527e6b19ce7…c24ccf8a
    Release
    0.4.0 (stable)
    Size
    2375528 bytes
    SHA-256
    b527e6b19ce77ac20bdefbddbc66903e5347c3290e8368a2b0931a0fc24ccf8a
    Commit
    b29ab0e16711
    Sources
    1

    Check it yourself: sha256sum greenmote-Portmaster-ARM64.zip must print the digest above.

  2. 0.3.0 stable 2026-09-27

    Unclip measures every reference against the real terrain and collision triangles of your load order, and only writes when asked.

    Breaking changes

    • Unclip is a dry run by default again: --write rewrites the plugin in place, keeping <plugin>.greenmote-original and <plugin>.bak, and --output-plugin writes the rewritten plugin elsewhere. --dry-run, --instances, --meshgenerator-ini, --origin-epsilon and the all and none actions are gone; --write-actions is now --actions, and the old name still works.
    • float_tolerance, max_sink, max_sink_fraction and sink replace origin_epsilon.

    Added

    • Every reference is measured directly: its mesh’s base against OpenMW’s triangle-split terrain, the texture OpenMW draws under it, the water plane, and the collision triangles of the statics around it. A reference inside a closed rock is recognised by ray parity.
    • Burial is judged against plant height: the limit is the larger of max_sink units and max_sink_fraction of the mesh.
    • A plugin outside every data folder brings its mod’s meshes folder into the VFS, so a downloaded grass mod can be checked before it is enabled.
    • References placed outside their own cell are deleted: OpenMW draws them only from far away.
    • --verbose writes one line per reference to greenmote-unclip.log; --structured prints the report as JSON; GREENMOTE_PROFILE=1 prints phase timings.
    • The Unclip tab lists every groundcover= plugin in openmw.cfg with a checkbox and fixes the checked ones.

    Changed

    • Every write is reloaded and checked against the plan, and unclip run again on its own output plans nothing.
    • Context plugins and occluder meshes load in parallel, and every reference is decided in parallel.
    • openmw-config 2.0, vfstool_lib 0.10 and rapier3d 0.36.

    Fixed

    • Reference rotations compose as OpenMW composes them; references rotated about more than one axis were measured with the order reversed.
    • A static moved or deleted by a later plugin no longer leaves a copy behind to clip against.
    • Dependencies updated past a compile-time security advisory.

    Migration

    Unclip no longer writes unless you pass --write. Replace --dry-run with nothing, and --write-actions with --actions. In greenmote.toml, remove [unclip] keys the report warns about; the Settings tab drops them when it saves.

    greenmote-Windows-X64.zip 4.81 MB · Windows
    Verify · sha256 a9b33d1ba06c…c37daa9d
    Release
    0.3.0 (stable)
    Size
    5046919 bytes
    SHA-256
    a9b33d1ba06c53586a70ef6432bf3321c44371f7c5657900d2b57914c37daa9d
    Commit
    d11f51e56bce
    Sources
    1

    Check it yourself: sha256sum greenmote-Windows-X64.zip must print the digest above.

    greenmote-macOS-ARM64.zip 5.00 MB · macOS, Apple silicon
    Verify · sha256 a40518987c5b…1e7486b0
    Release
    0.3.0 (stable)
    Size
    5241822 bytes
    SHA-256
    a40518987c5b1070c1b9bf0de0cfabcc4eda32e7610a6e6b2d3c15381e7486b0
    Commit
    d11f51e56bce
    Sources
    1

    Check it yourself: sha256sum greenmote-macOS-ARM64.zip must print the digest above.

    greenmote-macOS-X64.zip 5.37 MB · macOS, Intel
    Verify · sha256 348600a9ae54…78882a86
    Release
    0.3.0 (stable)
    Size
    5629557 bytes
    SHA-256
    348600a9ae54e5c9d5af78d171a971951b485cfdfc4d4f225e89c8e178882a86
    Commit
    d11f51e56bce
    Sources
    1

    Check it yourself: sha256sum greenmote-macOS-X64.zip must print the digest above.

    greenmote-Linux-X64.zip 6.64 MB · Linux
    Verify · sha256 0bdcbab65c38…1827d710
    Release
    0.3.0 (stable)
    Size
    6958100 bytes
    SHA-256
    0bdcbab65c3803bff0b3baf5532843f436686817fab2610bbec90dd01827d710
    Commit
    d11f51e56bce
    Sources
    1

    Check it yourself: sha256sum greenmote-Linux-X64.zip must print the digest above.

    greenmote-Android-ARM64.zip 2.29 MB · Android
    Verify · sha256 c6d2a6bc603d…cccf8501
    Release
    0.3.0 (stable)
    Size
    2401004 bytes
    SHA-256
    c6d2a6bc603dfd4aae894630026420353906171a7073e2a2975b9859cccf8501
    Commit
    d11f51e56bce
    Sources
    1

    Check it yourself: sha256sum greenmote-Android-ARM64.zip must print the digest above.

    greenmote-Portmaster-ARM64.zip 2.29 MB · PortMaster
    Verify · sha256 d8ccafbacbeb…439f09fc
    Release
    0.3.0 (stable)
    Size
    2396545 bytes
    SHA-256
    d8ccafbacbeb71eaa32a74b31a52825453a441930880ef85c86a8e54439f09fc
    Commit
    d11f51e56bce
    Sources
    1

    Check it yourself: sha256sum greenmote-Portmaster-ARM64.zip must print the digest above.

  3. 0.2.0 stable 2026-06-03

    Unclip deletes grass on roads and grass that ends up under water, the GUI has tabs and runs several plugins in turn, and Greenmote is GPL-3.0-only.

    Added

    • The water-delete and road-delete unclip actions, with configurable road texture patterns.
    • Scriptless activators are converted like statics.
    • Convert, Unclip and Settings tabs in the GUI; the Unclip tab runs a list of plugins one after another, can be cancelled, and can write each to its own output plugin.

    Changed

    • Unclip writes by default; --dry-run inspects without writing.
    • Tree-like statics no longer count as occluders by default.
    • Unknown greenmote.toml keys are ignored instead of rejected, and run-time choices are no longer saved to it.
    • Greenmote is licensed GPL-3.0-only; 0.1.0 carried no license.

    Fixed

    • Static collision follows RootCollisionNode, including hidden ones.
    • Without a discoverable openmw.cfg, the default user config is used without asking.
    • Unclip is much faster on large plugins.
    greenmote-Windows-X64.zip 4.64 MB · Windows
    Verify · sha256 940c610f0f00…3ac65d31
    Release
    0.2.0 (stable)
    Size
    4868144 bytes
    SHA-256
    940c610f0f00a2c301d3386413876728600a1831c7063308e7d9c77f3ac65d31
    Commit
    aea7a6af38f9
    Sources
    1

    Check it yourself: sha256sum greenmote-Windows-X64.zip must print the digest above.

    greenmote-macOS-ARM64.zip 4.97 MB · macOS, Apple silicon
    Verify · sha256 cea0e6fb4197…47c55be5
    Release
    0.2.0 (stable)
    Size
    5214171 bytes
    SHA-256
    cea0e6fb41976e94d136c8a1629ee63323b827470ea2c7038791166847c55be5
    Commit
    aea7a6af38f9
    Sources
    1

    Check it yourself: sha256sum greenmote-macOS-ARM64.zip must print the digest above.

    greenmote-macOS-X64.zip 5.25 MB · macOS, Intel
    Verify · sha256 72eec0871591…ac39402b
    Release
    0.2.0 (stable)
    Size
    5505999 bytes
    SHA-256
    72eec08715918a937b5103465aa390ae8bec7f1ce9307c85624c133aac39402b
    Commit
    aea7a6af38f9
    Sources
    1

    Check it yourself: sha256sum greenmote-macOS-X64.zip must print the digest above.

    greenmote-Linux-X64.zip 6.55 MB · Linux
    Verify · sha256 6333cee729c2…4a6145e8
    Release
    0.2.0 (stable)
    Size
    6868416 bytes
    SHA-256
    6333cee729c26495f96a968c1372b422287b14ecc6ddc5ca7f90a2b94a6145e8
    Commit
    aea7a6af38f9
    Sources
    1

    Check it yourself: sha256sum greenmote-Linux-X64.zip must print the digest above.

    greenmote-Android-ARM64.zip 2.50 MB · Android
    Verify · sha256 4cc1f9c8a45c…0ed89850
    Release
    0.2.0 (stable)
    Size
    2616570 bytes
    SHA-256
    4cc1f9c8a45c378da8d9e50e96e49ddaed97ebf583f1f47e783798a30ed89850
    Commit
    aea7a6af38f9
    Sources
    1

    Check it yourself: sha256sum greenmote-Android-ARM64.zip must print the digest above.

    greenmote-Portmaster-ARM64.zip 2.47 MB · PortMaster
    Verify · sha256 e2ec62860afe…f567cb79
    Release
    0.2.0 (stable)
    Size
    2585994 bytes
    SHA-256
    e2ec62860afea43163a722345e19d8aff0c3435a8ecca1b5c0d74fdef567cb79
    Commit
    aea7a6af38f9
    Sources
    1

    Check it yourself: sha256sum greenmote-Portmaster-ARM64.zip must print the digest above.

Credits

  • MaintainerDreamWeave
  • tes3, the plugin and NIF library Greenmote reads and writes withGreatness7
  • The groundcover, terrain, collision and rotation rules Greenmote measures againstOpenMW