Tuesday, June 27, 2017

Cirrus: Versioning control over the cloud embedded in 3D app ( Python )

I usually work on very different type of assets such as Digital assets in Houdini, meshes, textures etc.
I wanted to have a easy versioning control over these objects just like my python code on github. That is why I decided to create my own tool for that directly embedded in 3D apps using Python.

I decided to go with Amazon Web Service S3 simple storage, it allows you to keep former version of your assets and have a decent pricing model as well. It comes with a neat python API and it's also easily scalable.

This tool works on a base of "project", a project is just a folders hierachy where you save your assets and scenes. These folders also exist on the Amazon Cloud. You can then send and get data from / to the cloud direclty you app.
As it is fully python code only ( with PySide2 for UI and boto3 amazon API ), it can be used in many 3D packages which support python ( Maya, Nuke, Houdini, ... ) or even as a standalone app. The video of example bellow is made in Houdini only because it's my main 3D package.

It also support a lock system where you can "lock" a file you want to work on. The file is then locked on the cloud. If another artist want to work on that asset he / she will have to wait until you finished your task  on that asset ( until you submit your asset on the cloud or unlock your file ). This process ( very well known as "checkout asset" in Perforce system for instance ) allows you to safely work with multiple artists on the same project without overlapping your work.

It also comes with a "plugin" system which allows you to execute python scrits after an action such as, Get a file, Lock a file, Save a file or Click on icon. This, according a filters ( type of files, software etc.).
This allows you for instance to reload a geometry after getting a new version, reloading an digital asset etc.

This tool is designed to work with Amazon S3 system but the in / out interface is one python file, which can be changed to use another cloud provider as long as they have python API available.

Here is an example of the user interface of the tool direclty embedded as a python panel in Houdini where you can browse your project and get or send data from / to the cloud:

Here is a video explaning a bit how it works and what features are available:

The tool is still work in progress, there are still some bugs I have to get ride of. I also have to work a bit more and the UI and features.
As usual, the code is available and free on my github:

Tuesday, March 7, 2017

Houdini R&D: Gaia Scatter

Hi folks !

Here is a small R&D project I've been working on: Gaia Scatter. It's a toolset made of few digital assets driven by a Python interface which helps you to scatter objects on a terrain.
It allows you to have the flexibility of painting combined with the power of procedural rules.

As it's asset-based you still have a full control on what's going on. No black box here.

As said, it's still WIP / R&D and I'll test more features soon such as LOD system according to the position of the camera, variation in shaders, dynamic object layers, etc... I'll post updates of the tool here.

In the meantime, you can find the first video on my vimeo account as well as the source code / digital assets on my github ( not very commented yet tho ... ).

Thursday, February 23, 2017

HelpCard maker for Houdini 16

I have ported Helpcard maker for Houdini 16 ! enjoy :)

The houdini 15.5 version is still available under the branch "Houdini 15.5" on my Github !

Friday, January 20, 2017

Helpcard maker update: 0.9.4

I've just finished an update of helpcard maker, beside few bug fixes, you can now also reorder widgets with a drag and drop system, by clicking on the small handle on the left side of the widget:

More informations and install files here

Friday, December 30, 2016

Helpcard maker for Houdini

Help card maker for houdini from Cetras on Vimeo.


   - Fix folders and multiparms random order.
   - Only one instance per multiparm is added to the parameters help grid.
   - Added handles on the left side of widgets to reorder widgets.

This is the first version of "Helpcard maker" for Houdini 14 to houdini 15.5.

To install it follow these steps:

- Download the lastest zip archive of the tool on my github deposit: ( github => GJpy )

- Go to your HOME folder/houdiniXX.x and unzip the file in here, you should have now few new files and folders:


- Launch Houdini, you'll have the Helpcard maker pypanel available and should be able to directly add a help card maker tab.

Any issue or install troubles, feel free to drop an email:

This is the first release of the tool, a lot of new features will be added shortly such as link to other pages, vimeo video, new widgets and more !

Monday, May 4, 2015

HCom For Houdini 14.0 and Maya 2015

 To download the latest version :

Houdini Client:

For Houdini 14 ( 14.0.291 recommended), tested only on windows.

Maya client:

Hcom is a client – server communication system for Houdini and Maya

It allows users to send data between sessions ( Maya and Houdini ) through local network.

You can send data like meshes in .obj, bitmaps, alembic caches and Houdini digital assets. More to come soon ...
Maya can receive digital asset only if you have Houdini Engine installed.

Thursday, December 18, 2014

Demoreel update !

Hi folks,

Here is my latest updated demoreel where I show works I have done as Lighting / Comp TD or Pipeline TD, more update to come soon !

Tuesday, November 11, 2014

hman: Jobs management tool (beta version 0.5.0)

Hi all,

I would like to share a python tool I've been working on for several weeks now: hman ( for Houdini MAya Nuke ).

