| source | COMFY_MATCHTYPE_V3 | | Image or mask to draw on (a copy is made). Accepts a ComfyUI IMAGE/MASK directly (frame 0 of a batch) or an NPARRAY. Arithmetic ops (add, multiply, etc.) process the full IMAGE batch when both inputs have the same batch size. |
| points | NPARRAY | | Nx2 or Nx1x2 points IN ORDER (first = start). Non-finite points are skipped, so a gated sequence keeps its indexing. None/empty -> passthrough. |
| color | STRING | (0, 255, 0) | Colour as a single value (broadcast to all channels) or a BGR tuple, e.g. '255' or '(0, 255, 0)'. Used for the markers and labels always, and for the line itself unless progress = 'colormap along path'. |
| progress | COMBO | colormap along path | How the direction of travel is shown along the line. 'colormap along path' walks a sequential ramp from start to end (the clearest, and it survives greyscale because the ramp is monotone in luminance). 'thicken along path' grows the stroke instead - use it when the colour is already carrying something else. 'solid' leaves the line flat and relies on the end markers. |
| progress_colormap | COMBO | COLORMAP_VIRIDIS | Ramp for 'colormap along path'. Keep a SEQUENTIAL map (VIRIDIS, MAGMA, PLASMA): a rainbow like JET is not monotone in brightness, so it invents features that are not in the data and prints as mush. |
| thickness | INT | 21–64 | Line thickness in pixels (the maximum, for 'thicken along path'). |
| line_style | COMBO | solid | Stroke pattern. Colour alone cannot separate two overlaid line sets for a colour-blind viewer or in greyscale - give the second set a different style and the picture reads without the palette. 'solid' is cv2's own line. Note that the pattern restarts at every segment, so on a DENSELY sampled path (one sample per video frame, a pixel apart) a dashed line renders solid - there lean on 'progress' and the end markers instead. |
| start_marker | COMBO | filled square | Marker at the FIRST point. Marker shape. Two point sets drawn on one image in two colours are the same picture to a colour-blind viewer - give the second set a different shape (or radius) and the distinction survives. 'filled circle' is the original marker. |
| end_marker | COMBO | triangle up | Marker at the LAST point - make it a different shape from start_marker, that is what tells the two apart. |
| marker_radius | INT | 61–128 | Radius of the two end markers, in pixels. 0-length paths still get their single point marked. |
| arrow_everyopt | INT | 00–100000 | Draw a heading arrow every N points (0 = none). The arrow spans a fixed arc length back along the path, so it stays readable where samples are dense. |
| label_endsopt | COMBO | none | Text at the two ends, drawn with a contrast halo so it survives any background. 'first / last index' stamps the actual indices, which is what you want when the path is a frame sequence. |
| gap_maskopt | NPARRAY | | (N,) 0/1 per point. A 0 means that point was HELD rather than measured (e.g. 'found_mask' from 'OpenCV Visual Odometry (Sequence)'). Those points get a small x and their segment is drawn dotted, so a stretch the estimator gave up on cannot pass for real data. The marker is what carries it: a held point sits exactly on its predecessor, so the segment has no length to draw a style with. |