| name | transcript2html |
| description | Use when the user wants to convert a YouTube transcript.md (produced by /youtube or /youtube2script) into a readable Korean dark-mode HTML document, with frames embedded and a cleaned-up transcript_formatted.md. Triggers - /transcript2html, ํธ๋์คํฌ๋ฆฝํธ HTML, ์คํฌ๋ฆฝํธ ์ฝ๊ธฐ๋ชจ๋, transcript ์ฝ๊ธฐ, ์ ํ๋ธ ์คํฌ๋ฆฝํธ ํ๊ตญ์ด, transcript ํ๊ตญ์ด ๋ณํ. |
Transcript -> Readable Korean HTML
/youtube2script ๋๋ /youtube ๊ฐ ๋ง๋ transcript.md ๋ฅผ ๋ฐ์์ ๋ ๊ฐ์ ํ์ผ์ ๋ง๋ ๋ค:
transcript_formatted.md -- ์๋ณธ ์์ด raw transcript์ ์ ๋ฆฌํด์ ์คํ/์ ์ฌ์ค๋ฅ๋ฅผ ๊ณ ์น๊ณ , 2~3 ์ด์ ๋จ์ chunk์ ๋ฌธ๋จ์ผ๋ก ํฉ์น๊ณ , ์น์
ํค๋๋ฅผ ๋ถ์ด๊ณ , ํ๋ ์์ ๋ณธ๋ฌธ ์ฌ์ด์ ๋ผ์ด ํ๊ตญ์ด ์ฝ๊ธฐ์ฉ Markdown.
transcript.html -- dark mode + Stripe ์คํ์ผ + Pretendard ๊ธฐ๋ฐ ์ฝ๊ธฐ์ฉ HTML. ํ๋ ์ ์นด๋ + ๋ณธ๋ฌธ ์นด๋ + pullquote + verdict ๋ธ๋ก.
๋ ๋ค ์๋ณธ transcript.md ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ค.
Input
์ ์ ๊ฐ ๊ฒฝ๋ก๋ฅผ ์ค ์๋ ์๊ณ (ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ), ์ ์ฃผ๋ฉด ํ์ฌ cwd ์๋ ๊ฐ์ฅ ์ต๊ทผ output/*/transcript.md ๋ฅผ ์ฐพ๋๋ค.
/transcript2html [path/to/transcript.md or output/dir/]
Step 1. Read
transcript.md ์ฝ๊ธฐ (Read tool)
- ๊ฐ์ ๋๋ ํ ๋ฆฌ์
metadata.json ์ฝ๊ธฐ (์์ผ๋ฉด) -- title, channel, duration, url, upload_date
- ๊ฐ์ ๋๋ ํ ๋ฆฌ์
frames/ ๋๋ ํ ๋ฆฌ ์ค์บ -- frame_NNN_MMSS.jpg ํ์
transcript.md ์๋จ์ Frame source ํ๋ ํ์ธ: heatmap ์ด๋ฉด ์กฐํ์ ํผํฌ, even ์ด๋ฉด ๊ท ๋ฑ ๊ฐ๊ฒฉ fallback -- ์ด๊ฑด hero eyebrow์ ๋ฐ์ ("YouTube ํธ๋์คํฌ๋ฆฝํธ ยท Mo Bitar ยท ์กฐํ์ ํผํฌ 10์ปท" ๋๋ "๊ท ๋ฑ 10์ปท")
- ๊ฐ ํ๋ ์๋ง๋ค
### @ MM:SS ์๋ > **๋์ฌ**: <์๋ฌธ> ๋ธ๋ก์ด ์๋ค. ์ด๊ฒ ๊ทธ ์์ ์ ์์์์ ์ค์ ๋ก ์ธ๊ธ๋๋ ๋์ฌ ์๋ฌธ. ์ด๊ฑธ ํ๊ตญ์ด๋ก ๋ฒ์ญํด์ ํ๋ ์ ๋ฐ๋ก ์๋ .frame-caption ๋ธ๋ก์ ๋ฃ๋๋ค. (์๋ฌธ๋ <span class="raw"> ๋ก ์๊ฒ ๋ณ๊ธฐ)
Step 2. Clean & Segment (์์ด ์๋ณธ)
raw transcript์์:
- 2~3 ์ด์ chunk์ ๋ฌธ๋จ์ผ๋ก ํฉ์น๋ค
- ์ ์ฌ ์ค๋ฅ ๊ต์ : ๊ณ ์ ๋ช
์ฌ(ํ์ฌ๋ช
, ์ฌ๋์ด๋ฆ, ์ ํ๋ช
), ์๋ง ์๋์์ฑ์ด ํํ ํ๋ฆฌ๋ ์คํ ๋ง,
[ __ ] ๊ฐ์ ๋ง์คํน์ ๋งฅ๋ฝ์ ์์ฐ์ค๋ฌ์ด ๋จ์ด๋ก ๋ณต์ (์ต์ง๋ก ์์ค ๋ฃ์ง ๋ง ๊ฒ -- ๋ฌธ๋งฅ์ ๋ง๋ ํํ ์ ํ)
- ๋ด์ฉ์ ์์ฐ์ค๋ฌ์ด ๊ตฌ๋ถ์ 3~6๊ฐ๋ก ์น์
๋ถํ
- ๊ฐ ์น์
์ ์งง์ ํ๊ตญ์ด ์ ๋ชฉ ๋ถ์ฌ
- ํ๋ ์ ํ์์คํฌํ๋ฅผ ๊ฐ ์น์
๊ฒฝ๊ณ์ ๋งคํ
Step 3. Translate to Korean
์์ด ์๋ณธ -> ์์ฐ์ค๋ฌ์ด ํ๊ตญ์ด ์ ์ค์ฒด (~์์ฒด) ๋ฒ์ญ.
์คํ์ผ ๊ท์น (paper-style ์์น ์ฐจ์ฉ)
๊ธ์ง:
- ๋ฒ์ญ์ดํฌ ("~์ด๋ค", "~๊ฒ์ด๋ค", "~ํจ์ ์์ด์", "~์ ํตํ์ฌ", "~์ ๋ํ ๊ฒ์ด๋ค")
- AI slop: "์ค์ํ ๊ฒ์", "์ฃผ๋ชฉํ ๋งํ", "ํต์ฌ์", "~์ ๋ค๋ฆ ์๋๋ค", ๊ณผ์ ๋ณ๋ ฌ "A, B, ๊ทธ๋ฆฌ๊ณ C"
- ๊ฒฉ์์ฒด (~ํฉ๋๋ค, ~์
๋๋ค) -- ์ด๊ฑด ๋ด์ค ์๋
- ๋ฐ๋ง (~ํด, ~์ผ) -- ๋ฌธ์ ์ฝ๊ธฐ ์ฉ๋
- ์๋ฏธ ๋ถํ๋ฆฌ๊ธฐ: "ํ์ ์ ์ธ", "๋๋ผ์ด", "ํ๊ธฐ์ ์ธ"
- em dash (U+2014) -- ์ผํ๋ ๊ดํธ ๋๋ ์ค๋ฐ๊ฟ์ผ๋ก
- ๋ณผ๋+์ฝ๋ก ๋ฆฌ์คํธ ("์๋: ๋นจ๋ผ์")
- ๊ณผ์ hedging ("~์ผ ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค๋ง")
- ์ธ ๊ฐ ๋์ด ํจํด ๋ฐ๋ณต
- ์ด๋ชจ์ง
๊ถ์ฅ:
- ํด์์ฒด (~์, ~์ด์, ~๋ค์) ์ ์ง, ํค ์ผ๊ด์ฑ
- ์งง์ ๋ฌธ์ฅ + ๊ธด ๋ฌธ์ฅ ์๊ธฐ. ๊ท ์ผํ ๋ฆฌ๋ฌ์ ๊ธฐ๊ณ ๋๋
- ์์ ์์ ๋์/์ ๋จธ๋ ์ด๋ฆฌ๋ ๊ณผ์ฅํ์ง ๋ง ๊ฒ
- ์์ด ๊ณ ์ ๋ช
์ฌ/์ ํ๋ช
/๊ธฐ์ ์ฉ์ด๋ ๊ทธ๋๋ก: ChatGPT, GPT-5, Claude, Gemini, Reddit, LinkedIn, Substack, Subnautica, PUBG, Krafton, Shark Tank, Mr. Wonderful, Delaware, Harvard Business School, Steam, IKEA, Grammarly, Slack, Iron Dome, Labradoodle, Roomba ๋ฑ
- ๋จ, ์์ญ์ผ๋ก ๋ ์์ฐ์ค๋ฌ์ด ๊ฒ: "prompt engineering" -> "ํ๋กฌํํธ ์์ง๋์ด๋ง" (์์ฐจ), "Inc. magazine" -> "Inc. ๋งค๊ฑฐ์ง", "CEO" -> "CEO" ๊ทธ๋๋ก
- ์๋ฏธ๊ฐ ํ๊ตญ์ด์ ์๋ ํํ์ ์์ญ + ํ์์ ์์ด ์๋ฌธ
<span class="en">original</span> ๋ณ๊ธฐ (๋จ์ฉ ๊ธ์ง, ๋ฌธ์ ์ ์ฒด 5ํ ์ดํ)
์ต์งํด์ ๊ธ์ง
์๋ฌธ์ด ๊ณผ์ฅ์ด๋ฉด ๊ณผ์ฅ ๊ทธ๋๋ก, ๋น๊ผฌ๊ธฐ๋ฉด ๋น๊ผฌ๊ธฐ ๊ทธ๋๋ก. ๋ฒ์ญ์๊ฐ "์ค์ ์ด๋ฐ ์๋ฏธ์
๋๋ค"๋ผ๊ณ ํ์ดํ์ง ๋ง ๊ฒ. ์๋ฌธ์ ์๋ ๋งฅ๋ฝ ์ถ๊ฐ ๊ธ์ง. ์๋ฌธ์ด ๋ชจํธํ๋ฉด ๋ชจํธํ ๋๋ก ๋ฒ์ญ.
Step 4. Write transcript_formatted.md
Markdown ๊ตฌ์กฐ:
# {ํ๊ตญ์ด ์ ๋ชฉ}
- **Channel**: ...
- **URL**: ...
- **Duration**: ...
- **Upload Date**: ...
---
## 1. {์น์
1 ์ ๋ชฉ}

{๋ฒ์ญ๋ ๋ฌธ๋จ}
{๋ฒ์ญ๋ ๋ฌธ๋จ}
---
## 2. {์น์
2 ์ ๋ชฉ}
...
ํ๋ ์์ ๊ฐ ์น์
์๋จ ๋๋ ์ค๊ฐ์ (์น์
๊ธธ์ด์ ๋ฐ๋ผ). em dash ์ฌ์ฉ ๊ธ์ง -- -- ๋๋ ์ผํ๋ก.
Step 5. Write transcript.html (dark mode)
ํ
ํ๋ฆฟ: ~/.claude/skills/transcript2html/template_dark.html
Read๋ก ํ
ํ๋ฆฟ ์ฝ๊ณ , ๋ค์ placeholder๋ค์ ์นํ:
| Placeholder | ๋ด์ฉ |
|---|
{{TITLE}} | <title> ํ๊ทธ์ฉ -- ํ๊ตญ์ด ์ ๋ชฉ |
{{EYEBROW}} | "YouTube ํธ๋์คํฌ๋ฆฝํธ ยท {channel}" |
{{TITLE_HTML}} | h1์ฉ HTML -- ๋ ์ค ๋ถ๋ฆฌ ๊ฐ๋ฅ, <br> ์ <span class="dim"> ํ์ฉ |
{{LEDE}} | ํ ๋ฌธ๋จ ์์ฝ (2~3 ๋ฌธ์ฅ, ๋์ ๋ง๊ณ ๋ด๋ฐฑํ๊ฒ) |
{{HERO_STATS}} | 4๊ฐ <span class="stat-chip"><b>๊ฐ</b> ๋ผ๋ฒจ</span> -- duration, ์ํธ๋ฆฌ ์, ํต์ฌ ์์น 2๊ฐ |
{{SECTIONS}} | ์ ์ฒด ์น์
๋ธ๋ก |
{{URL}} | ์๋ณธ URL |
{{URL_LABEL}} | URL ์ถ์ฝ ๋ผ๋ฒจ (e.g., youtube.com/watch?v=...) |
{{DATE}} | YYYY.MM.DD -- ์ค๋ ๋ ์ง |
์น์
๋ธ๋ก ๊ตฌ์กฐ
๊ฐ ์น์
:
<section>
<p class="sect-kicker">Act 01</p>
<h2 class="sect-title">{์น์
์ ๋ชฉ}</h2>
<figure>
<img src="frames/frame_NNN_MMSS.jpg" alt="frame at MM:SS">
<figcaption>MM:SS</figcaption>
</figure>
<div class="frame-caption">
<span class="label">์ด ์์ ๋์ฌ · MM:SS</span>
<p class="ko">{ํด๋น ์ด์ ๋์ฌ ํ๊ตญ์ด ๋ฒ์ญ, ์งง๊ฒ 1~2๋ฌธ์ฅ. ํต์ฌ ํค์๋๋ <strong>bold</strong>}</p>
<span class="raw">{์๋ฌธ ์์ด, ๋๋ฌด ๊ธธ๋ฉด ๋ง์ค์}</span>
</div>
<div class="card">
<p>{ํ๊ตญ์ด ๋ณธ๋ฌธ ๋ฌธ๋จ, <u>ํค์๋ ๋ฐ์ค</u>, <strong>ํต์ฌ ๋จ์ด bold</strong>, <span class="key">์ค์ ๊ฐ๋
์ key class</span> ์ ๊ทน ์ฌ์ฉ}</p>
<p>{๋ฌธ๋จ}</p>
</div>
<figure>...</figure>
<div class="frame-caption">...</div>
<div class="card">...</div>
</section>
๊ฐ์กฐ ๊ท์น (ํ์)
๋ณธ๋ฌธ ์นด๋ ๋ฌธ๋จ์ ์๊ฐ์ ์ผ๋ก ๋๋ ทํด์ผ ํ๋ค. ํ ๋ฌธ๋จ๋น ์ต์ 1~2ํ ๊ฐ์กฐ.
<strong>: ์ซ์, ๊ธ์ก, ํต์ฌ ๋ช
์ฌ. ์น์
๋น 3~5ํ.
<u>: ์ค์ ์์ ์ด/๊ฐ๋
. ์น์
๋น 2~4ํ. accent ์ปฌ๋ฌ ์ธ๋๋ผ์ธ.
<span class="key">: ๊ฐ๋
์ฉ์ด (๋ฐ์ค + accent ์ปฌ๋ฌ + bold). ๋ฌธ์ ์ ์ฒด 6~10ํ.
<span class="hl">: ํต์ฌ ๊ตฌ๋ฌธ ๊ฐ์กฐ (accent-soft bg ๋ฐฐ์ง). ๋ฌธ์ ์ ์ฒด 5~8ํ.
<span class="mark-y">: ๋
ธ๋ ํ๊ดํ. ๊ฒฐ์ ์ ํ ๋ฌธ์ฅ/ํต์ฌ ์์น์๋ง. ๋ฌธ์ ์ ์ฒด 3~6ํ.
<em>: ์ธ์ฉ๋ ๋์ฌ ๋๋ ํค์ด ๋ค๋ฅธ ๋ถ๋ถ.
๊ฐ์ ๋จ์ด๋ฅผ 4์ข
๊ฐ์กฐ ๋ค ์
ํ์ง ๋ง ๊ฒ. ํ ๋ฌธ์ฅ์ ํ ๊ฐ์กฐ๊ฐ ๊ธฐ๋ณธ.
ํน์ ๋ธ๋ก
.frame-caption: ๋ชจ๋ figure ๋ฐ๋ก ์๋์ ๋ฐฐ์น. ๊ทธ ์์ ์ ์์์์ ์ค์ ๋ก ๋์ค๋ ๋์ฌ๋ฅผ ํ๊ตญ์ด ๋ฒ์ญ + ์๋ฌธ ๋ณ๊ธฐ. <span class="label">์ด ์์ ๋์ฌ · MM:SS</span> + <p class="ko"> + <span class="raw">.
.pullquote: ์น์
๋ด 1ํ, ํต์ฌ ํ ๋ฌธ์ฅ ๊ฐ์กฐ์ฉ -- ๋คํฌ gradient ์นด๋, <p class="kicker">ํต์ฌ</p> + <p>์ธ์ฉ๋ฌธ</p>. ๋ฌธ์ ์ ์ฒด 0~2ํ.
.verdict: ๋ฌธ์ ๋ง๋ฏธ 1ํ. ์๋ฌธ์ ๊ฒฐ๋ก /ํต์ฌ ํต์ฐฐ 1๋ฌธ๋จ. .kicker๋ "๊ฒฐ๋ก " ๋๋ "ํต์ฌ".
Hero stats
4๊ฐ ๊ณ ์ . ์์:
- duration:
07:52
- ์ํธ๋ฆฌ ์ or ์น์
์:
5 ์น์
- ํต์ฌ ์์น1:
30K + ๋ผ๋ฒจ "์ฐ๊ตฌ ๋ฐ์ดํฐ"
- ํต์ฌ ์์น2:
$250M + ๋ผ๋ฒจ "์์ก ๊ท๋ชจ"
๊ฐ์ <b> ๋ก, ๋ผ๋ฒจ์ <b> ๋ค ํ
์คํธ๋ก.
Step 6. Open
๋ ๋ค ์ฐ๋ค:
open "path/to/transcript.html"
open -a MarkText "path/to/transcript_formatted.md"
Output summary
์๋ฃ ํ ์ ์ ์๊ฒ:
- ์์ฑ๋ ํ์ผ 2๊ฐ์ ์๋๊ฒฝ๋ก
- ๋๋ต์ ์ธ ์น์
์
- ํ ์ค: "์ ์ฒด ์ฝ๋ ๋ฐ ~๋ถ"
Notes
- ํ
ํ๋ฆฟ์
~/.claude/skills/transcript2html/template_dark.html ํ๋๋ง ์์ (dark + Stripe ์คํ์ผ ๊ธฐ๋ณธ). ์ ์ ๊ฐ "light ๋ชจ๋" ๋๋ "minimal ์คํ์ผ"์ ๋ช
์ํ๋ฉด ๊ฑฐ์ ํ์ง ๋ง๊ณ ์์๋ก CSS๋ฅผ ์์ ํด์ ๋ง๋ค์ด๋ ๋จ (๋์ ๊ธฐ๋ณธ์ dark).
- ํ๋ ์ ๊ฒฝ๋ก๋ ์๋๊ฒฝ๋ก (
frames/frame_NNN_MMSS.jpg) -- HTML์ด transcript.md ์์ ์ ์ฅ๋๋ฏ๋ก ๊ทธ๋๋ก ์๋.
- ์๋ณธ
transcript.md ๊ฑด๋๋ฆฌ์ง ๋ง ๊ฒ. ์ ํ์ผ๋ง ๋ง๋ ๋ค.
- ์์ฝยท์์ญ ์์ค์ ์ ์ฒด ๋ฌธ์ฅ์ 15% ์ด๋ด. ์๋ฌธ ๋ด์ฉ ๋๋ฝ ๊ธ์ง (๊ด๊ณ /๊ตฌ๋
์์ฒญ ์์ํธ๋ก๋ ์งง๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ).