← 목록으로

올리기 코파일럿 — 인스타그램 스펙 (정본)

2026-08-31 · 전수 실측 완료. 추측 없음. 아래 모든 판정은 teamai.momentus 계정에서
실제로 해보고 적은 것이며, 만든 것은 전부 원복했다(게시물 0 · 프로필 사진 없음 · 개인 계정).


0. 한 줄

인스타에서 웹으로 되는 일은 거의 다 된다. 안 되는 건 넷뿐이고, 그 넷은 팔지 않는다.

판다 게시물 · 릴스(동영상) · 프로필 꾸미기(링크 제외) · 비즈니스 계정 세팅 · DM
안 판다 스토리 · 하이라이트 · 프로필 링크 · 릴스 음악

안 되는 것을 반쯤 자동화해서 "나머지는 폰에서 하세요" 로 넘기지 않는다.
그건 되는 척이다 (대표 확정).


1. 왜 이 검증을 했나

이 제품은 사용자의 브라우저에서 대신 눌러 주는 코파일럿이다.
그러므로 성립 여부는 딱 하나에 달려 있다 — 인스타 웹에서 그 일이 되는가.

문서와 통념은 세 번 틀렸다. 그래서 전부 직접 해봤다.

통념 실제
"브라우저 보안상 이미지 자동 첨부는 불가" 틀렸다. 경로는 못 넣지만 File 객체는 들어간다
"하이라이트는 모바일 전용" 반만 맞다. 만들기 UI 는 웹에 있다. 막힌 건 그 위의 스토리다
"릴스는 웹에서 못 만든다" 틀렸다. 동영상을 게시물로 올리면 그게 릴스다
"인스타가 동영상을 조용히 버린다" 틀렸다 — 이건 내가 적었던 것이다. 인스타는 이유를 화면에 말했고 내가 안 읽었다 (§4-6)

넷 중 하나는 이 검증 도중에 내가 만든 오판이다. 그래서 §9 를 마지막에 붙였다.


2. 웹 표면 전수표

✅ 게시물 (사진)

사진 1장 · 여러 장(캐러셀) · 캡션 2,200자 · 위치 · 공동 작업자 · 사람 태그 ·
대체 텍스트 · 좋아요·조회수 숨기기 · 댓글 기능 해제 · AI 레이블 · Threads 자동 공유

✅ 릴스 (동영상)

동영상을 게시물로 올리면 인스타가 안내한다 — "이제 동영상 게시물이 릴스로 공유됩니다."

커버 사진 영상 프레임에서 고르거나 직접 이미지 업로드
다듬기 시작·끝 트림
소리 켜기/끄기 스위치 하나뿐 — 음악·트렌딩 오디오 고르기는 없다
그 외 캡션 · 사람 태그 · AI 레이블 · 접근성 · 고급 설정 (위치·공동작업자는 없다)

아무 mp4나 되는 건 아니지만, 조건은 우리가 생각한 것보다 훨씬 느슨하다 — §4-6.

✅ 게시물 관리 (올린 뒤)

수정(캡션·위치·공동작업자·대체텍스트 → 「완료」 저장 → 수정됨 표시) · 삭제 ·
좋아요 수 숨기기 · 댓글 해제 · 링크 복사 · 퍼가기
고정(pin)과 보관(archive)은 웹 메뉴에 없다.

✅ 프로필

프로필 사진 · 소개(bio, 150자) · 성별 · 이름 · 사용자 이름 · 아바타

프로필 편집은 두 군데로 갈려 있다. 명령서의 site 가 달라진다.
- www.instagram.com/accounts/edit/ — 소개 · 성별 · 프로필 사진
- accountscenter.instagram.com — 이름 · 사용자 이름 · 아바타 (이름은 14일에 2회 제한)

✅ 비즈니스/크리에이터 계정

전환(양방향) · 카테고리 선택(검색 가능) · 비즈니스 이메일 · 전화번호 · WhatsApp 번호 ·
연락받을 방법(전화/문자)

비즈니스 이메일은 실제로 넣고 저장해서 확인했다 — 입력 → 저장 → 재조회에 그대로 남아 있다.
나중에 이 입력을 하는 게 익스텐션이므로 확인해 둘 값어치가 있었다.

✅ DM

실제로 보내고 도착까지 확인했다.

⚠️ 새 계정은 받는사람 「검색」이 안 뜬다(스켈레톤에서 멈춤).
우회로 — 상대 프로필 → ⋯ → 「메시지 보내기」/direct/t/{threadId} 로 바로 열린다.

❌ 웹에서 안 되는 것

