Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 18 00:00
    Yisus7u7 starred pyqt/python-qt5
  • Jun 07 05:33
    mottosso commented #368
  • Jun 06 22:11
    OlafHaag closed #368
  • Jun 06 22:11
    OlafHaag commented #368
  • Jun 06 07:59
    mottosso commented #368
  • Jun 06 07:56
    mottosso commented #368
  • Jun 06 01:13
    OlafHaag commented #368
  • Jun 05 18:08
    avalon1337 starred pyqt/python-qt5
  • Jun 05 15:17
    mottosso closed #369
  • Jun 05 15:17
    mottosso commented #369
  • Jun 05 15:08
    OlafHaag commented #369
  • Jun 05 15:07
    OlafHaag edited #369
  • Jun 05 07:56
    mottosso labeled #369
  • Jun 05 07:56
    mottosso commented #369
  • Jun 05 07:49
    mottosso commented #368
  • Jun 04 23:57
    OlafHaag opened #369
  • Jun 04 23:43
    OlafHaag opened #368
  • Jun 02 08:10
    habedi starred pyqt/python-qt5
  • May 31 19:50
    notelho starred pyqt/python-qt5
  • May 30 08:59
    souvick1968 commented #67
sixjames1000
@sixjames1000
Awesome! Thanks@for the input! One more :) what about Pype.Club ?
Roy Nieterau
@BigRoy
Pype.Club clients are mostly favoring Ftrack as far as I know - so I don't think there's much push for them to go Shotgun. @mkolar can tell more.
sixjames1000
@sixjames1000
How does pype.club differ from pyblish+Avalon combo ?
Roy Nieterau
@BigRoy
I'm not a Pype.club user or representative so take my knowledge with a grain of salt. :) They have much work involved with integrating ftrack for their productions. Additionally they offer in-depth "studio configs" and have added more features/customization to Avalon. There's a lot of talk about merging a lot of those features with Avalon-core soon, but it's a large undertaking and not likely to happen within the month. (It could, but they are quite busy and have sligthly different focus for their clients currently). They do use Pyblish. They do use Avalon. They do use Ftrack a lot. So basically it is that combo, just imagine a lot of extra sauce on top.
It depends on what your needs are (and what your background is) to decide what the best way forward is for you. If you're interested in Pype you might want to chat more on one of their channels as I feel it's somewhat less linked to solely Pyblish.
sixjames1000
@sixjames1000
Gotcha makes sense! Thanks!
Marcus Ottosson
@mottosso
Avalon mostly implies Pyblish. Pyblish handles the publishing aspect. Then there are similar mechanisms to list assets in a library and import assets into a DCC. They build on similar principles of being data-driven and put together with plug-ins like Pyblish.
Here's the Avalon-specific channel https://gitter.im/getavalon/Lobby
sixjames1000
@sixjames1000
I guess the question would be when does it make sense to rely on Avalon vs just pyblish. Pype.club Incan see the ftrack built in ‘advantages’ but if we’re@on shotgun I wonder if pyblish+Avalon is all we need. Or even just pyblish?
End of the day I’m just looking to:
Publish and load files under a defined working context say by environment variables. Push publishes and register them into a front end like shotgun/ftrack for scheduling purposes
Roy Nieterau
@BigRoy
if you have no need to also load those published files and version them in your own asset management than you won't need avalon. E.g. if you are using the loading / scene management system from Shotgun Toolkit in production and you're only looking to swap out how to publish to the shotgun or ftrack database than you don't need Avalon. If however you'll want to publish versions, make those manageable in your scene and loadable across different DCCs with a system you can easily extend for your studio configuration than Avalon provides the basis for that - I'd recommend using it.
Ah, since you mentioned "load" there then it's something that Pyblish does not define at all. So you'd need more than Pyblish alone - like something of your own, Shotgun Toolkit or Avalon.
Johannes Hezer
@nebukadhezer
It has been a while but sgtk offers a functional round trip. From a task in sg to a file on disk and then potential publishes back into shotgun. And it has a strong configuration layer which can be overwhelming. But you do not need to touch boilerplate code you configure and write hooks for asset management and publishes... and it even tackles development with custom launchers etc... I don’t know Avalon and what it covers.
Marcus Ottosson
@mottosso

@sixjames1000 If you aren't sure, start with Pyblish, and then discover what else you need. Odds are it is enough. It'll help you get assets out of e.g. Maya and onto disk, and if you format them right and arrange their files neatly you may be able to rely on just the regular file browser and standard import/referencing for your loading purposes.

