Monthly Archives: January 2013

Adding video delay in PixelConduit

When working with live video, the aim is usually to keep delay to a minimum. However it’s fairly common that we end up doing the opposite: adding delay in some parts of the system to compensate for a delay that we can’t eliminate elsewhere.

PixelConduit doesn’t have a built-in “Video Delay” node widget. But that’s no obstacle — we can create it with literally just two clicks of the mouse.

In the Project view, create a Scripted Effect node widget. (This happens by drag’n'dropping from the node box on the left-hand side of the window.) Connect the Scripted Effect between your video source and display output:

Screenshot of the Project view

In this screenshot I’m using a video file as the source, but of course it would be more common that you’d want to delay a live video input… I just wanted to show that this effect isn’t exclusive to live video.

You’ll see the Viewer blank out, as the Scripted Effect isn’t rendering anything useful by default. We’ll fix this in a second.

Click on the “Edit Script” button in the Scripted Effect node widget. This opens the Script Editor window. At the top of the window, click on the Favorites button and choose “Frame delay” from the list:

Screenshot of Script Editor

That’s it! Our custom “Video Delay” node widget is ready to use.

Look back in the Project window, and you’ll note that the user interface of the Scripted Effect node widget has changed:

Screenshot of project view

The script that we loaded has created a slider for controlling the delay. This is obviously handy — now  we don’t need to edit the script to modify this elementary parameter.

It’s not just sliders either; you can create very complex user interfaces in a script node widget too. They can include buttons, labels, custom drawing areas with images… For some examples, have a look at the example templates that are provided with PixelConduit: in the Welcome screen, look for the “Movie Deck” and “Jittered 3D Layer” templates.

What about performance? You may be wondering if this scripted “Video Delay” effect is much slower than it a built-in effect would be. Luckily that’s not the case. The effect is written using PixelConduit’s Surface API and it makes full use of the GPU for storing the video frames. So, everything renders essentially as fast as it would be in native code. If you’re interested in how it works, have a look at the source code in the Script Editor — it’s fairly well commented.

I’m looking for ideas to cover on this blog. Do you have anything in mind that you’d like to see done in PixelConduit using a script or otherwise? Let me know! You can post a comment here, or why not post on the PixelConduit discussion forum and feedback channel.

Conduit reaches version 3.0 and is now free

I’m happy to announce that the Conduit Live app and the Conduit plugins have been updated to version 3.0. A list of new and improved features can be found below… But before getting into the details, there’s another exciting announcement: the software is now available as a free download!

PixelConduit is the new name for Conduit Live. It’s the same powerful realtime video app you know, but now it’s free to use. There are no limitations to available resolutions, file formats or effect complexity.

This is not a gimped trial version, but the full unlimited software. The same applies to the Conduit plugins for Final Cut Pro, After Effects and other apps. You can download the plugins for free, use them anywhere you like and give the software to anyone – no more licenses to worry about.

Of course I’m still in business and hence would like to make money somewhere in this equation… The thing is, I haven’t really been in the traditional app business for a while now anyway. Most of my work recently has been involved with building custom solutions on top of the Conduit app and its underlying framework, now called Conduit Effect System. It makes a lot of sense for me to “liberate” the core software and concentrate on building added value on top of that.

Some of these custom developments are now available as an add-on pack called PixelConduit Complete. It includes Stage Tools, a powerful toolset for live shows and video control; Stereo 3D Tools, a set of highly useful nodes for working with stereoscopic 3D footage; and more! If you’re a pro user of Conduit, check out what PixelConduit Complete has to offer.

I’ve also consolidated all the Conduit documentation into a 145-page book, the PixelConduit User’s Guide. It’s available as a full PDF or individual chapters. Hopefully this will make it easier to learn Conduit and find your way in the app.

Thanks to all of you who have expressed your support and interest in Conduit! I hope you like where it’s going with this new approach. Naturally I’d love to hear your thoughts and comments on this.

What’s new in PixelConduit 3.0

Continue reading

Masking an effect in Conduit

This post is about a compositing technique that’s basic, but not quite obvious!

It’s fairly common that you want to apply an effect only within a specific part of the image, rather than the image as a whole. How to accomplish that?

Check out the answer in the “Conduit Cheat Sheet”:

Conduit FAQ: How to mask an effect

There are actually two methods detailed in that answer. The screenshot below shows the first one illustrated in nodes — check out the link for the other method…


Posterize – script plugin for Conduit

(This post was originally published on July 11, 2011.)

Over at a forum, there was some discussion about how to create a posterization effect in Conduit. There isn’t a built-in node that would do this precise effect, so I decided to write a quick plugin for the job.

Check out the Posterize plugin on the Conduit wiki. (It’s a free download, naturally.)

The effect is created in JavaScript, with a bit of GPU shader language which does the actual pixel processing at blazing speed on the graphics hardware. The JavaScript source code is commented throughout, so if you’re interested in Conduit scripting, this is a decent example of a simple pixel-crunching effect on the GPU.

It’s worth noting here that Conduit has two very different JavaScript interfaces that you can use to render graphics. The one used by this example is called Surface. It’s meant for high-performance rendering that needs to run on the GPU. (The Surface interface is designed specifically for video and effects rendering. It’s native to Conduit, you won’t find it anywhere else. Compared to sprawling 3D graphics interfaces like WebGL, Surface is a lot simpler to learn and use, although it is also more limited when it comes to the real nitty-gritty of 3D rendering.)

The other way to do graphics programming in Conduit is Canvas. This is a well-known 2D graphics interface that’s also part of the upcoming HTML5 web standard. It’s a simple and powerful API for 2D graphics with full antialiasing, gradients, etc. Canvas mostly renders on the CPU, so you don’t get direct control over GPU objects like you do in Surface. For the same reason, Canvas is substantially slower for any kind of rendering where you need to process lots of pixels. Canvas is at its best with vector graphics, but you can do some pixel-level computations with it using an Image object as well.

I’ve written some tutorials about these interfaces:

Canvas Tutorial for Conduit

Making Rain - this tutorial combines both Canvas, Surface and node-based effects in Conduit to create a rain effect

For Canvas, you can also find lots of information online. (Something that I’ve found particularly useful is the Canvas cheat sheet, which lists all the properties and calls available in the Canvas API on a single sheet.)