How I Auto-Generate YouTube Titles, Descriptions, and Hashtags

Rather than write YouTube metadata by hand every time, this workflow uses deep research to build a rule set, then a custom GPT called descriptor that turns a pasted transcript into titles, a description, and hashtags.

14:10 video4 min readWatch on YouTube

Writing a YouTube description well takes real thought, matching tone, summarizing content, working in the right keywords, and doing it fast enough that it doesn't eat into the time better spent actually making things. Nik Bear Brown's answer to that problem, once he noticed he was writing descriptions constantly, was to stop doing it by hand and build a tool instead.

Starting with deep research, not guesswork

The build doesn't start with writing prompts from scratch. It starts by asking Gemini's deep research feature to work out what actually makes an effective YouTube title, description, and set of hashtags, then letting that research run in the background rather than trying to write the rules from memory. That research comes back as a fairly extensive rule set, five pages' worth, covering how to structure titles, what makes a description effective, and how hashtags should be chosen. Rather than spending time on trial and error, the rules get generated once through research and then reused every time afterward.

When Google's own tools can't keep up

Not every attempt at deep research goes smoothly. Google's servers returned a "too much load" error on this particular run, more than once, despite Google being the company selling the underlying cloud infrastructure in the first place. When that happens, the workaround is simple: switch to a comparable tool, in this case moving the same deep research request over to OpenAI's tools, and continue from there without losing the thread of the work. The lesson isn't about any one provider being unreliable, it's about not letting a single tool's downtime block the workflow.

Building a command-based GPT

Once the research comes back, it turns into a custom GPT built around a generic command template. The bot centers on one main command, aliased two ways: the full word "descriptor," chosen because it's unambiguous and not really used for anything else, and a short alias, "yt," for when typing less matters more. The tradeoff is real: a very short alias like "yt" can occasionally confuse the model about what's meant, but because the instructions around it are unambiguous, that confusion is rare in practice. Two default commands round things out, "list," which shows available commands, and "help," which explains what the bot actually does.

Working around the 8,000-character limit

Custom GPTs cap instructions at 8,000 characters, and five pages of detailed rules don't come close to fitting inside that limit. The workaround is to keep the GPT's core instructions lean and offload the extensive rule lists into a supplementary MD file that the GPT uploads and reads as reference material. That split, a short core prompt plus a longer external rules document, is what lets a genuinely detailed rule set actually work inside a tool that technically can't hold all of it directly.

Getting the rules to actually fit under 8,000 characters wasn't just a matter of trimming until it felt short enough, either. Asking a language model directly how many characters a block of text contains produces a guess, not a real count, and that guess can be wildly off, sometimes estimating an 8,000-plus character document at a fraction of its real size. The reliable fix is pasting the text into a tool like a word processor that actually counts characters, rather than trusting the model's own estimate.

A naming quirk worth knowing about

One specific and slightly odd obstacle came up while testing the GPT: using the literal word "YouTube" (or other platform names like Facebook) in the tool's name or instructions triggered a refusal. The likely explanation is that naming something directly after a trademarked platform makes the underlying system cautious about potential liability. The practical fix was simply renaming the tool to something else, like "descriptor," which sidestepped the issue entirely without changing what the tool actually does.

Not overthinking the metadata itself

A consistent theme throughout is a deliberate choice not to over-optimize this particular kind of output. For genuinely creative work, like a song, iteration can run into the dozens or even hundreds of passes to get something right. YouTube titles and descriptions get a different standard: usually one or two passes are enough, and the goal is "pretty good, fast" rather than perfect. In practice, that means pasting in a transcript, saying "go," reviewing what comes back, and usually accepting it with only a small title tweak, rather than iterating extensively on wording that doesn't need to be flawless.