Avalon comes in when you have more advanced requirements, when the file browser isn't enough and when creating assets involves too much boilerplate. Avalon has plug-ins similar to Pyblish but for creating new assets and for loading them into e.g. Maya, with similar kinds of options and customisations. If creating and loading isn't something you struggle with, then you probably don't need that level of complexity.

Andre Anjos
@andre.anjos_gitlab

Hi all! How's it going. Hope everyone keeping sane and safe :)
I've been quiet for a bit while we change our pipeline to Maya (which is awesome news), but in the meantime I'm moving my Python 2.7 tools to 3.7.8 version to meet the new standarization and I'm hoping with Maya 2022 Python 3 I can basically just keep everything neat.
Anyway... So I'm running tests within a Virtual Environment with Python 3.7.8 and PyQt5 5.15 and have a couple of questions and unfortunately issues, please.

  1. In the Github wiki it reccomends you use PyQt5 5.7.1, which it does not seem to exist and for Python 3.7.x using 5.8 will have some errors. Will leave those for now.
  2. If I use PyQt5 5.15 and run the demo via the cli it opens with no major issues.
  3. If I run within Pycharm it just exits with no details as per below:
Using Python @ 'D:\WORK - Personal\AO\Tools\pyblish\venv\Scripts\python.exe'
Using PyQt5 @ 'D:/WORK - Personal/AO/Tools/Pyblish/venv/lib/site-packages/PyQt5'
Targets: default

Process finished with exit code 0

So I feel a bit stuck for the moemnt and not sure if I should persuse point 1, when it seems that it can work as per point 2 with the demo.
Thanks very much guys :)

Marcus Ottosson
@mottosso
Hey Andre! I recently spun up QML using the latest versions off of PyPI and documented all involved versions here: https://tech-artists.org/t/maya-2022-pyblish-publishing-alternative/13788/5
As for PyCharm I can't be of much help, but I would investigate whether which Python is actually being picked up. Like calling print(sys.executable) from within a plugin
Make sure it's the one you expect it to
Andre Anjos
@andre.anjos_gitlab
Hi Marcus! Awesome! Will have a look at the thread :)
Will do! It seems to me that it's the version I want (3.7.8), as is the version that I'm mainly running on the machine and is picked up by the venv. Will no doubt follow your reccomendation and let you know :)
Thanks very much!
Andre Anjos
@andre.anjos_gitlab

Hi Marcus,
Had a look at the TA.org thread and checked the executables and seems to be ok. The only difference I have with versions is that I'm running Python 3.7.8 instead of 3.7.3
Also tried running this within Cinema with the following:

from pyblish_qml import api, show

api.register_python_executable(r"C:\Program Files\Python37\python.exe")
api.register_pyqt5(r"D:\Git\pyblish_test\venv\Lib\site-packages\PyQt5")

show()

Issue:

Traceback (most recent call last):
  File "scriptmanager", line 4, in <module>
  File "C:\Users\anjosa\AppData\Roaming\Python\Python37\site-packages\pyblish_qml\api.py", line 1, in <module>
    from .host import (
  File "C:\Users\anjosa\AppData\Roaming\Python\Python37\site-packages\pyblish_qml\host.py", line 701, in <module>
    host = QtHost()
  File "C:\Users\anjosa\AppData\Roaming\Python\Python37\site-packages\pyblish_qml\host.py", line 284, in __init__
    from .vendor.Qt import QtWidgets, QtCore, QtGui
  File "C:\Users\anjosa\AppData\Roaming\Python\Python37\site-packages\pyblish_qml\vendor\Qt.py", line 1874, in <module>
    _install()
  File "C:\Users\anjosa\AppData\Roaming\Python\Python37\site-packages\pyblish_qml\vendor\Qt.py", line 1852, in _install
    our_submodule = getattr(Qt, name)
AttributeError: 'module' object has no attribute 'QtGui'
Thank you :)
I will try with Python 3.7.3, just in case as well.
Ohhhhh waiitttt!!!!! :D
Sorted it out, I think... I had an incorrect PYTHONPATH in the environment variables, duh!
I will do a few more tests but it looks like its working absolutely fine :)
Andre Anjos
@andre.anjos_gitlab

Hi all,
Quick questions about saving metadata into Maya file for Pyblish to use.

One of the situations we have to sort with Pyblish is to allow the user to override specific plugins, as we have a few scenes that depending on the context may not necessarily have to meet the usual strict conditions that we have set.
In Cinema 4D I manage to have this overridden by injecting some data into the document, where I can use getters and setters, without causing problems to the files.
For Maya I'm not absolutely sure about how to proceed with this after a bit of googling. Would be interesting to know how you deal with this scenario, if you experienced it, please?

