================================================================================
timelapseMap
================================================================================
render a Doom map being drawn, as an mp4 timelapse
================================================================================
USAGE
================================================================================
timelapseMap <wad> [-m MAP] [-o out.mp4] [-iwad alias|path] [-drawspeed N] [-vidlength T]
[-rez R] [-format mp4|png] [-linewidth N]
[-cam off|follow|trace|box [Z]] [-zoom Z] [-testframe [pos]]
[-endzoom S] [-endhold S]
[-things [img]] [-thingtypes LIST] [-thingrate N] [-thingscale N] [-onlythings]
[-tracethings] [-zoomthing Z] [-thingspeed N]
================================================================================
DESCRIPTION
================================================================================
Draws every linedef in index order with a moving pen, as the IDDT
automap using dsda/nyan automap colour rules (walls, height changes,
key doors, teleports, exits, secret sectors). By default the whole map
is shown, scaled once to fit the frame; -cam follow keeps the pen tip
centred at a fixed zoom instead. Things are not drawn yet.
Supports binary Doom / Boom / MBF21 format maps.
================================================================================
OPTIONS
================================================================================
-m, --map NAME
Map to render (default: first map in the WAD)
-o, --out PATH
Output mp4 file, or folder for -format png
(default, next to the WAD: <wad>_<MAP>_timelapse_<rez>.mp4
or <wad>_<MAP>_timelapse_<rez>_frames\ e.g. ..._timelapse_4K.mp4)
-rez R
Resolution, always 16:9 (default: 1080p)
480p 720p 1080p 4k 8k 16k, or a width e.g. 2560
-format F
mp4 (H.264, up to 8192 wide) or png (numbered image
sequence, any size - use for 16k). Default: mp4
-linewidth N
Line thickness in pixels (default: 2)
-iwad, --iwad X
IWAD to take PLAYPAL from: an alias or a path (default: doom2)
aliases: doom, doom2, tnt, plutonia, heretic, hexen, free1, free2, doom94, doom294
A PLAYPAL inside the input WAD always wins.
-drawspeed, --drawspeed N
Pen speed in map units per second (default: 3000)
Lines are drawn from their start vertex to their end vertex at
this constant speed; leftover travel in a frame carries straight
into the next line.
-vidlength, --vidlength T
Total video length. The video is planned with your settings, then
every speed, hold, pan and zoom is scaled by the same amount to fit -
like speeding a finished clip up or down in an editor
20 = 20 seconds, 1.20 = 1 min 20 s, 2.5.0 = 2 h 5 min ("." or ":")
-timepreservezoom
with -vidlength: keep every zoom out / hold / zoom in, the mid
hold, the final zoom out and the start/end holds at their set
lengths; only drawing, thing placement and pans are scaled to fit
(error if the kept parts alone are longer than -vidlength)
-cam MODE
off = whole map (default: off)
steady = zoomed, lines in index (creation) order. The camera stays
still while the pen is mid-frame, glides after it near the
edges, and when the next line starts off-screen the pen
pauses while the camera pans there (-boxpan time)
follow = like steady, but at an off-screen jump the pen keeps
drawing while the camera quickly catches up
lock = zoomed, index order, pen tip locked dead centre (cuts)
trace = like follow, but the pen walks connected lines (taking the
straightest way at junctions) and glides without drawing
across gaps - one continuous moving point
box Z = the map is cut into a grid of 16:9 boxes, Z wide (same forms
as -zoom: 6004mu, 15.5%, 4x; default: the -zoom value),
anchored on the
player 1 start. The camera frames one box (filling the frame),
trace-draws only what is inside it, then zooms out to the full
map, holds, and zooms into the next box (see -boxorder;
player 1's box first). Things go box by box too
-boxzoom S
box: between boxes the camera zooms out to the full map, holds,
then zooms into the next box; seconds for each zoom (default: 1)
-boxhold S
box: seconds on the full map between boxes (default: 1)
-boxzoom 0 = no zoom or hold: the camera pans straight to the next
box and drawing carries on (with -thingboxzoom 0 too, it also pans
straight from the lines to the things). Each box move is only as far
as needed to bring what is left in that box into view
-boxpan S
seconds for that pan (default: 0.75)
-boxorder O
box visiting order, for lines and things (default: sweep)
sweep step to a touching box each time, taking the one with the
fewest unfinished neighbours, so corners and edges are
cleared on the way and nothing is left behind
spiral ring by ring outwards from player 1's box
dense the densest box beside the last one, else the densest anywhere
-thingboxzoom S
the same as -boxzoom / -boxhold, for the thing boxes
-thingboxhold S
(default: the -boxzoom / -boxhold values; 0 zoom = pan)
-thingbox Z
place the things box by box with this box size (same forms as
-zoom), in any camera mode (default in box mode: the line box size)
-midhold S
with -things: seconds on the full map between the lines and
the things (default: 2); the camera zooms out for it, and
back in afterwards if the things are placed zoomed
-jumptransition N
trace/boxed: gap-glide speed as a multiple of the pen speed
(default: 1; 4 = glide 4x faster than drawing)
-zoom Z
follow/trace view size (alone, implies -cam follow). Default: 4096mu
4096mu 4096 map units across the frame width
15.5 15.5% of the full-map view (also 15.5%)
4x 4 times closer than the full-map view (= 25%)
-endzoom S
follow/trace: seconds to zoom out to the full map when drawing
ends (default: 2; 0 = cut straight to it)
-endhold S
seconds to hold on the finished full map (default: 4)
-things [img]
Add a things pass after the map is drawn (in index order)
no value = green triangles; img = the real front-facing sprites
(stock Doom 2 definitions; DEHACKED is not read yet)
-thingtypes LIST
Which things, comma separated (default: default)
monsters weapons keys armor powerups health bonuses ammo decor
deathmatch (deathmatch starts)
default = monsters,weapons,keys,armor,powerups all = every category
Player 1-4 starts are always shown and placed first - only the start
that spawns the real player (extra copies = voodoo dolls are skipped)
e.g. default,health or monsters,keys
-skill N
only things that appear on skill N, 1-5 (default: 4 = UV);
multiplayer-only (co-op / deathmatch) things are never shown
-thingrate N
things placed per second (default: 60)
-thingscale N
thing size multiplier, 1 = true size (default: 1);
never smaller than 12px on screen
-tracethings
follow/trace: stay zoomed in for the things - the pen travels from
thing to thing (follow: index order, trace: nearest next) and each one
appears as it is reached; then the zoom-out and hold. Without it,
things are placed on the full map after the zoom-out
-zoomthing Z
zoom for the things only (same forms as -zoom); turns on
-tracethings, and works with -cam off and -onlythings too
-thingspeed N
-tracethings pen speed, map units/s (default: same as -drawspeed)
-onlythings
Skip the line drawing: start on the finished full map and just add
the things, then hold (implies -things). -vidlength sets the thing rate.
With -tracethings and -cam follow/trace: zoom in from the full map,
trace the things at -zoom, then zoom out and hold
-testframe [POS]
Render ONE frame to a PNG and exit - fast, for checking settings
no value = middle of the drawing, 30% = 30% through the drawing,
0.45 = that time into the video (s, m.s or h.m.s)
-h, --help
Show this help
================================================================================
SETTINGS
================================================================================
Resolution, fps, pacing, line width, colours and the IWAD alias table are edited
at the very top of timelapseMap_script.py.
================================================================================
LOG
================================================================================
Every output gets a .log beside it with the same name (e.g. ..._1080p.mp4 -> ..._1080p.log)
holding the date, folder, exact command line and the console summary.
================================================================================
WHILE RENDERING
================================================================================
Press S to stop and save what has been rendered so far (playable mp4 / PNGs kept).
Ctrl+C aborts and deletes the unfinished mp4.
================================================================================
REQUIRES
================================================================================
ffmpeg on PATH
================================================================================
EXAMPLES
================================================================================
timelapseMap mymap.wad
timelapseMap mymap.wad -m MAP03
timelapseMap megawad.wad -m MAP12 -o map12.mp4
timelapseMap mymap.wad -iwad tnt
timelapseMap mymap.wad -drawspeed 6000
timelapseMap mymap.wad -vidlength 1.20
timelapseMap mymap.wad -rez 4k
timelapseMap bigmap.wad -rez 16k -format png -linewidth 5
timelapseMap mymap.wad -iwad "D:\stuff\other.wad"
timelapseMap mymap.wad -zoom 4x
timelapseMap mymap.wad -cam follow -zoom 2048mu -drawspeed 800
timelapseMap mymap.wad -rez 8k -zoom 4x -testframe
timelapseMap mymap.wad -zoom 15.5 -testframe 30%
timelapseMap mymap.wad -cam trace -zoom 4x -drawspeed 800 -jumptransition 3
timelapseMap mymap.wad -cam box 6004mu -things img -thingscale 3.2
timelapseMap mymap.wad -things
timelapseMap mymap.wad -things img -thingtypes default,health -thingscale 2
timelapseMap mymap.wad -things img -onlythings -vidlength 20
timelapseMap mymap.wad -cam trace -zoom 3x -things img -tracethings -thingspeed 1500