All documentation
Canvas and boards/03

Image sequences

Free

Treat numbered frames as one board item.

Image sequences collapse numbered still frames into one board item so render outputs, animation frames, timelapse sets, and burst-like frame runs do not flood the canvas. A sequence keeps the full frame list, uses a representative preview from the first frame, draws a sequence corner marker when enabled, and can be expanded back into individual images from the item context menu.

Screenshot coming soon

FenSight image sequence item with a corner marker and frame-count overlay

Screenshot placeholder. Expected production asset: /docs/screenshots/image-sequences.png.

Sequence access paths

Menu

File -> Import Folder...

Detects numbered image runs during folder ingest before layout, then imports each detected run as one ImageSequenceItem.

Drag/drop

Explorer -> drag a folder or numbered frame set onto the canvas

Canvas drops use the same DetectImageSequences pass before placing remaining individual files.

Context menu

Image item -> Collapse sequence

Select at least three related ImageItem frames, or right-click a frame in a detected run, to collapse them into one sequence item.

Context menu

Image sequence item -> Expand sequence

Replaces the sequence with individual ImageItem frames at the sequence position, then runs thumbnail/high-res backfill as needed.

Menu

View -> Sequence Corner Marker

Shows or hides the upper-left sequence triangle on sequence items.

Menu

Settings -> Overlay -> Show image sequence corner marker

Persists the same sequence marker preference through ShowSequenceCornerBadge.

Menu

Settings -> Performance -> Sequence split gap (sec)

Defaults to 1.0. Values are clamped from 0.1 to 120.0 seconds.

Menu

Settings -> Index Roots -> Gen thumbs / Build all

The thumbnail generation flow can backfill the sequence-detection cache so later imports do not re-detect every directory cold.

Detection rules

FenSight detects sequences per directory before creating board items. All of these gates must pass, which prevents ordinary numbered photos from being collapsed accidentally.

RuleWhat must be trueTechnical behavior
Supported image extensionFree
Only paths in PipelineSupportedImages are considered for sequence detection.DetectImageSequences filters candidates by the same image extension set used by the ingest pipeline, so unsupported files and non-image documents do not become sequence frames.
Trailing frame numberFree
A filename must end in at least three digits, such as render_0001.png or shot010.exr.The detector walks backward through the filename stem, extracts the trailing digit run, and requires digitsLen >= 3 before parsing the index.
Same directory, prefix, extension, and paddingFree
Frames belong together only when the stable name prefix, extension, and digit padding match.Candidates are grouped by Prefix, Ext, and Pad inside a single directory group. render_001.png and render_0001.png are different padding groups.
At least three consecutive indexesFree
Runs shorter than three frames or runs with index gaps are left as normal image items.Sorted candidate indexes are flushed into runs only while each next index equals the previous index + 1. FlushRun drops any run with count < 3.
Sequence split gap (sec)Free
Splits one consecutive numeric run into multiple sequences when adjacent frames are too far apart in modified time.SplitRunByTimeGaps compares File.GetLastWriteTimeUtc deltas. Gaps above the clamped threshold split the run, but only when the current segment already has at least three frames.
File-size consistencyFree
Rejects runs where frame files vary too much in byte size.LooksLikeSequence computes mean and standard deviation over FileInfo.Length and rejects the run when stdev / mean > 0.35.
Dimension consistencyFree
Rejects runs where the sampled frames are not the same canvas size.The detector samples up to the first five frames, resolves orientation-aware dimensions, and rejects the run if width or height differs by more than 16 px.

Sequence item behavior

