StoryteLLM-ing

I needed to collect all the lessons and tactics from 122 YouTube videos on business storytelling. And I need them fast.

Why though? Am I learning storytelling? Well, yes and no. Let me explain.

Origin story

I’m convinced that storytelling is the closest technology that we have for idea transfer. Growing up socially awkward, I have been scouring over books on effective communication and getting ideas to stick since I was a teenager, believing that my communication skill is sub par.

These days I mostly write lightly-narrative-driven think pieces in the intersection of cognition, technology, and media through the lens of philosophy and human nature. But the idea of not getting across to people in day to day life still scares me more than bungee jumping with my eyes wide open. Combine that with my abstract areas of research? Storytelling has always been my lifeline.

I am sure that by now I have studied more storytelling tactics and frameworks than anyone who is not doing storytelling professionally.

Now I just need to weave them into a coherent proposal for this potential client and convince them that not only I can code, I can tell stories in writing — especially their story.

But, I have never told someone else’s story. I’ve also never told a business’ story.

OK, that’s not true. Technically I have “told” these stories through other formats. I noticed the decisions, the evolution, the dynamics. The obstacles, the plot twists, the meta. I named the patterns in use cases that clients come in for. I documented the data types that I see coming in these requirements. I formulated the Jobs to Be Done of web data needs. I imagined and pitched a way to package up the data subscription business model. These are stories that became the building blocks of other stories.

I have also never interviewed anyone in a professional capacity. But anyone who have had moved past small talk with me can vouch for my curiosity and listening skill. I ask interesting questions because I’m interested.

So, back to the videos. Let’s not make this a recipe memoir.

Call to adventure

I first encountered Park Howell’s Business of Story podcast in 2018, and only more recently stumbled upon Doug Stevenson’s podcast series, Storytelling for Business.

I want to make sure I include everything that Park Howell and Doug Stevenson have been teaching in what I’m going to propose. With all the collated material I already have on storytelling, I want to make sure I am not missing anything especially in the context of business storytelling.

But 122 hours of video? Ain’t nobody got time for that!

Luckily, I have my suite of cognition-enhancing LLM scripts.

Battle 1

I decided that I do not need to process all the videos on the playlist so I saved a selection of them to a separate YouTube playlist.

I saved the list of the YouTube video IDs into a text file called ul-bizofstory-20240719.txt

It looks something like this:

Nuahn139068
QiUguxiwmyk
cvcmFrHIYRw
0kakPFkowDU
....

Then I ran this command on CLI:

while read -r f || [ -n "$f" ]; do; ./youtube2llm.py analyse
    --vid="$f" --nc --lmodel gpt-4o --mode cbb; done < ul-bizofstory-20240719.txt

youtube2llm.py will retrieve or generate transcript for a YouTube video given its ID and run it against LLM of your choice. Here I fed it the list of IDs, piggybacking on the shell loop. See this post for all the different functionalities you can get from youtube2llm.py.

The key parts to this command is the mode of cbb (clickbait buster) which will take the title of the video and turn it into a question to extract that specific information from the content.

I chose this mode this because I need actionable takeaways from the episode. E.g. “6 Attributes of Compelling Stories that Sell”, “How to Produce Irresistible Explainer Videos In Your Story Marketing”, “The T.R.I.P.S Storytelling Framework to Drive Results”.

Each video is an hour long, so I don’t need the LLM to give me everything that was discussed in the video. Tangents and filler discussions in long-form podcasts have their value when the topic is less defined and delves more into the speaker’s work and life story. But I am in tactical mode now. Dry takeaways would suffice.

I also chose to use gpt-4o (specified with the --lmodel argument) because I need the quality to be top notch this time and my go-to local model, mistral, usually yields slightly yet noticeably poorer quality.

That command generated these files, amongst others.

-rw-r--r--    1 user  staff     2271 Jul 19 05:22 Brpk26Oq4aE-cbb-gpt-4o.md
-rw-r--r--    1 user  staff   447714 Jul 19 05:22 Brpk26Oq4aE-metadata.json
-rw-r--r--    1 user  staff     4279 Jul 19 05:22 Brpk26Oq4aE-transcript.txt
-rw-r--r--    1 user  staff     1945 Jul 19 05:22 CS-daDQs_P4-cbb-gpt-4o.md
-rw-r--r--    1 user  staff   347182 Jul 19 05:22 CS-daDQs_P4-metadata.json
-rw-r--r--    1 user  staff    19397 Jul 19 05:22 CS-daDQs_P4-transcript.txt
-rw-r--r--    1 user  staff     2121 Jul 19 05:20 D_J5SENQK6A-cbb-gpt-4o.md
-rw-r--r--    1 user  staff   401667 Jul 19 05:20 D_J5SENQK6A-metadata.json
-rw-r--r--    1 user  staff    13689 Jul 19 05:20 D_J5SENQK6A-transcript.txt

We see there are three types of files here:

  • {VIDEO_ID}-{mode}-{lmodel}.md
  • {VIDEO_ID}-metadata.json
  • {VIDEO_ID}-transcript.txt

Out of the ~122 videos, we get close to 6mb of *-transcript.txt files. Fortunately YouTube auto-generated captions are available for almost every video here so I saved myself some time of transcription by Whisper.

Battle 2

I now want to distill it even further.

I moved the -cbb- files into their own folder. Then I ran:

./audio2llm.py --tf 'park_howell/cbb/*.md' --lmodel mistral
    --prompt "Here's a compilation of brand and business storytelling tips. Please extract ones that would help me learn how to spot interesting and compelling stories from interviews"

By the way we can also do it like this (note the wildcards). I just like the content of my folders cleanly separated:

./audio2llm.py --tf 'park_howell/*cbb-*.md' --lmodel mistral --prompt "....."

Here I asked audio2llm.py to process all the markdown files (.md) and run that prompt on the concatenated transcript.

audio2llm.py can take in an audio file (af) or a transcript file (tf) that you want to transcribe or apply the different built-in modes with LLM of your choice.

Note that you can also specify --prompt on youtube2llm.py, but it can’t concatenate the transcripts because usually it’s for working with a YouTube video, not for transcript file(s).

Also notice I used mistral this time because it’s a good enough trade-off to process GPT-4o’s more HQ output (of cbb). A slightly less intelligent model will do just fine merging and distillling the output of a smarter model.

Resolution

Now I have a single 54kb text file of 8k words in 420 lines filled with storytelling tips and tactics. Something more manageable to start digging into.

Think of this as a strategy to generate an index or table of content for any material you’d like to familiarise yourself with. Learning can be a less linear process this way.

Some stats on cost

  • < 6mb of text cost < $9 with gpt-4o (~125 hours of audio)
  • GPT-4o summarised the 6mb text into a 316kb text
  • Mistral 7b (via ollama) processed the 316kb text summary and produced a 54kb of a response to my specific/narrowing prompt

Takeaways

  • We can use LLMs strategically and interchangeably depending on our constraints and trade-offs. Remember, knowing the tools you have is more important than knowing the best tool.
  • Chunking size matters a lot. I’ll do a separate post for this.
  • Go ahead, try out nootroscripts yourself. Curious to hear your ideas on how you’d improve it!

Leave a Reply

Your email address will not be published. Required fields are marked *