Communitygithub.com

소셜미디어-스킬/인스타그램-스킬

인스타그램 스킬: AI 에이전트로 인스타그램 게시물을 만들고, 확인하고, 예약합니다. 하나의 계정 또는 여러 계정을 지원하며, 아이디어, 링크, 메모, 사진 또는 비디오를 완성된 게시물(캐러셀 및 단일 이미지, 로컬 렌더링, 유료 API 불필요)로 변환합니다. 각 파일과 캡션을 인스타그램의 최신 제한 사항에 대해 확인하고 수정 가능한 부분을 고치며, 피드 및 그리드 미리보기를 보여줍니다.

인스타그램-스킬란 무엇인가요?

이 인스타그램 스킬은 AI 에이전트(예: Claude Code, Cursor, Codex)가 사용자의 로컬 컴퓨터에서 완전히 인스타그램 게시물을 생성, 검증, 예약 및 분석할 수 있도록 설계된 포괄적인 도구입니다. 기존 AI 에이전트의 텍스트 기반 도움(예: 캡션 작성, 해시태그 제안)을 넘어, 실제로 피드에 게시할 수 있는 완성된 미디어 파일을 생성합니다. 주요 기능으로는 슬라이드 템플릿 기반의 캐러셀 및 단일 이미지 렌더링, 사용자 자체 사진/비디오 변환 및 포맷팅, 릴(Reel) 완성, 인스타그램의 최신 제한 사항(파일 형식, 해상도, 캡션 길이, 해시태그 수 등)에 대한 철저한 검사 및 자동 수정, 그리고 게시 전 시각적 미리보기 제공이 포함됩니다. 이 모든 과정은 유료 API나 외부 서비스 없이 Python 스크립트를 통해 로컬에서 이루어집니다. 게시는 WoopSocial API를 통해 이루어지며, 사용자는 각 게시물을 명확히 확인(‘예’)한 후에야 예약 또는 게시됩니다. 또한, 게시 후 3~7일 후에 성과 데이터를 분석하여 다음 게시물 전략을 개선하는 데 도움을 줍니다. 이 스킬은 ‘완성된 결과물’, ‘게시 전 확인’, ‘게시물당 하나의 아이디어’, ‘진짜 데이터만 사용’, ‘계정 자체 데이터 기반 의사 결정’이라는 다섯 가지 핵심 원칙을 따릅니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/social-media-skills/instagram-skill/tree/HEAD/skills/instagram-skill

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Instagram 스킬

에이전트가 제공하는 인스타그램 도움말은 대부분 텍스트에 그칩니다. 훅, 캡션, 해시태그, 그리고 "이제 직접 디자인하세요."로 끝나죠. 하지만 실제 게시물은 아무도 확인하지 않은 세부 사항에서 실패합니다. API가 거부하는 PNG, 거절당하는 3:4 비율 사진, 캡션 아래 제목이 위치한 릴, 그리드에서 반으로 잘리는 커버, 인스타그램이 이제 5개만 허용하는데 6개를 넣은 해시태그, 동일한 캐러셀을 두 번째 계정에 복사한 경우 등이 그 예입니다.

이 스킬은 사용자 자신의 컴퓨터에서 전체 작업을 수행합니다. 형식을 결정하고, 글을 작성하고, 미디어를 만들고, 모든 파일을 인스타그램의 최신 제한 사항에 대해 확인하고, 사용자에게 정확히 어떻게 보일지 보여주며, 사용자의 승인 후 WoopSocial을 통해 게시 또는 예약하고, 그 결과를 읽어 다음 단계를 결정합니다. 필요한 모든 것은 이 폴더 안에 있습니다.

다섯 가지 약속:

  1. 초안이 아닌 완성본. 사용자는 인스타그램 제한을 통과하는 실제 파일을 받습니다. 조언이 아닙니다.
  2. 게시 전에 미리 확인. 모든 게시물은 피드와 그리드에서 어떻게 보일지 미리 보여집니다. 명확한 승인 없이는 어떤 것도 게시되지 않습니다.
  3. 게시물당 하나의 아이디어, 게시물당 하나의 요청. 휴대폰 화면 크기에서 읽을 수 있어야 합니다.
  4. 실제 것만. 출처가 있는 실제 사진, 스크린샷 및 수치. 발명된 결과, 리뷰, 인용 또는 통계는 절대 없습니다.
  5. 계정 자체 수치가 결정합니다. 일반적인 "최적 시간" 표나 참여율 벤치마크는 없습니다.