BehaviorUser-facing resultTechnical behavior
ImageSequenceItemFree
Represents many source frames as one movable, selectable, taggable board item.The item stores SourcePath for the representative first frame, Preview for display, and Frames as the full path list.
Preview frameFree
Shows a still thumbnail for the sequence instead of animating every frame on the board.CreateSequenceItemAsync uses the first frame for TryLoadPreRenderedPreview or LoadBitmapSourceWithTimeout, then falls back to a generated Loading placeholder when decode is deferred.
Frame-count overlayFree
Displays the number of frames when item overlay text is enabled.BoardSurface prepends the text '<N> frame(s)' for ImageSequenceItem objects before other overlay fields such as file type, filename, or path.
Sequence Corner MarkerFree
Draws a blue upper-left corner marker so collapsed frame runs are visually distinct from still images.BoardSurface checks ShowSequenceCornerBadge and calls DrawCornerTriangleBadge with the sequence flag when the item is an ImageSequenceItem.
Properties Dock sequence detailsFree
Shows the item type, frame count, first frame, last frame, and time range where available.GetItemTypeLabel formats Image Sequence (<N>), and AppendSequenceDetails reads Frames plus first/last file timestamps.
AI/index preview seedingPro
Lets each frame participate in AI/index workflows even though the board shows one sequence item.SearchCoordinator expands collapsed sequences into individual frame paths for on-board path sets and seeds the sequence preview bitmap for every frame path.
Deletion and file operationsFree
Treats a sequence as a real collection of source files when source-file operations need the paths.Source delete path building expands ImageSequenceItem.Frames and deduplicates frame paths instead of acting only on the representative SourcePath.

Commands and settings

Exact labelUser-facing behaviorStored setting or implementation
Collapse sequenceFree
Turns detected selected image frames into one ImageSequenceItem.CollapseSequenceFromItemAsync uses selected ImageItem objects when at least two are selected, otherwise it scans same-directory image items around the right-clicked frame, re-runs DetectImageSequences, creates sequence items, and removes the original frame items from the board.
Expand sequenceFree
Breaks one sequence back into individual image items.ExpandSequenceItemAsync validates existing frame paths, expands them at the sequence position, removes the sequence item, selects the new frames, and starts thumbnail/high-res backfill where needed.
Expand itemsFree
Expands all expandable items it finds, including image sequences and PowerPoint documents.ExpandAllGroupableItemsAsync finds ImageSequenceItem objects plus .ppt/.pptx DocumentItem objects, expands each, selects the created items, and reports PowerPoint extraction failures separately.
Show image sequence corner markerFree
Controls whether sequence items get the visible corner marker.Persists ShowSequenceCornerBadge. The View -> Sequence Corner Marker menu item mirrors the same setting.
Sequence split gap (sec)Free
Controls timestamp-based splitting for consecutive numeric runs.Persists SequenceSplitGapSeconds, defaults to 1.0, and is clamped to 0.1-120.0 on save/validation.
Clear generated cacheFree
Clears rebuildable sequence-detection state when you need a clean rescan.The generated-cache cleanup removes sequence-detection-cache.json along with other generated thumbnail/cache scopes while preserving durable index/enrichment data.

Cache and performance model

Sequence detection can be expensive in very large directories because it must inspect filenames, file sizes, timestamps, and sample dimensions. FenSight keeps a per-directory sequence-detection cache under the configured cache root to avoid repeating that work when the directory candidate count is unchanged.

  • The cache file is sequence-detection-cache.json.
  • Each directory cache entry is keyed by the candidate image file count; if files are added or removed, that directory is re-detected.
  • Settings -> Index Roots thumbnail generation can backfill the same cache used by ingest.
  • Detection checks cancellation every 50 files so cancelling a large sequence pass does not wait for the full directory to finish.

Common edge cases

Sequence detection is intentionally conservative. If a numbered run remains as individual images, one of the validation rules probably failed.

  • Two-frame runs are not collapsed; a sequence requires at least three frames.
  • Names with fewer than three trailing digits are not treated as sequence frames.
  • Mixed padding, mixed extensions, missing frame numbers, large size variance, or mismatched dimensions will keep frames separate.
  • Long-exposure timelapse or bracketed captures may need a larger Sequence split gap (sec) value.
  • If timestamp reads fail, the timestamp-gap splitter leaves the numeric run intact rather than inventing split points.

Image sequence detection, collapse/expand commands, sequence overlays, sequence cache, and source-path expansion are Free. AI/index behavior that consumes sequence previews follows the tier of the AI feature itself.

Connected guides

Follow these related pages when the workflow crosses into setup, search, organization, export, security, or another board-level system.