Which moment of your video Time Flow Sketch 1.25 shows at each instant of the output
The curves in the figures are computed with the same formulas the app uses to render.
In short
There are two spans inside a clip: the loaded range, which is what sits in memory, and the use range, which is what the output actually uses. Both are measured as 0–1 of the whole clip.
The output is always a loop of a fixed number of seconds. A map’s brightness decides one of three things: which point in the use range to show (slit × time map), how far to shift it (surface × time map), or how fast to advance (rate map).
If the use range extends past the loaded range, the picture freezes on the edge frame for that part (the sound keeps going). Reload here fixes that on the spot.
1. The pipeline
The top row is set up on the input side (loading and the use range); the bottom row is computed for every output frame and reads the frame cube (the loaded frames) and the use range each time. Blue marks the loaded range and orange the use range, here and in every later figure.
2. Three spans: clip, loaded range, use range
Clip — the whole file. All times are measured against it.
Loaded range — the part actually held in memory. The automatic plan sets its length from free memory and the 2048-frame limit. If you choose Seconds to load in Settings → Video Loading, that length is kept and memory only changes how many frames are skipped.
Use range — the span you pick with the band and handles under the input on the main screen. It is a fraction of the whole clip, not of the loaded range.
Until you touch it, the use range is fitted automatically:
Slit × time map: from the start of the loaded range, the map’s time axis in pixels ÷ 30 seconds (2–120 s), never past the loaded range.
Surface × time map: the whole loaded range.
For these two, it is re-fitted whenever you change the mode, the map, Duration and so on.
Rate maps: fitted to the whole loaded range only right after loading.
Main screen: the bar under Input is the use rangeThe Input pane alone in the editor: source and GPU size, fps and seconds loaded
Top: how the three spans nest. Bottom left: the frame you actually see when a computed time falls outside the loaded range — it flattens at the edges. Bottom right: with the use range widened to 8–26 s, the last 6 seconds of the output stay on the 20-second frame.
3. How each mode decides the time
The output has a clock, position p, running 0→1 once per loop. A slit mode uses p to pick one row of the map (one column for a horizontal slit). Surface × rate gives every pixel its own clock; surface × time offsets every pixel by a fixed amount from a shared clock. A new session starts on vertical slit × time map.
Every solid line stays inside the orange band (the use range); the dashed line in (b) shows what would happen without adjustment. In (b) all columns are scaled down evenly to fit the column that overflows most, so even the grey column runs slower than normal. In (c) every pixel lines up at the red circle (the anchor).
Mode
What brightness means
Clip time shown at each output instant
Outside the range
Slit × time map
Black = start of the use range, white = end
start + g × use-range length. The default gradient plays at normal speed.
Never leaves it; jumps from end to start at the loop seam
Slit × rate map
That column’s (row’s) speed: black = Black rate (default 0, frozen), white = White rate (default +1, forward), interpolated in between. With reverse makes black −1 and white +1, so grey is frozen
A path made by summing speeds from the top (from the left for a horizontal slit); every slit meets at the Anchor at moment of the loop (0, the start of the output, by default) and runs forward and back from there
Shifted or scaled down evenly to fit; no wrapping
Surface × rate map
That pixel’s speed: black = Black rate (default 0, frozen), white = White rate (default +1), interpolated in between. With reverse makes black −1 and white +1, so grey is frozen
At the same fraction of the loop as Anchor at, every pixel meets at that point of the clip (0.5 by default: the middle at the middle), then runs at its own speed
Wraps within the use range
Surface × time map
Grey = unchanged, white/black = half of Shift ahead/behind
Normal-speed time offset by (g − 0.5) × Shift seconds
Wraps within the use range
Space map (any mode)
Which column (row for a horizontal slit) to show
Does not change time
—
4. Seeing it in 3D: the 3D plot
Pick 3D plot in the editor’s View menu and this plot appears beside the output picture and the map; with the tools out you can watch it while you draw. You can also swipe the map on the main screen sideways to reach it. Switching Section at its top right to Lines draws the surface as lines in the time graph’s colours instead of the picture. The plot computes its times with the same function that renders the output picture.
Vertical slit × time map with Left → right. Columns further left show earlier moments, so the surface is a tilted plane and the cyan lines run vertically at even spacingThe time graph for the same map. A vertical slit runs output time downward, so there is one straight vertical line per strip, each at its own position (see “The time graph” below)
The box — the whole clip as a block of width × height × time. Width and height are the picture, with the video’s own aspect ratio; depth runs from 0 seconds to the end of the clip, with the end at the back when the plot opens. Seconds are labelled along whichever time-direction edge currently appears lowest on screen.
The surface — the current output frame. The depth of each point is the moment of the clip that part of the picture is showing, and the actual picture is mapped onto it. A flat surface square to the time axis means the whole frame shows one moment; a tilted or bent surface means different parts of the picture show different moments.
Cyan lines — join points that show the same moment of the clip. The spacing is the finest of 0.5, 1, 2, 5, 10, 20 or 30 seconds that marks the clip in 12 steps or fewer (for clips over 6 minutes, the clip length ÷ 12, rounded). Where the lines crowd together, the surface is tilting steeply in time.
Orange and blue rectangles — orange marks the start and end of the use range, blue the start and end of the loaded range. The surface normally stays between the orange ones. If the use range reaches past the loaded range, the surface goes beyond the blue rectangles too, but the picture on that part stays on the edge frame of the loaded range — the same flattening at the edges as in section 2.
Whole clip / Use range — appears at the top right only when the use range is shorter than half the clip. Tap it and the box’s depth runs from the start to the end of the use range (the second marks are redrawn for that span); tap again to return to the whole clip. It keeps the surface from being squeezed into a thin slice when you use only part of a long clip.
Translucent frames — the end faces of the box (the first and last moments of the clip) show the frame at that time faintly (the edge frame of the loaded range if that moment is not loaded). Only the face on the far side from you is drawn, and the two cross-fade as the box turns.
Handling — left alone, the box turns slowly by itself, about once every 50 seconds. Drag to rotate it; the automatic turn stops while your finger is down and carries on from there when you lift. Pinch to zoom.
Opening — a short intro of about 1.7 seconds plays: frames at the second marks appear and fade in turn from the back (the end of the clip) towards the front, and the surface fades in as they go.
The shape of the surface in each mode
Vertical slit × time map, default Top → bottom — every column shows the same moment, so the surface is a flat plane square to the time axis. Over one loop it sweeps through the box at normal speed from the start of the use range (orange) to its end (orange), then jumps back at the seam. In terms of the table above, start + g × use-range length with the same g everywhere in the frame.
Vertical slit × time map, Left → right — the left column keeps showing the start of the use range and the right column its end. The surface is a plane tilted from left to right, and it does not move during the loop: the output is a single still picture. The cyan lines join columns at the same moment, so they are parallel vertical lines.
Slit modes in general — under a vertical slit each column has one moment, so whatever the map, the surface is straight from top to bottom and bends only across the width. A horizontal slit is the other way round: it bends only from top to bottom. On a slit × rate map, columns running at different speeds make the shape change over the loop; because the path is fitted into the use range, the surface never leaves the orange rectangles and never wraps.
Surface modes — every pixel has its own moment, so the surface bends in both directions. On a surface × time map the tones of the map become its relief (lighter towards the end of the clip, darker towards the start), and that fixed shape travels at normal speed, with any part that passes the edge of the use range wrapping round to the other side. On a surface × rate map the surface is flat at the anchor moment and bends further the further the output gets from it, as pixels at different speeds drift apart; it too wraps within the use range.
Space map — does not change the shape of the surface (its times), but it does move the surface sideways (up and down under a horizontal slit) to the place in the clip it is showing. A map that shows a single column at a time (a solid tone, or Top → bottom) collapses the surface into one line; the plane that line cuts along time — that column's slit-scan picture — is then drawn translucently beside it, and slides sideways as the slit moves.
The time graph: section 3’s figure, live
Time graph, also in the View menu, draws the same kind of figure as section 3 for your current map, mode and parameters.
The horizontal axis is one output loop and the vertical axis is time in the clip (under a vertical slit the two swap: output time runs downward). Both carry second marks, with the unit (s) on the largest one.
There is one line per part of the picture. The parts are the same as the sound’s voices: strips from left to right under a vertical slit (Voice divisions, 7 by default), strips from top to bottom under a horizontal slit, and the voice grid under Surface (thinned out when the grid is fine). Each line uses the average of the map over its part.
Line colour runs from green at the left of the picture to red at the right; under a horizontal slit, from green at the top to red at the bottom. Under Surface, the hue gives the left–right position (left green → right red) and the brightness the top–bottom position (top bright → bottom dark). A small legend at the top right shows the parts in the same colours, and lines that lie exactly on top of each other are drawn as dashes alternating their colours.
The faint band is the use range (it is not drawn when the range is the whole clip), and the red line is the current playback position. Where a line wraps from end to start, the jump is not drawn.
Swipe sideways, or tap the arrows at the edges, for two more pages: Rate (vertical is playback speed — 1 is normal, 0 frozen, negative reverse) and Space (vertical is which column of the clip that strip shows, in pixels). The order is Time → Rate → Space; only Time is there by default, Rate joins while you work with the rate map, and Space once you have edited a space map — the same three that imgtrans’ 2dplot draws by default.
Reading the lines where they meet the red line tells you where in the box the 3D plot’s surface sits at that moment. With the default Top → bottom, all the lines lie on top of one another along a single diagonal (the default gradient in section 3’s figure (a)); with Left → right, they are straight lines at different moments of the clip.
5. How long the output is
Dots are Duration 1×; grey bars span 0.25×–4×. With the same 8-second use range, the loop can be anywhere from 4 to 80 seconds depending on the mode and what is in the map.
Time maps — the use range in seconds. At Duration 2× the same range plays at 0.5×.
Surface × rate — the use range in seconds ÷ the fastest rate in the map (ignoring direction): exactly the time the fastest pixel takes to cross the use range once.
Slit × rate — the map’s time axis in pixels ÷ 30 (2–120 s), regardless of the clip or the use range. For a vertical slit on an all-grey 912×512 map with an 8-second use range, 8 seconds are shown over 17.07 seconds, about 0.47×.
Top (1×): the steepest line crosses from bottom to top exactly once per loop. Bottom (2×): speeds are unchanged but the loop is twice as long, so the fastest pixel wraps around twice along the way.
6. Loading and frame skipping
For a new clip the plan is chosen automatically. Resolution starts at the largest scale (full, ½, ¼, ⅛, 1/16) whose long side is 1280 or less.
If the whole clip fits, all of it is loaded. If not, seconds are cut first (down to 4 s), then frames are skipped (down to 15 fps). If that is still not enough, resolution drops one step and the check starts again from the whole clip. If even 1/16 would fall below 15 fps, it loads 1/16 and 4 seconds and skips frames as needed.
The automatic plan for a new clip always starts at 0 seconds.
The plan shown under Settings → Video Loading follows the use range on the main screen. It always starts at the start of the use range (earlier only if the seconds would run past the end of the clip), and its seconds never drop below the length of the use range.
If you move the start of the use range, or widen it past the loaded length, and then open Settings, it shows Changes not applied yet. Reload with these settings then loads that span and keeps the use range as it is.
With a manual choice there is no fps floor; a warning appears below 8 fps.
How many frames are skipped depends on free memory at the moment of loading, so it can differ from one load to the next.
Example: a 1920×1080, 120 fps, 9.4-second clip with an 800 MB budget loads at 960×540, the first 4.0 seconds, 1 frame in 2 (60 fps) — about 240 frames.
Settings → Video Loading. The Frames line says whether frames will be skipped; its i gives the reasonTop: loading only 1 of every 3 frames of a 120 fps clip (40 fps effective). Bottom: the same material played at 0.25× (Duration 4× on a time map). Slit modes use the nearest frame, so motion steps and stutters; surface modes blend the two neighbouring frames, so motion is smooth but doubled.
7. The input preview and the use range
The input view runs on its own clock, separate from the output, looping the use range at real speed.
The green vertical line on the band is the input’s playhead. The output’s playhead (the output bar and the red line on the map) and the source time the output is showing (the red readout dot or band) are red, so the colour tells input and output apart.
Tapping or sliding along the band moves only the input’s playhead. Moving the output’s red line or bar does not move the input. While the input sound is on, the position follows the sound, so a tap on the band snaps back.
While you drag the start or end handle, the input shows that edge’s frame; release it and the picture returns to the playing position.
Press and hold the band, then drag, to slide the whole range without changing its length.
The same bar also appears on the Input pane in the editor.
If the use range extends past the loaded range, the input freezes on the edge frame for that part too, and Frozen outside the loaded part appears with a Reload here button. It reloads with the same resolution and seconds, moving the loaded range so the use range sits in the middle. If the use range is longer than that, it loads the whole use range and skips more frames if memory requires it.
If a clip was loaded with frames skipped and you then narrow the use range, a notice such as This range fits at 60 fps appears as soon as fewer frames need to be skipped. Frames are skipped in whole steps (every 2nd, every 3rd…), so a 120 fps clip is offered at 40 → 60 → 120 fps in turn (at full rate the notice reads This range fits without dropping frames). Reload loads the longest range that fits at that rate, with the use range in the middle.
Turning on the input sound locks the picture to audio looping the use range at normal speed. It does not play at the same time as the output sound.
Only 0–4.2 s loaded, use range widened to 7.66 sAfter Reload here: the note says frames were skipped to 15 fps to fit memory
8. Sound and export
The output sound follows clip time with the same calculation as the picture. It uses the whole clip’s audio, not just the loaded range, so sound keeps moving even where the picture is frozen.
Horizontal slit sound is mono.
The exported frame count is loop seconds × fps, rounded down (30 fps by default). The first and last frames do not duplicate each other, so the file loops seamlessly.
A Preview export uses the loaded resolution and is H.264 MP4. A Full-quality export uses the source’s resolution, and an HDR source can stay 10-bit HEVC in HLG or PQ.
9. Common surprises
On a slit × rate map, white is not always normal speed. If the use range is shorter than (time-axis pixels ÷ 30 × Duration) seconds, everything slows down evenly.
The shift or scale applied on a slit × rate map is one setting for the whole map. One column with an extreme rate or reverse playback changes how every other column moves.
On a surface × rate map the length follows the largest |rate| in the map. With white (forward) or black (reverse) in it the loop is about as long as the use range; close to solid grey (frozen) it stretches to 10× the use range.
Duration works differently per mode. Time maps slow down. Surface × rate keeps the speeds and lengthens the paths, which wrap within the use range. Slit × rate keeps the speeds while the path fits the use range; once it no longer fits, everything is scaled down evenly and slows, like a time map.
On surface × rate, the single Anchor at slider sets both the moment the pixels meet and the point of the clip they meet at. 0, 0.5 and 1 behave exactly like the Start, Middle and End choices of Anchor up to 1.21. With reverse pixels in the map, moving away from 0.5 can make them jump mid-loop.
Anchor at means the same on slit × rate and surface × rate: which second of the output loop every slit (every pixel) shows the same moment of the clip, sitting at the same fraction of the use range (the middle of the loop meets the middle of the range). On a slit, a path that overflows the range is shifted or scaled to fit, but the moment they meet stays put. With Readout values on, the map marks that moment with a dashed line labelled Sync. Up to 1.21 the slit version was called Start point and the slits always met at the start of the output.
Reset, at the top right of a rate map’s Parameters panel, returns black to 0 and white to +1 and resets Duration and Anchor at. With reverse sets black −1 and white +1 (it is hidden with live input, where speeds are 0–1). Black and white rates run from −2 to +2.
Once you touch the use range by hand, it is no longer re-fitted automatically (loading a different clip resets that). Reloading with Reload here or Reload with these settings counts as setting it by hand too.
On a slit × time map, Time from / Time to are the same values as the use range. Setting Time from above Time to plays in reverse.
The “i” button next to each setting in the editor explains that setting in the app, too.
The i for Duration explains the length rule for the current modeThe i for the sound method