Friday, April 02, 2021

Our work on the Mandalorian Season 2

Today ILM released a fantastic behind-the-scenes video showcasing a bunch of the project I've had the joy of being a part of over the last several years at ILM. There's some awesome pieces here, and I'll let the video speak for itself!

Unbelievably, the headline at Gizmodo about our work is... well... unbelievable! "The Mandalorian Season 2 Was Made With the Most Powerful Filmmaking Tool ILM Has Ever Created"... that's quite a statement indeed. I am so proud of my colleagues and all of the hardworking folks behind the scenes on this. It is such a pleasure and a highlight of my career to get to work on this technology.

Wednesday, September 30, 2020

Mark Rober’s epic birthday celebration for a young cancer survivor

Mark Rober’s science YouTube channel is pure awesome, but this time he REALLY knocks it out of the park to give a surprise birthday party to a young cancer survivor. What a legend.

Saturday, February 29, 2020

TechCrunch: "How ‘The Mandalorian’ and ILM invisibly reinvented film and TV production"

Another quick post to share one my of favourite articles about StageCraft that went out last week. TechCrunch does a fabulous breakdown on what tech we made, how it works, and what the benefits are to the Film and TV industries.

Super solid article here and worth the quick read!

The awesome Ian Failes also posted a great summary article as well, with a really fun headine:
"You are going to flip when you see this video of how 'The Mandalorian' was made" :)

Thursday, February 20, 2020

The Virtual Production of The Mandalorian, Season One

Guess what?? The Mandalorian was [mostly] filmed indoors... there is NO on-location work done for this show. *mind-blowing sounds ensue*

This is the crazy new way of making movies and TV that I've been working on here at ILM as part of the StageCraft Virtual Production Engineering team for the past 5 years!! The talent and inventiveness and sheer badassery of everyone who touched this project is yet another reason why working at ILM rocks so much.

Check it out!!!!!!

Thursday, November 15, 2018

‘Batkid’ cancer free five years after saving San Francisco

One of the absolute best days of my life was volunteering for Make-A-Wish for the magnificent Batkid wish. (Blog post about all the fun we had here: The day Batkid defeated me, and rekindled hope in humankindness:

Today is the 5th Anniversary of that magnificent day in San Francisco, and here's an update from Make-A-Wish on how the real Batkid, Miles, is happy, healthy, and a true superhero.

Friday, August 31, 2018

Drag and Drop from a QTreeWidget to another QTreeWidget

Sweet mercy of mercies. I've been trying for *much* too long to figure out how the (hell!) to drag-and-drop simple MIME data from one Qt (in this case, PyQt) QTreeWidget to another QTreeWidget. After what felt like about 1000 pages of StackOverflow that I read through, I finally found a super-helpful example from someone demonstrating custom MIME types.

I just wanted a simple example of drag-and-drop from one QAbstractItemView to another, and so while that example was fantastic, I was able to simplify it much more to demonstrate just a simple-as-heck/dumb-as-anything/silly-old drag-and-drop. The documentation is shockingly bad about Drag-And-Drop in general in Qt, and I feel like it's so overly complicated when you just want to do something simple... I figured I'd repost this demo code here for the possibly-millions of other folks with the exact same question as I had: "How do I just.. like... drag and drop a SIMPLE thing from on QTreeWidget to another?!?!"

My friends, the answer is annoyingly simple, and there's nothing special here. You don't need to set a bazillion obscure flags on your QTreeWidgetItems or the other 1000 things I tried before landing on the simple way to do it. Here you are (and to my future self who is trying to remember this example... you're welcome) :)

from PyQt4 import QtCore
from PyQt4 import QtGui

class DragDropTreeWidget(QtGui.QTreeWidget):
    def __init__(self):
        super(DragDropTreeWidget, self).__init__()        
        self.setRootIsDecorated(False) # I'm using the QTreeWidget like a QTableWidget here.
    def mimeTypes(self):
        mimetypes = QtGui.QTreeWidget.mimeTypes(self)
        return mimetypes

    def startDrag(self, allowableActions):
        drag = QtGui.QDrag(self)
        # only one item is selectable at once so self.selectedItems() should have a length of 1 only
        selectedItems = self.selectedItems()
        if len(selectedItems) < 1:
        # else use the first item
        selectedTreeWidgetItem = selectedItems[0]

        # for this to work, just note that you need to add your own extension to the QTreeWidgetItem
        # so you can implement this simple data getter method.
        dragAndDropName = selectedTreeWidgetItem.dragAndDropName()
        mimedata = QtCore.QMimeData()

    def dropEvent(self, event):
        if event.mimeData().hasFormat("text/plain"):
            passedData = event.mimeData().text()
            print "passedData", passedData
            # TODO handle drop event (prob emit a signal to be caught somewhere else)

Magnificent! So that's it... amazingly. Nothing else is required. See... drag and drop in PyQt IS simple... right??! Anyone?!?

Note that to instantiate this demo you should do something like so, twice. Make two of these tree widgets and add them to your MainWindow and then you can test drag and drop between them.
treeWidget = DragDropTreeWidget()        
header = QtGui.QTreeWidgetItem(["Header Name"])

# Note this item should actually be a custom extension of QTreeWidgetItem if you want to implement the "dragAndDropName" method mentioned above.
root = QtGui.QTreeWidgetItem("Item in tree") 

Happy drag-and-dropping, friends!

Tuesday, August 07, 2018