[1순위] 엔진 추상화 리팩토링 - config/engine.json: 단일 설정 파일로 writing/tts/image/video/publishing 엔진 제어 - bots/engine_loader.py: EngineLoader 팩토리 클래스 (Claude/OpenClaw/Gemini Writer, gTTS/GoogleCloud/OpenAI/ElevenLabs TTS, DALL-E/External 이미지) [2순위] VideoEngine 추상화 - bots/converters/video_engine.py: VideoEngine ABC + FFmpegSlidesEngine/SeedanceEngine/SoraEngine/RunwayEngine/VeoEngine 구현 - Seedance 2.0 API 연동 + 실패 시 ffmpeg_slides 자동 fallback [3순위] 소설 연재 파이프라인 - bots/novel/novel_writer.py: AI 에피소드 자동 생성 (Claude/엔진 추상화) - bots/novel/novel_blog_converter.py: 에피소드 → 장르별 테마 Blogger HTML - bots/novel/novel_shorts_converter.py: key_scenes → TTS + Pillow + VideoEngine → MP4 - bots/novel/novel_manager.py: 전체 파이프라인 조율 + Telegram 명령 처리 - config/novels/shadow-protocol.json: 예시 소설 설정 (2040 서울 SF 스릴러) [스케줄러] 소설 파이프라인 통합 - 매주 월/목 09:00 자동 실행 (job_novel_pipeline) - Telegram 명령: /novel_list, /novel_gen, /novel_status [기타 수정] - collector_bot.py: 한국어 유니코드 감지 + RSS 신뢰도 override 버그 수정 - quality_rules.json: min_score 70→60 - scripts/get_token.py: YouTube OAuth scope 추가 - .env.example: SEEDANCE/ELEVENLABS/GEMINI/RUNWAY API 키 항목 추가 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
73 lines
2.2 KiB
JSON
73 lines
2.2 KiB
JSON
{
|
|
"min_score": 60,
|
|
"scoring": {
|
|
"korean_relevance": {
|
|
"max": 30,
|
|
"description": "한국 독자 관련성",
|
|
"keywords": ["한국", "국내", "한글", "카카오", "네이버", "쿠팡", "삼성", "LG", "현대", "기아", "배달", "토스", "당근", "야놀자"]
|
|
},
|
|
"freshness": {
|
|
"max": 20,
|
|
"description": "트렌드 신선도",
|
|
"hours_full_score": 24,
|
|
"hours_zero_score": 168
|
|
},
|
|
"search_demand": {
|
|
"max": 20,
|
|
"description": "검색 수요 (Google Trends 상대값)"
|
|
},
|
|
"source_trust": {
|
|
"max": 15,
|
|
"description": "출처 신뢰도",
|
|
"levels": {
|
|
"high": 15,
|
|
"medium": 8,
|
|
"low": 3
|
|
},
|
|
"high_sources": ["github.com", "official blog", "공식", "press release"],
|
|
"low_sources": ["twitter.com", "x.com", "reddit.com", "개인"]
|
|
},
|
|
"monetization": {
|
|
"max": 15,
|
|
"description": "수익 연결 가능성",
|
|
"keywords": ["도구", "앱", "서비스", "제품", "장비", "구독", "할인", "추천"]
|
|
}
|
|
},
|
|
"discard_rules": [
|
|
{
|
|
"id": "no_korean_relevance",
|
|
"description": "한국 독자와 무관한 주제",
|
|
"condition": "korean_relevance_score == 0"
|
|
},
|
|
{
|
|
"id": "unverified_source",
|
|
"description": "출처 불명/미확인 사례",
|
|
"condition": "source_trust_level == 'unknown'"
|
|
},
|
|
{
|
|
"id": "duplicate_topic",
|
|
"description": "이미 발행한 주제와 유사도 80% 이상",
|
|
"similarity_threshold": 0.8
|
|
},
|
|
{
|
|
"id": "stale_trend",
|
|
"description": "7일 이상 지난 트렌드 (에버그린 제외)",
|
|
"max_age_days": 7,
|
|
"except_evergreen": true
|
|
},
|
|
{
|
|
"id": "promotional",
|
|
"description": "광고성/홍보성이 명확한 원문",
|
|
"keywords": ["광고", "홍보", "스폰서", "협찬", "AD", "sponsored"]
|
|
},
|
|
{
|
|
"id": "clickbait",
|
|
"description": "클릭베이트성 주제",
|
|
"patterns": ["충격", "경악", "난리", "ㅋㅋ", "ㅠㅠ", "대박", "레전드", "역대급"]
|
|
}
|
|
],
|
|
"evergreen_keywords": [
|
|
"가이드", "방법", "사용법", "입문", "튜토리얼", "기초", "완전정복", "총정리"
|
|
]
|
|
}
|