惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
The Last Watchdog
The Last Watchdog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
O
OpenAI News
T
Threat Research - Cisco Blogs
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Help Net Security
P
Proofpoint News Feed
MyScale Blog
MyScale Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
S
Securelist
Vercel News
Vercel News
S
Security Affairs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Blog — PlanetScale
Blog — PlanetScale
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
G
Google Developers Blog
T
Tor Project blog
Project Zero
Project Zero
腾讯CDC
Schneier on Security
Schneier on Security
月光博客
月光博客
N
Netflix TechBlog - Medium
AWS News Blog
AWS News Blog
L
LINUX DO - 最新话题
P
Proofpoint News Feed
博客园 - 司徒正美
A
About on SuperTechFans
Latest news
Latest news
Scott Helme
Scott Helme
Hacker News: Ask HN
Hacker News: Ask HN
T
Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CERT Recently Published Vulnerability Notes
Google DeepMind News
Google DeepMind News
博客园 - 聂微东

Show HN

GitHub - steveking-gh/firmion: Firmion is DSL and engine for firmware image generation. GitHub - villagesql/villagesql-skills: Agent skills for VillageSQL - gemini-cli-extension; claude-code-plugin GitHub - flightdeckhq/flightdeck: Observability and control plane for AI agents. CSP Radar GitHub - Light-Heart-Labs/DreamServer: Turn your PC, Mac, or Linux box into an AI server. LLM inference, chat UI, voice, agents, workflows, RAG, and image generation. GitHub - Diplomat-ai/diplomat-agent-ts: What can your TypeScript AI agent do to the real world? Scan your code. See which tool calls have zero checks Code Block Selector - Visual Studio Marketplace Prometheus dependency graph — interactive showcase | Riftmap Show HN: I made a vi-like modal keyboard plugin for Figma GitHub - run-llama/liteparse: A fast, helpful, and open-source document parser GitHub - dalemyers/Roar: A macOS CLI tool for notifications GitHub - district-solutions/open-agent-tools-coder: Enables small-to-large self-hosted ai models to use local source code when running tool-calling agentic workloads. We actively data mine 20,900+ (2+ TB) popular github repos using large and small ai models to create reuseable: json, markdown and parquet files for local-first tool-calling models. GitHub - progapandist/stripeek: A local TUI proxy for real-time Stripe API debugging, built for navigating complex payloads fast. GitHub - sir1st/hermes-desktop: All-in-one cross-platform desktop app for Hermes Agent — bundles Python + hermes-agent + hermes-web-ui GitHub - astefanutti/shaderbang: Shebang for Shaders Show HN: Generate Claude Code Workflows using Spec Driven Development approach GitHub - nixys/nxs-universal-chart: The Helm chart you can use to install any of your applications into Kubernetes/OpenShift Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap GitHub - noopolis/moltnet: Self-hostable chat network for AI agents. Pre-built bridges for Claude Code, Codex, and the Claws. Rooms, DMs, history. No Slack bots, no Matrix, no glue code. GitHub - tamerh/enju: Coordinating Humans, AI Agents, and Compute as Peers on a Shared Workflow Graph Show HN: Continuity-auth – Respect-weighted rate limits for the open web GitHub - luml-ai/luml: AI lifecycle platform where engineers and agents track experiments, train models, and ship to production. GitHub - mrdanielcasper/CoreTex: A UNIX-inspired, biomimetic, flat-file AI harness and knowledge engine. GitHub - clemg/pierre-github: Pierre's diffs.com and trees.software for Github GitHub - lyriks-io/unspaghettit: Behavior-driven AI development without prompt spaghetti. GitHub - sofumel/claude-handoff-revive: Resume Claude Code work after rate/usage/context limits without replaying the prior transcript. Auto-saves at 90%/95% usage. Plugin-installable, 10 languages. GitHub - dotexorg/saferpc: Typed, end-to-end encrypted RPC over any bidirectional channel. GitHub - BeeZeeAgent/beezee: Agent harness orchestration Legato Next.js Boilerplate for Internal Tools · CoreUI GitHub - clark-labs-inc/clark-hash: Clark Hash, 32x smaller searchable sketches for embeddings GitHub - ZeroPointRepo/youtube-mcp: The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free. Typing Mastery — climb toward 100+ WPM, deliberately GitHub - Andebugulin/Awareen GitHub - fayzan123/claude-workflow-composer: Visual desktop app for composing multi-agent coding workflows. Drag agents, attach skills and MCPs, wire handoffs, export to .claude/ GitHub - harshaneel/humanize: Best static AI text humanizer. Two research-grounded skills that work in any LLM (Claude, ChatGPT, Gemini, Codex): humanize beats perplexity-based detectors, ai-check produces forensic scoring with evidence-quoted flags. Nine levers, 50+ peer-reviewed sources, 2024-2026 detection literature. GitHub - StackOneHQ/stack-nudge GitHub - nodes-app/swift-markdown-engine: A native AppKit Markdown editor for macOS, built on TextKit 2 and bridged to SwiftUI. We hardened an LLM agent. Each defense we added made it more exploitable. GitHub - alkait/WhatsKept: Agent-queryable WhatsApp history from an iOS backup — a single Go binary. GitHub - octelium/cordium: Open-source, general-purpose sandbox platform for devs and AI agents that provides identity-based secure access to infrastructure without credentials. WAR.GOV/UFO Microfilm5 GitHub - scosman/videowright: Build animated explainer videos with your coding agent GitHub - dipankar/dscode: The code editor you can take apart. GitHub - zoharbabin/web-researcher-mcp: MCP server (Go) for AI assistants: web search, content extraction, academic/patent/news research. Multi-provider routing, 4-tier scraping, search lenses. Works with Claude, Cursor, and any MCP client. GitHub - ruvnet/RuView: π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video. GitHub - scanaislop/aislop: Catch the slop AI coding agents leave in your code: narrative comments, swallowed exceptions, as-any casts, dead code, oversized functions. 50+ rules across 7 languages (TypeScript, JavaScript, Python, Go, Rust, Ruby, PHP). Sub-second, deterministic, no LLM at runtime. MIT-licensed. GitHub - kouhxp/cheap-im: CPU-only voice agent approximating Thinking Machines' Interaction Models demo GitHub - unprovable/OrchidMantis: Orchid Mantis — standalone framework for Zero-Knowledge Proofs of eXploit (ZKPoX). GitHub - MarcellM01/TinySearch: Shrink the web for your local LLMs! GitHub - TangibleResearch/Halgorithem: A Algo designed to detect AI Hallucitions GitHub - DO-SAY-GO/freelang: I love freelang GitHub - CarpseDeam/Aura-IDE: An AI coding harness that shaped itself - Planner/Worker agents, repo awareness, surgical edits, validation, recovery, and safe diff approvals. GitHub - chojs23/concord: A feature-rich TUI client for Discord GitHub - tommyjepsen/awesome-ux-skills: UX & AI Product designs skills you can use today in Claude Code GitHub - aerf-spec/aerf: Agent Evidence Receipt Format (AERF) — an open specification for tamper-evident, independently verifiable records of AI agent actions. GitHub - kklimuk/docx-cli: CLI for AI agents (Claude, Codex) to read, edit, and comment on .docx files with full format fidelity. GitHub - Jwrede/tokentoll: Catch LLM cost changes in code review. Infracost for LLM spend. GitHub - samchon/ttsc: A `typescript-go` toolchain for compiler-powered plugins and type-safe execution + 500x faster lint integrated into compiler GitHub - Higangssh/homebutler: 🏠 Manage your homelab from chat. Single binary, zero dependencies. GitHub - olalie/tapmap: See where your computer connects and what stands out on a live world map. GitHub - Diplomat-ai/diplomat-agent: What can your AI agent do to the real world? Scan your code. See which tool calls have zero checks GitHub - Bajusz15/beacon: Open-source agent for secure remote access, monitoring, and deploys across home-lab and self-hosted machines like Raspberry Pi, N100, or any Linux server. Open web based TTY or tunnel Home Assistant and other local services securely without opening ports. BigTech AI News - Chrome 应用商店 GitHub - vinhnx/VTCode: VT Code is an open-source coding agent with LLM-native code understanding and robust shell safety. Supports multiple LLM providers with automatic failover and efficient context management. GitHub - michaelaz774/decision-engine: A decision operating system for startup founders, powered by Claude Code. Synthesizes wisdom from 25+ legendary founders and investors into interactive AI-driven decision frameworks. GitHub - Chrilleweb/dotenv-diff: Validate environment variable usage in your codebase GitHub - Lumen-Labs/brainapi2: BrainAPI is a knowledge graph–powered AI memory layer that transforms unstructured data into structured knowledge, enabling intelligent search, recommendations, and contextual memory for AI agents and applications. GitHub - familiar-software/familiar: Let AI watch you work. Familiar lets your AI update its memory, skills, and knowledge by watching your screen. GitHub - skorotkiewicz/rudo: A small, elegant dock for Wayland GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. make sidebar/address bar rounded corner toggleable
GitHub - addozhang/obsidian-image-upload-toolkit: An obsidian plugin for uploading local images embedded in markdown to remote store and export markdown for publishing to static site.
addozhang · 2026-06-11 · via Show HN

