Follow this guide to create a timestamped setlist of the songs you played during your stream – great for using as clickable chapter markers in your YouTube VODs!
When I first started streaming on Twitch, I quickly learned how to use Streamersonglist so that viewers could choose songs from my list. For a while, I used to copy/paste the setlist history into my YouTube VODs, but it was messy, needed lots of manual editing, and quickly got very boring.
So I automated the whole process! Find out how below.
This process relies on Touchportal. Get it from www.touchportal.com
The pro version of Touchportal is only $13.99 for a lifetime license, so it’s insanely good value for money. Get it. (I wish they had an affiliate scheme, I would do far more to promote it.)
How to generate a setlist from streamersonglist following your stream
Before we get started, we need to create a text file that TouchPortal will use to write the data to, for each stream. In the example below, mine is called “time_stamps.txt”. Save it somewhere logical, as you’ll need to tell TouchPortal where this file lives.
Starting the stream with Touchportal
When you start your stream via a button on Touchportal, you can add other actions to that process. We will start the process of creating a blank text file for our set list, and begin writing to it.
YouTube needs an initial timestamp of 00:00 so we’ll hard code this in from the start.
I like the first line of my setlist file to be the date, and then we add 00:00 – Intro
Touchortal “code”:
The first line just clears the text file from the last stream, so that we’re starting from scratch.
I add small delays in between each command, as seems common practice, especially where there are file operations involved.
Throughout the processes below, you will need to link to your own time_stamps.txt file, wherever you saved it.
There is a more detailed description below, including which TouchPortal functions to use.

Line | TP function | Description |
1 | Remove line from file | This just clears the timestamp file from last time, so that we’re starting with a clean, blank file. |
2 | Wait for timer | Adds a short delay, time for processing. |
3 | Append to file | Writes the date to our fresh timestamp file. |
4 | Wait for timer | Adds a short delay, time for processing. |
5 | Append to file | Adds the zero time start point, which YouTube needs. It must start with 00:00 but the rest can say whatever you want. |
My streams start with a countdown timer, but even if you launch straight in, there’s always going to be a bit of chat before the very first song.
Creating the timestamp for each song
Next, we need a reliable way of triggering a timestamp when each song starts. Preferably this should be tied to something you’re already in the habit of doing.
For me, I have a button on my Touchportal which mutes and un-mutes my vocal reverb. It also triggers a source in OBS to display an overlay showing the name of the current song, effectively to announce that song.
It was therefore an obvious choice to attach the timestamp action to this particular sequence, because I’m already in the habit of triggering that before and after each song.
If you don’t already have a sequence like this, the easiest option will be to create a new button in TouchPortal, which you’ll need to remember to tap just before starting a new song.
Before we can create the actions, you need to download the free Data Parser plugin for TouchPortal.
Once you have DataParser plugin installed, the actions need to look like this:
(detailed description below, including which TP functions to use)

Line | TP function | Description |
1 | URL content to value | This pulls data from our song queue. Modify the URL to match your own username: https://api.streamersonglist.com/v1/streamers/alanthompson_music/queue Use Local Value > Local Value 01 |
2 | Wait for timer | Adds a 2 second delay, to allow time for the data retrieval. |
3 | Parsing data | Uses the data parser plugin to read the data in Local Value 01, to get [list][0][song][title], which extracts the current song name. We assign this value to a variable called “currentsong”. |
4 | Parsing data | Uses the data parser plugin to extract the artist name, assign to name “currentartist”. Use the following in the data to “get”: [list][0][song][artist] |
5 | Wait for timer | Adds a 1 second delay. |
6 | Append to file | This adds the timestamp and song/artist info to our text file. Firstly, add the variable OBS > “OBS Stream Time Short”, followed by a dash, then copy and paste these strings, with something to separate them, e.g. a dash ${value:KillerBOSS.TPPlugin.DataParser.userState.currentsong} - ${value:KillerBOSS.TPPlugin.DataParser.userState.currentartist} |
Whenever the process above is called, it will add the timestamp and the song details to the next line in your text file!
When you come to the end of your stream, you will have a time_stamp.txt file that contains your full set list, in order, with timestamps that will work in your Youtube VODS as clickable chapter markers.
I hope you found this helpful! Please leave any comments or questions below.
This is incredible! I’m interested in using touch portal with streamersonglistbot and potentially even streamerdotbot – so glad to see how much you’ve figured out in this setup!
Thank you! I rely quite heavily on Touchportal for my stream, and it’s amazing what you can do with it.