MC Toolkit

Guides / Commands & Data

Camera cutscenes without a mod: keyframes, interpolation and spectator tricks

Vanilla moves a camera one way — a ticking teleport function — and the timeline registry sets the mood around it. What each is good for, and the smoothing that stops it looking robotic.

There is no camera object in vanilla, so a cutscene is an illusion built from teleports, with a timeline to change the world around it.

Method 1: teleport the player every tick

The old, universal way. Put the player in spectator, then move them along a path:

gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0

one tp per tick from a function chain. It works on every version and needs nothing special. The problems are all about smoothness:

  • 20 keyframes per second. A ten-second shot is 200 tp lines.
  • Linear steps look mechanical. Real camera moves ease in and out.
  • Rotation wraps badly. Going from yaw 170 to -170 is a 20-degree turn, but naive interpolation spins 340 degrees the wrong way. Normalise the angle difference into the range -180…180 before stepping.

Generating those lines is what a keyframe tool is for — you place a handful of positions and it emits the per-tick function with easing applied.

Easing

The difference between amateur and watchable is the interpolation curve. Between two keyframes, with t from 0 to 1:

linear      t
ease-in-out t < 0.5 ? 2t²  :  1 − 2(1−t)²
smoothstep  t² × (3 − 2t)

smoothstep is the safe default. Apply it to position and rotation together or the camera arrives before it finishes turning.

Method 2: timelines, for everything except the camera

Recent versions added a timeline registry, and it is tempting to read it as a camera track:

data/<namespace>/timeline/intro.json

It is not one. A timeline runs against a world clock and keyframes environment attributes — sky and fog colour, ambient sound and music, light — with native interpolation. It cannot move a player, so the camera itself is still method 1. What a timeline does well is the mood of a cutscene: fade the sky, shift the fog and swap the music in step with the teleports, without a per-tick command for each.

The cost is that it only exists on recent versions, so a map targeting older clients has to fake the mood with /time and /weather.

Keeping the player put

The teleport path fights two things:

  • Player input. Spectator lets the player fly away mid-shot. Re-teleporting every tick overrides it, which is one reason the brute-force method persists.
  • Chunk loading. A camera flying somewhere unloaded shows void. /forceload the path before the shot and remove it after.

Hiding the HUD

Spectator mode and F1 get you most of the way. For a clean frame, a resource pack that blanks the HUD sprites removes the crosshair and hotbar without the player pressing anything — see the HUD guide.

Place keyframes on a path and export the per-tick function, and build the timeline that sets the scene around it, with the Cutscene & Timeline Builders.

Cutscene & Timeline Builders →

More guides

Browse all →