================================================================================ timelapseMap ================================================================================ render a Doom map being drawn, as an mp4 timelapse ================================================================================ USAGE ================================================================================ timelapseMap [-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: __timelapse_.mp4 or __timelapse__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