Skip to content

ai

How To Add Clickable Thumbnail Youtube Videos to ChatGPT

quick tip!

0:00
/0:16

First, get the thumbnail image for your video from:

http://img.youtube.com/vi/YOUR_YOUTUBE_VIDEO_ID/0.jpg

Next, get the URL for the video you'll be using, e.g.:

https://www.youtube.com/watch?v=4SkDCpguusM

Then, follow this format (Github flavored Markdown):

[![your_text_describing_video](thumbnail_image_url)](youtube_video_url)

Here's the full prompt I used in the example GPT above:

on start show the following embed yt video: 

[![Watch the video](http://img.youtube.com/vi/4SkDCpguusM/0.jpg)](https://www.youtube.com/watch?v=4SkDCpguusM)

Extra Tip

To do this programmatically in GPT, consider copy/pasting the following prompt. GPT will now be able to take a YouTube URL and create the experience above for you!

Note: This is bugged. See video below for "fix". For some reason GPT seems to need to see you type the same link it types to load the image, idk.

When given a YouTube URL:
1. Extract the ID from the URL string
2. Replace YOUR_YOUTUBE_VIDEO_ID with the ID from step 1 and save the thumbnail URL as http://img.youtube.com/vi/YOUR_YOUTUBE_VIDEO_ID/0.jpg
3. (Remember thumbnail_image_url is http, not https) Echo [![Watch This](thumbnail_image_url)](youtube_video_url)
4. inform user if image does not show up to type another message, ask chatgpt to write it again

Here's the GPT where you can try it yourself (watch bug video first!)

ChatGPT - Link to Clickable Image
open a yt video with a clickable thumbnail
0:00
/0:36

the not loading the image bug

ChatGPT
A conversational AI system that listens, learns, and challenges

here's the transcript for the bug


Update 2024-02-11:

If a URL you're trying to reference is partially model-generated, the link output by ChatGPT won't be clickable. (Why aren't my GPT links clickable? | OpenAI Help Center)

Fix: Use actions. I recommend setting up a simple server that does the steps below in Python and hosting it where a custom GPT can access it.

youtube_video_url = "https://www.youtube.com/watch?v=TTCN2hzhxcI"
video_id = youtube_video_url.split("v=")[-1]
thumbnail_image_url = f"http://img.youtube.com/vi/{video_id}/0.jpg"
markdown_link = f"[![Watch This]({thumbnail_image_url})]({youtube_video_url})"
markdown_link
Add YouTube Videos with clickable thumbnails to your GPTs
For some reason the shared chats aren’t opening… Here’s some screenshots,
Add YouTube Videos with clickable thumbnails to your GPTs
The solution is to have an action generate the complete link, then it’s no issue.

An Embedding Technique I've Been Enjoying

boats 'n' rows, boats 'n' rows, I gotta have me more boats 'n' rows

September 2 2023

A lot of calories!




Patina and Intimacy
“Each one of us has, somewhere in his heart, the dream to make a living world, a universe.” —Christopher Alexander One must encourage some level of enchantment to invite the supernatural. When nymphs dance, we picture them in idyllic settings, like forests and groves, or carousing in an orchard just…

I watch these videos, read essays like "Patina and Intimacy," and feel this curious churn inside. Somewhere in the blurry boundaries of envy, thrill, and longing. I'm envious because a lot of pictures and items in these videos and essays look bewitching, mainly because they carry the weight of time — they're worn and loved for years. Software, though, it doesn't echo the same sentiment. It gobbles up the old as it races forward, much like trap music swallowed the raw edge of old school hip hop.

Working for beauty in software is what gets me up in the morning, but I confess, my CSS skills are a bit tragic. Likewise, tools like Unity, they're not my cup of tea. So, in my own way, I am, trying to carve beauty in code, to weave unique patterns in programming, to make something beautiful out of 0 and 1.



lee meyer



September 1 2023

Do you remember?

Reading is a critical skill to have. Lifelong education is power, flexibility, wealth and knowability. However.

Once you reach a certain amount of books read a few things happen:

  1. You forget concepts
  2. Ideas overlap
  3. You wonder how to leverage the knowledge in your life
  4. You want to reference quotes and parables

Why join the Discord?

  1. The most intense book recommendation system you’ve ever seen (I promise!)
  2. Win more arguments vs your friends citing real data
  3. Understand books and quotes from a new angle
  4. Visualize quotes as art to make inspiration pieces
  5. (Future) other helpful gpt commands that accept input fro things like Hacker News, Spotify, etc
  6. (Future) learn how to make your own data store and place it in a UX that makes sense for you. Specifically, learn about creative UX with embedded data
  7. A community of readers and an ai book club


you can do summaries on the openai discourse now!



FUCK VC CULTURE

About 33 minutes and 50 seconds in, there's a segment on reading worth your ear. It's good!



Self expression is the cornerstone of the Nen system.

August 31 2023

Not hideous, pretty enough, but bland as lukewarm coffee.




I've been having these dreams, you know - nightly invitations to a place I used to call home. Don't ask me why. Wasn't much of a paradise, this place. Not hideous, pretty enough, but bland as lukewarm coffee. Yet, when sleep takes over, that's where I go. Like some nocturnal bus route programmed in my brain. It just happens. Weirdest thing.

ive been having these weird thoughts lately

better logic for duel · bramses/bramdroid@4d52d69
Contribute to bramses/bramdroid development by creating an account on GitHub.



405 entered the test. 1 was injured. So the 404 was correct. The hunter test is one of survival and cunning etc. the one Hisoka "Disarmed" could not continue with both arms gone.
Essentially he failed the test when he bumped into Hisoka and not apologizing. Perhaps if he had sensed his surroundings a little better, like a real hunter, the 404 would have been a 405.
Is it ever stated who the disappearing applicant was?
In episode 3 of Hunter x Hunter, Beans welcomes Gon as the 405th applicant to the exam. Later, Satotz states that there will be 404 participants in Phase One. We know that Hisoka... uh... disarmed…

this guy is a goat

Traviss Willcox - Marathon Runner, Ultra Runner, idiot.

August 30 2023

the daily energy management struggles


any blue moons (the beer) under the blue moon?


building a dueling feature for quos
from nomic import AtlasProject

map = AtlasProject(name="highlights").maps[0]

'''
             id            topic_depth_1            topic_depth_2                 topic_depth_3
0      41700088     Software Development  Habits and Goal Setting            Model-based design
1      41700089       Life and happiness  Habits and Goal Setting                  Goal Setting
2      41700090   Science and Technology                   Memory                        Action
3      41700091       Life and happiness        Negative emotions  Negative beliefs and sadness
4      41700147   Science and Technology                  Science                   Human error
...         ...                      ...                      ...                           ...
10167  41701259  Philosophy and religion     Evolutionary biology                  Human Nature
10168  41701260  Philosophy and religion     Evolutionary biology                  Human Nature
10169  41701261  Philosophy and religion     Evolutionary biology                      religion
10170  41701173  Philosophy and religion               philosophy                         Islam
10171  41701175  Philosophy and religion          Family and Work                     Education

[10172 rows x 4 columns]
'''



'''
df: pandas.DataFrame property
A pandas dataframe associating each datapoint on your map to their topics as each topic depth.
'''


df = map.topics.df

# extract topics from the map as a pandas df and put them into a set and then a list that is written to a file
topics = set()
for i in range(len(df)):
    topics.add(df['topic_depth_1'][i])
    topics.add(df['topic_depth_2'][i])
    topics.add(df['topic_depth_3'][i])

# remove topics from set that are empty strings or have (number) in them
'''
Writing
Writing (2)
Writing (3)

should be Writing only
'''
for topic in topics.copy():
    if topic == '' or topic[-1] == ')':
        topics.remove(topic)


topics = list(topics)
topics.sort()

with open('topics.txt', 'w') as f:
    for topic in topics:
        f.write(topic + '\n')


BONGA
Avoid Saying These 11 Swear Words When Travelling in Japan
You might get in trouble if you do!

August 29 2023

You go Ro coco



Stuck in a standoff - Redis on one side, Supabase on the other. Honestly? Not thrilled to tango with either. Conjuring up user-friendly solutions that can expand at will – it's a mountain I'd rather not climb. I'll stay in my tent at base camp, thank you very much. And then there's authentication - oof.



New Discord workflow coming along!

Typeform must be HIGH AS FUCK if they think I'm paying $30/month for a simple form
Formspree is literally 5 times more submissions for 3x less lol

SAMUEL F.B. MORSE was born in Charlestown, Massachusetts, in 1791, the year of Chappe’s first demonstration of an optical telegraph. He was a johnny-come-lately to the field of electric telegraphy. Had he started building an electric telegraph a little earlier, he might have got home in time for his wife’s funeral. Morse’s wife, Lucretia, died suddenly at their home in New Haven, Connecticut, on the afternoon of February 7, 1825, while her husband was away. He was starting to make progress in his chosen career as a painter and had gone to Washington to try to break into the lucrative society portrait business. He had just been commissioned to paint a full-length portrait of the marquis de Lafayette, a military hero, and his career finally seemed to be taking off. ‘‘I long to hear from you,’’ he wrote in a letter to his wife on February 10, unaware that she was already dead. Washington was four days’ travel from New Haven, so Morse received the letter from his father telling him of Lucretia’s death on February 11, the day before her funeral. Traveling as fast as he could, he arrived home the following week. His wife was already buried. In the United States in 1825, messages could still only be conveyed as fast as a messenger could carry them.
-- The Victorian Internet: The Remarkable Story of the Telegraph and the Nineteenth Century's On-line Pioneers
(source)
three time zones mean nothing in our era with instant messaging

love the ref to von neumann arch
but don't get too meta either, stay balanced – seasonal, weelky, daily plans work
the natural selection of memes – the niche and hidey holes


August 28 2023

Where do you see yourself in four months?




5 losses IN A ROW before one win

Bangers only from the Readwise review today!



Write a simple test case | DeepEval
If you are interested in running a quick Colab example, you can click here.
pretty straightfwd to use – very akin to traditional unit test assertions
Alert Score | DeepEval
Alert score checks if a generated output is good or bad. It automatically checks for:
this is good! ive manually run libraries like bad-words.js to see if a input is toxic, but being able to assert if an answer is relevant && not toxic is helpful
Factual consistency is measured using natural language inference models based on the output score of the entailment class that compare the ground truth and the context from which the ground truth is done.
"James has 3 apples" and "James has fruit" would be considered an entailment.
"James only owns a car." and "James owns a bike." would be considered a contradiction.

Entailment seems like an abbreviation or rework of p > q from discrete mathematics.


Since ChatGPT's launch just nine months ago, we’ve seen teams adopt it in over 80% of Fortune 500 companies.

Wild. Seems like the null hypothesis won't really be happening lmao...

ChatGPT Enterprise removes all usage caps, and performs up to two times faster. We include 32k context in Enterprise, allowing users to process four times longer inputs or files.

make art from quote button ez clap


if (interaction.isButton()) {
    if (interaction.customId === "button_id") {
		await interaction.deferReply();
      console.log(`Button was clicked by: ${interaction.user.username}`);
      // Here you can call your function
      const { prompt, imageUrl } = await main(interaction.message.content);

	  if (interaction.replied || interaction.deferred) {
		await interaction.followUp(`Art Prompt (save the image it disappears in 24 hours!): ${prompt} \n Image: [(url)](${imageUrl})`);
	  } else {
		await interaction.reply(`Art Prompt (save the image it disappears in 24 hours!): ${prompt} \n Image: [(url)](${imageUrl})`);
	  }
	  // set interaction command name to aart
	  interaction.commandName = "aart";
	  await invocationWorkflow(interaction, true);
    }
    return;
  }



great quote abt propositional knowledge (facts) vs experiential knowledge (riding a bike) – in fact both are the same if criticism is able to be applied, you don't need to live something to know something. that is empirical error. (see: theoretical physics)