Seamlessly upload and manage images for your Obsidian notes across multiple cloud platforms

📋 Table of Contents

  • 🚀 Quick Start
  • ✨ Features
  • 🛠️ Installation & Configuration
  • 📖 Usage Guide
  • 🔧 Storage Service Configuration
  • 🔒 Privacy & Network Use
  • 🔍 Troubleshooting
  • 📈 Best Practices
  • 👥 Contributing
  • 📝 Changelog
  • 🙏 Acknowledgements

🚀 Quick Start

5-Minute Setup

  1. Install Plugin - Search for "Image Upload Toolkit" in Obsidian Community Plugins
  2. Basic Configuration - Select Imgur and set up your Client ID
  3. Start Using - Run the "Publish Page" command in any note
  4. View Results - Images are automatically uploaded and URLs are copied to clipboard

System Requirements

  • Obsidian version ≥ 0.11.0
  • Desktop platforms only (Windows/macOS/Linux)
  • ⚠️ Mobile not supported

✨ Features

Core Functionality

  • Smart Image Detection - Automatically recognizes Markdown and Wiki link formats
  • Multi-Format Support - PNG, JPG, JPEG, GIF, SVG, WebP, Excalidraw
  • Batch Processing - Upload multiple images simultaneously
  • Real-Time Progress - Optional progress modal with detailed feedback
  • Flexible Paths - Support for relative paths and dynamic path variables
  • Web Image Upload - Download and re-upload web images to your storage (optional)
  • Mermaid Conversion - Automatically convert mermaid diagrams to PNG images during publish (optional)

