Best way to playback video clips in time to the bpm

-skip to second paragraph for the original question-
So I’ve always loved producing music but about a year and a half ago I learned how to DJ, and it’s definitely it’s own distinct art form. I use this performance interface I made in Touch to mix my projects together and add different filters live that involve 2d or 3d components. I ran visuals for a friend’s warehouse event a while back and while it was a lot of fun I really had to stretch the little material I had to keep up with maybe 6 DJs throughout the night. I really want to get into VJing to be able to perform 2 nights in a row and not have the same exact material, and to really have the freedom to just have fun and play it like an instrument. The jump seems pretty straightforward, just find content to mix, make the ability to run it into my switch that acts as a mixer to switch between each project, maybe set up some looping controls, etc. Unless it’s a big name act, at the average concert I go to with visuals, the VJ is just running random clips or some flashing seizure-inducing effect. It’s especially unimpressive when nothing about it lines up with the music.

So my idea would be to simply loop beatmatched clips (for example, people dancing) forwards and backwards in time to the bpm, which once they hit the mixer I can apply whatever mind-bending effects I can think up. However, while touchdesigner runs absurdly complex generative procedures without breaking a sweat it seems to really get hung up with video clips, even at low resolution. I tried using a short clip with resolution like 800x600p in a movie file in TOP with a cue point between 0 and 1, guided by a triangle LFO. Just running this without running it through any generative effects it spikes the CPU usage to over 80% and the frame rate just chokes up. Has anyone here made a VJ interface before or have a solution for my woes? Is there a better way I should be trying to accomplish this? Any help is appreciated!

I don’t really understand what it means but I attached a screenshot of my graphics card info in case anyone wants to know, it’s just what came with the laptop, so it’s probably crap but it has no trouble with projects that I make in TD.

So I tried looping it with just a ramp, only running the clip forward and then just jumping back to the beginning and it actually seems to run fine. I threw another lfo on to control the frequency of the first one to simulate a change in BPM and it pooped out on me again. Unless the DJ/band is sending me bpm info live (unrelated but does anyone have any experience with that?) I suppose I could tap tempo and save the result to a variable, then have an extra button to trigger the tempo change and restart the current clip so I would just get off tempo for a moment and then get it back with a hard tempo transition.

Only looping forwards would only half as cool though, if anyone knows a trick to make the full loop work please let me know!

Being able to run video clips backwards is totally dependant on the codec&settings those videos are encoded in.
As video compression codecs try to save as much bandwidth as possible, not all information is in each frame. As most people play video forward, most codecs are highly optimized to only store the difference to the PREVIOUS frames in the current frame.
That does not work when playing backwards, and you’ll get hiccups while the player is trying to find all information.

So ideally you need an encoding where each frame has all information and is not depending on previous frames.

I heard best backwards playback/VJ scrubbbing results with MPEG2 (encode with I-frames only). Also Animation codec, and a bit less PhotoJPEG.

For a more TouchDesigner-centric way (and also extremely fast), look into the Cache TOP, which saves videoframes to your GPU memory.
If you send a LFO into the Cache Select TOP, you can scrub video as fast as you like.

Hmm ok thanks, great to know, I’m trying to think how I could use that though. The idea would be to just use 2 decks, load a clip into either A or B, play it and when I see a part I like hit an autoloop button and loop it forwards and backwards from the current frame back 1 bar based on the bpm. That seems straightforward enough with the cacheselect but then I would want to hit a double length button, which doubles the length of the loop forwards, into a part of the clip I haven’t yet ran. To do that I would somehow need to load up every frame of the clip when I and be able to access those index values at whichever speed and direction I wanted. I haven’t really used cacheselect before, from what I understand it just grabs the image that was displayed in a given TOP n frames into the past. Any ideas?