Journal Partner

by zhaohongxuan
5
4
3
2
1
Score: 44/100

Description

Journal Partner is an Obsidian plugin that turns your daily journal into a searchable, reviewable timeline. It detects and highlights HH:MM timestamps in your Journal section, and pairs that with a capture panel where you can drop in notes, images, voice memos, and to-dos without leaving your flow.

Reviews

No reviews yet.

Stats

90
stars
10,961
downloads
7
forks
72
days
17
days
17
days
37
total PRs
1
open PRs
4
closed PRs
32
merged PRs
11
total issues
5
open issues
6
closed issues
190
commits

Latest Version

17 days ago

Changelog

两个新功能(随机回顾读书划线、习惯打卡)+ 一个文案修复。


🔖 随机回顾读书划线

记录输入框左下角(标签按钮之后)新增一个书本图标:点一下从微信读书随机抽一条你自己划的线插入输入框,连点换一条,Ctrl/Cmd + 点击从同一本书再抽。

  • 只抽自己的划线 —— 他人的热门划线永远不会被插入,热门只作为加权信号(普通划线权重 1,既是自己的又热门的默认权重 4)
  • 选书会筛:跳过划线少于 10 条的书(实测 563 本收窄到 277 本),并让已读完的书权重 ×3(实测 84.2% 的抽签来自已读完的书)
  • 自动带上书名双链与作者,并附上划线时间(是你在微信读书划线的时刻,不是写日记的时间)
  • 抽签时自动勾选可配置的标签(如 #log/reading),替换默认标签而不是叠加
  • 结果缓存在本地分片文件(.obsidian/plugins/journal-partner/cache/),命中缓存时零网络请求
  • 需要在设置里填一次微信读书官方 API Key(wrk- 开头)

macOS 提示:系统会把 Ctrl+点击当作右键,所以同时也支持右键触发「同一本书再抽一条」。

✅ 习惯打卡

时间线顶部固定一排习惯,点一下即可打卡。

  • 完成状态没有独立存储 —— 它就是时间线里的 checkbox。你在编辑器里勾、在时间线里勾、在顶部栏勾,三处永远一致
  • 打卡会在今天的日记里写入一条已完成任务:- [x] 07:12 #log/habit 早起
  • 每个习惯可单独配置:名称、图标(可视化图标选择器)、打卡标签
  • 可选把状态镜像到 frontmatter 的某个属性(true / false),默认关闭
  • 反复点击不会堆叠重复节点;取消打卡只是把它翻转回 [ ]

🐛 修复

  • 正常日记时间线显示「N 条匹配」:那是搜索的措辞。formatDateHeader() 的副标题被写死成搜索文案,而它实际只被日常时间线消费。收藏列表有同一个问题。现在按列表性质区分:日常/收藏 = N 条记录,搜索/标签筛选 = N 条匹配
  • 英文单复数修正:1 entry / N entries

Full Changelog: https://github.com/zhaohongxuan/journal-partner/compare/2.20.1...2.21.0

README file from

Github

Journal Partner

一款陪你写日记的 Obsidian 插件。自动识别并高亮 Journal 区域的时间戳,让每一条记录的时间一目了然;配套一个快速记录面板,让你随时把想法、图片、语音、待办丢进今天的日记;还能收藏值得重温的条目、随机回顾过去的日记,并在同一个面板里集成全量统计,用热力图回顾一年的坚持。

Obsidian plugin Version License


效果预览

在 ## Journal 区域下,每行行首的 HH:MM 时间戳会被渲染为醒目的胶囊徽标;带 [ ] 的行会被识别为待办任务:

## Journal

- 06:42 把我的工作笔记从 Obsidian 工作流中移出去
- 07:31 成功安装并配置了 OpenClaw!
- 08:10 多花点时间做自己的事情,跑步、读书、练字都行
- 09:20 [ ] 完成周报
- 18:05 [x] 跑步 5 公里

↓ 渲染后时间戳高亮显示,颜色可自定义。


功能

🌐 多语言

插件支持 英文(默认) 和 中文 两种界面语言,可在 设置 → Journal Partner → 其他 → Language 切换,切换后立即生效(无需重启)。

  • 默认英文:所有 UI 文本、设置项、提示、日期格式均为英文
  • 第二语言中文:切换到中文后,设置页、快速记录面板、统计页、Notice 提示全部变为中文
  • 日期 / 星期 / 月份 / 数字格式随语言联动(英文 Aug 29, 2026 · Sat / 中文 2026年8月29日 · 周六)

✍️ 时间戳与编辑增强

  • 时间戳高亮:在编辑器(Source / Live Preview)和阅读视图中均生效
  • 自定义颜色:在设置中用拾色器分别设置文字色和背景色,白天 / 深色主题各一套,改动实时生效
  • 自定义作用范围:指定目标标题名称(如 Journal)和层级(如 ##),插件只在该区域内生效
  • 时间戳只读:开启后无法在编辑器中修改已有时间戳,防止误删或误改
  • 回车自动插入时间戳:在 Journal 区块内按回车时,新行自动以当前 HH:MM 起头
  • Tab 缩进保留时间戳:在条目首部按 Tab 时,时间戳与内容一起缩进,光标停在新位置
  • 自定义正则:默认匹配 HH:MM 格式,可修改为任意正则表达式以适配其他时间格式

🪶 快速记录面板

打开「快速记录」面板(羽毛笔图标或命令面板),即可在同一个面板里完成速记和统计回顾。底部是一个浮动 dock,四个按钮切换:记录 / 随机回顾 / 收藏 / 年度统计。

📝 记录 Tab
  • 基于 Daily Notes:自动写入今天日记的 ## Journal 区段;若文件或区段不存在则自动创建(依赖 Obsidian 内置「Daily Notes」核心插件)
  • 多行输入框:支持系统语音输入法、回车换行;写入时自动保留 markdown 软换行结构
  • 自定义提交快捷键:可选 Shift+Enter(默认)/ Ctrl+Enter / Alt+Enter / Ctrl+Shift+Enter
  • 粘贴图片:在输入框内直接 ⌘V 粘贴剪贴板里的图片,插件自动保存到附件目录并内联追加到条目文字之后(不另起一行);也支持把图片文件拖拽到输入框
  • 图片按钮:点击输入框下方的图片图标,从本地选择图片插入
  • 麦克风录音:一键录音,录音时实时显示对称胶囊波形 + 时长;停止后自动保存为附件(优先 m4a,不支持则 webm)并以 ![[audio.m4a]] 嵌入,时间线上会渲染为可播放的音频条
  • 实时语音转文字:配置转写接口后,录音时边说边出字(VAD 在停顿处切句 + 跨段上下文,像语音输入法),停止时再用完整音频整段重转替换草稿,兼顾实时与准确。详见下方 语音转文字
  • 待办任务:点输入框下方的 ✓ 按钮进入任务模式,提交的内容会写成 - HH:MM [ ] 文字;时间线中任务以蓝色标识,已完成的显示删除线与半透明
  • 快捷标签:点标签按钮从预设标签中多选,选中项以 chip 形式显示在输入框上方,提交时自动写入;标签列表可从全库日记中出现过的标签中选取(按频率 + 最近使用排序)
  • 气泡时间线:每条记录以「时间胶囊 + 内容气泡」呈现,带有平滑的连接弧线,颜色与时间戳样式同源
  • 跨天无限滚动:今天置顶;向下滚动自动加载更早有内容的日子,直到 365 天前为止
  • 实时同步:在主编辑器里改动当天日记,面板对应日的时间线会就地刷新
  • Markdown 渲染:支持双向链接、嵌入图片、加粗斜体等,所有原生 Obsidian 渲染特性均可用
  • 日期栏排序按钮:每个日期标题卡片的右上角都有排序切换按钮,按当日时间正序 / 倒序展示
  • 筛选:工具栏提供类型筛选(全部 / 仅任务 / 仅备忘)与标签筛选两个独立按钮
  • 右键管理 memo:右键(或移动端长按)任意气泡,可复制原文、编辑正文、删除当前 memo;若该条 memo 附带录音,还会出现「删除 memo 和录音文件」与「仅删除录音文件」两个选项,录音走 Obsidian 回收站可恢复。可在设置中关闭「删除前确认」跳过对话框
🎲 随机回顾 Tab

从过去的日记中随机抽取一天展示,配合收藏功能可以用来挖掘值得回味的旧记录。

  • 兼容无时间戳日记:用纯段落写的旧日记同样能被回顾到,不依赖 - HH:MM 格式
  • 可直接收藏:回顾到的旧条目同样可以点爱心收藏
❤️ 收藏 Tab

hover 任意时间线条目,点爱心即可把该单条记录收藏起来。

  • 四种模式通用:日常 / 搜索 / 随机回顾 / 标签模式下渲染的条目都可收藏
  • 收藏列表:扁平列表展示,最新收藏在前;点击行跳转到当日日记,点爱心取消收藏
  • 状态同步:同一条目在任意模式、任意视图(侧边栏 / 小窗)下爱心状态一致
  • 自动清理失效收藏:打开列表时自动校验并清理「日记被删 / 条目被改」的收藏,并提示清理数量
  • 数据存储:存于插件 data.json,不产生额外文件;老用户升级零迁移
🔍 搜索与标签

工具栏的搜索按钮进入内联搜索模式,可按关键字检索所有日记条目;标签筛选用独立的标签按钮,可从日记中出现过的标签里筛选。

📊 统计 Tab

和记录 Tab 共享同一个面板,点击 年度统计 即可切换。第一次打开会扫描所有 Daily Notes,之后改动日记会自动 300ms 防抖刷新。

  • 全量 Hero:顶部一张紧凑卡片展示全部年份累计的总字数(万位自动转换),副标题显示覆盖年份范围(如「2022–2026 年」)
  • 4 项核心 KPI:写作天数 / 总条数 / 录音数 / 最长连续,与 Hero 卡片内嵌显示,不再独立成卡
  • 按年热力图:每年一张 GitHub-style 热力图,7×53 网格、周一开头,5 档紫色浓度(按当日 memo 条数),鼠标悬停显示「YYYY年M月D日 · X 条 · Y 字」,点击非空格子在新 Tab 打开对应 Daily Note
  • 兼容无时间戳日记:用纯段落写的旧日记同样会被统计进字数 / 条数 / 写作天数 —— 不依赖 - HH:MM 格式
  • 优雅降级:没有时间戳时,「写作天数」仍能正确计数;「最常记录时段」类的指标仅在有时间戳的日记中显示

🔗 URL 协议(Action Button / Shortcuts 集成)

插件注册了 obsidian://journal-partner URL 协议,可以从任何能打开 URL 的地方(iOS Shortcuts、macOS Shortcuts、命令行 open)一键写入今天的日记,无需打开 Obsidian 主界面:

obsidian://journal-partner?text=<URL编码内容>
obsidian://journal-partner?text=<URL编码内容>&audio=<vault相对路径>

参数:

参数 必填 说明
text text/audio 至少一项 条目文字内容(URL 编码)
audio text/audio 至少一项 vault 内的音频附件相对路径,例如 Assets/audio/2026-06-21_153012.m4a,会以 ![[...]] 嵌入,渲染成可播放的音频条
time 否 HH:MM 格式,默认使用当前时间

搭配 iPhone Action Button:在 iOS Shortcuts 里创建一个捷径——

  • 「听写文本」→「打开 URL」(仅文字)
  • 「录音 → 听写文本 → 保存录音到 Assets/audio/ → 打开 URL(text + audio 两个参数)」(文字 + 录音双轨)

把捷径设为 Action Button,按一下手机侧键就能听写并自动落到今天的日记,全程不打断当前操作。

💡 一键导入:插件设置面板提供了「获取捷径」按钮,或直接点这里 → iCloud 捷径模板,添加到「快捷指令」app 即可使用。


安装

通过 BRAT 安装(推荐)

BRAT(Beta Reviewer's Auto-update Tool)能自动跟随本仓库的 release 升级,是目前推荐的安装方式:

  1. 在 Obsidian 社区插件中搜索并安装 BRAT,启用它
  2. 打开命令面板(⌘P)→ 执行 BRAT: Add a beta plugin for testing
  3. 粘贴本仓库地址:https://github.com/zhaohongxuan/journal-partner
  4. BRAT 会自动下载最新 release,并在 设置 → 第三方插件 中显示 Journal Partner,启用即可
  5. (快速记录功能)确保 Obsidian 内置「Daily Notes」核心插件已启用

之后每次本仓库发布新版本,BRAT 都会在 Obsidian 启动时自动更新。

手动安装

  1. 前往 Releases 下载最新版本的 main.js、manifest.json、styles.css
  2. 将三个文件复制到你的 Vault 的 .obsidian/plugins/journal-partner/ 目录下
  3. 在 Obsidian 设置 → 第三方插件 中启用 Journal Partner
  4. (快速记录功能)确保 Obsidian 内置「Daily Notes」核心插件已启用

使用快速记录

  1. 点击左侧栏的羽毛笔图标,或在命令面板(⌘P)中执行 「打开 Journal Partner 侧边栏」
  2. 默认进入「记录」Tab:在输入框中写下任何想法,按提交快捷键写入
  3. 内容会以 - HH:MM 文字 的形式追加到今天日记的 ## Journal 区段
  4. 时间线顶端始终是今天,向下滚动可继续浏览历史日记
  5. 底部 dock 可切换到 随机回顾 / 收藏 / 年度统计

多行输入会被保存为带 markdown 软换行的列表项,渲染时保持段落结构。粘贴图片 / 录音后会自动保存到 Vault 附件目录(路径默认取自 Obsidian「附件文件夹」设置,也可在插件设置中分别指定)。

🖥️ 独立小窗(桌面端)

桌面端可以把记录面板直接拖出成独立的悬浮小窗(Obsidian 原生能力,把面板标签拖到空白处即可),小窗可独立于主窗口使用,适合当作随手记录的常驻浮窗。

  • 小窗宽度自适应:窄窗下输入卡片与时间线自动适配
  • 矮窗自动隐藏 dock:窗口高度低于阈值时底部 dock 自动隐藏,避免遮挡内容,拉高后恢复
  • 粘贴图片 / 标签选择器可用:事件监听绑定在面板自身的 document 上,小窗中同样生效

🎙️ 语音转文字

在「快速记录」面板点麦克风按钮开始录音,插件会在输入框上方显示实时波形与时长。配置好转写接口后,支持两种模式:

  • 实时转写(默认开启):边说边出字。插件用 VAD(静音检测)在你说完一句话的停顿处切分音频,每段独立转写后追加到输入框;并把上一段末尾文本作为 prompt 喂给下一段,解决跨段同音词和断词问题。停止时再用完整音频做一次整段转写,替换掉实时拼出的草稿,得到既实时又准确的最终文本。
  • 整段转写(关闭实时转写):录完整段后一次性转写,准确但无实时反馈。

转写完成后,文本与音频 embed(![[audio.m4a]])会一起插入光标处。录音格式优先 m4a(audio/mp4),浏览器不支持时自动降级为 webm。

接口地址 / API Key 留空时,转写自动关闭,麦克风按钮仅作纯录音用。


设置说明

打开 Obsidian 设置 → 插件选项 → Journal Partner:

📍 时间戳设置

设置项 说明 默认值
目标标题名称 插件生效的标题文字(不含 #) Journal
标题层级 目标标题的层级 H2
时间戳只读 防止在编辑器中修改已有时间戳 开启
回车自动插入时间戳 在 Journal 区块内按回车时自动插入当前时间 开启
时间戳匹配正则 识别时间戳的正则表达式 \d{2}:\d{2}
时间线排序 条目展示顺序:倒序(新→旧)或 正序(旧→新) 倒序

🏷️ 标签设置

设置项 说明 默认值
预设标签 快捷标签选择器里展示的标签,可增删 #log/fitness、#log/code
默认标签 每次打开输入框时自动选中的标签(须为预设标签的子集) 无
日记标签上限 标签菜单中最多展示多少个「来自日记的标签」(按频率 + 最近使用排序),0 表示不限 15

🎨 颜色设置

文字色与背景色分别提供白天 / 深色两套,主题切换时自动生效;每项带「恢复默认」按钮。

设置项 说明 默认值(白天 / 深色)
文字颜色 时间戳徽标前景色(同时影响时间线弧线、内容气泡底色) #7c3aed / #a78bfa
背景颜色 时间戳徽标背景色 #ede9fe / #2e1065

🎙️ 语音转文字

录音转文字使用 OpenAI 兼容的 /audio/transcriptions 接口,接口/Key 留空则关闭转写(仅保留纯录音)。

设置项 说明 默认值
转写接口地址 OpenAI 兼容的音频转写地址,留空关闭转写 空
API Key 以 Bearer 形式发送的密钥 空
模型 multipart 中的 model 字段 whisper-1
语言 ISO-639-1 语言提示(如 zh、en),留空自动识别 zh
实时转写 录音时边说边出字,停止后整段重转替换草稿 开启
录音保存目录 录音附件的保存目录;留空使用 Obsidian「附件文件夹」设置 跟随附件设置

国内推荐(免费、可直连) —— 硅基流动 SiliconFlow 的 FunAudioLLM/SenseVoiceSmall:

转写接口地址: https://api.siliconflow.cn/v1/audio/transcriptions
模型:         FunAudioLLM/SenseVoiceSmall
语言:         zh

到 siliconflow.cn 注册并实名后生成 API Key 填入即可,该模型常驻免费。也可填 OpenAI、Groq 或自建 faster-whisper 服务(OpenAI 兼容格式即可)。

⚙️ 其他

设置项 说明 默认值
Language 界面语言,English(默认)或 中文,切换即时生效 English
移动端从侧边栏打开 移动端在右侧滑出抽屉中打开记录面板;关闭则占据主编辑区全屏展示。桌面端不受影响(始终从右侧栏打开) 关闭
提交快捷键 输入框中提交日记的快捷键组合 Shift+Enter
图片保存目录 粘贴 / 上传图片的保存目录;留空使用 Obsidian「附件文件夹」设置 跟随附件设置
获取捷径 一键导入 iOS 快捷指令模板(见下方 URL 协议) —

开发

# 安装依赖
npm install

# 开发模式(保存自动重建)
npm run dev

# 生产构建
npm run build

# 部署到本地 Obsidian Vault(需在 deploy.sh 中配置 VAULT_PATH)
npm run deploy

构建产物为 main.js,与 manifest.json、styles.css 一起复制到插件目录即可。


License

MIT