근거
프로필 링크(웹사이트) input.disabled === true. 인스타가 화면에 직접 써 놨다 — "링크 수정은 모바일에서만 가능합니다"
스토리 올리기 /create/story/ → 홈으로 리다이렉트. 내비의 만들기는 게시물 하나뿐
릴스 음악 편집 화면에 소리 켜기/끄기 스위치 하나뿐
하이라이트 아래

⚠️ 하이라이트 — 반쪽이라 안 판다

만들기 UI 는 웹에 있다. 프로필 + New → 「새로운 하이라이트」 → 이름 입력까지 통과했다.
그런데 다음 화면이 「보관된 스토리에서 고르기」 다. 스토리를 웹에서 못 올리니
새 소재를 넣을 수 없다. 이미 폰으로 올려 둔 사람에게 "묶어 드립니다" 만 되는데,
그건 우리가 만드는 값이 거의 없다.


3. 팔 앱과 3막

모든 앱이 같은 3막이다: ① 가져오기(익스텐션) → ② 만들기(heyreci 웹) → ③ 보내기(익스텐션)

② 웹에서 ③ 익스텐션이 사람이
게시물 만들기 이미지 생성/보정 · 캡션·해시태그 핑퐁 이미지 주입 → 자르기 → 편집 → 캡션 채움 「공유하기」
릴스 올리기 영상 · 커버 · 캡션 영상 주입 → 커버·트림·소리 설정 → 캡션 「공유하기」
프로필 꾸미기 프로필 사진 생성 · 소개 문구 프사 주입 · 소개 채움 「제출」 (프사는 아래 예외)
비즈니스 세팅 카테고리·소개 추천 전환 흐름 진행 · 카테고리 선택 경고문 확인 후 진행
DM 보내기 문구 작성 스레드 열고 문구 채움 「Send」

「프로필 꾸미기」는 링크를 못 한다는 걸 앱 안에서 먼저 말한다.
사람들이 프로필 꾸미기에서 제일 하고 싶어 하는 게 링크인데 인스타가 막아 놨다.
숨겼다가 나중에 들키면 그게 "되는 척" 이다.


4. 성립을 가른 기술 판정

파일은 넣을 수 있다 (이 제품의 관문)

경로는 못 넣지만 File 객체는 DataTransfer 로 들어간다.
인스타가 받아서 「자르기」 단계로 넘어가는 것을 확인했다.

파일 받아오기는 페이지에서 하면 안 된다

사이트 CSP(connect-src)가 페이지 안의 fetch 를 막는다. data: URL 조차 막혔다.
background(확장)가 받아 base64 로 넘기고, 페이지는 atob 으로 푼다.

대화상자가 열려 있으면 그 안에서만 찾는다

게시물 만들기 중에 「공유하기」를 찾았더니 모달 뒤 피드의 공유 버튼이 잡혔다.
아직 캡션 화면에 가지도 않았는데 "다 됐다" 로 보였다.

화면 전환을 기다려야 한다

자르기 → 편집 전환에 800ms. 안 기다렸더니 「다음」을 두 번 눌러도 한 번만 먹었다.

6. 플랫폼은 실패 이유를 말해 준다 — 우리가 안 읽었을 뿐

동영상이 두 번 안 올라갔을 때 나는 "인스타가 조용히 버렸다" 고 적었다. 둘 다 틀렸다.

변수를 하나씩 갈라 다시 해봤다:

시험 결과
무음 6초 1080×1350 ✅ 통과 → 오디오는 필수가 아니다
유음 6초 720×900 ✅ 통과 → 해상도 문제가 아니다
처음 실패했던 그 파일, 그대로 통과 → 파일 종류 탓도 아니었다

진짜 원인은 내가 넣은 파일이 깨져 있었던 것이다(조각 mp4, 그리고 잘린 base64 로 만든
2,983바이트짜리). 그리고 그때 인스타는 화면에 이렇게 쓰고 있었다:

"파일을 업로드하지 못했습니다 / 파일 크기가 1KB 이상이어야 합니다 / 다른 파일 선택"

인스타는 조용하지 않았다. 내가 그 화면을 안 읽었다.

upload 동사가 이제 거부 문구를 읽어 REJECTED_BY_SITE 로 돌려준다.
그리고 그 문구는 플랫폼 원문 그대로 사용자에게 전한다 — 우리가 요약하면 사용자가 못 고친다.

그리고 DataTransfer 는 동영상에도 동작한다. 진짜 영상(113KB, video/mp4)을
File 객체로 주입해 「자르기」 진입까지 확인했다. 우리 익스텐션 경로가 영상에도 유효하다.

★ 넣었다고 믿으면 안 된다 — 캡션이 빈 채로 게시됐다

