threads-long-thread
SkillMediaLets your agent write long multi-part Threads threads with images and save or publish them as drafts.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the threads-long-thread skill
About this capability
Read this when writing long-form serial threads (13, 30 parts) with images attached to the 밤밤 Threads account and saving them as drafts or publishing. Handles requests like "타래로 써줘", "겟백 홍보 타래", "이 소재로 연작 만들어줘". Contains a spec table reverse-engineered from measured data of 3,186 posts on top account
What this skill tells your AI
The instructions your AI receives, as published by bam-bam-2/solo-skills in skills/threads-long-thread/SKILL.md and read by ahel’s review.
이 스킬이 시스템에 하는 일 (설치 전 확인)
- Threads에 글을 실제로 발행할 수 있습니다. 기본값은 임시저장입니다.
- 동봉된
ai_smell.mjs는 로컬에서만 돌고 네트워크를 쓰지 않습니다.- 규격표 수치는 공개 계정의 공개 글을 집계한 것입니다. 본인 계정으로 다시 재는 것을 권합니다.
스레드 장문 타래 작성
밤밤 개인 계정(@bam.bam_2)용. 겟천 파이프라인(@get100.official)과는 별개다.
0-0. ⚠️ "상위 계정 B랑 호스트처럼 써줘" 를 들으면
2026-08-30에 세 번 반려되고 네 번째에 통과했다. 반려된 세 가지를 먼저 피해라.
반려 1 — 상위 계정 A 서명을 그대로 베낌
<꺾쇠 제목> + 이게 뭔 말이냐?를 6개 타래에 전부 달았다.
반응: "상위 계정 A 그대로 따라하네;;;"
그는 밤밤을 팔로우하고 있다. 서명을 복사하면 바로 들킨다.
반려 2 — 밤밤 히트작 첫 줄 짜기우기
리포스트 상위 50개의 오프닝 형태를 뽑아다 붙였다.
반응: "그냥 터졌던 글의 짜집기잖아"
증거: [선언]을 세 번 썼는데 회생이 🔁177 → 23 → 6으로 떨어졌다.
2025-02에는 그 커뮤니티가 없었고(생기는 순간을 목격하는 리포스트), 2026-03에는 4기가 돌아가고 있었다.
형식이 아니라 상황이 성과를 만든다.
반려 3 — 숫자로만 분석
줄 길이 분포, 잡음 비율, 오프닝별 리포스트 수만 셌다. 반응: "너 글 분석을 숫자로 하니? 난 맥락으로 했으면 좋겠는데" 세는 건 보조일 뿐이다. 그 글이 쓰일 당시 필자가 어떤 상황이었고 독자가 뭐를 원했는지를 읽어라.
✅ 통과한 합성법 — 둘의 방법을 합친다
상위 계정 B의 힘: 반박하고 싶은 판정을 먼저 박고, 마지막엔 판다. (약점: 약속하고 안 지킴) 상위 계정 A의 힘: 지금 벌어지는 일을 남의 이론으로 설명해주고, 28편을 끝까지 쓴다. (약점: 안 팄)
1편 반박하고 싶은 단정 ← 상위 계정 B
2~4편 그 단정을 설명하는 외부 이론 ← 상위 계정 A (핵심)
5~12편 밤밤의 실제 데이터로 증명
13편 이론으로 회수 ← 수미상관
마지막 판매 ← 상위 계정 B
밤밤 반응: "이거 너무 좋은데...? 너 이론이 나오는게 너무 맘에드는데???"
0. 시작 전에 반드시
재료부터 캔다. 일반론으로 채우면 밤밤이 즉시 알아챈다. ("별로 대단하지 않은 이야기로 길게만 쓴 것 같은데" — 2026-08-30 지적)
캐는 순서:
~/Projects/ops/threads-tool/threads-bam.bam_2-api.json(본인 원글 4,367건, 리포스트 상위가 검증된 소재)~/Projects/getback/docs/getback-audit-*.md(내부 감사, 실패·갭 기록)~/Projects/getback/운영/docs/,운영/newsletter/(회의록, 인터뷰 전사)~/.aside/u/0/memory/episodic/*.md(사건·판단·되돌린 결정)- get100.co.kr 실물 페이지 (가격·일정·정원은 반드시 여기서 확인)
쓸 수 있는 재료 = 숫자 + 날짜 + 고유명사 + 실패 + 되돌린 판단. 없으면 지어내지 말고 밤밤에게 물어본다.
1. 타래 규격 (상위 계정 A 3,186건 실측)
| 항목 | 값 |
|---|---|
| 타래 길이 | 13편 중앙 ("뭔 말이냐" 훅 51건 기준). 최장 41편 |
| 1편 분량 | 79자 / 6줄 (단발 원글 110자보다 짧게) |
| 2편 이후 | 130~150자 |
| 줄당 글자 | 12~14자 (상위 계정 A 14.5 / 상위 계정 B 12.3) |
| 첫 줄 | 13~15자, 문장 끝내지 말고 자름 |
| CTA 위치 | 마지막 편에만. 1편 CTA 3%, 2편 2% |
2. 훅 실측 성적 (상위 계정 A 계정 기준선 ❤️17)
| 템플릿 | 건수 | ❤️중앙 | 배수 |
|---|---|---|---|
| "이게 뭔 말이냐?" | 51 | 186 | 11배 |
| ep숫자 시리즈 | 14 | 182 | 10.7배 |
| 권위 스택(학위·크레딧) | 81 | 137 | 8배 |
<꺾쇠 제목> | 59 | 121 | 7배 |
[대괄호 제목] | 78 | 47 | 2.8배 |
꺾쇠 > 대괄호 2.6배. 대괄호는 공지 신호라 약하다.
1편 구조:
"따옴표에 넣은 도발적 명제" ← 인용인지 본인 말인지 안 밝힘
[근거 없는 단정 2~3줄] ← 여기서 설명하면 안 됨
이게 뭔 말이냐?
1편에서 절대 설명하지 않는다. 설명하면 다음 편으로 안 넘어간다.
3. 이미지 배치 규칙 (상위 계정 A 대표 타래 전수 실측)
28편 타래 25편, 35편 타래 22편에 이미지. 전부 붙이지 않는다.
| 문단 성격 | 이미지 비율 |
|---|---|
| 새 개념·인물·사례 도입 | 68~83% |
| 요약·정리·결론 문단 | 20% |
| 타래 전반 | 75% |
| 타래 중반 | 83% |
| 타래 후반 | 27% |
규칙: 새로 도입할 때 붙이고, 정리할 때는 뗀다.
이미지 5유형 (실물 확인)
- A 작품 스틸컷 — 개념을 상징하는 영화·애니 장면 (오징어게임=한, 초속5cm=모노노아와레, 서부극=프론티어). 밤밤 계정에는 저작권 때문에 비권장
- B 뉴스 헤드라인 캡처 — 주장의 근거 (중앙일보 불평등 기사)
- C 자료 카드 — 텍스트로 다 못 담는 목록·표 (얀테의 법칙 10조항)
- D 인물 사진 — 인용한 사상가·인물 얼굴 (한병철)
- E 자막 캡처 — 발화가 박힌 방송·다큐 컷
수미상관: 1편과 예고편에 같은 작품의 다른 장면을 쓴다 (진행요원 → 배우들 웃는 사진).
밤밤이 쓸 수 있는 실물 재료
~/Projects/getback/홈페이지 용 사진/
01_홈_증거_갤러리/ 현장 사진 7장
02_커뮤니티_페이지/ 네트워킹·협업 4장
03_행사_상세_포스터/ 강남구·서초구 포스터
04_겟백앱_글감_캡처/ 앱 화면·데모 GIF
05_멤버_후기_프로필/ 후기 캡처 20장
C(자료 카드)는 HTML/CSS 렌더링으로 직접 만든다. 겟백 브랜드 색을 쓰되 절제한다.
⚠️ 작품 스틸컷은 밤밤 계정에 안 맞는다 (2026-08-30 반려)
글렌게리 글렌 로스 스틸을 붙였다가 "영화 별로임, 뜻금없어" 로 반려됐다. 빼고 실물로 교체함.
이유: 상위 계정 A이 영화 컷을 쓰는 건 그의 소재가 영화·콘텐츠·세계관이라서다. 세계관을 설명하면서 오징어게임을 붙이면 그건 예시가 아니라 본문 그 자체다. 밤밤의 소재는 커뮤니티 운영이라 거기에 영화 컷을 넣으면 장식이 된다.
규칙: 이미지는 그 사람이 실제로 다루는 영역에서 나와야 한다. 밤밤 계정의 유효한 이미지는 이것들이다.
- 실제 현장 사진 (행사·네트워킹·세션)
- 자료 카드 (대시보드 숫자, 가격 사다리 등 직접 렌더링)
- 멤버 후기·성과 캐폐
- 앱·대시보드 화면
- 본인이 직접 찍은 것
아래 웹 조달 경로는 방법은 유효하니 남겨둔다. 다만 작품 컷 용도가 아니라 뉴스 헤드라인·공개 자료처럼 주장의 근거가 되는 이미지를 가져올 때 쓴다.
웹에서 근거 이미지 조달 (경로 검증 완료)
imageSearch 전역은 구글 봇 차단(bot challenge HTML)에 자주 막힌다. 브라우저로 직접 뚫는다.
const gi = await openTab('https://www.google.com/search?udm=2&q=' + encodeURIComponent(query));
await sleep(3500);
await gi.evaluate(()=>window.scrollBy(0,1200)); await sleep(1500);
// 렌더된 썸네일 수집 (gstatic이 600~740px로 나와 스레드에 충분)
const cand = await gi.evaluate((mw)=>{
const seen=new Set(), out=[];
document.querySelectorAll('img').forEach(im=>{
if(!im.src || !im.src.startsWith('http') || im.naturalWidth < mw) return;
const key=(im.alt||'')+'|'+im.naturalWidth;
if(seen.has(key)) return; seen.add(key);
out.push({src:im.src, w:im.naturalWidth, h:im.naturalHeight, alt:(im.alt||'').slice(0,90)});
});
return out;
}, 450);
// 페이지 컨텍스트에서 fetch해야 CDN 차단을 안 먹는다
const bin = await gi.evaluate(async u=>{
const r = await fetch(u); const b = await r.arrayBuffer();
return Array.from(new Uint8Array(b)).map(x=>String.fromCharCode(x)).join('');
}, cand[0].src);
await fs.writeFile(p, Buffer.from(bin,'binary'));
검색어 만드는 법. 문단의 추상 개념을 먼저 한 장면으로 번역하고, 그 장면이 나오는 작품명을 붙인다.
- "멤버가 서로를 고객으로 본다" → 서로에게 영업하는 사무실 →
글렌게리 글렌 로스 영화 스틸 사무실 영업사원(검증됨) - "조용해지면 이미 다 나간 것" → 텅 빈 객석 →
버드맨 영화 스틸컷 텅 빈 극장 객석 - 작품명을 못 정하겠으면
영화 스틸컷 + 상황어로 먼저 던지고, 결과 alt에서 작품명을 역으로 얻는다
이미지는 반드시 16:9로 통일 (밤밤 요청, 2026-08-30)
비율이 제각각이면 모바일에서 길이가 들쎄날쎄해진다. 1280×720 캔버스로 전부 맞춘다.
브라우저 canvas로 변환한다 (ImageMagick 불필요).
- 16:9와 28% 이내로 비슷하면 꽉 채우기(cover, 살짝 크롭)
- 많이 다르면(세로 사진·책 표지) 레터박스로 여백을 둔다. 잘라면 얼굴·제목이 날아간다
- 여백 색은 검정이 아니라 원본 모서리 색을 샘플링해서 쓴다. 흰 배경 책 표지에 검은 띄가 붙으면 어색하다
const out = await page.evaluate(async (dataUrl)=>{
const img=new Image(); await new Promise((r,j)=>{img.onload=r;img.onerror=j;img.src=dataUrl;});
const W=1280,H=720,c=document.getElementById('c'); c.width=W;c.height=H;
const x=c.getContext('2d');
// 원본 모서리 5지점 평균색을 배경으로
const t=document.createElement('canvas'); t.width=img.width;t.height=img.height;
const tx=t.getContext('2d'); tx.drawImage(img,0,0);
const pts=[[2,2],[img.width-3,2],[2,img.height-3],[img.width-3,img.height-3],[img.width>>1,2]];
let r=0,g=0,b=0; pts.forEach(([px,py])=>{const p=tx.getImageData(px,py,1,1).data;r+=p[0];g+=p[1];b+=p[2];});
x.fillStyle=`rgb(${r/5|0},${g/5|0},${b/5|0})`; x.fillRect(0,0,W,H);
const ar=img.width/img.height, tg=W/H; let dw,dh;
if(Math.abs(ar-tg)/tg<0.28){ const s=Math.max(W/img.width,H/img.height); dw=img.width*s; dh=img.height*s; }
else { const s=Math.min(W/img.width,H/img.height)*0.94; dw=img.width*s; dh=img.height*s; }
x.drawImage(img,(W-dw)/2,(H-dh)/2,dw,dh);
return c.toDataURL('image/jpeg',0.92);
}, dataUrl);
자료 카드도 처음부터 1200×675 또는 1280×720으로 렌더한다.
단정을 외부 이론에 얹는 법 (밤밤가 가장 좋아한 수법)
상위 계정 A이 하는 핵심 짓이다. 자기 주장을 자기 말로 증명하지 않고 남의 이론에 얹어서 설명한다. 그러면 "밤밤 생각"이 아니라 "원래 그런 구조"가 된다.
구조:
1편 반박하고 싶은 단정 ← 상위 계정 B
2~4편 그 단정을 설명하는 외부 이론 ← 상위 계정 A
5~12편 내 실제 데이터로 증명
13~14편 완주 ← 상위 계정 A
마지막편 판매 ← 상위 계정 B
이론가가 등장하는 편에는 그 사람 얼굴과 책 표지를 붙인다. 상위 계정 A이 한병철 사진을 쓰는 것과 같다.
상위 계정 A이 이미 쓴 이론은 피한다(르네 지라르, 한병철, 마크 피셔, 스베틀라나 보임, 칼 융, 피터 털, 얀테의 법칙).
검증된 짝:
| 주제 | 이론 | 출처 |
|---|---|---|
| 안에서 팔면 죽는다 | 선물 관계·동기 구축효과 | 리처드 티트머스, 1970 |
| 모집 문구 | 시그널링 이론 | 마이클 스펜스, 1973 |
| 인맥 | 던바의 수 | 로빈 던바, 1992 |
| 모임·기회 | 약한 연결의 힘 | 마크 그래노베터, 1973 |
| 정원 제한 | 링겔만 효과 | 막시밀리앙 링겔만, 1913 |
| 커피챗 | 호혜성 규범 | 앵빈 굴드너, 1960 |
발행 전에 반드시 사실관계를 확인한다. 티트머스는 돈을 주면 헌혈이 준다고 주장했지만 반박 연구가 있었다(스웨덴 실험은 여성만 감소, 2021 메타분석은 오히려 증가). 논쟁 중인 건 "지금도 논쟁 중이야. 반박 연구도 있고" 를 본문에 넣는다. 밝히면 신뢰가 오른다.
필수 규칙
- 다운로드 후 반드시 눈으로 본다. alt만 믿지 말 것.
read_file로 실제 확인 - 워터마크 박힌 통신사·스톡 사진은 버린다. 실측에서 연합뉴스 워터마크가 섞여 나왔다. 영화·드라마 스틸 우선
- 가로 450px 미만은 버린다. 스레드는 약 572px로 렌더된다
- 같은 작품의 크롭 여러 장이 잡히므로 alt로 중복 제거
- 수미상관: 1편과 마지막 편에 같은 작품의 다른 장면을 쓴다
4. AI 냄새 제거 (필수 검증)
밤밤이 "최종 발행하기엔 AI스러움이 묻어난다"고 지적한 지점. 감으로 고치지 말고 수치로 맞춘다.
| 지표 | AI 초안 | 상위 계정 A 2026 | 밤밤 원글 | 목표 |
|---|---|---|---|---|
| 문장길이 표준편차 | 3.7 | 9.1 | 6.3 | 6~9 |
| 어미 상위3 점유율 | 5.1% | 17.1% | - | 25% 이하 (이미 통과) |
| 말줄임(.. …) | 0% | 13.7% | 24.8% | 20% |
| 느낌표 | 0% | 10.4% | 13.6% | 12% |
| ㅋ | 0% | 8.4% | 1.6% | 5% |
| ㅠㅜ | 0% | 1.6% | 4.5% | 3% |
| 괄호 삽입 | 0% | 9.6% | 10.6% | 10% |
| 군말(솔직히·어쨌든) | 0% | 2.0% | 2.8% | 3% |
| 접속사로 시작 | 26.7% | 16.1% | 18.5% | 17% 이하 |
핵심 진단: AI 글은 너무 고르다. 사람 글에는 잡음이 일정 비율로 섞여 있는데 AI 초안은 전 항목 0%였다.
주의: 어미 다양성은 문제가 아니었다(오히려 초안이 더 다양). 처음에 어미 엔트로피로 쟀다가 표본 크기에 휘둘려 오진했다. 타래 단위에서는 상위3 점유율로 본다.
진짜 문제는 3개뿐이다.
- 문장 길이가 너무 고르다 (표준편차 3.7 vs 사람 6.3~9.1)
- 잡음이 전혀 없다 (말줄임·느낌표·괄호·군말 전부 0%)
- 접속사로 문단을 여는 비율이 과하다 (26.7% vs 16~18%)
검증 스크립트: scripts/ai_smell.mjs
교정 방법:
- 한 줄짜리 짧은 문단과 긴 문단을 의도적으로 섞는다 (편차 올리기)
- 접속사로 시작하는 줄을 줄이고 그냥 붙인다
- 완결된 문장을 가끔 미완으로 끊는다
- 밤밤 원글에서 실제 쓰는 표현을 가져다 쓴다
5. 스레드 작성기 자동화 (검증 완료)
임시저장은 여러 개 지원된다.
// 1) 작성기 열기
await page.getByText('새로운 스레드').click();
// 2) 편별 입력 — 마지막 박스에 채우고 '스레드에 추가'
for (let i=0; i<parts.length; i++){
const boxes = page.locator('div[contenteditable="true"]');
const t = boxes.nth(await boxes.count() - 1);
await t.click();
await t.fill(parts[i]); // fill이 한글·줄바꿈 모두 정상 처리
if (i < parts.length-1) await page.getByRole('button',{name:'스레드에 추가'}).click();
}
// 3) 임시저장 — 취소 → "임시 저장하시겠어요?" → 저장
await page.getByRole('button',{name:'취소'}).first().click();
await page.getByRole('button',{name:'저장', exact:true}).click();
이미지 첨부: 작성기를 열면 input[type=file]이 하나 생긴다.
accept: image/avif,image/jpeg,image/png,image/webp,video/mp4..., multiple: true.
setInputFiles()로 편별 첨부.
안전장치
게시버튼은 절대 자동 클릭 금지. 발행은 밤밤이 직접 한다- 작성기 진입 시 박스가 1개(빈 상태)인지 확인하고 시작. 아니면 중단
- 저장 후
임시 저장본을 열어답글 N개로 편수를 검증한다
6. 발행 전 체크리스트
- 숫자·날짜·가격을 get100.co.kr 실물에서 재확인했나
- 전사록에서 나온 숫자를 단정으로 쓰지 않았나 (반드시 표시)
- 제3자 실명·식별 가능 조합이 들어갔나
- AI 냄새 지표가 목표 범위인가 (
scripts/ai_smell.mjs) - 이미지가 요약·결론 편에 붙어 있진 않나
- CTA가 마지막 편에만 있나
- 훅 1편이 설명을 하고 있진 않나
7. 하지 말 것
상위 계정 B((계정 B))의 "OO 건드려도 돼? 좋아요 보고 판단할게" 는 ❤️중앙 380(계정 기준선의 47배)을 냈지만, 6일 만에 857→380→111→38로 95% 감쇠했고 약속한 콘텐츠를 한 건도 안 냈다. 도달을 관계자본으로 태우는 방식이라 밤밤 브랜드에는 쓰지 않는다.
참고
- 원본 데이터: 세션 artifacts의
accountA_threads_3186.json,accountB_threads_684.json - 회상 키워드: "상위 계정 A 스레드 분석", "상위 계정 B 스레드 분석", "겟백 7기 타래"
8. 전수조사 원칙 (2026-08-30 밤밤 지시)
표본 8개로 규칙을 말했다가 "전수 조사해..;;; 일부만 보고하는건 확증편향이야"를 들었다.
실제로 뒤집혔다.
| 지표 | 8개 표본(146편) | 전수 642개(2,576편) |
|---|---|---|
| 전체 이미지 비율 | 68% | 51.9% |
| 전반 | 83% | 64.2% |
| 중반 | 77% | 44.3% |
8개는 좋아요 상위권만 골랐고, 상위권일수록 이미지가 많아서 생긴 편향이었다.
전수로만 보이는 진짜 규칙:
- 1편 81% / 2편 38% / 3편 이후 40~50% 평평
- "앞쪽이 높다"가 아니라 1편만 특별하다. 3분할은 1편이 섞여 생긴 착시였다
- 1편에 이미지 있으면 ❤️중앙 45, 없으면 34
- 이미지 70%+ 타래 ❤️67 vs 30% 이하 ❤️50
- 세운 가설(외부 인용 타래가 이미지 많다)은 전수에서 2.3%p 차이로 기각
전수 수집 경로: 2편짜리 타래는 프로필 피드 데이터로 즉시 계산되고(478개), 3편 이상만 개별 페이지를 연다(168개, 약 25분). 배치마다 디스크에 체크포인트를 남긴다.
원본: 세션 artifacts의 accountA_threads_3186.json, tmp/census.json
9. 절대 하지 말 것
임시저장본을 지우지 마라. 2026-08-30에 두 번 사고를 냈다.
- 삭제 후 목록 DOM이 즉시 갱신되지 않아, 대조 로직이 갱신 전 화면을 읽고 한 번 더 누른다
- 밤밤의 예전 초안 2개(「꿈을 포기하고 살기 vs 죽기」, 「예술로 돈벌어야한다고 주장하는 이」)가 이 방식으로 사라졌다. 스레드는 초안 복구가 없다
- 교체가 필요하면 새로 추가만 하고 정리는 밤밤에게 맡긴다
가격은 부가세 별도 기준으로 통일한다. 1기 30만 → 7기 60만이 5만원씩이고, 66만원은 부가세 포함가다. 홈페이지가 16기는 별도가, 78기는 포함가로 섞어 적고 있어서 그대로 옮기면 "5만원씩"이 안 맞는다.
Signals
- GitHub stars
- 365
- Forks
- 90
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
threads-long-thread- Source
- github.com/bam-bam-2/solo-skills