2026-08-31 · 전수 실측 완료. 추측 없음. 아래 모든 판정은 teamai.momentus 계정에서
실제로 해보고 적은 것이며, 만든 것은 전부 원복했다(게시물 0 · 프로필 사진 없음 · 개인 계정).
인스타에서 웹으로 되는 일은 거의 다 된다. 안 되는 건 넷뿐이고, 그 넷은 팔지 않는다.
| 판다 | 게시물 · 릴스(동영상) · 프로필 꾸미기(링크 제외) · 비즈니스 계정 세팅 · DM |
| 안 판다 | 스토리 · 하이라이트 · 프로필 링크 · 릴스 음악 |
안 되는 것을 반쯤 자동화해서 "나머지는 폰에서 하세요" 로 넘기지 않는다.
그건 되는 척이다 (대표 확정).
이 제품은 사용자의 브라우저에서 대신 눌러 주는 코파일럿이다.
그러므로 성립 여부는 딱 하나에 달려 있다 — 인스타 웹에서 그 일이 되는가.
문서와 통념은 세 번 틀렸다. 그래서 전부 직접 해봤다.
| 통념 | 실제 |
|---|---|
| "브라우저 보안상 이미지 자동 첨부는 불가" | 틀렸다. 경로는 못 넣지만 File 객체는 들어간다 |
| "하이라이트는 모바일 전용" | 반만 맞다. 만들기 UI 는 웹에 있다. 막힌 건 그 위의 스토리다 |
| "릴스는 웹에서 못 만든다" | 틀렸다. 동영상을 게시물로 올리면 그게 릴스다 |
| "인스타가 동영상을 조용히 버린다" | 틀렸다 — 이건 내가 적었던 것이다. 인스타는 이유를 화면에 말했고 내가 안 읽었다 (§4-6) |
넷 중 하나는 이 검증 도중에 내가 만든 오판이다. 그래서 §9 를 마지막에 붙였다.
사진 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 번호 ·
연락받을 방법(전화/문자)
비즈니스 이메일은 실제로 넣고 저장해서 확인했다 — 입력 → 저장 → 재조회에 그대로 남아 있다.
나중에 이 입력을 하는 게 익스텐션이므로 확인해 둘 값어치가 있었다.
실제로 보내고 도착까지 확인했다.
⚠️ 새 계정은 받는사람 「검색」이 안 뜬다(스켈레톤에서 멈춤).
우회로 — 상대 프로필 → ⋯ → 「메시지 보내기」 → /direct/t/{threadId} 로 바로 열린다.
| 근거 | |
|---|---|
| 프로필 링크(웹사이트) | input.disabled === true. 인스타가 화면에 직접 써 놨다 — "링크 수정은 모바일에서만 가능합니다" |
| 스토리 올리기 | /create/story/ → 홈으로 리다이렉트. 내비의 만들기는 게시물 하나뿐 |
| 릴스 음악 | 편집 화면에 소리 켜기/끄기 스위치 하나뿐 |
| 하이라이트 | 아래 |
만들기 UI 는 웹에 있다. 프로필 + New → 「새로운 하이라이트」 → 이름 입력까지 통과했다.
그런데 다음 화면이 「보관된 스토리에서 고르기」 다. 스토리를 웹에서 못 올리니
새 소재를 넣을 수 없다. 이미 폰으로 올려 둔 사람에게 "묶어 드립니다" 만 되는데,
그건 우리가 만드는 값이 거의 없다.
모든 앱이 같은 3막이다: ① 가져오기(익스텐션) → ② 만들기(heyreci 웹) → ③ 보내기(익스텐션)
| 앱 | ② 웹에서 | ③ 익스텐션이 | 사람이 |
|---|---|---|---|
| 게시물 만들기 | 이미지 생성/보정 · 캡션·해시태그 핑퐁 | 이미지 주입 → 자르기 → 편집 → 캡션 채움 | 「공유하기」 |
| 릴스 올리기 | 영상 · 커버 · 캡션 | 영상 주입 → 커버·트림·소리 설정 → 캡션 | 「공유하기」 |
| 프로필 꾸미기 | 프로필 사진 생성 · 소개 문구 | 프사 주입 · 소개 채움 | 「제출」 (프사는 아래 예외) |
| 비즈니스 세팅 | 카테고리·소개 추천 | 전환 흐름 진행 · 카테고리 선택 | 경고문 확인 후 진행 |
| DM 보내기 | 문구 작성 | 스레드 열고 문구 채움 | 「Send」 |
「프로필 꾸미기」는 링크를 못 한다는 걸 앱 안에서 먼저 말한다.
사람들이 프로필 꾸미기에서 제일 하고 싶어 하는 게 링크인데 인스타가 막아 놨다.
숨겼다가 나중에 들키면 그게 "되는 척" 이다.
경로는 못 넣지만 File 객체는 DataTransfer 로 들어간다.
인스타가 받아서 「자르기」 단계로 넘어가는 것을 확인했다.
사이트 CSP(connect-src)가 페이지 안의 fetch 를 막는다. data: URL 조차 막혔다.
→ background(확장)가 받아 base64 로 넘기고, 페이지는 atob 으로 푼다.
게시물 만들기 중에 「공유하기」를 찾았더니 모달 뒤 피드의 공유 버튼이 잡혔다.
아직 캡션 화면에 가지도 않았는데 "다 됐다" 로 보였다.
자르기 → 편집 전환에 800ms. 안 기다렸더니 「다음」을 두 번 눌러도 한 번만 먹었다.
동영상이 두 번 안 올라갔을 때 나는 "인스타가 조용히 버렸다" 고 적었다. 둘 다 틀렸다.
변수를 하나씩 갈라 다시 해봤다:
| 시험 | 결과 |
|---|---|
| 무음 6초 1080×1350 | ✅ 통과 → 오디오는 필수가 아니다 |
| 유음 6초 720×900 | ✅ 통과 → 해상도 문제가 아니다 |
| 처음 실패했던 그 파일, 그대로 | ✅ 통과 → 파일 종류 탓도 아니었다 |
진짜 원인은 내가 넣은 파일이 깨져 있었던 것이다(조각 mp4, 그리고 잘린 base64 로 만든
2,983바이트짜리). 그리고 그때 인스타는 화면에 이렇게 쓰고 있었다:
"파일을 업로드하지 못했습니다 / 파일 크기가 1KB 이상이어야 합니다 / 다른 파일 선택"
인스타는 조용하지 않았다. 내가 그 화면을 안 읽었다.
→ upload 동사가 이제 거부 문구를 읽어 REJECTED_BY_SITE 로 돌려준다.
그리고 그 문구는 플랫폼 원문 그대로 사용자에게 전한다 — 우리가 요약하면 사용자가 못 고친다.
그리고 DataTransfer 는 동영상에도 동작한다. 진짜 영상(113KB, video/mp4)을
File 객체로 주입해 「자르기」 진입까지 확인했다. 우리 익스텐션 경로가 영상에도 유효하다.
가장 위험한 사고였다. 채우기가 "성공" 이라고 보고했는데 올라간 글에 캡션이 없었다.
인스타 캡션칸은 자체 편집 모델을 써서 이런 일이 난다:
| 방법 | 결과 |
|---|---|
지우고 insertText |
글자가 두 번 들어감 |
전체선택 + insertText |
true 를 돌려주고 아무 일도 안 함 |
| 전체선택 + 붙여넣기 이벤트 | 매번 정확히 교체됨 ← 채택 |
→ 이제 채운 뒤 다시 읽어 대조하고, 다르면 멈춘다.
조용히 넘어가면 사용자가 빈 글을 올리게 된다.
같은 종류로, 게시물 수정의 「완료」는 단순 클릭으로 안 먹었다 → 포인터 시퀀스 전체를 보낸다.
마지막 저장·게시·등록 클릭은 반드시 사람이 한다. 밴 리스크가 우리가 아니라
사용자 계정에 가기 때문이다. 그 위험을 대신 지울 수 없다.
프로필 사진은 파일을 넣는 순간 바로 반영된다. 확인창도 저장 버튼도 없다.
비즈니스 전환은 인스타가 경고를 띄운다 — 계정이 공개로 바뀌고, 대기 중 팔로우 요청이
모두 자동 승인된다. (개인 복귀 시엔 인사이트를 잃고 Meta Verified 구독이 취소된다.)
→ 이런 자리는 승인을 뒤에서 앞으로 옮긴다. 주입하기 전에 heyreci 웹에서 확인받고,
조종석이 "누르면 바로 반영됩니다" 라고 먼저 말한다.
사람의 확인은 사라지지 않는다. 위치만 바뀐다.
또 하나 — 비즈니스 연락처 버튼은 웹에서 설정만 되고 모바일 프로필에만 표시된다
(인스타가 그 화면에 명시). 값은 채워 줄 수 있지만 효과는 모바일에서만 보인다고
먼저 말해야 한다. 안 그러면 "설정했는데 왜 안 보이냐" 가 된다.
올리는 화면마다 인스타가 물어보는 게 열몇 개다 — 커버 프레임, 트림 구간, 소리, 필터,
위치, 사람 태그, 대체 텍스트, 댓글 허용, 카테고리…
그걸 그대로 사용자에게 넘기면 "대신 해드립니다" 가 아니라 폼 하나 더 채우게 만든 것이다.
그러면 우리를 쓸 이유가 없다.
| 칸 | 예 | 누가 정하나 |
|---|---|---|
| 결과를 바꾸는 것 | 캡션·대체텍스트·커버 프레임·트림·카테고리 | LLM |
| 취향 영역 | 필터·소리·댓글 허용 | LLM이 기본값 → 사용자가 바꾸면 기억 |
| 상관없는 것 | 결과에 영향 없는 미세 옵션 | 랜덤 상위 1~5. LLM 안 부른다 |
판단이 필요 없는 자리에 LLM 호출을 붙이면 원가만 늘고, 부를 자리가 늘수록 키가 도는 자리도 는다.
부를 이유가 없으면 안 부르는 게 더 안전하고 더 싸다.
화면은 질문형이 아니라 확인형이다.
올릴 준비가 됐어요.
캡션 가을 신상 니트, 오늘부터 입어요 🍂 [고치기]
커버 2.4초 지점 [바꾸기]
길이 0 – 6초 (전체) [바꾸기]
소리 켜짐 [끄기]
[ 인스타로 보내기 ]
"커버를 고르세요" ❌ → "커버 2.4초 지점 [바꾸기]" ✅. 고치는 건 접어 둔다.
익스텐션은 동사 7개만 안다 — 누르기 · 채우기 · 고르기 · 올리기 · 기다리기 · 읽기 · 찍기.
무엇을 어디에 할지는 heyreci 웹이 명령서(JSON) 로 내려준다.
찾을 때는 사람이 보는 글자(라벨)로 찾는다. 셀렉터보다 오래 산다.
| 전화번호·WhatsApp 실제 저장 | 이메일과 같은 폼·같은 저장 버튼이라 같이 간다고 본다 |
| 아바타 | Meta 3D 아바타 만들기 — 우리 제품과 무관해서 스펙에서 뺐다 |
인스타는 여기서 끝이다. 남은 둘은 제품 결정에 영향이 없다.
추측으로 고치지 마라. 여기 있는 모든 줄은 직접 해보고 적은 것이다.
바꿀 일이 생기면 다시 실측하고 날짜를 갱신해라.
릴스 만들기 ❌ 를 한 번 잘못 적었다가 뒤집은 적이 있다 — 안 해보고 적으면 그렇게 된다.