가장 위험한 사고였다. 채우기가 "성공" 이라고 보고했는데 올라간 글에 캡션이 없었다.
인스타 캡션칸은 자체 편집 모델을 써서 이런 일이 난다:

방법 결과
지우고 insertText 글자가 두 번 들어감
전체선택 + insertText true 를 돌려주고 아무 일도 안 함
전체선택 + 붙여넣기 이벤트 매번 정확히 교체됨 ← 채택

→ 이제 채운 뒤 다시 읽어 대조하고, 다르면 멈춘다.
조용히 넘어가면 사용자가 빈 글을 올리게 된다.

같은 종류로, 게시물 수정의 「완료」는 단순 클릭으로 안 먹었다 → 포인터 시퀀스 전체를 보낸다.


5. 사람이 누르는 선

마지막 저장·게시·등록 클릭은 반드시 사람이 한다. 밴 리스크가 우리가 아니라
사용자 계정에 가기 때문이다. 그 위험을 대신 지울 수 없다.

예외 둘 — 사람이 누를 버튼이 아예 없는 자리

프로필 사진은 파일을 넣는 순간 바로 반영된다. 확인창도 저장 버튼도 없다.
비즈니스 전환은 인스타가 경고를 띄운다 — 계정이 공개로 바뀌고, 대기 중 팔로우 요청이
모두 자동 승인된다.
(개인 복귀 시엔 인사이트를 잃고 Meta Verified 구독이 취소된다.)

→ 이런 자리는 승인을 뒤에서 앞으로 옮긴다. 주입하기 전에 heyreci 웹에서 확인받고,
조종석이 "누르면 바로 반영됩니다" 라고 먼저 말한다.
사람의 확인은 사라지지 않는다. 위치만 바뀐다.

또 하나 — 비즈니스 연락처 버튼은 웹에서 설정만 되고 모바일 프로필에만 표시된다
(인스타가 그 화면에 명시). 값은 채워 줄 수 있지만 효과는 모바일에서만 보인다
먼저 말해야 한다. 안 그러면 "설정했는데 왜 안 보이냐" 가 된다.


6. 선택은 LLM이 한다 (대표 확정)

올리는 화면마다 인스타가 물어보는 게 열몇 개다 — 커버 프레임, 트림 구간, 소리, 필터,
위치, 사람 태그, 대체 텍스트, 댓글 허용, 카테고리…

그걸 그대로 사용자에게 넘기면 "대신 해드립니다" 가 아니라 폼 하나 더 채우게 만든 것이다.
그러면 우리를 쓸 이유가 없다.

누가 정하나
결과를 바꾸는 것 캡션·대체텍스트·커버 프레임·트림·카테고리 LLM
취향 영역 필터·소리·댓글 허용 LLM이 기본값 → 사용자가 바꾸면 기억
상관없는 것 결과에 영향 없는 미세 옵션 랜덤 상위 1~5. LLM 안 부른다

판단이 필요 없는 자리에 LLM 호출을 붙이면 원가만 늘고, 부를 자리가 늘수록 키가 도는 자리도 는다.
부를 이유가 없으면 안 부르는 게 더 안전하고 더 싸다.

화면은 질문형이 아니라 확인형이다.

올릴 준비가 됐어요.
  캡션    가을 신상 니트, 오늘부터 입어요 🍂        [고치기]
  커버    2.4초 지점                               [바꾸기]
  길이    0 – 6초 (전체)                           [바꾸기]
  소리    켜짐                                      [끄기]
              [ 인스타로 보내기 ]

"커버를 고르세요" ❌ → "커버 2.4초 지점 [바꾸기]" ✅. 고치는 건 접어 둔다.


7. 익스텐션은 얇게 유지한다

익스텐션은 동사 7개만 안다 — 누르기 · 채우기 · 고르기 · 올리기 · 기다리기 · 읽기 · 찍기.
무엇을 어디에 할지는 heyreci 웹이 명령서(JSON) 로 내려준다.

찾을 때는 사람이 보는 글자(라벨)로 찾는다. 셀렉터보다 오래 산다.


8. 남은 숙제

전화번호·WhatsApp 실제 저장 이메일과 같은 폼·같은 저장 버튼이라 같이 간다고 본다
아바타 Meta 3D 아바타 만들기 — 우리 제품과 무관해서 스펙에서 뺐다

인스타는 여기서 끝이다. 남은 둘은 제품 결정에 영향이 없다.


9. 이 문서를 고치려면

추측으로 고치지 마라. 여기 있는 모든 줄은 직접 해보고 적은 것이다.
바꿀 일이 생기면 다시 실측하고 날짜를 갱신해라.
릴스 만들기 ❌ 를 한 번 잘못 적었다가 뒤집은 적이 있다 — 안 해보고 적으면 그렇게 된다.