Skip to content

Major Release v3.0.0

Choose a tag to compare

@justinfx justinfx released this 21 Feb 21:20
· 42 commits to master since this release

What's Changed

New v3 major release. This is a major version with breaking changes covering two significant architectural
improvements.

ANTLR4 Grammar-Based Parsing (PR #149)

Sequence pattern parsing has been migrated from regex to a shared ANTLR4 grammar, aligning the Python
implementation with the Go and C++ implementations for consistency and maintainability.

Removed API:

  • FileSequence.SPLIT_RE and FileSequence.DISK_RE class variables
  • constants.SPLIT_PATTERN, constants.SPLIT_RE, constants.SPLIT_SUB_PATTERN, constants.SPLIT_SUB_RE

Removed files:

  • setup.py → replaced by pyproject.toml
  • src/fileseq/__version__.py → version now derived from git tags via setuptools-scm
  • requirements.txt → replaced by pyproject.toml optional dependency groups (pip install ".[dev]", pip install ".[docs]")

Behavioral changes:

  • Auto-padding now only applies to single-frame files without explicit padding — foo.1@@@@.exr preserves
    @@@@ rather than re-padding

Range-Based FrameSet (PR #150)

FrameSet now stores frame ranges compactly as Range objects rather than expanding all frames upfront,
reducing memory usage by ~99.9%+ for large ranges (e.g. 100k frames drops from ~7.8MB to ~536 bytes).

Deprecated API (raises DeprecationWarning):

  • FrameSet.items — use set(fs) instead
  • FrameSet.order — use list(fs) or fs[i] instead

Bug fixes:

  • isConsecutive() now correctly handles interleaved ranges and empty framesets
  • hasSubFrames() correctly detects decimal notation like "1.0-5.0"
  • Stagger modifier (:) now properly deduplicates frames

Pull Requests

  • Implement ANTLR4 grammar parsing and migration from regex focus (refs #147) by @justinfx in
    #149
  • Refactor FrameSet to use range-based storage (fixes #148) by @justinfx in
    #150

Full Changelog: v2.3.1...v3.0.0