Supported Storage Services (10 providers)

Service Rating Best For
Imgur ⭐⭐⭐ Personal blogs
GitHub ⭐⭐⭐⭐ Open source projects
Cloudflare R2 ⭐⭐⭐⭐⭐ Professional use
AWS S3 ⭐⭐⭐⭐ Enterprise
Aliyun OSS ⭐⭐⭐⭐ Chinese users
TencentCloud COS ⭐⭐⭐⭐ Chinese users
Qiniu Kodo ⭐⭐⭐⭐ Chinese users
ImageKit ⭐⭐⭐⭐ CDN optimization
Backblaze B2 ⭐⭐⭐⭐ Cost-effective storage
Gyazo ⭐⭐⭐⭐ Fast sharing workflows

Perfect for publishing to static sites like GitHub Pages or any platform requiring externally hosted images.

🛠️ Installation & Configuration

Step 1: Install Plugin

  1. Open Obsidian Settings → Community Plugins
  2. Search for "Image Upload Toolkit"
  3. Click Install and Enable

Step 2: Basic Settings

  • Use image name as Alt Text: ✅ Recommended (uses filename as alt text)
  • Update original document: ❌ Suggested disabled (preserves original notes)
  • Ignore note properties: ✅ Recommended (removes frontmatter when publishing)
  • Show progress modal: ✅ Recommended (better user experience)
  • Upload web images: ❌ Optional (downloads and re-uploads web images to prevent link rot)
  • Convert mermaid diagrams: ❌ Optional (converts mermaid code blocks to PNG images during publish)
  • Mermaid scale: 2 (image resolution multiplier, 1-4x)
  • Mermaid theme: default (options: default/dark/forest/neutral/base)

