sns-auto-builder 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/carousel-html-writer.md +71 -0
- package/.claude/agents/carousel-prompt-writer.md +57 -0
- package/.claude/agents/carousel-researcher.md +49 -0
- package/.claude/agents/carousel-reviewer.md +74 -0
- package/.claude/commands/carousel-new.md +111 -0
- package/.claude/commands/carousel-quality.md +31 -0
- package/CLAUDE.md +180 -0
- package/LICENSE +21 -0
- package/README.md +178 -0
- package/README.upstream.md +145 -0
- package/bin/sns-auto-builder.mjs +116 -0
- package/index.html +1350 -0
- package/knowledge/banned-words.json +33 -0
- package/knowledge/brand.schema.json +62 -0
- package/knowledge/patterns/carousel-output-format.md +47 -0
- package/knowledge/patterns/carousel-structure.md +83 -0
- package/knowledge/patterns/thread-structure.md +81 -0
- package/knowledge/reference/.keep +0 -0
- package/knowledge/tone/.keep +0 -0
- package/package.json +50 -0
- package/scripts/chatgpt-image-gen.js +400 -0
- package/scripts/hook-post-write.js +60 -0
- package/scripts/html-carousel-gen.js +125 -0
- package/scripts/nanobanana-gen.py +137 -0
- package/scripts/openai-image-gen.js +230 -0
- package/scripts/quality-check-text.js +95 -0
- package/scripts/quality-check.js +206 -0
- package/server.mjs +877 -0
- package/templates/backgrounds.example.json +22 -0
- package/templates/slide-layouts/.keep +0 -0
- package/templates/slides.example.json +51 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "캐러셀 카피에서 자동 차단할 표현. quality-check.js가 사용.",
|
|
3
|
+
"hype_cliches": [
|
|
4
|
+
"미친 꿀팁",
|
|
5
|
+
"레전드",
|
|
6
|
+
"인생템",
|
|
7
|
+
"신세계",
|
|
8
|
+
"혁신적",
|
|
9
|
+
"게임 체인저",
|
|
10
|
+
"대박",
|
|
11
|
+
"무조건 해야 하는",
|
|
12
|
+
"1000% 성공"
|
|
13
|
+
],
|
|
14
|
+
"filler_intros": [
|
|
15
|
+
"안녕하세요",
|
|
16
|
+
"오늘은",
|
|
17
|
+
"저번에 이어서",
|
|
18
|
+
"많은 분들이",
|
|
19
|
+
"여러분"
|
|
20
|
+
],
|
|
21
|
+
"vague_promises": [
|
|
22
|
+
"엄청난 효과",
|
|
23
|
+
"놀라운 결과",
|
|
24
|
+
"기적의",
|
|
25
|
+
"비법 대공개"
|
|
26
|
+
],
|
|
27
|
+
"ai_giveaways": [
|
|
28
|
+
"~에 대해 알아보겠습니다",
|
|
29
|
+
"결론적으로",
|
|
30
|
+
"요약하자면",
|
|
31
|
+
"다음과 같습니다"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "브랜드 설정 폼의 항목 정의. 빌더 화면과 brand-facts.md 생성이 둘 다 이 파일을 읽는다. 항목을 추가하려면 여기만 고치면 화면과 문서가 같이 따라온다.",
|
|
3
|
+
"groups": [
|
|
4
|
+
{
|
|
5
|
+
"key": "basic",
|
|
6
|
+
"title": "기본",
|
|
7
|
+
"fields": [
|
|
8
|
+
{ "key": "name", "label": "브랜드명", "placeholder": "오직", "required": true },
|
|
9
|
+
{ "key": "positioning", "label": "한 줄 소개", "placeholder": "무엇을 하는 사람/회사인지" },
|
|
10
|
+
{ "key": "mission", "label": "미션", "placeholder": "왜 이 일을 하는지" },
|
|
11
|
+
{ "key": "target", "label": "타겟", "placeholder": "누구를 위한 콘텐츠인지" },
|
|
12
|
+
{ "key": "handle", "label": "인스타 핸들", "placeholder": "@ohjic", "hint": "미리보기 목업과 캡션에 쓰입니다" }
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"key": "trust",
|
|
17
|
+
"title": "신뢰 지표",
|
|
18
|
+
"hint": "검증 가능한 숫자만. 빈칸은 아예 언급되지 않습니다",
|
|
19
|
+
"fields": [
|
|
20
|
+
{ "key": "followers", "label": "인스타 팔로워", "placeholder": "1만+" },
|
|
21
|
+
{ "key": "youtube", "label": "유튜브 구독자", "placeholder": "생략 가능" },
|
|
22
|
+
{ "key": "community", "label": "카페/커뮤니티 회원", "placeholder": "생략 가능" },
|
|
23
|
+
{ "key": "customers", "label": "누적 고객/수강생", "placeholder": "100+" },
|
|
24
|
+
{ "key": "years", "label": "업력", "placeholder": "3년차 또는 2023년 시작" }
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"key": "content",
|
|
29
|
+
"title": "콘텐츠",
|
|
30
|
+
"fields": [
|
|
31
|
+
{ "key": "products", "label": "제품/서비스", "type": "textarea", "placeholder": "한 줄에 하나씩" },
|
|
32
|
+
{ "key": "tone", "label": "톤앤매너", "type": "textarea", "placeholder": "한 줄에 하나씩\n예) 친근한 과외 선생님\n예) 첫 3초 후킹, 지루한 인트로 금지" },
|
|
33
|
+
{ "key": "address", "label": "독자 호칭·어미", "placeholder": "예) ~합니다체 / 독자는 '-님'" },
|
|
34
|
+
{ "key": "hashtags", "label": "고정 해시태그", "placeholder": "#직장인 #신앙 (3~5개)", "hint": "캡션에 항상 들어갑니다" },
|
|
35
|
+
{ "key": "avoid", "label": "피할 주제·표현", "type": "textarea", "placeholder": "한 줄에 하나씩\n예) 특정 교단·인물 지목 금지\n예) 의학적 효능 단정 금지" }
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"key": "cta",
|
|
40
|
+
"title": "전환",
|
|
41
|
+
"fields": [
|
|
42
|
+
{ "key": "cta", "label": "기본 CTA", "placeholder": "저장", "hint": "마지막 장에 하나만 들어갑니다" },
|
|
43
|
+
{ "key": "link", "label": "프로필 링크·무료 자료", "placeholder": "예) 프로필 링크의 무료 체크리스트" }
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"key": "design",
|
|
48
|
+
"title": "디자인",
|
|
49
|
+
"fields": [
|
|
50
|
+
{ "key": "bg", "label": "배경색", "type": "color", "placeholder": "#131316" },
|
|
51
|
+
{ "key": "accent", "label": "액센트색", "type": "color", "placeholder": "#CF5C3F" },
|
|
52
|
+
{ "key": "font", "label": "폰트", "placeholder": "Pretendard" },
|
|
53
|
+
{ "key": "layout", "label": "레이아웃 성향", "placeholder": "여백 크게, 좌측 정렬, 매거진 느낌" },
|
|
54
|
+
{
|
|
55
|
+
"key": "markPos", "label": "워드마크 위치", "type": "select",
|
|
56
|
+
"options": ["하단 중앙", "하단 좌측", "하단 우측", "상단 좌측", "넣지 않음"],
|
|
57
|
+
"hint": "한 장에 한 곳만. 중복되면 노트 한 장 느낌이 깨집니다"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# carousel-output-format.md — 카드뉴스 **글** 출력 형식
|
|
2
|
+
|
|
3
|
+
> 이 파일은 원본 레포에 없는 **추가분**입니다. 원본 `carousel-structure.md` 는 손대지 않았습니다.
|
|
4
|
+
> 원본은 이미지 프롬프트(JSON)를 뽑는 용도라 텍스트 출력 형식이 필요 없었지만,
|
|
5
|
+
> 웹 UI(`server.mjs`)는 글만 받아 조각으로 쪼개므로 형식이 필요합니다.
|
|
6
|
+
>
|
|
7
|
+
> 구조·역할·규칙은 전부 `carousel-structure.md` 를 따릅니다. 여기서는 **출력 모양만** 정합니다.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 규칙
|
|
12
|
+
|
|
13
|
+
- 이 형식만 출력한다. 앞뒤 설명·인사·코드펜스 금지.
|
|
14
|
+
- `##` 로 시작하는 줄이 **장 구분자**다. 웹 UI가 이걸로 쪼갠다. 형식을 바꾸지 마라.
|
|
15
|
+
- 이미지 프롬프트를 쓰지 마라. **한글 카피만** 쓴다.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 형식
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
## 01 · Cover
|
|
23
|
+
라벨: CLAUDE CODE GUIDE
|
|
24
|
+
헤드라인: 코드 짜는 시간이
|
|
25
|
+
**절반**으로 줄었다
|
|
26
|
+
서브카피: 저장해두고 하나씩 적용해보세요
|
|
27
|
+
|
|
28
|
+
## 02 · TIP 01
|
|
29
|
+
라벨: TIP 01
|
|
30
|
+
헤드라인: 같은 설명을
|
|
31
|
+
**두 번** 하지 마라
|
|
32
|
+
캡션: 프로젝트 규칙은 대화창이 아니라 파일에 적어두는 자리입니다.
|
|
33
|
+
|
|
34
|
+
... (03 ~ 08 동일 형식)
|
|
35
|
+
|
|
36
|
+
## 09 · Outro
|
|
37
|
+
라벨: SAVE & SHARE
|
|
38
|
+
헤드라인: 하나만 적용해도
|
|
39
|
+
**내일**이 편해집니다
|
|
40
|
+
CTA: 저장해두고 내일 작업할 때 열어보세요
|
|
41
|
+
|
|
42
|
+
## 캡션 (인스타 본문)
|
|
43
|
+
<2~4줄 + 해시태그 8개>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- 라벨 형식은 `carousel-structure.md` 의 7가지 구조 중 고른 것에 맞춘다 (`TIP 01` / `STEP 3` / `MYTH 02` …).
|
|
47
|
+
- 헤드라인은 2줄, 각 줄 20자 이내. 강조 키워드 1개만 `**` 로 감싼다.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# carousel-structure.md — 9장 캐러셀 구조 공식
|
|
2
|
+
|
|
3
|
+
> 한 캐러셀 = 1 Cover + 7 본문 + 1 Outro.
|
|
4
|
+
> 주제가 바뀌어도 이 구조는 유지. 프롬프트 내용만 교체.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 9장 역할 분배
|
|
9
|
+
|
|
10
|
+
| # | 역할 | 목적 | 시간 비중 (사용자 체류) |
|
|
11
|
+
|:---:|:---|:---|:---:|
|
|
12
|
+
| 1 | **Cover** | 3초 내 스크롤 멈춤 | 1.5초 |
|
|
13
|
+
| 2 | 본문 ① | 핵심 포인트 1 | 2.5초 |
|
|
14
|
+
| 3 | 본문 ② | 핵심 포인트 2 | 2.5초 |
|
|
15
|
+
| 4 | 본문 ③ | 핵심 포인트 3 (데이터/그래프) | 3.0초 |
|
|
16
|
+
| 5 | 본문 ④ | 핵심 포인트 4 (반전/대조) | 3.0초 |
|
|
17
|
+
| 6 | 본문 ⑤ | 핵심 포인트 5 | 2.5초 |
|
|
18
|
+
| 7 | 본문 ⑥ | 핵심 포인트 6 | 2.5초 |
|
|
19
|
+
| 8 | 본문 ⑦ | 핵심 포인트 7 (클라이맥스) | 3.0초 |
|
|
20
|
+
| 9 | **Outro** | CTA (저장/공유/팔로우) | 2.0초 |
|
|
21
|
+
|
|
22
|
+
**평균 체류 시간 합계**: 약 22.5초 (인스타 캐러셀 완독률 60%+ 목표치 기준)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Cover 공식
|
|
27
|
+
|
|
28
|
+
| 요소 | 규칙 |
|
|
29
|
+
|:---|:---|
|
|
30
|
+
| **카테고리 라벨** | 좌측 상단 또는 하단, orange 작은 대문자 (예: "CLAUDE CODE GUIDE") |
|
|
31
|
+
| **메인 헤드라인** | 한글 bold 2줄 완결. 1줄은 white, 1줄은 orange (대조) |
|
|
32
|
+
| **언더라인 바** | 헤드라인 아래 짧은 orange 직선 (시각적 앵커) |
|
|
33
|
+
| **서브카피** | 회색, "저장 필수", "하나씩 적용해보세요" 류 행동 유도 |
|
|
34
|
+
| **여백** | 캔버스 상단 40% 이상 비워두기 (premium breathing room) |
|
|
35
|
+
|
|
36
|
+
**안티 패턴**:
|
|
37
|
+
- ❌ 헤드라인 3줄 이상 (정보 과다 = 후킹 약화)
|
|
38
|
+
- ❌ 여백 없이 꽉 찬 레이아웃 (AI 티 남)
|
|
39
|
+
- ❌ 모든 글자 같은 색 (강약 없음)
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 본문 1장당 공식
|
|
44
|
+
|
|
45
|
+
| 요소 | 규칙 |
|
|
46
|
+
|:---|:---|
|
|
47
|
+
| **넘버 라벨** | 좌측 상단 orange "TIP 01" 형식 |
|
|
48
|
+
| **헤드라인** | 한글 2줄 이내. 핵심 키워드 1개를 orange 강조 |
|
|
49
|
+
| **시각 요소** | 1개만 (트리 / 그리드 / 아이콘 행 / 다이어그램 / 프로그레스 바 등) |
|
|
50
|
+
| **보조 캡션** | 회색, 1줄. 헤드라인을 풀어쓰는 게 아니라 **다른 각도** |
|
|
51
|
+
| **CTA** | 본문에는 없음 (Outro로 몰아둠) |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Outro 공식
|
|
56
|
+
|
|
57
|
+
- 라벨: "SAVE & SHARE" 또는 "FOLLOW FOR MORE"
|
|
58
|
+
- 헤드라인: "하나씩 적용하면 체감이 확 됩니다" 류 (결과 약속)
|
|
59
|
+
- 여백 최대화 (캔버스 60% 이상 empty dark space)
|
|
60
|
+
- CTA는 1개만 (저장/공유/팔로우 중 택 1)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 7가지 본문 구조 (주제별 선택)
|
|
65
|
+
|
|
66
|
+
| 구조 | 적합한 주제 예시 |
|
|
67
|
+
|:---|:---|
|
|
68
|
+
| **팁 나열** (TIP 01~07) | "Claude Code 7가지 꿀팁", "블로그 SEO 5원칙" |
|
|
69
|
+
| **단계별** (STEP 1~7) | "AI 자동화 5단계", "브랜드 런칭 7단계" |
|
|
70
|
+
| **Before/After** | "AI 쓰기 전후 비교 7가지" |
|
|
71
|
+
| **질문-답변** (Q&A 7개) | "AI 초보 자주 묻는 질문" |
|
|
72
|
+
| **비교** (A vs B ×7) | "ChatGPT vs Claude 실전 비교" |
|
|
73
|
+
| **통념 깨기** (통념→사실 ×7) | "AI에 대한 착각 7가지" |
|
|
74
|
+
| **체크리스트** (√ 7항목) | "런칭 전 점검해야 할 7가지" |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 한글 렌더링 팁 (실측 기반)
|
|
79
|
+
|
|
80
|
+
- Gemini 3.0 Pro Image는 한글 **짧은 단어** (2~4글자) 에서 99%+ 정확
|
|
81
|
+
- **5글자 이상 전문용어** (예: "컨벤션") 또는 **받침 복잡한 단어** (예: "멍렁어") 에서 오타 위험
|
|
82
|
+
- 대응: 해당 슬라이드에 한글이 많을 경우 → 프롬프트에 해당 단어를 명시적으로 따옴표로 묶고 spelling 강조
|
|
83
|
+
- 오타 발생 시: 해당 슬라이드만 `--only slide-XX` 로 재생성 (미구현, 현재는 전체 재생성)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# thread-structure.md — Threads 스레드 구조 공식
|
|
2
|
+
|
|
3
|
+
> 이 파일은 원본 레포에 없는 **추가분**입니다.
|
|
4
|
+
> 원본(insta-carousel-builder)은 인스타 캐러셀 전용이라 쓰레드 모드가 아예 없습니다.
|
|
5
|
+
> `carousel-structure.md` 와 같은 자리(구조 공식)를 쓰레드용으로 채운 것입니다. 원본은 손대지 않았습니다.
|
|
6
|
+
|
|
7
|
+
한 스레드 = 훅 1글 + 이어지는 글 2~4개.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 형식 제약
|
|
12
|
+
|
|
13
|
+
| 항목 | 규칙 |
|
|
14
|
+
|:--|:--|
|
|
15
|
+
| **글자 수** | 1개 글 **500자 이내**. 넘으면 쪼개라 |
|
|
16
|
+
| **글 개수** | 훅 1 + 이어지는 글 2~4 (총 3~5) |
|
|
17
|
+
| **줄바꿈** | 아끼지 마라. 모바일에서 3줄 이상 붙어 있으면 안 읽는다 |
|
|
18
|
+
| **해시태그** | 마지막 글 끝에 **1~2개만**. 인스타처럼 8개 달지 마라 |
|
|
19
|
+
| **이모지** | 글당 최대 1개 |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 첫 글(훅) 공식 — 하나만 골라라
|
|
24
|
+
|
|
25
|
+
| 유형 | 예시 |
|
|
26
|
+
|:--|:--|
|
|
27
|
+
| **반대 주장** | "다들 X라고 하는데, 저는 반대입니다." |
|
|
28
|
+
| **구체적 손실** | "이거 몰라서 3개월 날렸습니다." |
|
|
29
|
+
| **숫자 대비** | "10분 걸리던 일이 40초가 됐습니다." |
|
|
30
|
+
| **질문** | "왜 아무도 이 얘기를 안 하죠?" |
|
|
31
|
+
|
|
32
|
+
첫 **2줄**에서 승부난다. Threads는 그 뒤가 접힌다.
|
|
33
|
+
|
|
34
|
+
**금지**: 인사, 자기소개, "오늘은 ~에 대해", 배경 설명부터 시작
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 이어지는 글 공식
|
|
39
|
+
|
|
40
|
+
- **한 글 = 한 주장.** 여러 개 욱여넣지 마라.
|
|
41
|
+
- 근거는 **본인 경험 형태**로. 일반론("~하는 것이 중요합니다")은 스크롤당한다.
|
|
42
|
+
- 중간 글에 CTA 넣지 마라.
|
|
43
|
+
- 각 글이 단독으로도 말이 되게 써라 (인용 재공유 대비).
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 마지막 글 공식
|
|
48
|
+
|
|
49
|
+
- CTA는 여기에만. 그것도 부드럽게 ("비슷한 경험 있으면 댓글 주세요").
|
|
50
|
+
- 팔로우 요청은 하지 마라. Threads에서 가장 빨리 스크롤당하는 문장이다.
|
|
51
|
+
- 해시태그 1~2개.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 톤
|
|
56
|
+
|
|
57
|
+
- **존댓말**, 단 딱딱하지 않게
|
|
58
|
+
- 문장 짧게. 20자 넘으면 자를 곳을 찾아라.
|
|
59
|
+
- 정답인 척하지 마라. "제 경우엔"을 붙여라.
|
|
60
|
+
- 카드뉴스보다 **한 톤 더 낮게**. 캐러셀은 가르치는 톤, 스레드는 옆자리에서 말하는 톤.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 출력 형식
|
|
65
|
+
|
|
66
|
+
이 형식만 출력한다. 앞뒤 설명·인사·코드펜스 금지.
|
|
67
|
+
`##` 로 시작하는 줄이 **글 구분자**다. 웹 UI가 이걸로 쪼갠다. 형식을 바꾸지 마라.
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
## 1 (훅)
|
|
71
|
+
<본문>
|
|
72
|
+
|
|
73
|
+
## 2
|
|
74
|
+
<본문>
|
|
75
|
+
|
|
76
|
+
## 3
|
|
77
|
+
<본문>
|
|
78
|
+
|
|
79
|
+
## 글자 수
|
|
80
|
+
1번 NNN자 / 2번 NNN자 / 3번 NNN자
|
|
81
|
+
```
|
|
File without changes
|
|
File without changes
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sns-auto-builder",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "인스타 카드뉴스 자동 제작 빌더. Claude Code + ChatGPT 웹을 그대로 써서 API 키 없이 돌아갑니다.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"sns-auto-builder": "bin/sns-auto-builder.mjs"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "node bin/sns-auto-builder.mjs",
|
|
11
|
+
"serve": "node server.mjs",
|
|
12
|
+
"test": "node test.mjs",
|
|
13
|
+
"quality-check": "node scripts/quality-check.js"
|
|
14
|
+
},
|
|
15
|
+
"//files": "넣을 것만 적는다. 이렇게 해야 새 폴더가 생겨도 실수로 안 나간다. 올리기 전 npm pack --dry-run 으로 눈으로 확인할 것.",
|
|
16
|
+
"files": [
|
|
17
|
+
"bin/",
|
|
18
|
+
"scripts/",
|
|
19
|
+
"knowledge/",
|
|
20
|
+
"templates/",
|
|
21
|
+
".claude/agents/",
|
|
22
|
+
".claude/commands/",
|
|
23
|
+
"server.mjs",
|
|
24
|
+
"index.html",
|
|
25
|
+
"CLAUDE.md",
|
|
26
|
+
"!knowledge/brand.json",
|
|
27
|
+
"!knowledge/brand-facts.md",
|
|
28
|
+
"!knowledge/logo.svg",
|
|
29
|
+
"!templates/slides.*.json",
|
|
30
|
+
"!templates/backgrounds.*.json",
|
|
31
|
+
"templates/slides.example.json",
|
|
32
|
+
"templates/backgrounds.example.json"
|
|
33
|
+
],
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"puppeteer": "^23.0.0"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=20"
|
|
39
|
+
},
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"keywords": [
|
|
42
|
+
"instagram",
|
|
43
|
+
"carousel",
|
|
44
|
+
"card-news",
|
|
45
|
+
"claude-code",
|
|
46
|
+
"chatgpt",
|
|
47
|
+
"puppeteer",
|
|
48
|
+
"korean"
|
|
49
|
+
]
|
|
50
|
+
}
|