Key takeaways

  • The rule set behind the tool comes from deep research (first attempted in Gemini, then OpenAI when Google's servers returned load errors), not hand-written guesses.
  • The custom GPT is command-based, with a main command aliased as both "descriptor" and the shorter "yt," plus default "list" and "help" commands.
  • GPTs cap instructions at 8,000 characters, so extensive rule lists get offloaded into an uploaded MD file instead of living in the core prompt.
  • Character counts should be verified with a tool that actually counts them, since asking a language model how long a text is only produces a guess.
  • Naming a tool directly after a trademarked platform like YouTube or Facebook can trigger a refusal; renaming it sidesteps the issue.
  • For low-stakes, repetitive output like YouTube metadata, one or two generation passes are treated as good enough, reserving heavier iteration for genuinely creative work.

Who this is for

This is for creators who write YouTube metadata often enough that it's become a real time cost, and who want a repeatable, transcript-in-metadata-out workflow instead of writing titles and descriptions from scratch every time.

Chapters

  1. 0:00Why I automate YouTube descriptions
  2. 1:05Running deep research in Gemini
  3. 2:10Coffee break and workflow rhythm
  4. 3:20Google load errors and switching tools
  5. 5:00Building the descriptor/yt command
  6. 6:30Using MD files for long rule sets
  7. 8:10Testing the final GPT
Full transcript(auto-generated, with timestamps)

Why I automate YouTube descriptions

[0:00]Bear here. Uh, whenever I do something a lot, I started just sort of, you know, vlogging, blogging, just doing some recording what I do live and putting on YouTube. And so, I need to write descriptions. Whenever I do something a lot and I'm finding I have to write YouTube descriptions a lot these days, I ran a tool to do that. So, what I'm going to do is I just go to Gemini and go to deep research. Oh, I'm already on DP shirts. That's why it didn't do that. And I just hit go. I'm going to go downstairs and get a cup of coffee. By the time I come back up, the research will probably be done. And then we'll spend another five or 10 minutes making a little GPT plugin for it. I'll also make a Gemini plugin for it. And then forever on I just paste in some text my transcript which is also done automatically and then it'll give me what it believes is a good YouTube title description. As with everything in AI I may change you

Running deep research in Gemini

[1:06]Know couple things in the title but it usually gets it very very close. So, it's a big time saver just to take a transcript, paste it in something like a Gemini Gem or a custom GPT, have it generate something which is either okay or close and you're not just sort of wasting a lot of time, you know, trying to write YouTube descriptions. Okay. Uh that's it for this, you know, hit run. It'll start running. I'm going to go downstairs and um grab my coffee. By the time I come up, this will probably be done. Okay, quick update. In spite of Google being in the business of providing computing services to people, apparently they can't handle their own capacity. So, I've been twice I can't handle this too much load. I can't handle this too much load. So, when that happens, I just go to the bazillion other tools which do the same thing. So, I'm going to go to thinking. I going to paste in the same thing and

Coffee break and workflow rhythm

[2:12]Hit go. We'll see if open eye can handle their loud or not. It's doing it little thinking thing. It's going to give me a bunch of rules typically of what it wants to do. Uh but it looks like it's got so it looks like at least up and I can handle their server stuff where Google it's often the case with Google that I'll type something in and I'll get that message oh da da da da da we're in the business of selling people Google cloud but we can't handle our own Google cloud. Okay, take care. Okay, looks like the research is ran. Um I have a generic template to generate GPDs. I'll create one to generate gems as well. But the basic idea is a lot of useful commands. There's always the list and help command. In this case, there's just one main command. I'm going to call it descriptor. I'm also going to alias it to YT because I don't like to type. And what it does is I just paste in a transcript and it gives me an optimized

Google load errors and switching tools

[3:21]Uh YouTube title. It'll typically give me a few choices of the title. It'll give me description which I can edit but it should be close and it'll give me hashtags. So this is the research I did. So I've basically came up with a bunch of rules of how to write effective descriptions, titles and hashtags. The rules are fairly extensive because I did a lot of research on it. I don't want to type all this stuff every time I want to write something. I just want to say YT put in the transcript and have it go. And that's the purpose of writing these GPTs. So what it's going to do is it's going to take this template. It's going to take its rules that it came up with and research of what is the sort of best way to write these things. And

Then once I write a GPT, I just go to it and paste in my transcript and say go and then typically I'll accept it because I don't try to overmize like a YouTube title or YouTube description. But if I really can, I would typically take it through two or three or four times. But the tools tend to give me something which is pretty good, you know, first time and then if you really care and for like the music, the art, I really care. So it'll go through three, four, five, 10, 15, 100 iterations. To write a song, it may be 100 iterations. um to write a YouTube description. I don't care that that much as long as it's pretty good. I'll probably get it in one or two tries. So, we just said go at this point. It'll get me a bunch of

Building the descriptor/yt command

[5:00]Rolls. So, I'm just going to talk just to entertain you while it's thinking. But basically, again, what I did is I gave it a template of how I want to run a GPT. These GPTs are all command-based. GPTs are also limited to 8,000 characters. So if I have extensive rules like I do here, five pages of rules, they don't go into the GPT. They go into a supplementary document which I always use as MB stop. Uh which it'll just upload and read because I only have 8,000 characters to work with a GPT. When I have extensive rule lists, they'll go into the GPT. And this is what this is doing now. It's creating an extensive it's creating YouTube

MD here and it's giving detailed rules on. So I basically just have one function YT. The reason why I use YT is I don't want to type so I just say YT based syntax but I'll give it a longer one. But sometimes if it's too short it'll confuse it. So I have an alias descriptor which is a unique thing. It's not really used in other language. So it'll know if I type in descriptor exactly what I mean. If I type in yt, it should know what I mean. But sometimes because yt is so short, it may be confused of what you mean by exactly. Even though it has implicit instructions, it will almost never confuse that because it's,

Using MD files for long rule sets

[6:32]You know, unambiguous. So a bunch of rules here. If it's done, it's still going. And one default things I have is I have a command just to what do you do? Explain yourself. Um so there's always list and help. A list does is just list the commands. Help will actually sort of explain what do you do. So I just go here. I update this. So here's this is not generic. So this is my generic template. I want to update the YouTube template. So there we go. We just update that. And then what we do is we just create a new GPT. Takes a second. We go to

Explore create new. Uh we just paste that in there. So this is longer than 8,000. So what I'm going to update it with. So I'm going to start this here. see you by removing this stuff at 8,000. It's also specifically trying to get it in my voice. So, what what's it's instructed to do is actually look at sort of the way I speak and try to write the YouTube description in sort of the same voice. But this is too much. So, uh what I'm going to do is I'm just going to narrow it down. I could add as much as I want in the YouTube MD, which

Testing the final GPT

[8:10]I'm just going to go ahead and upload now. So, the advantage of using these MD files is what we're looking at right now. It's these um these uh my instructions like even to do a because there's some issue I don't know what the oh I know what the issue is if I use the word YouTube it doesn't like the word YouTube because it it's having some sort of I might actually name it descriptor and see if that solves it. So sometimes if you name something Facebook or YouTube or whatever, Chach GBT will whine. And the reason why it whines is it doesn't want to get sued. Uh, and it thinks that if I named the script horror, if I named the script or if I named something uh YouTube or Facebook or something, it's going to um, you know, get sued. So, something went wrong here. But the main, let's just start with

This. We could want want this under 8,000 characters. So, we're just ask tighten this up. There is another impos and so and this may be a back and forth so I I might have to hand edit it. Here's where other tools are fun. If I ask a language model how many characters it is, it'll guess. If I put this into like a word doc and say how many characters in it, it'll tell me exactly how many characters it is. So, this is where using other tools is useful. Basically, all language models do is guess. I've had 8,000 plus character things which they guessed as a thousand characters. And so just realize what language models do is guess. So we're going to paste this in there. Where was it? Here. I'm going to bring that back down and hit create. Conversation starters are always just list commands and help. I might list the actual

Command here because descript isn't actually a command here. So I'll put descript as the command. And I'll even say it expects some text. I'll wait. I'll upload this later. This should work without this. So we just create I got to make this a public GPT so you guys can use it if you want. Reveal it. And then I'm just going to take some text. This is an actual transcript. And I'm just going to say YT. I'm just going to click this. So here we go. today just bob my own too much but so I'm just going to putting this is a messy transcript as mistakes in terms of the transcript but it's okay for those things and what it'll do is it'll just generate a um title probably multiple titles we'll see >> description and some hashtags I can probably not have it default to thinking. I use thinking for the rules, but

I don't really want thinking to be the default for this piece of smoke. Here we are. Either refine this a bit. I don't really want this stuff here. So, I'm going to tell it not to do that. Like, that's fine. Again, they have multiple titles, but from here on, it should not put it anything in Bravo, but this typical of the way we deal with these things as we try them. I could use this now just by by hand removing that. But I don't want to by hand move them. I really literally want to just paste something in, get three or four title suggestions, paste in the the description. And so I'm going to update this and tell it explicitly not to do this. Uh because that'll take 10 seconds off my life if I have to remove a and I I don't want to do that. Okay. So that's it. Take care.

More videos

Humanitarians AI Lyrical Literacy Project