Step 3: Choose Storage Service

Select your preferred storage service from the dropdown. See Storage Service Configuration for detailed setup instructions.

📖 Usage Guide

Basic Usage

  1. Open any note with local images
  2. Use Command Palette (Ctrl/Cmd + P)
  3. Type "Publish Page" and select the command
  4. All local images will be uploaded to your configured storage
  5. Updated markdown with new URLs is copied to clipboard

screenshot

Advanced Usage

  • Custom Paths: Use variables like {year}/{mon}/{day}/{filename} in path settings
  • Relative Paths: Support for ./ and ../ relative path formats
  • Dynamic Attachments: Works with Obsidian's attachment folder settings
  • Web Image Upload: Enable in settings to automatically download and re-upload web images (http/https URLs) to your storage service. Images already hosted on your configured storage are automatically skipped.

🔧 Storage Service Configuration

Service Selection Guide

  • Personal Use: Imgur (simple and free)
  • Open Source: GitHub (version control integration)
  • Quick Sharing: Gyazo (simple token-based upload)
  • Professional: Cloudflare R2 (high performance)
  • Enterprise: AWS S3 (full-featured)
  • Chinese Users: Aliyun OSS (optimized for China)
  • Budget-Friendly: Backblaze B2 (low-cost with generous free tier)

Detailed Configuration

Imgur (Recommended for Beginners)

1. Visit https://api.imgur.com/oauth2/addclient
2. Create application (select "OAuth 2 authorization without a callback URL")
3. Copy Client ID to plugin settings
4. No additional keys required

GitHub (Recommended for Developers)

1. Create Personal Access Token with 'repo' scope
2. Prepare a public repository for image storage
3. Configure repository information and access token
Note: Images are committed as regular files to the repository

Gyazo

1. Visit https://gyazo.com/oauth/applications
2. Create a Gyazo application
3. Issue an access token from the application dashboard
4. No OAuth callback server is required for this plugin. It uses the issued access token directly.
5. Configure in plugin:
   - Access Token
   - Access Policy: anyone or only_me
   - Common Description: optional shared desc value for every upload
Note: only_me uploads may not be usable for public publishing workflows

Cloudflare R2 (Recommended for Professional Use)

1. Sign up at https://dash.cloudflare.com/sign-up
2. Enable R2 storage in your Cloudflare dashboard
3. Create an R2 bucket for images
4. Generate API credentials:
   - Go to R2 → Overview → Manage R2 API Tokens
   - Create token with read/write permissions
5. Configure in plugin:
   - Access Key ID and Secret Access Key
   - Endpoint: https://<account-id>.r2.cloudflarestorage.com
   - Bucket Name: Your bucket name
   - Custom Domain: Optional (R2.dev URL or custom domain)

AWS S3

1. Create AWS account at https://aws.amazon.com
2. Create S3 bucket with public read access
3. Generate IAM credentials with S3 permissions
4. Configure in plugin:
   - Access Key ID and Secret Access Key
   - Region: AWS region of your bucket
   - Bucket Name: Your S3 bucket name
   - Custom Domain: Optional CDN domain

