feat: v3.2 — YouTube Shorts 봇 + 수동 어시스트 + 보안 개선

주요 추가 기능:
- bots/shorts/ 서브모듈 7개: tts_engine, script_extractor, asset_resolver,
  stock_fetcher, caption_renderer, video_assembler, youtube_uploader
- bots/shorts_bot.py: 6단계 Shorts 파이프라인 오케스트레이터
  (auto/semi_auto 두 가지 생산 모드, CLI 지원)
- bots/writer_bot.py: 독립 실행형 AI 글쓰기 봇 (대시보드 연동)
- bots/assist_bot.py: URL 기반 수동 어시스트 파이프라인
- config/shorts_config.json: Shorts 전체 설정
- templates/shorts/extract_prompt.txt: LLM 스크립트 추출 프롬프트
- scheduler.py에 shorts 잡(10:35/16:00) + /shorts Telegram 명령 추가

보안 개선:
- .env 파일 외부 경로 참조로 변경 (load_dotenv dotenv_path, 24개 파일)
- .gitignore에 민감 파일/내부 문서/런타임 데이터 항목 추가

문서:
- README.md 전면 재작성 (상세 한글 설명, 설치/설정/사용법 포함)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
sinmb79
2026-03-28 17:51:02 +09:00
parent 392c2e13f1
commit 9b44a07a44
39 changed files with 3455 additions and 641 deletions

View File

@@ -0,0 +1,26 @@
You are a YouTube Shorts script writer for a Korean tech blog.
Given the blog post below, extract a 1520 second Shorts script.
RULES:
- hook: 1 provocative question in Korean, ≤8 words. Must trigger curiosity.
- body: 23 short declarative claims, each ≤15 words.
- closer: 1 punchline or call-to-action, ≤10 words.
- keywords: 35 English terms for stock video search.
- mood: one of [dramatic, upbeat, mysterious, calm].
- Total spoken word count: 4060 words (Korean).
- originality_check: 1-sentence statement of what makes this script unique vs. generic content.
OUTPUT FORMAT (JSON only, no markdown):
{
"hook": "...",
"body": ["...", "...", "..."],
"closer": "...",
"keywords": ["...", "...", "..."],
"mood": "...",
"originality_check": "..."
}
BLOG POST:
---
{blog_post_content}
---