Triggering Videos with Timeline, Exporting 3D Mapping

Hello and thank you in advance for your advice. I am new to TD and am struggling with two issues.

I am creating a spec video for what will ultimately be a live performance. It is a 3-minute video of a rotating 3D cube with video cues projected on it, timed to one audio file. The cube will ultimately be a physical 3D object in a performance space and the projections map onto it. In the live version, I will call them live on TD. Today, I need to make this YouTube demo to show the idea to others.

I have two questions. Any help with either or both would be greatly appreciated:

  1. I have multiple videos that need to be triggered by different points in the timeline (10sec, 25 sec etc). I have matched the End and REnd of my timeline to the time of my audio file. I have 12 video files that each need a special timeline trigger. How do I do this?

  2. While I am ultimately using TD for a live performance, I need to create a short spec video I can upload to YouTube. When I attempt to export a movie version, only the video appears and my geo box does not appear anywhere. How can I export my videos projecting on my rotating box?

Thank you!

  1. I have multiple videos that need to be triggered by different points in the timeline (10sec, 25 sec etc). I have matched the End and REnd of my timeline to the time of my audio file. I have 12 video files that each need a special timeline trigger. How do I do this?

Check out the Timer CHOP’s and the MovieFileIn TOP’s operator-snippets. In particular, the Timer CHOP’s segments serial and the MovieFileIn’s one with ‘timers’ in the name. The idea is to make a Table DAT with the length and name of each video, use the Timer CHOP to cycle through each segment, and feed that to a MovieFileIn TOP to read the appropriate video. Then take the 6 TOPs and use them as textures on the faces of the rotating cube.

The segments serial snippet has a Table DAT that has a line for each video. Append a column named ‘filename’ and enter the path to the video for the face, one line per file. Also, change the Timer CHOP’s Active to while-running (so it resets at the beginning of the frame range), and change the table 1’s delay column to all zeroes (no delay between videos).

So for a given face’s MovieFileIn TOP, take the value of the segment from the Timer CHOP’s output and use that to read the correct cel from the Table DAT, e.g. your File parameter would be:

op('table1')[op('timer1')['segment']+1, 'filename']

The operator snippets from the MovieFileIn TOP do something pretty similar but are much more full-featured.

Hey there and welcome to the forum :slight_smile:

You could also use the animationCOMP. I´m not sure if it makes your life easier than @antoinedurr solution in this case but in general it´s a good fit for working with a timeline. It´s definitely worth a try if you want to learn touchdesigner and like to work with keyframes instead of generative logik or sensor data.

I guess this might have something to do with the materials or so. 3D was a bit unintuitive for me when I started with Touchdesigner… If you would share your patch I could look into it and see if I find something.

Cheers!

Thank you so much for your insights and help. I am super grateful you are sharing your knowledge and experience with me.

Thanks to your help I now have my video cues set up in a nice sequence with some cross fades, all projecting on my little 3D object. I have two small problems I am still unable to solve. I would be very grateful for your advice.

  1. All of my videos (Movie File In TOP) are initializing partway into the video file, then looping back to the beginning, instead of just playing through in sequence. I have all of them set to Play Mode: Sequential and Cue Point: 0. I’m not sure what I am doing wrong here.

  2. I am using the Cross TOP to create some cross fade effects. It looks great, except the the two videos (Movie File In TOPs) are in the wrong order every time. I have carefully connected Video 1 into the top input and Video 2 into the bottom input. I’ve tried switching them just to troubleshoot and strangely the effect was the same. I would be very grateful for insights on what I have overlooked.

  1. All of my videos (Movie File In TOP) are initializing partway into the video file, then looping back to the beginning, instead of just playing through in sequence. I have all of them set to Play Mode: Sequential and Cue Point: 0. I’m not sure what I am doing wrong here.

Unless you have a way to pulse the cue parameter, they’ll all start playing at the start of the timeline. This is where the Timer CHOP is so useful, as it outputs a channel that contains the playhead’s position that you can stuff into the MovieFileIn’s index parameter (with play mode set to ‘specify index’). The other option is to use the ability of the MovieFileIn TOP to play a whole folder’s worth of videos (I believe it can do that, not 100% sure). It’s got its own crossfading capability.

  1. I am using the Cross TOP to create some cross fade effects. It looks great, except the the two videos (Movie File In TOPs) are in the wrong order every time. I have carefully connected Video 1 into the top input and Video 2 into the bottom input. I’ve tried switching them just to troubleshoot and strangely the effect was the same. I would be very grateful for insights on what I have overlooked.

For starters, I would set my Timer CHOP’s time control parameter to ‘lock to timeline’, that way you can scrub back and forth and better debug what’s going on.

W.r.t. your crossfades, they’re being driven by LFOs, but those LFOs aren’t directed by anything for when to start, so what you get out of your Switch TOP is wherever the LFOs happened to be at the time – great for randomness but not particularly predictable. A quick fix might be to use the Timer CHOP’s pulse outputs which can be wired to reset the LFOs at key points – though that defeats the point of a random LFO. Maybe a better approach is to use another Timer CHOP to just drive the crossfade.

Overall, it might behoove you to think more in “editorial style” – think of a bunch of timelines all happening at the same time, some are videos, some are effects like crossfades, etc. Each “timeline” shows black outside of its active range. Then instead of a Switch TOP you’d use a Composite TOP to layer all the sources. N.B. there might be performance implications, I don’t know.

Thank you so much for this excellent advice. I have rebuilt my project using layers of timers instead of the LFOs as advised. I also added a CHOP Execute DAT with custom script with the idea of triggering the CrossFade timers as well as the other video files from this script. I have gotten quite a bit closer, but every file, and the CrossFade Timers, all start partway in and then loop back to the start of the cue. I have included pretty aggressive script to re-initialize each CrossFade Timer and video, but to no avail.

Below is the file. I would be very appreciative of your advice.

JW_prototype_26062025 v2.toe (21.8 KB)

Your problem is still that all the MovieFileIn’s are running sync’ed to the timeline rather than sync’ed to the timer. They all need to be ‘specify index’, and that index is going to come from the timer.

Nearer to the timer, I’d ditch the CHOPexec DAT in favor of the the timer’ callbacks DAT. Turn on the timer’s timer pulse output and set the timer count to ‘frames’.

Point each MovieFileIn’s index parameter to the timer’s timer count output. Then in the timer’s callbacks, in the ‘onTimerPulse’ callback, that’s where you’d reset the crossfade timers. But you could also take the naive approach of wiring those crossfade timer’s start pulses to that one single timer_pulse channel from the master timer, i.e. reset all the things, all the time. This should work too, as basically at the start of each new video you’ll get a pulse in the master_timer (your timer1). All MovieFileIn’s will restart (assuming they’re all pointing to your master_timer, and all crossfades will restart, and the segment will increment as it is doing already. No code needed!
JW_prototype_26062025 v2.2.toe (20.7 KB)

Thank you so much for this incredible help!