Aliyun OSS (阿里云对象存储)

1. Create Alibaba Cloud account
2. Create OSS bucket with appropriate permissions
3. Generate AccessKey pair from RAM console
4. Configure in plugin:
   - Access Key ID and Secret
   - Region: e.g., oss-cn-hangzhou
   - Bucket Name: Your OSS bucket
   - Custom Domain: Optional CDN domain

ImageKit

1. Create account at https://imagekit.io/registration/
2. Get API credentials from dashboard
3. Configure in plugin:
   - Public Key and Private Key
   - URL Endpoint: https://ik.imagekit.io/your_imagekit_id/
   - Folder: Optional organization folder

TencentCloud COS (腾讯云对象存储)

1. Create Tencent Cloud account
2. Create COS bucket with appropriate permissions
3. Generate SecretId and SecretKey from CAM console
4. Configure in plugin:
   - Secret ID and Secret Key
   - Region: e.g., ap-guangzhou
   - Bucket Name: Your COS bucket
   - Custom Domain: Optional CDN domain

Qiniu Kodo (七牛云存储)

1. Create Qiniu Cloud account
2. Create Kodo bucket
3. Generate Access Key and Secret Key
4. Configure in plugin:
   - Access Key and Secret Key
   - Bucket Name: Your Kodo bucket
   - Custom Domain: Domain bound to your bucket

Backblaze B2

1. Create Backblaze account at https://www.backblaze.com/b2/sign-up.html
2. Create a B2 bucket for images
3. Generate Application Key from App Keys page
4. Configure in plugin:
   - Key ID: Your application key ID
   - Application Key: Your application key
   - Bucket ID: Your B2 bucket ID
   - Bucket Name: Your B2 bucket name
   - Custom Domain: Optional (Cloudflare CDN or custom domain)

🔒 Privacy & Network Use

This plugin makes outbound network requests only to the storage service you explicitly select and configure in the settings tab. No telemetry, analytics, or tracking requests are sent anywhere. All requests are made through Obsidian's built-in requestUrl API or the official AWS SDK (used for S3-compatible services).

Endpoints contacted

The plugin will contact one of the following hostnames depending on which storage service is configured. If a service is not configured, no requests are made to its endpoint.

Service Endpoint(s)
Imgur api.imgur.com
Gyazo upload.gyazo.com
Aliyun OSS <bucket>.<region>.aliyuncs.com (region you configure)
ImageKit upload.imagekit.io
AWS S3 s3.<region>.amazonaws.com (region you configure)
Tencent COS <bucket>.cos.<region>.myqcloud.com (region you configure)
Qiniu Kodo upload.qiniup.com
GitHub api.github.com
Cloudflare R2 <account-id>.r2.cloudflarestorage.com (account you configure)
Backblaze B2 s3.<region>.backblazeb2.com (region you configure)

Optional features that make additional requests

  • Upload web images (off by default): when enabled, the plugin downloads images referenced by http(s):// URLs in your note before re-uploading them to your configured storage. Requests go to whichever hostnames those URLs point to.
  • Convert Mermaid diagrams to images (off by default): Mermaid rendering happens entirely in the local Obsidian renderer; no network requests are made for diagram rendering itself. The resulting PNG is uploaded through your configured storage like any other image.

Credentials & data handling

  • API keys, tokens, and secrets you enter are stored in Obsidian's plugin data file (.obsidian/plugins/image-upload-toolkit/data.json) on your device only.
  • Credentials are sent only to the corresponding storage service's official endpoint, using the request signing required by that service.
  • The plugin does not transmit your note contents to any service beyond the images you upload.

🔍 Troubleshooting

Common Issues

"Cannot locate image" Error

Cause: Incorrect image path configuration or missing files Solution:

  1. Check Obsidian's attachment folder settings
  2. Verify image files exist at specified paths
  3. Try using absolute paths for testing

Imgur Upload Failures

