ShangBin191 downloadsImport Xiaohongshu notes into your vault with configurable folders, frontmatter fields, local image downloads, and engagement metrics such as likes, saves, and comments.
English | 中文
把小红书笔记导入 Obsidian:正文、话题标签、图片与点赞、收藏、评论、转发数据全部存成本地 Markdown,frontmatter 可自由配置,无需登录。
Import Xiaohongshu (小红书) notes into your Obsidian vault as local Markdown — including the full body text, all images, hashtags, author info, and engagement metrics.
| Feature | Description |
|---|---|
| Import from share link | Paste a Xiaohongshu share text or link to import a note. Supports xhslink.com / xhslink.cn short links and App / web share links. |
| Batch import | Paste many share links at once — all links in the text are detected and imported in order, with a per-run limit of 20 and random throttling between requests. |
| Duplicate detection | Notes are matched by note ID against a persistent index, so re-importing the same note is skipped rather than duplicated. A note counts as duplicate only while it still exists in the vault — delete it and you can import it again. Applies to single-link and batch imports alike. |
| Full body text | Complete note body, with hashtags separated out and cleaned. |
| All images downloaded | Images are saved into your local vault, so they stay readable offline and survive note deletion. |
| Engagement metrics | Like / save / comment / share counts written to frontmatter — useful for filtering for high-performing notes. |
| Publish date & author | Real publish date, author nickname, author ID (the internal userId) and profile link. |
| Configurable folders | Separate configurable destinations for notes and images. |
| Configurable frontmatter | Add, remove, reorder, enable or disable fields; values support placeholders. |
| Emoji-safe filenames | Filenames keep Chinese characters, emoji and punctuation without dropping or corrupting them. |
| Bilingual interface | The UI follows your Obsidian interface language — Chinese for zh* locales, English otherwise. |
| Video notes | Video notes keep a remote direct link plus cover image. |
Use these in any frontmatter field value:
| Placeholder | Value |
|---|---|
{{date}} |
Import date (YYYY-MM-DD) |
{{title}} |
Note title |
{{source}} |
Original share link |
{{videoUrl}} |
Video direct URL (video notes only) |
{{publishDate}} |
Note publish date (YYYY-MM-DD) |
{{author}} |
Author nickname |
{{authorId}} |
Author userId (internal ID — not the Xiaohongshu handle) |
{{authorUrl}} |
Author profile link |
{{likedCount}} |
Like count |
{{collectedCount}} |
Save / collect count |
{{commentCount}} |
Comment count |
{{shareCount}} |
Share count |
{{ipLocation}} |
Author IP location (comes with the note page, not scraped from the profile) |
{{noteType}} |
normal or video |
{{noteTags}} |
Hashtags, space-separated |
{{noteId}} |
Xiaohongshu note ID |
Example frontmatter setup:
---
type: raw
aliases:
创建日期: {{date}}
发布日期: {{publishDate}}
博主: {{author}}
笔记链接: {{source}}
点赞: {{likedCount}}
收藏: {{collectedCount}}
评论: {{commentCount}}
转发: {{shareCount}}
tags:
- type/excerpt
- status/to-process
---
A fresh install ships only four fields —
aliases,created: {{date}},tagsand上级概念. Nothing else is written unless you add it yourself: notype, no engagement counts, no author data. The block above is one example configuration, not the default.The keys shown are Chinese, but the names are entirely yours to change. Obsidian lets you name a property anything you like — the English equivalents (
created/published/author/source/likes/saves/comments/shares) work exactly the same way. Two keys must stay as they are:aliasesandtags, because they are Obsidian's built-in properties and the alias / tag systems key on those exact names. (typeis only English by convention here — it is what the sample vault's Bases filters match on.)Placeholder names must stay ASCII. They are resolved by
/\{\{(\w+)\}\}/, and JavaScript's\wdoes not cover CJK characters — a Chinese placeholder would silently stay in the note as literal{{...}}. For readability, the settings tab lists every placeholder with a short description instead.Keep the engagement counts as separate numeric fields rather than one merged string. Merged text cannot be sorted or aggregated by Bases/Dataview, and "which note is the outlier" is the first question you ask when mining a competitor note.
Required disclosure. This plugin makes network requests, and only in the following situations:
| When | What is requested | Why |
|---|---|---|
| You trigger an import | An HTTP GET to www.xiaohongshu.com for the share link you pasted |
To fetch the public note page, from which the title, body text, image URLs, hashtags and engagement counts are parsed |
| "Download images" is enabled | HTTPS GET to Xiaohongshu's CDN (*.xhscdn.com) for each image |
To save the images into your local vault |
What this plugin does NOT do:
www.xiaohongshu.com and its image CDN.Everything is processed locally on your machine. Imported notes are plain Markdown files in your own vault.
main.js, manifest.json and styles.css from the latest release.xhs-importer-pro inside <your-vault>/.obsidian/plugins/.Add the repository URL to BRAT to receive beta updates automatically.
Note: Use share links (
xsec_source=app_share/pc_share). Links copied from your browser's address bar carry a session-bound token and will be rejected.
{{authorRedId}}, {{authorDesc}}, {{authorFans}} and {{authorIpLocation}} placeholders). To see the handle, open the profile via {{authorUrl}}.This project is built on the work of others, and is released under the same MIT license:
Both copyright notices are preserved in the LICENSE.