Introduction¶
Building a conversational agent in DeepSeek Harness (DSH) often involves letting users upload images or having the model directly output image URLs. The former relies on the model’s image input capability, while the latter can trigger compliance checks and may not reliably display images in chat bubbles. If you want a setup where “the interface shows images, but the model reads and writes text,” you need a mechanism that links meme indexing, sending conventions, and frontend rendering.
dsh-meme (formerly dsh-expression) is a meme plugin for DSH, categorized as “fun customization,” maintained by yyh-001. It has 54 stars and 4 forks on GitHub, is published to npm, and is MIT licensed. Below, we introduce what problems it solves, how to install it, and how to use it daily.
What It Is¶
dsh-meme is a meme plugin for DeepSeek Harness, designed with the principle of being “findable, sendable, and learnable”:
- The model uses
send_memeto sample candidates by emotion bucket, writes[meme: description]into its reply; the frontend renders the corresponding image in the chat bubble based on the description. - Users can click the 😊 icon in the input field to select and send images from a floating panel, similar to QQ or WeChat.
- When a user says “learn,”
learn_memecan add the most recent attachment to the library, automatically identifying its category and description. - The settings page manages the meme library, allowing upload, editing, export, and import of ZIP files. Two built-in libraries are ready to use out of the box.
The plugin depends only on node:sqlite and has no other third-party runtime dependencies. Its internal plugin ID remains dsh-expression for compatibility with the old package name.
Core Features¶
Text Token Image Sending¶
The interface displays meme images, but the model receives and outputs [meme: description] without URLs or markdown image syntax. This avoids triggering DSH’s image compliance checks. Think, trace, and tool calls remain plain text, while only chat bubbles display images. Quote differences ("" / "") are normalized before matching.
Emotion-Based Sampling¶
send_meme randomly samples several captions from six emotion buckets for the model to choose from:
| Bucket Name | Meaning |
|---|---|
happy |
Happy, cute, adorable, affectionate |
angry |
Angry |
sad |
Sad, speechless, pleading |
shy |
Shy |
confused |
Confused, surprised |
daily |
Daily (sleeping, working, good morning, etc.) |
If not satisfied, you can switch emotions or search for more within the same tag.
AI Auto-Learning¶
learn_meme defaults to adding the user’s most recent attachment (no need to specify an attachment ID), but you can also pass attachmentId or imageUrl. Automatic image recognition depends on whether the current default model supports image input; if not, you can manually specify the tag and caption.
Meme Library Management & Switching¶
Two built-in libraries are included and ready to use without configuration:
- official-001 (Official meme pack 1, 92 images) — default out of the box
- dafeiyu-001 (Da Fei Yu, 49 whale-girl chibi images)
Switch between libraries via the “Current Library” dropdown in settings. The plugin scans built-in memes/* and subdirectories under the “Scan Directory” (default ~/.dsh/meme-packs) that contain index.db. Importing a ZIP places it in the scan directory and switches immediately. Settings are saved in ~/.dsh/dsh-expression.json and persist through plugin upgrades.
The settings page also supports: changing the scan path, exporting/importing library ZIPs, uploading and editing (category/description/keywords), and filtering/searching by category in Chinese.
One-Click Image Sending from Input Box¶
The 😊 button on the left of the chat input field opens a floating panel where you can search or browse thumbnails. Clicking an image sends [meme: description] directly, without needing the model to do it.
Installation & Setup¶
Published to npm as dsh-meme (current version 0.1.39), install it into any DSH profile (e.g., ~/.dsh/profiles/web/) with a single command:
dsh plugin --profile web add dsh-meme
# Equivalent to:
pnpm add dsh-meme
The old package name dsh-expression is deprecated; please use dsh-meme.
You can also install from GitHub or locally:
pnpm add github:yyh-001/dsh-meme
# Or
pnpm add file:/path/to/dsh-meme
Requires Node.js >= 20. pnpm has a default safety period of about 24 hours for new packages; recently published versions might be silently rolled back to older versions. If urgent, add dsh-meme to minimumReleaseAgeExclude in pnpm-workspace.yaml.
Community directory page: SkillHub — yyh-001/dsh-meme. SkillHub is an independent community site with no official affiliation to DeepSeek or High-Flyer.
Typical Usage¶
After installation, users can request images in natural language, and the model follows the tool chain:
User: Send a speechless meme
Model: send_meme tag=sad → random captions → append [meme: ...] to reply
Frontend: Renders image based on description, displayed as a meme in chat
Common model-side calls:
send_meme tag=sad limit=8 # Random 8 from sad bucket, pick one to append
send_meme tag=happy # Happy/cute
learn_meme # Add most recent user image
learn_meme imageUrl="https://…" # Add any image URL
Three conventions for the model (see send_meme tool description for full details):
- Write the entire
[meme: description]from candidates exactly into the reply, without adding URLs or converting to markdown images. - If no match, switch emotions or reply with text—don’t force send.
- Keep replies brief and let the image speak for itself—don’t repeat or describe the image content.
Sharing & Extending Libraries¶
Share with friends: Export a library from the settings page to get dsh-meme-pack-date.zip. The recipient can import it in their settings page for automatic switching. Must use the ZIP exported by the plugin; the “Download ZIP” on GitHub contains source code and will fail to import.
Host on a promo page: Unzip the exported package (containing index.db, manifest.json, memes/), create a new GitHub repository with the root files, add a previews/ folder with 6–12 thumbnails, and tag the repository with dsh-meme-pack. Promo page: yyh-001.github.io/dsh-meme.
Can be combined with plugins like dsh-companion for persona, memory, and messaging channels; image-sending capability is provided by dsh-meme.
Use Cases & Notes¶
Who it’s for: Developers and users who want to reliably send memes in DSH Web chats, use text tokens to bypass image compliance checks, or need local meme library management and learning.
Pre-use notes:
- The plugin runs with the current DSH process permissions; review the source code and MIT license before installing.
learn_memeautomatic image recognition relies on the model’s image input capability.- The built-in
official-001upstream anka-afk/astrbot-meme-pack-official-01 does not provide an explicit LICENSE; personal use is fine, but for public redistribution, retain the source attribution inmanifest.json. - Fine-grained tags (e.g.,
baka,sleep) exist on disk, but the model primarily recognizes the six emotion buckets; when captions don’t match, the frontend normalizes quotes before matching.
Feedback and discussion: QQ group 993579665.
Conclusion¶
dsh-meme integrates meme indexing, sending conventions, and frontend rendering with DSH: models write [meme: description], users can also click 😊 to select and send images, and new memes can be learned to expand the library. With zero third-party dependencies, two built-in libraries, and a settings page for switching and sharing, it’s ideal for Harness scenarios where you want to “trade memes like in a chat app.”
- Directory page: https://www.skillhub.cn/plugins/yyh-001/dsh-meme
- GitHub: https://github.com/yyh-001/dsh-meme
- Promo page: https://yyh-001.github.io/dsh-meme/