Cause: API limits or network issues Solution:

  1. Verify Client ID is correct
  2. Wait a few minutes and retry (Imgur has rate limits)
  3. Consider alternative storage services

Relative Paths Not Working

Cause: Plugin version or path resolution issues Solution:

  1. Update to latest version
  2. Use relative paths starting with ./ or ../
  3. Check Obsidian's attachment settings

Progress Modal Not Showing

Cause: Settings issue or plugin conflicts Solution:

  1. Verify "Show progress modal" setting is enabled
  2. Restart Obsidian
  3. Check for conflicting plugins

Upload Errors with Special Characters

Cause: Filename encoding issues Solution:

  1. Avoid special characters in filenames
  2. Use only alphanumeric characters, hyphens, and underscores
  3. Check filename encoding in your file system

Web Image Download Failures

Cause: Network issues, CORS restrictions, or authentication requirements Solution:

  1. Check your internet connection
  2. Verify the web image URL is accessible
  3. Some images may require authentication and cannot be downloaded
  4. Disable "Upload web images" if you only want to process local images

📈 Best Practices

Workflow Recommendations

  1. Backup Important Data - Always backup before uploading
  2. Test Configuration - Use test images to verify setup
  3. Choose Appropriate Storage - Match service to your use case
  4. Monitor Links - Regularly check uploaded image URLs

Performance Optimization

  • Process smaller files first when batch uploading
  • Use local storage services when network is unstable
  • Regularly clean up unused configuration cache

Security Guidelines

  • Never share API keys publicly
  • Rotate access credentials regularly
  • Use minimum required permissions for storage services

File Organization

  • Use consistent naming conventions
  • Organize images by date or project
  • Consider using path variables for automatic organization

👥 Contributing

How to Contribute

  1. Fork this repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Development Setup

git clone https://github.com/addozhang/obsidian-image-upload-toolkit.git
cd obsidian-image-upload-toolkit
npm install
npm run dev

Code Standards

  • Use TypeScript strict mode
  • Follow existing code style
  • Include proper error handling
  • Add meaningful commit messages

Testing Requirements

  • Test on multiple platforms if possible
  • Verify functionality with different storage services
  • Ensure backward compatibility

📝 Changelog

v1.4.0 (Latest)

  • 🔖 Version bump release — same features as v1.3.0 with corrected release tagging

v1.3.0

  • ✨ Added mermaid diagram conversion to PNG images during publish
  • ✨ Added Backblaze B2 storage support
  • ✨ Configurable mermaid scale factor (1-4x) and theme (default/dark/forest/neutral/base)
  • 🐛 Fixed double-upload of mermaid-generated images when "Upload web images" is enabled
  • 🐛 Mermaid source blocks are preserved when "Update original document" is enabled
  • 🔧 Migrated ImageKit from SDK to Obsidian's built-in requestUrl API
  • 🔧 Improved B2 MIME type detection and URL derivation

v1.2.0

  • ✨ Added web image upload feature (addresses #37)
  • ✨ Smart detection to skip images already hosted on your storage
  • 📝 Improved documentation and error messages

v1.1.3

  • ✨ Added Cloudflare R2 support
  • 🐛 Fixed relative path handling issues
  • 📝 Improved error messages

v1.1.2

  • ✨ Added Qiniu Kodo support
  • 🐛 Fixed subfolder attachment path issues
  • 🎨 Enhanced progress display interface

v1.1.1

  • ✨ Added GitHub repository storage support
  • 🐛 Fixed dynamic path variable issues
  • 📖 Updated configuration documentation

v1.1.0

  • ✨ Added TencentCloud COS support
  • 🐛 Fixed various upload issues
  • 🎨 Improved user interface

v1.0.0

  • 🚀 Initial release
  • ✨ Support for Imgur, Aliyun OSS, ImageKit, AWS S3
  • 📖 Basic documentation

🙏 Acknowledgements

This plugin was inspired by the powerful markdown editor MWeb Pro and builds upon the work of several exceptional projects: