Skip to content

FEATURE - Filesystem plugin browser#198

Merged
tedwaine merged 38 commits into
AcademySoftwareFoundation:mainfrom
richardssam:filesystem_plugin
May 20, 2026
Merged

FEATURE - Filesystem plugin browser#198
tedwaine merged 38 commits into
AcademySoftwareFoundation:mainfrom
richardssam:filesystem_plugin

Conversation

@richardssam
Copy link
Copy Markdown
Contributor

Filesystem plugin browser

A high-performance, multi-threaded filesystem browser for xStudio, designed to handle large directories and image sequences efficiently.

Features

  • Fast Multi-threaded Scanning: Uses a thread pool and BFS algorithm to scan directories quickly without freezing the UI.
  • Image Sequence Detection: Automatically detects and groups file sequences (e.g., shot_001.1001.exr -> shot_001.####.exr). Supports exclusion of specific extensions (e.g., .mov, .mp4) via configuration.
  • Smart Filtering:
    • Text Filter: Supports "AND" logic (space-separated terms). E.g., comp exr finds files matchings both "comp" and "exr".
    • Time Filter: Filter by modification time (Last 1 day, 1 week, etc.).
    • Version Filter: Filter to show only the latest version or latest 2 versions of a shot.
  • Navigation:
    • Native Directory Picker integration.
    • Path completion/suggestions.
    • History tracking (via sticky attributes).
  • Playback Integration:
    • Double-Click: Loads media and immediately starts playback using the playlist's playhead logic.
    • Context Menu:
      • Replace: Replaces the currently viewed media with the selected item.
      • Compare with: Loads the selected item and sets up an A/B comparison with the current media.

Usage

  1. Open the Browser:
    • Go to View -> Panels -> Filesystem Browser.
    • Or use the hotkey 'B'.
  2. Navigation:
    • Enter a path in the text field or click the folder icon to browse.
  3. Loading Media:
    • Double-click a file/sequence to load it into the current or new playlist.
    • Right-click for advanced actions (Replace, Compare).
image

throb added a commit to throb/xstudio that referenced this pull request Mar 15, 2026
Extracted from PR AcademySoftwareFoundation#198 and adapted for Windows. Provides a VFX-oriented
filesystem browser panel with directory tree, file sequence detection
(via fileseq), version grouping, and thumbnail generation.

Key Windows fixes:
- Drive letter enumeration under virtual "/" root ("This PC")
- Case-insensitive path comparison throughout QML tree
- Forward-slash normalization on all path returns
- Fixed shadowed `time` import in _get_subdirs
- Direct attribute write from DirectoryTree (bypasses signal chain)
- Tree auto-syncs to current path on launch
- Up-directory button in path bar
- Depth spinner persists across sessions (title mismatch fix)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tedwaine and others added 27 commits April 2, 2026 11:09
Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
…oftwareFoundation#238)

Signed-off-by: xShirae <xshiraayuki@gmail.com>
Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
…has been obsolete for a while.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Better filtering, got progress bar working, and version and date filtering.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Also added a separate timing test where you can specify an output directory, not really for unit testing, but good for testing against real directories.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
…r so.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
The directory view allows a more obvious browsing of the tree. For the very top of the directory tree we dont auto-scan for media, once you get down to 4 levels it will start scanning.
We have also made a config.json file to store configurations of things like the auto_scan_threashold, along with adding a list of folders that need to be ignored.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
   * Fixed auto-complete
   * Tree view opens to node when path is entered in path dialog.
   * Added a refresh button
   * Tree view now persistent, with a nicer sidebar label.
   * Smart scan button now visible.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
…lly load it into the player

   * double click will load it into your target
   * Cursor keys will allow you to move through the results loading as you go (left right for icon view, up down for list view)
   * Enter will do the same as double click.
   * Preview playlist will be deleted on Enter.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
…n and list view:

* Adding Append menu option
* Adding copy path menu option
* Add compare menu option

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
richardssam and others added 7 commits April 2, 2026 11:20
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
…ou have a centralized area to do that.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: tedwaine <59868698+tedwaine@users.noreply.github.com>
@tedwaine tedwaine merged commit 0ae6686 into AcademySoftwareFoundation:main May 20, 2026
2 of 3 checks passed
tedwaine added a commit to tedwaine/xstudio that referenced this pull request May 20, 2026
…n#198)" so we can merge via develop branch

This reverts commit 0ae6686.

Signed-off-by: Ted Waine <ted.waine@gmail.com>
tedwaine added a commit that referenced this pull request May 20, 2026
…ia develop branch (#255)

This reverts commit 0ae6686.

Signed-off-by: Ted Waine <ted.waine@gmail.com>
tedwaine added a commit that referenced this pull request May 20, 2026
* Add numpy to pip installed packages

Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Tweak for set video range action

Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Handle missing Decklink hardware when drivers are installed (#238)

Signed-off-by: xShirae <xshiraayuki@gmail.com>
Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Initial checkin of filesystem_plugin prior to refactor.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* A ffmpeg constant changed, I believe the older one FF_PROFILE_UNKOWN has been obsolete for a while.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Cleanup GUI
Better filtering, got progress bar working, and version and date filtering.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Adding fileseq for the python libraries for the FileSystem Browser.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Got the progress bar to work correctly.
Also added a separate timing test where you can specify an output directory, not really for unit testing, but good for testing against real directories.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Fix for color scheme for right click menu.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Add readme.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Adding copyright/license info.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Adding (c).

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Dont be quite so agressive updating the UI, only do it every 5 secs or so.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Swapped file-browser with a history view.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Updated readme.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Fixing QML issue.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Demo of widget as a floating window.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Filtering fixes.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Switched to a tree-view with some "smart" collapsing of directories.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Fixed the file-loading issue, it was trying to load a relative path.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Double clicking on a directory changes the overall search window path.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Make the search case insensitive.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Adding different types of tree view. and recursion depths.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Minor tweak to prune empty folders if we are filtering.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Adding a directory view.

The directory view allows a more obvious browsing of the tree. For the very top of the directory tree we dont auto-scan for media, once you get down to 4 levels it will start scanning.
We have also made a config.json file to store configurations of things like the auto_scan_threashold, along with adding a list of folders that need to be ignored.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Filtering all the time.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* GUI update:
   * Fixed auto-complete
   * Tree view opens to node when path is entered in path dialog.
   * Added a refresh button
   * Tree view now persistent, with a nicer sidebar label.
   * Smart scan button now visible.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Added a preview mode, so when you click on a clip, it will automatically load it into the player
   * double click will load it into your target
   * Cursor keys will allow you to move through the results loading as you go (left right for icon view, up down for list view)
   * Enter will do the same as double click.
   * Preview playlist will be deleted on Enter.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Updated to have a common style, and synced style with xstudio.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* More style fixes, and also making menu options consistent between icon and list view:
* Adding Append menu option
* Adding copy path menu option
* Add compare menu option

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Adding a show-in-finder menu option.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* MInor bug fixes, cleaning threading.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Some code refactoring to simplify it, in particular the dispatch table.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Setup a interface class, so that if you want to change the back end you have a centralized area to do that.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Removed some debug output and removed an un-necesary header.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Fixed a padding issue.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

* Added ability to set the directory root.

Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>

---------

Signed-off-by: Ted Waine <ted.waine@gmail.com>
Signed-off-by: Sam.Richards@taurich.org <Sam.Richards@taurich.org>
Signed-off-by: xShirae <xshiraayuki@gmail.com>
Signed-off-by: tedwaine <59868698+tedwaine@users.noreply.github.com>
Co-authored-by: Ted Waine <ted.waine@gmail.com>
Co-authored-by: xShirae <83482842+xShirae@users.noreply.github.com>
Co-authored-by: tedwaine <59868698+tedwaine@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants