Giter Site home page Giter Site logo

wgergely / bookmarks Goto Github PK

View Code? Open in Web Editor NEW
56.0 5.0 6.0 41.91 MB

A PySide2 based file and asset manager for animation and CG productions.

Home Page: https://bookmarks.gergely-wootsch.com

License: GNU General Public License v3.0

Python 86.51% CMake 0.34% C++ 2.47% Mathematica 6.45% Inno Setup 0.22% PowerShell 4.02%
pipeline maya pyside2 qt5 asset-manager assetmanager vfx vfx-pipeline project-management templates

bookmarks's Introduction

☺ Bookmarks is a free, open-source utility that helps you organize and prepare assets for digital productions. With Bookmarks, you can easily create folders for new jobs and assets using templates, parse and read existing jobs and assets, sort and filter items, and annotate them with notes. Whether you're working on a film, TV show, or other digital production, Bookmarks can help you save time and stay organized.


User Guide | Python Modules | Get Bookmarks


Features

The app categorises project content as separate bookmarks, assets and file items. You can configure these independently to link with, for instance, ShotGrid entities or configure their properties like frame rate and resolution to set Maya scene settings. You can use filters to sort and hide items, preview images, convert footage sequences, or ‘publish’ files. See User Guide for more information.

About

I developed the app to help manage personal projects and keep myself organised (I’m a digitally messy person!). So, whilst it works great for me, it might not be best suited for you. Still, I tried to make it easily customisable to help adapt to site-specific environments. See the Python Modules page for more information.

Dependencies

The release contains all Windows dependencies. For setting up a custom development environment on another platform, you’ll need the following python dependencies:

bookmarks's People

Contributors

wgergely avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

bookmarks's Issues

Resizing the window is clunky

The resize indicator is not showing and/or it is difficult to grab.

This is to do with the focus of the current widget as the resize area is associated with the BrowserWidget and I suspect the StackedWidget has the focus oftentimes.

I could try removing the focus from the StackedWidget or investigating a bigger margin around the BrowserWidget. The best solution would be to add back the standard windows frame but... it does look ugly...

Update build scripts

Make sure build scripts are capable of actually producing a workable distribution.

Fix broken favourite item syncing

The saved favourites and the favourite flags on the list items are not updated properly. In fact, the current favourite item model doesn't load its data automatically at all.

Add preset import/export options

There is already a haphazard take on this, but I'd like a complete implementation.

An Import/Export menu would be great - it should work with bookmarks and asset items. The exporter needs to output a JSON document with the values stored in the bookmark database and any related thumbnail files.

Fix file model's name sorting

There's something strange going on with the sorting by name of the file model - something perhaps to do with the subfolders?

Add jobs module

The current "bookmarker" module is clunky and outdated. I'd like to fold it into the regular editor interface and make more intuitive to use.

I'll make a the new work in a new "jobs" module and replace bookmarker when the work is ready.

Add symlinking to support nested assets

Add some sort of support to extract multiple assets from a single asset folder.
I'm thinking of perhaps a .links file in the root of the asset folder to contain relative links.

This would make it possible to use Bookmarks in site environments where assets are configured per host DCC, etc.

Update tokens module

I'd like to implement a new syntax for splitting and slicing strings as well as better controlling how the token values are populated based on the available context.

Revise database connection options

I get the feeling the way I'm making connections to the SQLite3 database is not correct. The current api interface locks when there are pending transactions (I'm guessing, when the database is locked), instead of timing out and failing. I also have a code related to creating an in-memory database in case of connection failures but this doesn't seem to work well.

Drag and drop broken

The current drag-and-drop behaviour is not what was intended (probably broken when adding draggable properties) for file items.
This is probably because one or more drag-type methods are not overridden correctly in the file item view. Move operations should never be allowed - precisely what the behaviour is now. Oh my! To be investigated.

Implement caching of asset items

In pipelines where assets are separated into tasks the asset item list can get long (1000s of items on a longer production with many shots). If the assets are linked via .link files there's a further performance degradation by opening and reading the links themselves so this made me wonder about caching the list of assets and reusing it instead of force-parsing the server every time (poor server, also!).

After parsing an asset root folder, we could save the results into a cache file we use later to get the list of asset items.
This cache could be refreshed if the user explicitly hits the refresh button.

Improve the task folder selector view/model

It would be nice if the task folder picker could traverse into subfolders. This means reworking it so it functions as a QTreeView/Model
instead of the current implementation.

Add task filters

Add a dropdown menu for to the UI to help set ShotGrid task text filters in the assets view.

Currently asset list items are clickable pressing the shift/alt modifiers and pressing a text segment on the item's name. This will set/add a positive or negative filter to the text filters but the system is somewhat clunky. Having a bespoke menu to set filters explicitly would be easier to use and possibly faster also.

Reimplement how internal data is stored, updated and read

The data module, and more generally, the ways internal data is stored, read and updated is due for a refactoring.

In its current form, the item models are the authors of the internal data but as Bookmarks is growing and more elements rely on the internal data this old implementation doesn't scale at all. Item models instead should be regular consumers. Additionally, the current code is flawed! It stems from a misunderstanding of basic threading concepts, and a misinterpretation of the function of the weakref module (at least I'm learning, ey) resulting in race conditions and data corruption.

Here's what I'm thinking of doing:

  • Let the GUI thread be the sole author of the internal data
  • Use signal-slot mechanism for signalling thread updates
  • Rework the internal data structure to flatten it and store items using their path-hashes
  • Completely remove any direct reference to internal data in the item models (the whole notion of models needing to have a data types and asset folders can then be removed)
  • Since models will only be interacting with a subset of cached internal data, store the list of hashes within the model the model is interacting with (so, again, no notion of sequence and file data sets, only lists of data).

I'm not sure how deep the rabbit hole will be but I imagine we can sort directly the internal model hash lists instead of ever having to nuke data structures. The rework will finally also allow better file update handling to make sure file and folder changes can be efficiently reflected back to the views and models and even, allow inserting and popping of items from the view without needing to brute reset.

maya import error

// Error: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: invalid syntax //

Warning: Failed to run file: C:/Users/Administrator/Documents/maya/plug-ins/Bookmarks.py, at line 1, in "sys"

Error: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: invalid syntax

Warning: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: Failed to run file: C:/Users/Administrator/Documents/maya/plug-ins/Bookmarks.py

Error: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: (Bookmarks)

loaded error
Maya2020.4

Strange behaviour when changing assets with task folder selected

When a new asset is activated but the currently selected task folder doesn't exist GWBrowser fails to show the files window.

This needs to be tracked down to see why it happens. A better solution would be to show the task folder selector when no task folder has been set yet.

FFMpeg Convert routine fails

The ffmpeg convert function is calling a non-existing image convert routine. Something wasn't updated correctly...

Take a stab at implementing task progress indicators

This is something I've taken a look at in the past but not with Bookmarks. Still, I'd love to see something like that implemented in the main Bookmarks window. Progress data could be saved as asset item data. Perhaps I could change the ListViews to TableViews and use the extra columns as the progress fields?

Optimize image operations

The python bindings of OpenImageIO are slow - I'm keen to investigate moving thumbnail operations to a c++ extension.

Create .link files when adding nested assets

The current implementation allows specifying a relative path for an asset name.
Right now, when adding a SEQ010/SH010 asset, will create a SEQ010 asset folder and expand the selected template inside SH010 - this is the correct behaviour but the linkage is not preserved and Bookmarks only reads the SEQ010 folder.

The solution is to create a .links file inside the asset root and add any relative paths the asset name might contain.
(I'll look at if bookmark items should do the same...)

Improve Notes

The current notes module isn't very helpful or usere friendly. I'd like to try to implement something like 'cards' in bootstrap - notes with a header, body and footer.

Add more RV control commands

The current RV module is limited and lacking useful control commands like adding footage to the current RV session instead of always clearing it.

An error is reported when starting the plugin

  1. download Bookmarks_setup_0.3.7.exe
  2. install (all default settings)
  3. start Maya
  4. start mBookmarks.py
  5. got this:
    // Error: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: EnvironmentError: file E:/Users/g2m.agent/Documents/maya/plug-ins/mBookmarks.py line 44: Is Bookmarks installed?
    (Environment variable BOOKMARKS_ROOT is not set.) //
    // Error: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: EnvironmentError: file E:/Users/g2m.agent/Documents/maya/plug-ins/mBookmarks.py line 44: Is Bookmarks installed?
    (Environment variable BOOKMARKS_ROOT is not set.) //
    // Warning: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: Failed to call script initialize function //
    // Error: file: C:/Program Files/Autodesk/Maya2020/scripts/others/pluginWin.mel line 317: (mBookmarks) //

Windows10, Maya 2020.4

Thumbnail not updated after an image changes

Generated thumbnails are associated using filenames.
This works fine for manually assigned files but generated thumbnails
don't take into account file-changes which can be a bit annoying!

A solution could be to add an extra hash based on the file-size to the saved thumbnail cache. Eg. -.png

I'll investigate...

Add tokens to the FFMpeg TC

FFMpeg TC strings don't currently support tokens but we could add this easily to enable customizing the timecode labels.

Add configurable display names to items

As Bookmarks wraps around different pipeline folder structures, the display names of items become somewhat uncontrolled.

E.g. if an asset is called SH010_0010 it will be displayed as SH010_0010. However, if the asset is nested, the display name might end up being SEQ010/REND/lighting/SEQ010_SH010_lighting. which is not what we'd want necessarily. It certainly makes it harder to parse the item names visually for the user.
I think we can add two new columns to the bookmark database to configure the Qt.DisplayRole string of the bookmark item and the assets within it using the tokens module.

C++ OIIO library

There are a few issues with the C++ PyBind11 library:

  • it blocks the main gui thread when used from other threads
  • OpenImageIO has a persistent ImageCache that lives in the C++ library - make sure to manage the cache state so the memory footbprint stays low
  • Things could be faster

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.