No description
  • Java 99.7%
  • GLSL 0.3%
Find a file
TysonTheEmber f2eab53b2b
Some checks failed
Build / Build all loaders (push) Failing after 2m46s
Publish / Create Forgejo release (push) Successful in 4s
Publish / Publish Fabric 1.20.1 (push) Successful in 9m15s
Publish / Publish Fabric 1.21.1 (push) Successful in 8m57s
Publish / Publish Fabric 26.1 (push) Successful in 8m47s
Publish / Publish NeoForge 1.21.1 (push) Successful in 10m55s
Publish / Publish NeoForge 26.1 (push) Successful in 4m0s
Publish / Publish Forge 1.20.1 (push) Successful in 4m4s
Publish / Announce release in Discord (push) Successful in 3s
chore: initial commit
2026-07-05 15:50:16 -06:00
.forgejo/workflows chore: initial commit 2026-07-05 15:50:16 -06:00
.run chore: initial commit 2026-07-05 15:50:16 -06:00
common-1.20.1 chore: initial commit 2026-07-05 15:50:16 -06:00
common-1.21.1 chore: initial commit 2026-07-05 15:50:16 -06:00
common-26.1 chore: initial commit 2026-07-05 15:50:16 -06:00
fabric-1.20.1 chore: initial commit 2026-07-05 15:50:16 -06:00
fabric-1.21.1 chore: initial commit 2026-07-05 15:50:16 -06:00
fabric-26.1 chore: initial commit 2026-07-05 15:50:16 -06:00
forge-1.20.1 chore: initial commit 2026-07-05 15:50:16 -06:00
gradle/wrapper chore: initial commit 2026-07-05 15:50:16 -06:00
neoforge-1.21.1 chore: initial commit 2026-07-05 15:50:16 -06:00
neoforge-26.1 chore: initial commit 2026-07-05 15:50:16 -06:00
.gitattributes chore: initial commit 2026-07-05 15:50:16 -06:00
.gitignore chore: initial commit 2026-07-05 15:50:16 -06:00
build.gradle chore: initial commit 2026-07-05 15:50:16 -06:00
CHANGELOG.md chore: initial commit 2026-07-05 15:50:16 -06:00
gradle.properties chore: initial commit 2026-07-05 15:50:16 -06:00
gradlew chore: initial commit 2026-07-05 15:50:16 -06:00
gradlew.bat chore: initial commit 2026-07-05 15:50:16 -06:00
LICENSE chore: initial commit 2026-07-05 15:50:16 -06:00
lumiera.png chore: initial commit 2026-07-05 15:50:16 -06:00
README.md chore: initial commit 2026-07-05 15:50:16 -06:00
settings.gradle chore: initial commit 2026-07-05 15:50:16 -06:00

Lumiera

Lumiera is a camera and cutscene tool for Minecraft. You build camera shots from keyframes on an in-game timeline, hang timed events like fades, sound, and screen shake off the path, and play the whole thing back from a key, a command, or a datapack.

It runs on Forge, Fabric, and NeoForge across three Minecraft versions, so a shot you build in one place works the same everywhere the mod is installed.

What you can do

  • Drop camera keyframes as you fly around, then scrub the timeline and preview the result live.
  • Choose how the camera moves between keyframes: straight lines, Catmull-Rom, Bezier with handles, cosine, or a stepped hold. Centripetal Catmull-Rom is the safe default; it won't loop on sharp turns.
  • Set easing per segment. Plain ease in/out is there, along with quad, cubic, sine, expo, back, elastic, and bounce, all solved as real cubic-bezier curves.
  • Animate field of view and roll per keyframe, bank into turns, or lock the aim onto an entity or a fixed point.
  • Keep a per-world library of your paths and cutscenes to rename, duplicate, or delete.

Cutscene cues

A path can carry events that fire as it plays:

  • Fades, colour-ramp veils, and letterbox bars
  • On-screen text, action bar messages, and styled captions
  • Sound and particle cues, placed in the world or pinned to the camera
  • Screen shake with adjustable intensity, frequency, and decay
  • Fog, vignette, and a smooth time-of-day ramp for mood
  • Look-at, orbit, and offset moves layered on top of the path
  • Expression-driven field of view, rotation, and position for handheld drift
  • HUD hide, time-of-day lock, and a command run at any point on the timeline

On 1.21.1 and newer you can also stage actors: entities, players, items, blocks, armor stands, or particles. Each one gets its own pose keyframes and a track of timed actions like swinging, jumping, attacking, breaking a block, dying, or playing a sound.

Building a shot in-game

Open the timeline with G. Fly your camera into place and press = to drop a keyframe. Add a few more, scrub the timeline, and press ] to preview. Every key is listed under Controls and can be rebound:

  • G timeline, . edit mode, , view mode
  • = add keyframe, Delete remove, K duplicate
  • [ play, ] preview, End reset, M library

Commands

Servers and command blocks get the same reach through /lumiera:

  • /lumiera play <id> [speed] [targets] [center], where center is an entity or x y z
  • /lumiera stop [target] and /lumiera reset [target]
  • /lumiera list [saved|datapack] and /lumiera info <id>
  • /lumiera delete <id> and /lumiera rename <id> <newId>
  • /lumiera interpolation, /lumiera center, /lumiera reload

/lumiera cutscene play <id> [targets] plays a datapack cutscene, with stop, pause, resume, skip, and seek <tick> alongside it.

Datapacks

Ship cutscenes with a map by dropping JSON under data/<namespace>/cutscenes/:

{
  "schema": 1,
  "id": "intro",
  "duration_ticks": 40,
  "fov": { "mode": "keyframed", "default": 90.0 },
  "keyframes": [
    { "time": 0.0, "pos": { "x": 0, "y": 65, "z": 0 }, "rot": { "yaw": 0, "pitch": 0 }, "fov": 90.0, "path_type": "linear" },
    { "time": 2.0, "pos": { "x": 8, "y": 67, "z": 4 }, "rot": { "yaw": -30, "pitch": 10 }, "fov": 70.0, "path_type": "smooth" }
  ],
  "camera_position_mode": "absolute"
}

Camera paths under data/<namespace>/camera_paths/ take an events list for the cues above. Times can be given as tick, time, or at in seconds, and event types accept namespaced ids like lumiera:shake_camera.

Supported versions

  • Minecraft 1.20.1 on Forge and Fabric
  • Minecraft 1.21.1 on NeoForge and Fabric
  • Minecraft 26.1 on NeoForge and Fabric

Actor staging is 1.21.1 and newer. The fog cue applies on NeoForge 1.21.1 for now; elsewhere it loads but has no effect. On-screen text and captions use EmbersTextAPI on the client.

For modders

Lumiera exposes a camera modifier API so other mods can drive the camera without fighting over it. Modifiers stack by priority on a separate background layer, so one mod's cutscene won't stomp another's. A small runtime API starts and stops cutscenes by id.

License

Lumiera is released under Ember's Modding Licence (EML) v1.2. See LICENSE or https://tysontheember.dev/modding-licence/. In short: use it and feature it freely, but don't rehost the files or fork it without permission, and ask before anything commercial.