Files
blog-writer/config/engine.json
JOUNGWOOK KWON 3e2405dff9 feat: upstream v3.2.1 기반으로 업그레이드 + eli 블로그 커스터마이징
- upstream sinmb79/blog-writer v3.2.1 코드 베이스 적용
- config_resolver, CLI, writer_bot, shorts pipeline 등 신규 기능 포함
- load_dotenv Windows 경로 → Docker 호환 load_dotenv() 변경 (25개 파일)
- runtime_guard.py Docker 환경 bypass 추가
- config/blogs.json: eli-ai 블로그 정체성 (8개 카테고리)
- config/sources.json: 38개 RSS 소스 유지
- config/engine.json: writing provider → gemini (2.5-flash)
- config/safety_keywords.json: 모든 글 수동 승인 (score 101)
- bots/scheduler.py: 시스템 프롬프트 eli 블로그 기준으로 업데이트
- bots/publisher_bot.py: .env refresh token OAuth 폴백 로직 추가
- requirements.txt: google-generativeai, groq 활성화
- Dockerfile + docker-compose.yml: NAS Docker 배포 설정
- CLAUDE.md: 프로젝트 메타데이터

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-30 09:21:14 +09:00

212 lines
5.5 KiB
JSON

{
"_comment": "The 4th Path 블로그 자동 수익 엔진 — 엔진 설정 (v3)",
"_updated": "2026-03-29",
"writing": {
"provider": "gemini",
"_comment_provider": "openclaw=ChatGPT Pro(OAuth), claude_web=Claude Max(웹쿠키), gemini_web=Gemini Pro(웹쿠키), claude=Anthropic API키, gemini=Google AI API키",
"options": {
"openclaw": {
"agent_name": "blog-writer",
"timeout": 300
},
"claude_web": {
"cookie_env": "CLAUDE_WEB_COOKIE",
"ua_env": "CLAUDE_WEB_UA",
"timeout": 240
},
"gemini_web": {
"psid_env": "GEMINI_WEB_1PSID",
"psidts_env": "GEMINI_WEB_1PSIDTS"
},
"claude": {
"api_key_env": "ANTHROPIC_API_KEY",
"model": "claude-opus-4-6",
"max_tokens": 4096,
"temperature": 0.7
},
"gemini": {
"api_key_env": "GEMINI_API_KEY",
"model": "gemini-2.5-flash",
"max_tokens": 4096,
"temperature": 0.7
}
}
},
"tts": {
"provider": "openai",
"options": {
"google_cloud": {
"api_key_env": "GOOGLE_TTS_API_KEY",
"voice": "ko-KR-Wavenet-A",
"speaking_rate": 1.05,
"pitch": 0
},
"openai": {
"api_key_env": "OPENAI_API_KEY",
"model": "tts-1-hd",
"voice": "alloy",
"speed": 1.0
},
"elevenlabs": {
"api_key_env": "ELEVENLABS_API_KEY",
"model": "eleven_multilingual_v2",
"voice_id": "pNInz6obpgDQGcFmaJgB",
"stability": 0.5,
"similarity_boost": 0.75
},
"gtts": {
"lang": "ko",
"slow": false
}
}
},
"image_generation": {
"provider": "external",
"options": {
"dalle": {
"api_key_env": "OPENAI_API_KEY",
"model": "dall-e-3",
"size": "1024x1792",
"quality": "standard"
},
"external": {
"comment": "수동 이미지 제공 — 자동 생성 없음"
}
}
},
"video_generation": {
"provider": "smart_router",
"options": {
"smart_router": {
"priority": [
"kling_free",
"veo3",
"seedance2",
"ffmpeg_slides"
],
"daily_cost_limit_usd": 0.5,
"prefer_free_first": true,
"fallback": "ffmpeg_slides"
},
"kling_free": {
"api_url": "https://api.klingai.com/v1",
"api_key_env": "KLING_API_KEY",
"free_daily_credits": 66,
"mode": "standard",
"resolution": "720p",
"aspect_ratio": "9:16",
"audio": true,
"cost_per_sec": 0
},
"veo3": {
"api_key_env": "GEMINI_API_KEY",
"model": "veo-3.1",
"resolution": "720p",
"aspect_ratio": "9:16",
"audio": true,
"cost_per_sec": 0.03
},
"seedance2": {
"provider": "fal.ai",
"api_key_env": "FAL_API_KEY",
"model": "seedance-2.0",
"resolution": "720p",
"audio": true,
"cost_per_sec": 0.022
},
"ffmpeg_slides": {
"resolution": "1080x1920",
"fps": 30,
"transition": "fade",
"transition_duration": 0.5,
"bgm_volume": 0.08,
"zoom_speed": 0.0003,
"zoom_max": 1.05,
"burn_subtitles": true
},
"seedance": {
"_comment": "레거시 — seedance2/FAL_API_KEY로 대체됨",
"api_url": "https://api.seedance2.ai/v1/generate",
"api_key_env": "SEEDANCE_API_KEY",
"resolution": "1080x1920",
"duration": "10s",
"audio": true,
"fallback": "ffmpeg_slides"
},
"runway": {
"api_key_env": "RUNWAY_API_KEY",
"model": "gen3a_turbo",
"duration": 10,
"ratio": "768:1344",
"fallback": "ffmpeg_slides"
},
"veo": {
"comment": "Google Veo 3.1 레거시 — veo3로 대체됨",
"api_key_env": "GEMINI_API_KEY",
"fallback": "ffmpeg_slides"
}
}
},
"publishing": {
"blogger": {
"enabled": true,
"blog_id_env": "BLOG_MAIN_ID"
},
"youtube": {
"enabled": true,
"channel_id_env": "YOUTUBE_CHANNEL_ID",
"category": "shorts",
"privacy": "public",
"tags": [
"쇼츠",
"AI",
"the4thpath"
]
},
"instagram": {
"enabled": false,
"account_id_env": "INSTAGRAM_ACCOUNT_ID"
},
"x": {
"enabled": false
},
"tiktok": {
"enabled": false
},
"novel": {
"enabled": false,
"comment": "노벨피아 연재 — 추후 활성화"
}
},
"quality_gates": {
"gate1_research_min_score": 60,
"gate2_writing_min_score": 70,
"gate3_review_required": true,
"gate3_auto_approve_score": 90,
"min_key_points": 2,
"min_word_count": 300,
"safety_check": true
},
"schedule": {
"collector": "07:00",
"writer": "08:00",
"converter": "08:30",
"publisher": "09:00",
"youtube_uploader": "10:00",
"analytics": "22:00"
},
"brand": {
"name": "AI? 그게 뭔데?",
"sub": "eli의 쉽고 재미있는 이야기",
"by": "by eli",
"url": "eli-ai.blogspot.com",
"cta": "구독하면 매일 쉽고 재미있는 정보를 받습니다"
},
"optional_keys": {
"KLING_API_KEY": "Kling 3.0 AI 영상 생성 (66 무료 크레딧/일)",
"FAL_API_KEY": "Seedance 2.0 AI 영상 생성 (fal.ai)",
"ELEVENLABS_API_KEY": "ElevenLabs 고품질 TTS",
"GEMINI_API_KEY": "Google Gemini 글쓰기 / Veo 영상",
"RUNWAY_API_KEY": "Runway Gen-3 AI 영상 생성"
}
}