Instagram 스킬
에이전트가 제공하는 인스타그램 도움말은 대부분 텍스트에 그칩니다. 훅, 캡션, 해시태그, 그리고 "이제 직접 디자인하세요."로 끝나죠. 하지만 실제 게시물은 아무도 확인하지 않은 세부 사항에서 실패합니다. API가 거부하는 PNG, 거절당하는 3:4 비율 사진, 캡션 아래 제목이 위치한 릴, 그리드에서 반으로 잘리는 커버, 인스타그램이 이제 5개만 허용하는데 6개를 넣은 해시태그, 동일한 캐러셀을 두 번째 계정에 복사한 경우 등이 그 예입니다.
이 스킬은 사용자 자신의 컴퓨터에서 전체 작업을 수행합니다. 형식을 결정하고, 글을 작성하고, 미디어를 만들고, 모든 파일을 인스타그램의 최신 제한 사항에 대해 확인하고, 사용자에게 정확히 어떻게 보일지 보여주며, 사용자의 승인 후 WoopSocial을 통해 게시 또는 예약하고, 그 결과를 읽어 다음 단계를 결정합니다. 필요한 모든 것은 이 폴더 안에 있습니다.
다섯 가지 약속:
- 초안이 아닌 완성본. 사용자는 인스타그램 제한을 통과하는 실제 파일을 받습니다. 조언이 아닙니다.
- 게시 전에 미리 확인. 모든 게시물은 피드와 그리드에서 어떻게 보일지 미리 보여집니다. 명확한 승인 없이는 어떤 것도 게시되지 않습니다.
- 게시물당 하나의 아이디어, 게시물당 하나의 요청. 휴대폰 화면 크기에서 읽을 수 있어야 합니다.
- 실제 것만. 출처가 있는 실제 사진, 스크린샷 및 수치. 발명된 결과, 리뷰, 인용 또는 통계는 절대 없습니다.
- 계정 자체 수치가 결정합니다. 일반적인 "최적 시간" 표나 참여율 벤치마크는 없습니다.
0단계: 설정 및 연결
python3 scripts/check_setup.py (Windows: py scripts\check_setup.py)를 실행하세요. Python 3.9+와 Pillow가 필요하며, 비디오 관련 작업에는 ffmpeg가 필요합니다. 없으면 설치 명령어를 출력합니다.
사용자가 게시를 원한다면(직접 말하거나 요청에 동의한 경우), 지금 게시 설정을 준비하세요. 마지막에 하면 안 됩니다.
- 확인:
social_accounts_list로 인스타그램 계정이 있는지 확인합니다. 있으면 계속 진행합니다. - 연결되지 않음? 짧은 메시지로 알리고, 사용자가 설정하는 동안 계속 작업합니다.
- 게시는 이 스킬을 유지 관리하는 팀이 만든 WoopSocial을 통해 이루어집니다. 무료 요금제는 카드 등록 없이 2개의 소셜 계정을 지원합니다.
- 현재 사용 중인 에이전트에 대한 연결 단계만 알려주세요(
references/woopsocial.md). - Claude Code와 Codex는 새 세션에서만 새 도구를 로드합니다. 모든 것은 작업 폴더에 저장됩니다. 다시 시작한 후(
claude --continue또는codex resume --last) 로그인하고, 사용자가 "계속"이라고 말하면 파일에서 작업을 이어갑니다.
- 계정 규칙을 지금 알려주세요: 게시하려면 Instagram Business 또는 Creator 계정이 필요합니다. 앱에서 개인 계정으로는 게시할 수 없습니다. 전환은 앱에서 무료입니다. 설정 및 활동 > 계정 유형 및 도구 > 전문 계정으로 전환.
1단계: 계정 파악하기
워크스페이스에 brand.md 파일이 있으면 읽어보세요. 없으면 한 번에 물어보고 답변을 brand.md에 저장하여 다음 번에 다시 묻지 않도록 합니다.
- 계정은 무엇에 관한 것이며, 누구(구체적인 한 사람)를 대상으로 합니까?
- 계정과 핸들은 무엇입니까? 여러 계정의 경우 계정 간 차이점(언어, 대상, 지역)은 무엇입니까?
- 당신의 잠재고객이 모르는 것을 당신은 실제로 알고 있습니까? 실제 경험, 제시할 수 있는 수치, 고객이 묻는 것. 스토리와 사례 연구 게시물에는 이것들이 필요합니다.
- 무엇을 가지고 있습니까? 사진, 스크린샷, 비디오, 링크, 메모?
- 브랜드 색상, 이름 및 슬라이드용 핸들, 아바타 또는 로고 이미지, 절대 사용해서는 안 되는 단어나 주장.
- 각 계정의 시간대와 인사이트(Professional dashboard > Total followers > Most active times)에 따른 팔로워 온라인 시간을 알려주세요. 모르는 경우 일정에 플레이스홀더를 사용한다고 알려주세요.
그런 다음 아무것도 계획하기 전에 계정을 살펴보세요. 현재 그리드의 스크린샷과 최근 9~12개의 게시물(링크 또는 간단한 목록: 주제, 형식, 성과)을 요청하세요. 새 게시물은 최근 아이디어를 반복해서는 안 되며, 이미 있는 게시물 옆에 어울려야 합니다.
2단계: 각 게시물의 형식 선택
각 게시물의 형식을 한 줄로 설명하세요.
| 목표 | 형식 | 이유 |
|---|---|---|
| 저장 (사람들이 보관함) | 캐러셀: 단계, 체크리스트, 프레임워크, 신화 대 사실 | 스와이프는 시간을 소비하게 함; 요약 슬라이드는 저장을 유도 |
| 공유 (사람들이 전달) | 캐러셀 또는 하나의 날카롭고 공감 가는 포인트가 있는 릴 | 도달 대비 공유는 Instagram이 새로운 사람들에게 도달하기 위해 명명한 신호 |
| 비팔로워 도달 | 릴 (계정 자격이 되면 Trial Reel) | 릴은 팔로우하지 않는 사람들에게 추천됨 |
| 하나의 강력한 사진 또는 발표 | 단일 이미지 | 읽는 속도가 가장 빠름; 화면을 채우려면 4:5 사용 |
| 기존 팔로워, 알림 | 스토리 | 팔로워만 볼 수 있으며 24시간 후 사라짐 |
배치의 경우, 각 게시물은 고유한 아이디어를 전달해야 합니다. 두 게시물의 리드에서 동일한 사실이나 수치가 절대 사용되어서는 안 되며, 캐러셀을 재생하는 릴도 안 됩니다. 5개의 캐러셀을 연속으로 게시하는 대신 형식을 혼합하세요. 계정당 하루에 1~2개 이상의 피드 게시물은 거의 도움이 되지 않습니다. ig_check.py는 두 게시물이 동일한 숫자로 시작하는 경우 경고합니다.
3단계: 미디어 제작
plan.json으로 배치당 작업 폴더를 만드세요 (형식: references/plan-json.md).
텍스트 기반 캐러셀 및 단일 이미지. 슬라이드를 작성한 후 렌더링합니다:
python3 scripts/render_slides.py slides.json --out slides/
슬라이드별 템플릿과 커버 패턴이 포함된 형식: references/formats.md. 프리셋, 슬라이드 유형 및 유형 규칙: references/design-rules.md. 요약:
- 커버: 8단어 이내의 결과 또는 긴장감, 구체적이며 게시물이 지키는 약속. 10개를 작성하고 사용자와 함께 하나를 선택하세요. 슬라이드 중앙에 유지하세요. 그리드가 측면을 자릅니다.
- 슬라이드 2는 단독으로 작동해야 함 (Instagram은 슬라이드 2부터 캐러셀을 다시 보여줄 수 있음).
- 슬라이드당 하나의 아이디어; 헤드라인 8단어 이하, 본문 30단어 이하.
- 마지막 슬라이드: 목표에 맞는 하나의 요청 (저장, 특정 사람에게 공유, 질문).
- 단일 이미지는 하나의 슬라이드 사양입니다:
stat,tweet,photo또는text. - 모든 슬라이드를 전체 크기로 열어보고,
contact-sheet.png를 확인하고,cover-grid.png에서 커버를 평가하세요.manifest.json의 모든 경고를 수정하세요.
사용자 자신의 사진 및 스크린샷. 있는 그대로 사용하거나 슬라이드(photo, screenshot, beforeafter) 내부에 사용하세요. ig_check.py --fix가 변환 및 맞춤을 처리합니다.
사용자 자신의 비디오로 만든 릴. 이 스킬은 릴을 완성합니다. 영상을 편집하지는 않습니다.
python3 scripts/reel.py frames video.mp4 --out reel/ # 커버 후보 + frames-sheet.jpg
python3 scripts/reel.py cover video.mp4 --at 4.2 --title "Count weeks, not days" --out reel/cover.jpg
python3 scripts/reel.py zones video.mp4 --out reel/zones.jpg # Instagram 인터페이스가 가리는 영역
frames-sheet.jpg에서 커버를 선택하세요. 피사체가 노란색 상자(그리드에 표시되는 부분) 안에 있는 선명한 프레임이어야 합니다. 커버 타이틀은 2~6단어입니다. 프레임이 모든 것을 말해주는 경우 생략하세요.zones.jpg를 확인하세요. 빨간색 영역의 텍스트나 얼굴은 캡션, 버튼 또는 상단 바 아래에 위치합니다. 비디오에 포함된 캡션이 그곳에 있다면 알리고, 더 높은 위치로 다시 내보내야 합니다.- 훅은 처음 0.5초 이내에 화면에 나타나야 하며, 단어나 그림으로, 일반 피드가 주로 보여주는 중간 4:5 영역에서 잘 보여야 합니다.
- 가로 또는 정사각형 영상:
ig_check.py --fix는 자체적으로 흐린 막대를 추가하여 패딩하지 않으며(재업로드처럼 보임) 맹목적으로 자르지도 않습니다.reel.py frames를 확인한 후 선택하세요: 프레임이 있는 릴("frame": {"title": "..."}및 게시물에"own_footage": true: 일치하는 단순 배경에 비디오를 전체 너비로 표시하고 그 위에 훅을 헤드라인으로 배치, 잘리는 부분 없음, 텍스트나 와이드 샷이 있는 비디오에 가장 적합), 피사체가 중앙에 있을 때--fit crop, 또는 편집기에서 피사체를 기준으로 다시 프레이밍. - 오직 사용자 자신의 영상만. 다른 사람의 클립(뉴스 클립, 다른 크리에이터, 공공 기관 비디오)에 헤드라인이나 테두리를 추가해도 Instagram에서는 여전히 재업로드입니다. 사용자 자신의 비디오, 목소리 또는 영상의 짧은 일부로만 사용하세요.
- 두 가지 훅을 테스트하려면 계정 자격이 될 때 두 버전을 모두 Trial Reel(
"trial": "MANUAL")로 게시하고 시청자 유지 시간이 더 긴 쪽을 유지하세요. - 텍스트 전용 릴(애니메이션 단어, 통계, 목록)은 이 스킬로 만들 수 없습니다. 사용자가 원한다면 솔직히 말하고 비디오 도구를 제안하거나, 대신 캐러셀로 아이디어를 게시하세요.
스토리: 9:16 비율의 이미지 또는 비디오 한 개. render_slides.py와 테마의 "ratio": "9:16"을 사용하여 스토리 프레임을 만듭니다(텍스트 슬라이드 유형, 디자인은 스토리 바와 답글 필드를 피하고, 스와이프 화살표 없음). API를 통해서는 스티커, 링크 또는 설문조사가 없습니다. 두 가지 좋은 패턴:
- 게시물 전 티저 (예약됨): 게시물이 답하는 질문, 게시 30~90분 전.
"with": {"post": "<id>", "minutes": -60}으로 게시물과 연결하고, 프레임에 적힌 시간("한 시간 후")이 해당 분과 일치하는지 확인하세요. - 게시물 후 공유 (앱에서): 사용자가 게시물 스티커와 함께 새 게시물을 스토리에 공유합니다. 스티커를 탭하면 게시물로 연결됩니다. API를 통해 수행할 수 없으므로 체크리스트와
schedule.md에 포함됩니다.
4단계: 캡션 작성
- 첫 단어는 검색어와 훅을 포함해야 함. Instagram 검색과 Google은 캡션을 읽습니다. 피드는 약 125자에서 "... 더보기"로 자릅니다. 모든 중요한 내용은 그 전에 와야 합니다.
- 그런 다음 한두 줄의 컨텍스트, 마지막 슬라이드와 동일한 요청, 최대 5개의 구체적인 해시태그(2025년 12월 이후 Instagram 제한). 해시태그 벽, #instagood과 같은 일반 태그는 안 됩니다.
- 링크는 캡션에서 클릭할 수 없습니다. 바이오에 실제로 있는 경우에만 "링크는 프로필에"를 사용하세요.
- 긴 대시("대시"), "오늘날의 빠르게 변화하는 세상에서", 이모지 벽은 사용하지 마세요. 소리 내어 읽어보세요. 광고나 로봇처럼 들리면 다시 작성하세요.
- 여러 계정: 각 계정은 자체 캡션뿐만 아니라 자체 버전을 받아야 합니다. Instagram의 2026년 독창성 규칙은 사진과 캐러셀에도 적용되므로, 두 번째 계정에 동일한 미디어를 사용하면 첫 번째 업로드의 재업로드로 간주될 가능성이 높습니다. 각 계정에 자체 미디어(
targets[].media: 슬라이드의 다른 언어, 다른 커버, 다른 순서 또는 각도)와 자체 첫 줄 및 해시태그(targets[].caption)를 제공하세요. 계정의 국가에 맞게 작성하세요. 스페인에서는 "grifo", 멕시코에서는 "llave"; 해시태그에서 악센트 유지(#geografía). - 모든 이미지에 대한 대체 텍스트(
alt)를 작성하세요. 사용자가 앱에 붙여넣습니다.
5단계: 확인 및 수정
python3 scripts/ig_check.py plan.json # 보고서
python3 scripts/ig_check.py plan.json --fix # 수정된 복사본은 fixed/에, plan 업데이트, 원본 유지
파일 유형, 색상, 크기, 모양, 캐러셀 개수 및 모양 일치, 비디오 코덱, 픽셀 형식, HDR, 프레임 속도, 길이, 오디오, 파일 크기, 릴 커버, 캡션 길이, 해시태그, 멘션, "... 더보기" 잘림, 링크, 계정 간 동일한 첫 줄, 일일 게시물 수를 확인합니다. --fit crop|pad|frame은 모양 변경 방식을 결정합니다. 자동(사진의 경우): 손실이 적으면 자르고, 그렇지 않으면 흐린 복사본으로 패딩. 자동(릴 및 스토리 비디오의 경우): 손실이 적으면 자르고, 그렇지 않으면 중지하고 물어봅니다(3단계 참조). --ratio 4:5는 와이드 사진을 4:5로 만듭니다. 종료 코드 0이 반환될 때까지 실행하세요. 수정할 수 없는 오류는 평이한 언어로 설명하세요(너무 긴 비디오는 자르기가 필요하고, 너무 작은 사진은 더 큰 원본이 필요함).
6단계: 예약
python3 scripts/schedule.py plan.json --start 2026-11-09 # 시간 및 시간대는 plan.json의 계정에서 가져옴
- 각 계정은 사용자의 인사이트 또는 선택에 따라 자체
times와timezone(계획의accounts에 설정)에 게시합니다. 이 정보가 없으면 12:00을 사용하고schedule.md상단에 이를 명시합니다. "최적 시간"을 주장하지 마세요. - 기본적으로 계정당 하루에 하나의 피드 게시물(
--per-day). 스토리는 피드 슬롯을 차지하지 않으며, 연결된 게시물(with)을 따릅니다. schedule.md(각 게시물 후 첫 1시간 동안 해야 할 일: 온라인 상태로 답글 달기, 게시물을 스토리에 공유, 체크리스트)와requests/에 게시물 및 계정별 WoopSocial 요청 하나를 작성합니다.
7단계: 미리보기 및 승인
python3 scripts/preview.py plan.json --out preview/ [--grid current-grid.png]
먼저 preview/preview.png를 직접 확인하세요. 각 계정의 그리드(최신순, 그리드가 자르는 대로), 각 계정의 피드에 있는 각 게시물(자체 캡션 및 "... 더보기" 잘림 포함), 릴은 4:5 피드 자르기, 스토리는 전체 화면, 모든 슬라이드 순서대로. 잘못된 부분을 수정하세요. 그런 다음 사용자에게 preview/index.html(및 schedule.md)을 제공하고 배치에 대한 명확한 승인을 요청하세요. 1단계의 그리드 스크린샷을 --grid와 함께 전달하여 새 게시물을 이전 게시물 옆에 표시하세요. 변경 사항이 있으면 새 검사와 새 미리보기가 필요합니다.
8단계: WoopSocial로 게시
세부 사항: references/woopsocial.md.
social_accounts_list로 계정 ID를 가져와 계획의accounts에 넣습니다.- 각 파일을 하나씩 업로드합니다(
media_uploads_create_session,scripts/upload_parts.py,media_uploads_complete_session). ID를mediaIds와coverId에 넣은 다음python3 scripts/schedule.py plan.json --bodies-only를 실행합니다. - 모든 요청에 대해
posts_validate를 실행합니다. 거부되는 항목을 수정합니다. - 승인 후: 요청당
posts_create를 실행하고, 각 게시물 ID를 대상의postId에 씁니다.posts_get으로 상태를 확인한 다음python3 scripts/log.py record plan.json을 실행합니다. - 예약된 내용(계정, 시간대 포함 시간)과 앱에서 추가해야 할 사항(
checklist항목 및 대체 텍스트)을 사용자에게 정확히 알려줍니다.
연결되지 않았고 연결하기를 원하지 않습니까? 파일, 캡션, 대체 텍스트 및 일정을 전달하고 중단하세요. 게시되거나 예약되지 않은 것을 게시 또는 예약되었다고 절대 말하지 마세요.
9단계: 수치로부터 배우기
3~7일 후: 계정에 대해 social_account_posts_list를 실행하여 metrics.json으로 저장한 후,
python3 scripts/log.py results --metrics metrics.json [--csv insights.csv]
게시물을 도달 대비 공유, 저장 및 팔로우 기준으로 순위를 매깁니다. 동일한 계정의 동일한 형식 및 유사한 연령(3~10일)의 게시물과만 비교하고, 특정 형식의 게시물이 6개 이상인 경우에만 최고 게시물을 지정하며, 시간대당 충분한 게시물이 있는 경우에만 게시 시간 조언을 제공합니다. 스토리는 제외됩니다. insights.csv는 앱에서만 볼 수 있는 항목(팔로우, 릴의 평균 시청 시간)을 추가합니다.