สร้าง Video Downloader ด้วย AI ใน 1 ชั่วโมง 🎬

เว็บ download short video

ลองใช้งานได้เลย: https://ytdownload.justfather.com — โหลดวิดีโอจาก YouTube, TikTok, Facebook ฟรี!


จุดเริ่มต้น

เรื่องมันเริ่มจากความขี้เกียจล้วนๆ ครับ

ผมอยากโหลดวิดีโอสั้นๆ จาก YouTube Shorts, TikTok, Facebook Reels มาเก็บไว้ดูออฟไลน์ แต่ทุกครั้งที่ต้องไปหาเว็บโหลด…

  • เว็บเต็มไปด้วยโฆษณา Pop-up 😤
  • ต้องกดหลายที กว่าจะโหลดได้
  • บางทีโหลดมาไม่มีเสียง
  • คุณภาพไม่ได้ตามที่อยากได้

“ทำเองดีกว่า” — ความคิดเริ่มต้นแค่นี้แหละ


ลองใช้ Claude Code เขียน

แทนที่จะนั่งเขียนเองตั้งแต่ศูนย์ ลองให้ AI ช่วยดู

บอกไปแค่:

“อยากได้ webapp download shortvideo จาก youtube, fb reel, tiktok จาก url ที่ส่งให้”

แค่ประโยคเดียว Claude Code ก็เริ่มถามกลับมา:

  • ใช้ Tech Stack อะไร? → Next.js + TypeScript
  • ดาวน์โหลดยังไง? → ลงเครื่องเลย
  • เลือกคุณภาพได้ไหม? → ได้ 360p, 720p, 1080p

หลังจากตอบคำถาม มันก็วางแผน research libraries แล้วลุยเลย


Design 8-bit เพราะ… ทำไมไม่ล่ะ? 🕹️

บอก Claude ไปว่า:

“Design ขอเว็บแนว 8-bit เก่าๆ กวนๆ”

ได้มา:

  • สี Neon ฉูดฉาด (ชมพู, เขียว, เหลือง)
  • Scanline effect เหมือนจอ CRT เก่าๆ
  • ปุ่มแบบ Pixel พร้อม shadow
  • ASCII Art logo

ขี้เหร่แบบ vintage 😂


Test Agent หาบัค

สิ่งที่ผมทำคือบอกให้ Claude สร้าง agent ขึ้นมาทดสอบโค้ดเอง

ผลลัพธ์? เจอ 15 bugs 🐛

รวมถึง:

  • ⚠️ SSRF – ใครก็ส่ง URL อะไรก็ได้มาโหลด (อันตราย!)
  • ⚠️ Memory Leak – Stream ไม่ cleanup
  • ⚠️ Race Condition – กดปุ่มเร็วๆ แล้วพัง

Claude แก้ให้หมดเลย ไม่ต้องนั่ง debug เอง


บัคที่ต้องแก้เอง

มีอันนึงที่ agent ไม่เจอ — วิดีโอไม่มีเสียง 🔇

YouTube บาง format มันแยก video กับ audio ออกจากกัน ต้องบอก yt-dlp ให้ merge เอง

ปัญหาคือ ytdlp.stream() ไม่สามารถ merge ได้ และถ้าไม่มี ffmpeg ก็ merge ไม่ได้อีก

วิธีแก้: เปลี่ยนไปใช้ format ที่มีทั้ง video + audio อยู่แล้ว

// format string ที่ใช้
best[ext=mp4][acodec!=none][vcodec!=none][protocol=https]/18/best
  • หลีกเลี่ยง HLS/m3u8 (มักโดน 403)
  • Fallback ไป format 18 (360p mp4 มีเสียง)

อันนี้ต้องทดสอบเองถึงรู้ 555


Bulk Download Mode 📦

หลังจากใช้ไปสักพัก รู้สึกว่าโหลดทีละตัวมันช้า…

บอก Claude ไปว่า:

“ขอแบบ bulk ได้ไหม สูงสุด 10 url”

ได้มา:

  • Mode Switcher – สลับระหว่าง SINGLE / BULK
  • Bulk URL Input – วาง URLs หลายตัวได้ (แยกบรรทัด, comma, หรือ space)
  • Download Queue – เห็นสถานะแต่ละตัว
  • ○ Pending → ◐ Fetching → ● Ready → ▼ Downloading → ✓ Completed
  • เลือก Format แยก – แต่ละวิดีโอเลือกคุณภาพต่างกันได้
  • Download All – กดปุ่มเดียวโหลดทุกตัว

ใช้เวลาเพิ่มอีกแค่ไม่กี่นาที!


Deploy ขึ้น Production 🚀

หลังจากทำเสร็จแล้ว ก็อยากเอาขึ้นให้คนอื่นใช้ด้วย

Stack ที่ใช้:

  • Docker – containerize app พร้อม yt-dlp และ ffmpeg
  • Coolify – self-hosted PaaS (ทางเลือกแทน Vercel/Heroku)
  • GitHub App – เชื่อม private repo กับ Coolify

สิ่งที่ต้องทำ:

  1. สร้าง Dockerfile ที่ติดตั้ง yt-dlp และ ffmpeg
  2. ตั้งค่า next.config.ts ให้ build แบบ standalone
  3. สร้าง GitHub App เพื่อเชื่อมกับ Coolify
  4. ตั้งค่า DNS ชี้ subdomain มาที่ server
  5. กด Deploy!

สรุป

หัวข้อรายละเอียด
เวลาทั้งหมด~1.5 ชั่วโมง
บรรทัดโค้ดไม่รู้ ไม่ได้นับ 😅
Bugs ที่เจอ15+ ตัว
Tech StackNext.js, TypeScript, Tailwind, yt-dlp
FeaturesSingle + Bulk download (สูงสุด 10 URLs)
DeploymentDocker + Coolify
Live URLytdownload.justfather.com

สิ่งที่ได้เรียนรู้

  1. AI ช่วยได้เยอะ — แต่ต้องรู้ว่าจะถามอะไร
  2. Test Agent เวิร์ค — หาบัคได้เยอะกว่าที่คิด
  3. ยังต้อง manual test — AI ไม่รู้ว่าเสียงหายไปหรือเปล่า
  4. Design กวนๆ = สนุกกว่า — ไม่จำเป็นต้องเรียบร้อยตลอด
  5. Feature request ง่ายมาก — บอกแค่ “ขอ bulk download” ก็ได้เลย
  6. Deploy ไม่ยาก — Docker + Coolify ทำให้ทุกอย่างง่ายขึ้น

ลองเล่นเอง?

วิธีที่ 1: ใช้ออนไลน์เลย (แนะนำ)

👉 https://ytdownload.justfather.com

วาง URL แล้วโหลดได้เลย ไม่ต้องติดตั้งอะไร!


วิธีที่ 2: รันบนเครื่องตัวเอง

cd yt-downloader
npm install
npm run dev

เปิด http://localhost:3000 แล้วลองวาง URL ดู

⚠️ หมายเหตุ: ใช้ส่วนตัวเท่านั้นนะ เคารพลิขสิทธิ์ด้วย


ลองใช้งานกันเลย!

🎬 ytdownload.justfather.com — โหลดวิดีโอจาก YouTube, TikTok, Facebook ได้ฟรี ไม่มีโฆษณา!


สร้างด้วย Claude Code + ความขี้เกียจ 💪