YouTube μ½ν μΈ λ°κ΅΄ β Instagram Reels μ€ν¬λ¦½νΈ μλ μμ± νμ΄νλΌμΈ.
νκ² νλ₯΄μλ(AI-powered solopreneur)μ λ§λ YouTube μμμ μλμΌλ‘ μ°Ύκ³ , μλ§μ μΆμΆν λ€, AI(Gemini)λ‘ Reels μ€ν¬λ¦½νΈλ₯Ό μμ±νμ¬ Notion DB + CSVμ μ μ₯ν©λλ€.
ν€μλ μμ± (νλ₯΄μλ β Gemini)
β YouTube κ²μ (Data API v3)
β νν°λ§ + μ€μ½μ΄λ§ (μ‘°νμ/μ’μμ/λκΈ/μ΅μ μ±)
β μλ§ μΆμΆ (youtube-transcript-api)
β Reels μ€ν¬λ¦½νΈ μμ± (Gemini 2.5 Flash)
β Notion DB μ μ₯ + CSV λ°±μ
| OS | μ€μΉ λ°©λ² |
|---|---|
| Windows | Docker Desktop for Windows λ€μ΄λ‘λ β μ€μΉ β μ¬λΆν |
| Ubuntu | sudo apt install docker.io docker-compose-v2 |
| Mac | Docker Desktop for Mac |
Windows μ°Έκ³ : Docker Desktop μ€μΉ μ WSL 2 λ°±μλλ₯Ό μ¬μ©ν©λλ€. μ€μΉ κ³Όμ μμ WSL 2 νμ±νλ₯Ό μλ΄νλ©΄ κ·Έλλ‘ λ°λΌνμΈμ.
μ€μΉ νμΈ:
docker --version # Docker version 2x.x.x
docker compose version # Docker Compose version v2.x.xgit clone https://github.com/Insty-team/Insty-Marketing.git
cd Insty-Marketing- Google Cloud Console μ μ
- μ νλ‘μ νΈ μμ± (λλ κΈ°μ‘΄ νλ‘μ νΈ μ ν)
- API λ° μλΉμ€ β λΌμ΄λΈλ¬λ¦¬ β "YouTube Data API v3" κ²μ β μ¬μ© μ€μ
- API λ° μλΉμ€ β μ¬μ©μ μΈμ¦ μ 보 β μ¬μ©μ μΈμ¦ μ 보 λ§λ€κΈ° β API ν€
- μμ±λ ν€ λ³΅μ¬
λ¬΄λ£ ν λΉλ: μΌ 10,000 units. νμ΄νλΌμΈ 1ν μ€ν β 300 units.
- Google AI Studio μ μ
- API ν€ λ§λ€κΈ° ν΄λ¦
- μμ±λ ν€ λ³΅μ¬
λ¬΄λ£ ν λΉλ: Gemini 2.5 Flash κΈ°μ€ μΌ 500 RPD.
- Notion Integrations μ μ
- μ ν΅ν© λ§λ€κΈ° β μ΄λ¦ μ λ ₯ β μν¬μ€νμ΄μ€ μ ν β μ μΆ
- λ΄λΆ ν΅ν© μν¬λ¦Ώ 볡μ¬
- (μ€μ) Notionμμ Content Pipeline DB νμ΄μ§ μ΄κΈ° β μ°μΈ‘ μλ¨
Β·Β·Β·β μ°κ²° β λ§λ ν΅ν© μΆκ°
νλ‘μ νΈ λ£¨νΈμ .env νμΌμ μμ±ν©λλ€.
Windows (PowerShell):
Copy-Item .env.example .env
notepad .envLinux / Mac:
cp .env.example .env
nano .env.env λ΄μ©:
YOUTUBE_API_KEY=λ°κΈλ°μ_YouTube_API_ν€
GEMINI_API_KEY=λ°κΈλ°μ_Gemini_API_ν€
NOTION_TOKEN=λ°κΈλ°μ_Notion_Integration_Token
NOTION_DB_ID=Notion_DB_ID
AI_BACKEND=gemini
NOTION_DB_IDλ Notion DB URLμμ μΆμΆν©λλ€.https://notion.so/xxxxx?v=...βxxxxxλΆλΆ (32μ리 hex)
docker compose build# μ 체 νμ΄νλΌμΈ (λ°κ΅΄ β μλ§ β μ€ν¬λ¦½νΈ β μ μ₯)
docker compose run --rm pipeline manual
# μ½μ
νΈ μ§μ
docker compose run --rm pipeline manual --concept tutorial
docker compose run --rm pipeline manual --concept numbered_tips
docker compose run --rm pipeline manual --concept numbered_lessons
# μΉ΄ν
κ³ λ¦¬ μ§μ + μ΅λ μμ μ
docker compose run --rm pipeline manual --category ai_tools --max-videos 3
# μ£Όκ° 10κ° λͺ¨λ (talking head 5κ° + numbered 5κ°)
docker compose run --rm pipeline weeklydocker compose run --rm pipeline discovery # μμ λ°κ΅΄λ§
docker compose run --rm pipeline keywords # ν€μλ κ°±μ # λ°±κ·ΈλΌμ΄λ μμ (μ/μ/κΈ 09:00 KST μλ μ€ν)
docker compose up -d
# μ€ν μν νμΈ
docker compose ps
# λ‘κ·Έ μ€μκ° νμΈ
docker compose logs -f
# μ€μ§
docker compose downμ€ν κ²°κ³Όλ output/ ν΄λμ μ μ₯λ©λλ€ (Docker λ³Όλ₯¨μΌλ‘ νΈμ€νΈμ 곡μ ):
output/
csv/ β λ°κ΅΄/μ²λ¦¬ κ²°κ³Ό CSV (λ μ§λ³)
logs/ β μ€ν λ‘κ·Έ
Notion DBμλ μλ μ μ₯λ©λλ€ (integration μ°κ²° νμ).
Docker μμ΄ PythonμΌλ‘ μ§μ μ€νν μλ μμ΅λλ€.
# Python 3.10+ νμ
pip install -r requirements.txt
# ν€μλ μμ± (μ΅μ΄ 1ν)
python -m scripts.run_keyword_refresh
# μ 체 νμ΄νλΌμΈ
python -m scripts.run_pipeline
# μ½μ
νΈ μ§μ
python -m scripts.run_pipeline --concept numbered_tips
# μ£Όκ° 10κ° λͺ¨λ
python -m scripts.run_pipeline --mode all
# μμ λ°κ΅΄λ§
python -m scripts.run_discovery
# νΉμ μμ μ€ν¬λ¦½νΈ μμ±
python -m scripts.run_script_gen "https://www.youtube.com/watch?v=VIDEO_ID"Windowsμμλ
python3λμpythonμ μ¬μ©ν©λλ€.
| μ½μ νΈ | ꡬ쑰 | μ©λ |
|---|---|---|
tutorial |
Hook β Why β How β Summary β CTA | λꡬ νν 리μΌ, κ°μ΄λ |
tips |
Hook β Why β Tip1 β Tip2 β Tip3 β CTA | ν λͺ¨μ, λΉκ΅ |
celebrity |
Hook β Why β Lesson β Application β CTA | μΈν°λ·°, κ°μ° |
| μ½μ νΈ | ꡬ쑰 | μ©λ |
|---|---|---|
numbered_tips |
Hook β 4-7 numbered items β CTA | λꡬ λΉκ΅, κΏν |
numbered_lessons |
Hook β 3-5 numbered lessons β CTA | μ λͺ μΈ μΈμ¬μ΄νΈ |
Numbered ν¬λ§·: λ§νκΈ° μμ΄ ν μ€νΈ μ€λ²λ μ΄ + μμ /μ΄λ B-roll + λ°°κ²½ μμ μΌλ‘ μ μ. 촬μ μκ° λν μ μ½!
| λͺ¨λ | Docker λͺ λ Ή | μ€λͺ |
|---|---|---|
| λ¨μΌ μ½μ νΈ | manual --concept tutorial |
1κ° μ½μ νΈλ‘λ§ μμ± |
| talking | manual --mode talking |
talking head 3μ’ μΌλ‘ μμ± |
| numbered | manual --mode numbered |
numbered 2μ’ μΌλ‘ μμ± |
| μ 체 (μ£Όκ°) | weekly |
5μ’ μ½μ νΈ λͺ¨λ (μ£Ό 10κ° λͺ©ν) |
config/
settings.py β νκ²½λ³μ, νν° μ€μ , μ€μ½μ΄λ§ κ°μ€μΉ
keywords.py β κ²μ¦λ κ²μ ν€μλ (μΉ΄ν
κ³ λ¦¬λ³)
src/
youtube_discovery.py β YouTube API κ²μ + νν°λ§ + μ€μ½μ΄λ§
transcript_extractor.py β μλ§ μΆμΆ (νμμ€ν¬ν ν¬ν¨)
keyword_generator.py β νλ₯΄μλ κΈ°λ° ν€μλ μλ μμ± (Gemini)
keyword_validator.py β ν€μλ YouTube κ²μ¦
script_generator.py β Reels μ€ν¬λ¦½νΈ μμ± (Gemini)
notion_writer.py β Notion DB μ μ₯ + μ€λ³΅ 체ν¬
csv_backup.py β CSV λ°±μ
scripts/
run_pipeline.py β μ 체 νμ΄νλΌμΈ
run_discovery.py β μμ λ°κ΅΄ λ¨λ
μ€ν
run_script_gen.py β μ€ν¬λ¦½νΈ μμ± λ¨λ
μ€ν
run_keyword_refresh.py β ν€μλ κ°±μ
entrypoint.sh β Docker μνΈλ¦¬ν¬μΈνΈ
prompts/
reels_tutorial.txt β νν λ¦¬μΌ (talking head)
reels_tips.txt β ν 리μ€νΈ (talking head)
reels_celebrity.txt β μ λͺ
μΈ λ μ¨ (talking head)
reels_numbered_tips.txt β λλ²λ§ ν (μλ§ + μμ
)
reels_numbered_lessons.txt β λλ²λ§ λ μ¨ (μλ§ + μμ
)
output/
csv/ β CSV λ°±μ
logs/ β μ€ν λ‘κ·Έ
- μ‘°νμ β₯ 5,000
- μμ κΈΈμ΄ 4~40λΆ
- μ΅κ·Ό 6κ°μ μ΄λ΄
- μ€μ½μ΄λ§: μ‘°νμ 40% + μ’μμ 30% + λκΈ 20% + μ΅μ μ± 10%
| νλͺ© | λΉμ© |
|---|---|
| YouTube Data API | $0 (μΌ 10,000 units 무λ£) |
| youtube-transcript-api | $0 |
| Gemini API | $0 (λ¬΄λ£ tier) |
| Notion API | $0 |
| ν©κ³ | $0/μ |
# Docker
docker compose run --rm pipeline pytest tests/ -v
# λ‘컬
python -m pytest tests/ -v- Docker Desktopμ΄ μ€ν μ€μΈμ§ νμΈ (μμ€ν νΈλ μ΄μ Docker μμ΄μ½)
- PowerShell λλ CMDλ₯Ό κ΄λ¦¬μ κΆνμΌλ‘ μ€ν
docker composeλμdocker-compose(νμ΄ν)λ μλ
- λ¬΄λ£ tier μΌμΌ νλ μ΄κ³Ό. 24μκ° ν μλ 리μ
- νμ΄νλΌμΈμ μλ μ¬μλ λ‘μ§ λ΄μ₯ (3ν, 25μ΄ κ°κ²©)
- Notion DBλ₯Ό integrationμ 곡μ νλμ§ νμΈ
- DB νμ΄μ§ β μ°μΈ‘ μλ¨
Β·Β·Β·β μ°κ²° β λ§λ ν΅ν© μ ν
- Python 곡μ μ¬μ΄νΈμμ 3.10+ μ€μΉ
- μ€μΉ μ "Add Python to PATH" μ²΄ν¬ νμ
- PowerShell μ¬μμ ν
python --versionνμΈ