From 8367219b7f2a894dd13c1fffc54289acd57211c5 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 4 Aug 2026 11:50:12 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BB=B7=EB=B3=84=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EC=B6=94=EC=B2=9C=20=ED=94=84=EB=A1=AC=ED=94=84=ED=8A=B8=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=A1=9C=EB=8D=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RECOMMEND_PATH 상수 추가 (프롬프트/댓글_추천.md) - DEFAULT_RECOMMEND 기본 프롬프트 추가 ({cuts}, {comments}, {k} 치환자 포함) - load_recommend() 함수 구현 (없으면 기본값으로 생성 후 읽기, load_step1()과 같은 패턴) 사용자가 메모장에서 프롬프트를 직접 수정할 수 있도록 설계. Task 4에서 .format(cuts=…, comments=…, k=…)으로 채워져 Gemini에 전달됨. Co-Authored-By: Claude Opus 5 (1M context) --- capcut_agent/prompts.py | 29 +++++++++++++++++++++++++++++ 프롬프트/댓글_추천.md | 16 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 프롬프트/댓글_추천.md diff --git a/capcut_agent/prompts.py b/capcut_agent/prompts.py index 25c6b11..3688a0b 100644 --- a/capcut_agent/prompts.py +++ b/capcut_agent/prompts.py @@ -15,6 +15,7 @@ PROMPT_DIR = os.path.join(_ROOT, "프롬프트") STEP1_PATH = os.path.join(PROMPT_DIR, "하이라이트_선정.md") CONFIG_PATH = os.path.join(PROMPT_DIR, "설정.json") STEP3_PATH = os.path.join(_ROOT, "숏폼_편집_지침서_v13.7_capcut2연동판.md") +RECOMMEND_PATH = os.path.join(PROMPT_DIR, "댓글_추천.md") # 오팔 Step 1 원문 이식. 원문 JSON 예시의 오타(start_time 중복, end_time 누락)는 수정. DEFAULT_STEP1 = """당신은 유튜브 영상에서 쇼츠(Shorts)로 제작했을 때 가장 터질 만한 구간을 찾아내는 '바이럴 분석가'입니다. 제공된 영상을 분석해 아래 규칙에 따라 5개의 하이라이트 후보 구간을 선정하세요. @@ -36,6 +37,24 @@ DEFAULT_STEP1 = """당신은 유튜브 영상에서 쇼츠(Shorts)로 제작했 } """ +# 컷별 댓글 추천(자동 탭). {cuts} {comments} {k} 를 채워 쓴다. +DEFAULT_RECOMMEND = """너는 숏폼 편집자다. 컷마다 화면 아래에 띄울 유튜브 댓글을 고른다. + +규칙: +- 컷 자막의 **내용과 의미가 통하는** 댓글만 고른다. 억지로 채우지 마라. +- 어울리는 게 없으면 그 컷은 picks 를 빈 배열로 둔다. 빈 채로 두는 게 엉뚱한 것보다 낫다. +- 한 댓글은 한 컷에만 쓴다. 여러 컷에 어울리면 가장 잘 맞는 컷 하나에만 넣어라. +- 아래 목록에 있는 댓글 번호만 쓴다. 없는 번호를 지어내지 마라. +- 컷마다 최대 {k}개까지. + +컷 목록: +{cuts} + +댓글 후보 (번호. 👍좋아요 / 본문): +{comments} + +각 컷마다 {{"cut": 컷번호, "picks": [댓글번호…]}} 를 JSON 배열로만 출력.""" + DEFAULT_CONFIG = { "model": "gemini-3.5-flash", "model_step1": "", @@ -60,6 +79,16 @@ def load_step3() -> str: return f.read() +def load_recommend() -> str: + """컷별 댓글 추천 프롬프트. 없으면 기본값으로 파일을 만들고 읽는다(메모장 수정 가능).""" + if not os.path.isfile(RECOMMEND_PATH): + os.makedirs(PROMPT_DIR, exist_ok=True) + with open(RECOMMEND_PATH, "w", encoding="utf-8") as f: + f.write(DEFAULT_RECOMMEND) + with open(RECOMMEND_PATH, encoding="utf-8") as f: + return f.read() + + def load_config() -> dict: """설정 로드. 파일이 없거나 깨졌으면 기본값(파일은 첫 save 때 생성).""" cfg = dict(DEFAULT_CONFIG) diff --git a/프롬프트/댓글_추천.md b/프롬프트/댓글_추천.md new file mode 100644 index 0000000..5636ea7 --- /dev/null +++ b/프롬프트/댓글_추천.md @@ -0,0 +1,16 @@ +너는 숏폼 편집자다. 컷마다 화면 아래에 띄울 유튜브 댓글을 고른다. + +규칙: +- 컷 자막의 **내용과 의미가 통하는** 댓글만 고른다. 억지로 채우지 마라. +- 어울리는 게 없으면 그 컷은 picks 를 빈 배열로 둔다. 빈 채로 두는 게 엉뚱한 것보다 낫다. +- 한 댓글은 한 컷에만 쓴다. 여러 컷에 어울리면 가장 잘 맞는 컷 하나에만 넣어라. +- 아래 목록에 있는 댓글 번호만 쓴다. 없는 번호를 지어내지 마라. +- 컷마다 최대 {k}개까지. + +컷 목록: +{cuts} + +댓글 후보 (번호. 👍좋아요 / 본문): +{comments} + +각 컷마다 {{"cut": 컷번호, "picks": [댓글번호…]}} 를 JSON 배열로만 출력. \ No newline at end of file