TubeChopper: YouTube slicing web app

I’m working on a web application to sequence, play and slice YouTube video’s live in the browser on this address You need a MIDI controller of some sort and a browser with MIDI support (I think that’s Chrome or Opera?), connect them to the web app, set cue points (or auto-chop the video) and play them from your controller. This is the first time I’m developing an app like this so I would be very grateful if some of you sound and machine enthousiasts and experts could give me some feedback!

web-MIDI has a surprisingly low latency and glitches and limitations only occur when the internet connection is not great, or YouTube fails to respond in time.

Beware: bleeding edge development: I’m pushing regular updates without going through a well paid team of test engineers, stuff breaks :sunglasses::nerd_face:

I will post a video later with a basic demo of this thing. Meanwhile, take it for a ride, hook it up to your other gear, let me know how it goes!

The following text is from from the Manual page at

With TubeChopper you can now play YouTube like a sampler! You can add cue points and play/sequence them from a hardware MIDI controller.

How to use

General use and Performance mode

Paste a YouTube video id in the provided field (looks a little like this: WF6Ei5PTti8 ). TubeChopper will automatically slice the video and map them to the twelve notes in a chromatic scale. When the pads are solid gray you are in Cue mode or Normal mode. Now you can play the slices from a Midi controller, sequence them, or manually play them from the pads in the web interface. Performance will depend very much upon your internet speed, but generally the response is very fast with very low latency. If you are having trouble you can try to disable DASH (Dynamic Adaptive Streaming over HTTP) in your browser. This will enforce YouTube to buffer the entire video.

There are three modes that alter the function of the pads. Performance mode or Normal mode allows you to play or sequence a video from the pads or from external MIDI events. Set mode allows you to modify the cue points, and finally Clear mode allows you to reset cue points or erase memory.

The side bar

Access the side bar by clicking on the hamburger menu icon in the top left corner of the interface. In the side bar you can configure MIDI control and access memory content.

Set mode

Click on the Set button to enter Set Mode. Memory pads will glow green while in this mode. Hitting a note in Set mode (both in the UI or from MIDI note events) will map the current time from the YouTube player to this note. You can leave Set mode by pressing Escape or clicking the Set button again.

Tip: You can enter Set mode momentarily by holding Ctrl/Cmd while hitting a note.

Clear mode

Click on the Clear button to enter Clear Mode. Both the note and memory pads will glow red. In Clear mode you can reset cue points to zero, and erase memory slots.

You can leave Clear mode by pressing Escape or clicking the Clear button again.

Caution: Changes will be made to memory without second warning!

Nudge mode

Click on the Nudge button to enter Nudge Mode. The time code on the pads will change to a more precise value in seconds rounded to two decimal places, and there will appear left and right arrows to nudge the cue points with a value of 0.05 seconds backward or forward. In this way you can get very precise with your cue points. Whenever you are satisfied just leave Nudge mode by pressing Esc or hit the Nudge mode button again to toggle it off.

Memory functions

Up to twenty video’s along with their cue points are tracked for changes and automatically saved in a single volatile memory slot in your browser, but you can store an unlimited amount of video’s in four Memory Slots using the memory buttons underneath the note pads. For storing a video in one of the available slots you simply click on the desired memory slot. Used memory slots will have a bright green dot in the right corner of the pad, while the last memory slot that was saved to will have a darker green dot as a reminder. If you want to retrieve the saved state from memory you can click the title of the video in the memory contents of the side bar. From this point all changes will be saved in volatile memory again while keeping the saved state intact. At any time you can go back to your saved memory state by going back to the side bar and choosing the desired memory state. Whenever you come back to the app or load a video you chopped before you will find your work restored.

Tip: Keep in mind the four memory slots are completely independent from each other. It’s possible to have the same video in different memory slots, each with different cue point states! However, when you save a video to a Memory Slot that already contains the same video you will effectively overwrite the cue points with the current state of the pads in the user interface.



  • New feature : Nudge mode.


  • New feature : Add feedback messages and color markers to Memory Pads.


  • New feature : Side bar with configurations and memory functions.
  • Improved : Memory functions are completely revised and rewritten
  • Improved : Update Manual


  • New feature : Different modes are now effective both for the pads and external MIDI triggers.
  • Improved : Provide total reset link for troubleshooting (in Manual)
  • Improved : Update Manual


  • New feature : Clear Mode
  • New feature : Show last memory loaded (dark green dot)
  • Improved : Some style changes
  • Improved : Key control (Esc to leave modes)


  • New feature : Add changelog
  • Improved : Limit each memory to 20 video’s.
  • Improved : Update manual
  • Improved : Some style changes

this sounds amazing. Can’t wait to try it when I get to my midi controller. Weirdly your link to the manual in your post 404s - possibly a problem with single page app routing stuff?

1 Like

Who needs a team of well paid testing engineers if you have @jwhiles! :smile: You are right, it does give sort of a 404, even though the url is correct :thinking: Needs checking out.

I’m currently working on a version that will support multiple MIDI channels so you can actually sequence several videos and mix the audio in the browser. If anyone wants to be in the testing team let me know here or dm.


Wow! This sounds awesome, really looking forward to checking it out!

1 Like


i love this so much - incredibly responsive to quick triggers too!

lazy quick test


Whhoooaa cool! Thanks for the post and the test. Loving it. I made an Instagram account for TubeChopper so if you don’t mind I will regram the first official test on my feed?

That’s what immediately struck me. I’m a hardware and cv user because I’m always so bugged by fixing latency, but MIDI through the browser is apparently very efficient.

1 Like

the video is terrible but feel free to repost, by all means :slight_smile:

Haha, no prob, it’s all good fun. And it does a very good job at showing how responsive it is

Goooood Fun!


See, thisssss is what your first demo video should have been.

So dope!

What’d you use to capture system audio & video so cleanly?


@burn whow that is fantastic. So smooth
@rbxbx You got the honor of going first

Keep 'm coming guys :star_struck:


Screenflow. Use it to record tech demos for work. Its not very good.

1 Like



Love the high hat on this one haha, cool :rofl:

Thanks, I didn’t put much effort into setting the start points and it shows!

This is really great, thanks for sharing.

No worries, what excites me most of all is seeing how others will use and misuse the fruit of my labor :grinning:

I’m getting a small roadmap together for features and also want to keep track of bugs, so if you have suggestions I would be happy to take a look.

1 Like

A dumb feature I would use because I’m exceptionally lazy - being able to set the granularity/size of the default slices.

You mean sort of an envelope? I thought of that too, and I think it’s possible to develop something of sorts by controlling the volume of the player with default cc values generated whenever a note is played, and then modify the parameters of the envelope in the web interface. How well the YouTube player would respond to fast changes in volume is yet to be seen of course, but so far it’s been promising.

This is great. Is it possible to control youtube’s “playback speed” via midi? I imagine you could get pretty weird playing around with that terrible time stretch algorithm.


There is player.setPlaybackRate(suggestedRate:Number):Void in the YouTube API so I suppose it’s possible, in theory at least. I will definitely try it out at some point.