It allows you to create a stack of jobs and run them one after the other. Jobs can be:

- Maya jobs => Rendering a scene or exporting meshes to obj format. You can as well override the camera used or the render layers rendered from hman directly ( .ma file strongly advised ).

- Houdini jobs => Rendering nodes from a given hip file. Nodes supported for the moment are : Mantra nodes, comp nodes and rop output. You can select the node you want to render from hman directly.

- Nuke jobs => Writing images from a given write node ( from a nuke script) , which can be selected from hman too.

- Python jobs => Executing a Python script with a given Python interpreter.

- Batch command jobs => Can either run a .bat file or a given command with args if any ( test on window only for the moment ).

hman main user interface

This tool is written in Python, but doesn't use software python implementation directly as Hython or maya.cmds, it generates scripts and run them with the proper interpreter, this means it can be used with any Python 2.x versions. It's written using PyQt4 tho, be sure you have the right version of PyQt, compatible with the Python version you use, in the "libs" folder.

You can download the source code latest version on Github. Keep in mind it is still in beta version.

Find more infos and documentation here: hman doc

Any questions, feel free to contact me:

Sunday, October 5, 2014

PyTake2 create take using python in Houdini

PyTake is now completely rewritten, new version is now fully object oriented. It allows the user to create and edit takes in houdini using python.

It works with all version of Houdini (Apprentice, Apprentice HD, escape, master or Indie.) Free for all usage ( comercial or not ).

To create a new take, just instance a new Take() object :

import PyTake2 as pt

# This will create a new take and add it to the take list
myTake = pt.Take('mytake')

#This will include the display flag of the node « /obj/grid/grid1 » to the take.

# You can also use a hou.Node() as parameter :
node = hou.node('/obj/sphere/sphere1')

# To include all parms of a node to the take, use :

# To add only some parameters, use :
myTake.includeParms(node, parms_dict={'radx':None, 'rady':None, 'radz':None))

# To add only some parameters, and set node's parameters values use :
# This will set radx to 5, rady to 1 and radz to 2 in the take.
myTake.includeParms(node, parms_dict={'radx':5, 'rady':1, 'radz':2),set_parms_value=True)

#To exclude parms from the take, use :
myTake.includeParms(node, parms_dict={'radx':None, 'rady':None, 'radz':None},include=False)

# To copy a take
copy_take = myTake.copy()
# => this create a new take name_copy

# To remove a take :

Sunday, September 21, 2014

Maya / Houdini Python live connection

I'm playing a bit with rpc module and python. Here is a little example of what I've tried so far, a live connection between Maya and Houdini.
Maya looks up for Houdini start up and then connects its python to Houdini's automatically. Thanks to that, in this video, I create a "live connected" camera and I can also send meshes directly from Maya to Houdini ( and vise versa ).

This needs the rpyc module for Python 2.7 ( it is also included with Houdini ), you can downloaded it at this adress :

Here is the source code for the connection Maya => Houdini. It must be saved in the scripts folder of maya and used as followed from a Python shelf tool:

        import MayaModule
        ui = MayaModule.MayaConnectionUI()

You can copy the icons green_light.png and red_light.png in a folder "icons" saved in the same place as the python file.

On the Houdini side, you must have a Python file called "" (or if you use Houdini Escape ) withthese two lines of code in it:

        import hrpyc
        server = hrpyc.start_server(port=18812)

Saturday, August 30, 2014

Alien Isolation Trailer

A it late, but finally here is the latest trailer I worked on at Axis animation, as lighintg / compositing artist and TD ! That was almost a year ago... Good to see it online !

Tuesday, August 5, 2014

Powerful method hou.hipFile

Just a quick arcticle to speak a bit about the not well known but powerful python class hou.hipFile.
It allows you to have access, open, edit, save, merge hip file from python. For instance, you could drive Houdini from an external python tool without opening Houdini at all.

You have access then to all python methode of the Houdini module. You can export geos, do mantra rendering, create / manipulate object and otls etc.

For instance the code bellow, we will open the hip file "houhipfile.hip" and export the geo which is in that file tanks to a rop_output node, (warning this does not work with houdini apprentice):

# Here we setup the path to the HIP file as well as where you want to export the bgeo file.
PATH = r"H:/houhipfile.hip"
OUTPUT_GEO = r"H:/teapot.bgeo"

# Here we load the hip file.

# Then we fetch the rop output node
ropNode = hou.node("obj/outputGeo/rop_output")

# We change the Ouput path parameter

# We do the render ( exporting the geo )

# And finally we clean the current houdini session

This could be launched from any python tool, with a nice UI in PyQt for instance.

Instead of opening a hip file, you could of course create nodes from scratch:

root = hou.node("/obj")
geo = root.createNode("geo")
and then you have access to the geo node's parms, etc.

More infos here => hou.hipFile class help
And you can download the hip file as example here