Blog Publisher
Obsidian 노트 또는 텍스트를 dev-blog에 발행하는 워크플로우.
이미지 생성 정책: 사용자가 직접 이미지를 생성하고 전송하면, 에이전트는 후처리(crop, webp 변환) 및 배포를 담당합니다.
전제 조건
- - dev-blog repo: INLINECODE0
- 없으면 clone:
git@github.com:sonim1/dev-blog.git
- -
cwebp 설치 (brew install webp) - 이미지 후처리용 - Git user 설정:
- INLINECODE4
이미지 생성 정책 (중요)
우선순위: chatgpt-image-gen 스킬 → 사용자 직접 생성
1순위: chatgpt-image-gen 스킬 시도
에이전트가 먼저 chatgpt-image-gen 스킬을 사용해 이미지 생성을 시도합니다.
조건:
- - Chrome 확장프로그램(OpenClaw Browser Relay)이 설치되어 있어야 함
- ChatGPT 탭이 attach 되어 있어야 함 (
openclaw browser tabs --profile=chrome으로 확인)
성공 시:
- - 바로 이미지 생성 후 후처리(crop, webp 변환) 진행
실패 시:
- - Chrome 확장프로그램 미설치/미연결 → 사용자에게 안내
- 기타 오류 → 사용자에게 알림 후 수동 생성 요청
2순위: 사용자 직접 생성
INLINECODE8 실패 시 사용자가 직접 생성:
- - 사용자가 이미지 생성 도구(Gemini, DALL-E, Midjourney 등) 사용
- 생성된 이미지를 Telegram으로 전송
- 에이전트가 후처리(crop, webp 변환) 및 배포
사용자 안내 메시지 (스킬 실패 시)
CODEBLOCK0
Vercel 정보
- - 프로젝트: INLINECODE9
- 팀: INLINECODE10
- Preview 브랜치: INLINECODE11
-
https://it-blog-git-preview-bumfoo-s-team.vercel.app
- - Production: INLINECODE13
- INLINECODE14
핵심 작성 규칙 (중요)
- 1.
tldr는 반드시 frontmatter에 작성한다.
- - 본문에
## TL;DR 섹션을 만들지 않는다.
- 2.
faq는 선택 필드다.
- - 2개 이상 입력 시 FAQPage JSON-LD로 출력된다.
- UI에 직접 보이는 섹션이 아니라 SEO/GEO용 구조화 데이터다.
- 3. ko/en 페어 글은
slug, 태그, 구조를 최대한 맞춘다.
- 4. 이미지 경로는 현재 기준
src/assets 상대 경로를 사용한다.
- 5. Related Posts는 임베딩 기반이다.
- - 로컬에서
DATABASE_URL, OPENAI_API_KEY가 없으면 related가 안 보일 수 있음. - 상용 env에서는 정상 동작.
워크플로우
1) 소스 가져오기
Obsidian 기준:
- - 볼트: INLINECODE23
- 초안:
Projects/블로그 - *.md 또는 INLINECODE25
2) .mdoc 변환 및 Frontmatter 작성
파일:
- - ko: INLINECODE27
- en: INLINECODE28
권장 기본 템플릿:
CODEBLOCK1
3) 이미지 스타일/배치 제안 + 자동 생성 시도
단계 A: 프롬프트 작성 및 자동 생성 시도
- 1. 이미지 스타일/배치 제안 작성
- 상세한 영문 프롬프트 작성
- INLINECODE29 스킬로 자동 생성 시도
단계 B: 자동 생성 결과 처리
- - 성공: 생성된 이미지 후처리로 바로 진행
- 실패: 사용자에게 안내 후 수동 생성 요청
보고 포맷:
### 🎨 이미지 스타일 제안
1. 스타일 A: 설명
2. 스타일 B: 설명
3. 스타일 C: 설명
### 📍 이미지 배치 계획
- **커버 이미지**: [설명]
- **인라인 이미지 1**: [설명]
- **인라인 이미지 2**: [설명] (필요시)
### 📝 이미지 생성용 프롬프트
#### 커버 이미지
[상세한 영문 프롬프트]
- - 해상도: 1408x768 (16:9)
- 스타일: [flat design / 3D / etc]
- 색상: [color palette]
#### 인라인 이미지 1
[상세한 영문 프롬프트]
- - 해상도: 1024x768 또는 1200x800
- 스타일: [설명]
### 🤖 자동 생성 실행
프롬프트 준비 후 `chatgpt-image-gen` 스킬 사용:
ChatGPT 이미지 생성 스킬로 커버 이미지 생성 시도
- - 스킬: chatgpt-image-gen
- 탭 확인: browser tabs --profile=chrome
- 동작: ChatGPT 탭에서 새 채팅 → 프롬프트 입력 → 생성 → 다운로드
CODEBLOCK5
4) 이미지 수신 + 후처리
자동 생성 성공 시:
- - 생성된 이미지 바로 후처리 (crop, webp 변환)
- 사용자 확인 후 진행
자동 생성 실패 → 수동 생성 시:
- - 사용자가 생성한 이미지를 Telegram으로 전송
- 이미지 확인 및 후처리 (crop, resize, webp 변환)
- 승인 후 진행
절차:
- 1. 이미지 수신 (자동 또는 Telegram)
- 필요시 후처리
- webp 변환
- 사용자 승인 후 배포 진행
5) 이미지 후처리 + webp 변환
- - AI 생성 이미지는 필요 시 공백 crop
- 스크린샷은 본문 가독성 맞춰 리사이즈
- webp 변환:
CODEBLOCK6
네이밍:
- - INLINECODE30
- en 별도 이미지 필요 시: INLINECODE31
6) 영어 버전 생성
- - 파일: INLINECODE32
- ko 내용 자연 번역
- 내부 링크는 같은 언어 경로로 맞춤
- 이미지 내 한글이 있으면 영어 버전 이미지 별도 생성/편집
7) Preview 배포 + 승인 (필수)
main 직행 금지, preview 검토 후 배포.
CODEBLOCK7
확인 링크:
- - ko: INLINECODE33
- en: INLINECODE34
승인 후:
CODEBLOCK8
최종 체크리스트
- - [ ] frontmatter에
tldr 있음 - [ ] 본문에
## TL;DR 없음 - [ ]
faq가 있으면 Q/A 2개 이상 - [ ] 사용자 제공 이미지 확인 및 webp 변환 완료
- [ ] cover/inline 이미지 경로 정상
- [ ] ko/en slug 및 구조 정합성 확인
- [ ] preview 링크 확인 및 승인 완료
- [ ] main 배포 완료
참고
Blog Publisher
将Obsidian笔记或文本发布到dev-blog的工作流程。
图片生成策略: 用户自行生成并发送图片后,代理负责后处理(裁剪、webp转换)及部署。
前置条件
- - dev-blog仓库:~/projects/dev-blog
- 若无则克隆:git@github.com:sonim1/dev-blog.git
- - 安装cwebp(brew install webp)- 用于图片后处理
- Git用户设置:
- Kendrick B Jung
图片生成策略(重要)
优先级:chatgpt-image-gen技能 → 用户自行生成
第一优先级:尝试chatgpt-image-gen技能
代理首先使用chatgpt-image-gen技能尝试生成图片。
条件:
- - 必须安装Chrome扩展程序(OpenClaw Browser Relay)
- 必须附加ChatGPT标签页(通过openclaw browser tabs --profile=chrome确认)
成功时:
- - 直接生成图片后进行后处理(裁剪、webp转换)
失败时:
- - Chrome扩展程序未安装/未连接 → 通知用户
- 其他错误 → 通知用户后请求手动生成
第二优先级:用户自行生成
chatgpt-image-gen失败时由用户自行生成:
- - 用户使用图片生成工具(Gemini、DALL-E、Midjourney等)
- 通过Telegram发送生成的图片
- 代理进行后处理(裁剪、webp转换)及部署
用户提示消息(技能失败时)
⚠️ 尝试自动生成ChatGPT图片失败,Chrome扩展程序未连接。
解决方法:
- 1. 在Chrome中打开ChatGPT(chat.openai.com)标签页
- 点击OpenClaw Browser Relay扩展程序图标
- 徽章变为ON即完成
或自行生成:
请使用上述提示词自行生成图片后通过Telegram发送。
Vercel信息
- - 项目:it-blog
- 团队:bumfoo-s-team
- 预览分支:preview
- https://it-blog-git-preview-bumfoo-s-team.vercel.app
- https://sonim1.com
核心编写规则(重要)
- 1. tldr必须写在frontmatter中。
- 2. faq为可选字段。
- - 输入2个以上时输出为FAQPage JSON-LD。
- 是用于SEO/GEO的结构化数据,而非UI直接显示的章节。
- 3. 中/英文配对文章尽量保持slug、标签和结构一致。
- 4. 图片路径使用基于src/assets的相对路径。
- - 例如:../../../assets/{slug}-{timestamp}.webp
- 5. 相关文章基于嵌入。
- - 本地缺少DATABASEURL、OPENAIAPI_KEY时可能不显示相关文章。
- 生产环境中正常运行。
工作流程
1)获取源文件
基于Obsidian:
- - 存储库:~/Library/Mobile Documents/com~apple~CloudDocs/Obsidian/Personal/Personal/
- 草稿:Projects/블로그 - .md或Inbox/.md
2)转换为.mdoc并编写Frontmatter
文件:
- - 中文:src/content/blog/ko/{slug}.mdoc
- 英文:src/content/blog/en/{slug}.mdoc
推荐基础模板:
yaml
draft: false
title: 标题
description: 描述(用于SEO的1~2句话)
date: YYYY-MM-DD
tldr:
- 核心摘要1
- 核心摘要2
faq:
- q: 问题1
a: 答案1
- q: 问题2
a: 答案2
cover: ../../../assets/{slug}-{YYYYMMDDHHmmssSSS}.webp
tags:
- 标签1
- 标签2
3)图片样式/布局建议 + 自动生成尝试
步骤A:编写提示词并尝试自动生成
- 1. 编写图片样式/布局建议
- 编写详细的英文提示词
- 使用chatgpt-image-gen技能尝试自动生成
步骤B:处理自动生成结果
- - 成功:直接进入生成图片的后处理
- 失败:通知用户后请求手动生成
报告格式:
md
🎨 图片样式建议
- 1. 样式A:说明
- 样式B:说明
- 样式C:说明
📍 图片布局计划
- - 封面图片:[说明]
- 内联图片1:[说明]
- 内联图片2:[说明](如需)
📝 图片生成提示词
封面图片
[详细的英文提示词]
- - 分辨率:1408x768(16:9)
- 样式:[扁平设计 / 3D / 等]
- 配色:[调色板]
内联图片1
[详细的英文提示词]
- - 分辨率:1024x768或1200x800
- 样式:[说明]
🤖 自动生成执行
准备提示词后使用chatgpt-image-gen技能:
尝试使用ChatGPT图片生成技能生成封面图片
- - 技能:chatgpt-image-gen
- 标签页确认:browser tabs --profile=chrome
- 操作:在ChatGPT标签页中新建对话 → 输入提示词 → 生成 → 下载
成功:直接进入后处理
失败:输出上述用户提示消息后请求手动生成
4)接收图片 + 后处理
自动生成成功时:
- - 直接对生成的图片进行后处理(裁剪、webp转换)
- 用户确认后继续
自动生成失败 → 手动生成时:
- - 用户通过Telegram发送生成的图片
- 确认图片并进行后处理(裁剪、调整大小、webp转换)
- 批准后继续
流程:
- 1. 接收图片(自动或通过Telegram)
- 必要时进行后处理
- 转换为webp
- 用户批准后进行部署
5)图片后处理 + webp转换
- - AI生成的图片必要时裁剪空白区域
- 截图根据正文可读性调整大小
- webp转换:
bash
cwebp -q 80 input.png -o src/assets/{slug}-{timestamp}.webp
命名规则:
- - {slug}-{YYYYMMDDHHmmssSSS}.webp
- 如需英文独立图片:{slug}-en-{YYYYMMDDHHmmssSSS}.webp
6)生成英文版本
- - 文件:src/content/blog/en/{slug}.mdoc
- 自然翻译中文内容
- 内部链接调整为相同语言路径
- 图片中包含中文时,单独生成/编辑英文版图片
7)预览部署 + 批准(必需)
禁止直接推送到main,需经预览审查后部署。
bash
cd ~/projects/dev-blog
git checkout -B preview
git add -A
git commit -m Add blog post: {标题}
git push origin preview --force
确认链接:
- - 中文:https://it-blog-git-preview-bumfoo-s-team.vercel.app/ko/blog/{slug}
- 英文:https://it-blog-git-preview-bumfoo-s-team.vercel.app/en/blog/{slug}
批准后:
bash
git checkout main
git merge preview
git push origin main
最终检查清单
- - [ ] frontmatter中包含tldr
- [ ] 正文中没有## TL;DR
- [ ] 如有faq,Q/A至少2个
- [ ] 已确认用户提供的图片并完成webp转换
- [ ] 封面/内联图片路径正常
- [ ] 中/英文slug及结构一致性确认
- [ ] 预览链接确认并批准完成
- [ ] main部署完成
参考
- - 格式详情:references/blog-format.md