0단계: 설정 및 연결

python3 scripts/check_setup.py (Windows: py scripts\check_setup.py)를 실행하세요. Python 3.9+와 Pillow가 필요하며, 비디오 관련 작업에는 ffmpeg가 필요합니다. 없으면 설치 명령어를 출력합니다.

사용자가 게시를 원한다면(직접 말하거나 요청에 동의한 경우), 지금 게시 설정을 준비하세요. 마지막에 하면 안 됩니다.

  1. 확인: social_accounts_list로 인스타그램 계정이 있는지 확인합니다. 있으면 계속 진행합니다.
  2. 연결되지 않음? 짧은 메시지로 알리고, 사용자가 설정하는 동안 계속 작업합니다.
    • 게시는 이 스킬을 유지 관리하는 팀이 만든 WoopSocial을 통해 이루어집니다. 무료 요금제는 카드 등록 없이 2개의 소셜 계정을 지원합니다.
    • 현재 사용 중인 에이전트에 대한 연결 단계만 알려주세요(references/woopsocial.md).
    • Claude Code와 Codex는 새 세션에서만 새 도구를 로드합니다. 모든 것은 작업 폴더에 저장됩니다. 다시 시작한 후(claude --continue 또는 codex resume --last) 로그인하고, 사용자가 "계속"이라고 말하면 파일에서 작업을 이어갑니다.
  3. 계정 규칙을 지금 알려주세요: 게시하려면 Instagram Business 또는 Creator 계정이 필요합니다. 앱에서 개인 계정으로는 게시할 수 없습니다. 전환은 앱에서 무료입니다. 설정 및 활동 > 계정 유형 및 도구 > 전문 계정으로 전환.

1단계: 계정 파악하기

워크스페이스에 brand.md 파일이 있으면 읽어보세요. 없으면 한 번에 물어보고 답변을 brand.md에 저장하여 다음 번에 다시 묻지 않도록 합니다.

  1. 계정은 무엇에 관한 것이며, 누구(구체적인 한 사람)를 대상으로 합니까?
  2. 계정과 핸들은 무엇입니까? 여러 계정의 경우 계정 간 차이점(언어, 대상, 지역)은 무엇입니까?
  3. 당신의 잠재고객이 모르는 것을 당신은 실제로 알고 있습니까? 실제 경험, 제시할 수 있는 수치, 고객이 묻는 것. 스토리와 사례 연구 게시물에는 이것들이 필요합니다.
  4. 무엇을 가지고 있습니까? 사진, 스크린샷, 비디오, 링크, 메모?
  5. 브랜드 색상, 이름 및 슬라이드용 핸들, 아바타 또는 로고 이미지, 절대 사용해서는 안 되는 단어나 주장.
  6. 각 계정의 시간대와 인사이트(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.

  1. social_accounts_list로 계정 ID를 가져와 계획의 accounts에 넣습니다.
  2. 각 파일을 하나씩 업로드합니다(media_uploads_create_session, scripts/upload_parts.py, media_uploads_complete_session). ID를 mediaIds와 coverId에 넣은 다음 python3 scripts/schedule.py plan.json --bodies-only를 실행합니다.
  3. 모든 요청에 대해 posts_validate를 실행합니다. 거부되는 항목을 수정합니다.
  4. 승인 후: 요청당 posts_create를 실행하고, 각 게시물 ID를 대상의 postId에 씁니다. posts_get으로 상태를 확인한 다음 python3 scripts/log.py record plan.json을 실행합니다.
  5. 예약된 내용(계정, 시간대 포함 시간)과 앱에서 추가해야 할 사항(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는 앱에서만 볼 수 있는 항목(팔로우, 릴의 평균 시청 시간)을 추가합니다.

관련 스킬