Perhaps there's another workflow for overriding the plugins as shown in the documentation (https://learn.pyblish.com/14-data), just don't quite understand if this is a solution to store the data into the context?

If not, I'm thinking at the moment to have other 3 solutions (that I'm aware of):

  1. Use fileInfo - This command is not editable so it poses a problem if needing to update the data.
  2. Add the data to a Node or scene object. I'm uncertain if this can work, as it gives the possibility of the user messing with it.
  3. Creating a file along with the main Maya file (json, xml, etc) - I would prefer not to have dependency files, as this give the possibility of misplacing files.

Thank you all in advance guys! :)

Marcus Ottosson
@mottosso
Hey Andre! The Maya-esque way of storing metadata in scenes is to make a node for it, and store it as attributes. That's how native and plug-in render attributes, preferences and display attributes etc are all stored. With a few exceptions.
So depending on the data you're storing, you could make an empty transform node and add string attributes to it with your data. It could be a JSON string for complex data.
If the data is node-membership, you could make an objectSet node, and store both attributes and use the set to store node relationships.
You can hide the node from the outliner too, to keep it internal, using the hiddenFromOutliner attribute on native Maya nodes.
For a more global storage, something that persists across scenes, you could leverage the cmds.optionVar mechainism. That's how user preferences are stored in the users ~/maya/userPrefs folder. You could access it from plug-ins.
Andre Anjos
@andre.anjos_gitlab
Hi Marcus! This is really useful. Thank you very much!
For the moment I think the empty transform node approach would be the best choice. It makes sense and think will do the job. It's a rare case the artists need to deal with internal data, on our current projects. So I doubt the data will be messed around.
Thanks again! :)
Marcus Ottosson
@mottosso
No problem. :) I've found it helpful to let it remain visible in the outliner, and call it e.g. publishingMetadata or the like. It helps with debugging things too, and you can put things in there that you want artists to access, to customise their publishing experience. Like includeTextures or cacheEveryFrame etc.
Andre Anjos
@andre.anjos_gitlab
Awesome! Will keep that in mind. Sounds like a great plan :)
thanks again :)
Marcus Ottosson
@mottosso
You are very welcome :)
Roy Nieterau
@BigRoy

The instanceToggled event/callback - does it allow to return False / True on whether the callback succeeded? We might have some particular cases where toggling in the UI might need to be blocked when the host is in a state where it's currently not allowing the instance state to be modified.

E.g. a node in Houdini is currently bypassed (disabled) and the Pyblish UI shows it turned off. The user wants to enable it in the Pyblish UI, which in turn triggers our instanceToggled callback which tries to disable the bypassed state of the Houdini node. However, when the user is currently inside a Take in Houdini all nodes are locked for editing and this change is disallowed.

Any thoughts on this? :)

Since these are just events from the UI maybe it makes no sense for them to return whether the change should be blocked/reverted?
Marcus Ottosson
@mottosso
It's an interesting use case. We could do what Qt does, and have an "accepted" reply from an event? So that your callback could then return True/False, which could be handled in the UI.
A brute force alternative might be to make the event reset Pyblish whenever a locked node is clicked, so the unticked state returns
Roy Nieterau
@BigRoy
I was thinking along those lines to. Kind of like Maya's before save callbacks, etc.
But actually - it does pass along the instance itself to the callback. I could technically just "revert" the instance.data["active"] state in the callback :O or is it publish? I always forget which was the latest.
Marcus Ottosson
@mottosso
If that's the case, I wonder whether the UI would recognise that it's been changed, and update the UI. But that would be a smaller challenge, for the UI to just check that post-emit
Roy Nieterau
@BigRoy
Thanks - might make this an issue on Github so it's trackable. On our end I'll check how hard we actually need this anyway.
Marcus Ottosson
@mottosso
It does reach into the territory of using the Pyblish UI to make interactive changes to a scene, which has always been a no-no. The "proper" approach would be to leave editing to the DCC, in this case something the user does ahead of publishing. In this case, why not let users use the disabled state of nodes to indicate whether or not they want to publish it?
Roy Nieterau
@BigRoy

In this case, why not let users use the disabled state of nodes to indicate whether or not they want to publish it?

This is actually the case. The UI takes whatever is in the scene. It's just "eased" for the artist to allow them to toggle the instance in the UI. Either way, their change propagates and gets stored with the source file. So the work file has the correct state for the node whether it should publish or not.

Marcus Ottosson
@mottosso
image.png
We've got Clarisse support, thanks to @zuokangbo!
Roy Nieterau
@BigRoy
Lovely! :muscle: :heart:
Toke Jepsen
@tokejepsen
Nice one!