It is my intention to have the desktop client be significantly simpler than the web one.
App Routes
The application routes
- Dataset Viewer - same as web
- Settings - not sure what will got here, but it will inevitably have some desktop-specific config
- Recently opened - A flat list of all the datasets that have been opened, plus an
Open Folder button.
- Jobs (future) - a similar panel for managing running local jobs.
Data
The desktop app will be conceptually different from the web in terms of what you "Open".
- You can open a directory containing images (Same as web)
- You can open a single video (Same as web)
- You can open a directory containing a single video (different. In web, this would upload a bunch of videos at the same time)
- You cannot open a multi-selected group of images (different. On desktop, it doesn't make sense to specify the specific images you're opening, because then you could open different subsets of images in the same folder, and we have to keep track of that in a way that isn't intuitive and might be bad for users. I think it's a reasonable requirement that, if you want to do this, you should be forced to copy/paste your images into another folder.)
Test Data / Training Data
How do we help users to organize between different groups of annotations belonging to the same dataset. Users may have their ground truth, plus they might want to try 3-4 different pipelines and see how they compare. Web doesn't currently deal with this problem, which I think is a problem. The desktop needs to handle it.
Do we need to support multiple annotation sets for a single dataset, each with its own history log?
This is actually exactly the problem that git solves, where each pipeline run creates a new branch, and each edit creates a commit. We could really spiral out of control by talking about https://dvc.org/ (which is EXACTLY the tool for this problem, but would cost many innovation tokens)
Recent Dataset persistence
What does it mean to keep track of a recent dataset?
- Just persist a directory path (in localStorage, for example), and "discover" the contents every time you open a dataset
- Allows you to put new images in a directory at the "end"
- What if the data changes? Now all your annotations are borked?
- Persist a bunch of data about the dataset, such as the images that were loaded.
- What if you want to change this later?
Track persistence
Where should track data live? In what format?
- Store JSON...
- Alongside the dataset data on disk.
- In dedicated application space, like
~/.VIAMEdata/<dataset_identifier>/tracks.json
- In some embeddable datastore like sqlite or https://github.com/typicode/lowdb ()
- In some electron-embedded persistence layer, like localstorage (pls not this)
- Some priority order of multiple of these. i.e. "Try to load from
~/.VIAMEdata first, then try the dataset folder, then open an empty project.
- Store CSV instead of JSON, and do serialization/deserialization every time.
- As an engineer, I don't want to do this because the JSON format is much more appropriate for us.
- But for the sake of users, I can understand how having to go through the "Export" process with a desktop app adds burden
- However, I think this will be familiar for users. Photoshop, for example, has bespoke project file formats, and you have to do an export to get the actual "rendered" version of your data. Same idea.
I'm leaning toward the priority order of JSON from a dedicated folder, then project folder.
Advanced/Future
- Perhaps it'd be good to support some kind of "Project file" that viame recognizes that contains a manifest of the images or video to open, plus metadata like fps and whatever else.
- it'd be good to have some kind of single-file manifest that can tell you where to find data, tracks, and metadata all in one.
It is my intention to have the desktop client be significantly simpler than the web one.
App Routes
The application routes
Open Folderbutton.Data
The desktop app will be conceptually different from the web in terms of what you "Open".
Test Data / Training Data
How do we help users to organize between different groups of annotations belonging to the same dataset. Users may have their ground truth, plus they might want to try 3-4 different pipelines and see how they compare. Web doesn't currently deal with this problem, which I think is a problem. The desktop needs to handle it.
Do we need to support multiple annotation sets for a single dataset, each with its own history log?
This is actually exactly the problem that git solves, where each pipeline run creates a new branch, and each edit creates a commit. We could really spiral out of control by talking about https://dvc.org/ (which is EXACTLY the tool for this problem, but would cost many innovation tokens)
Recent Dataset persistence
What does it mean to keep track of a recent dataset?
Track persistence
Where should track data live? In what format?
~/.VIAMEdata/<dataset_identifier>/tracks.json~/.VIAMEdatafirst, then try the dataset folder, then open an empty project.I'm leaning toward the priority order of JSON from a dedicated folder, then project folder.
Advanced/Future