<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub JavaScript Monthly Trending</title>
    <description>Monthly Trending of JavaScript in GitHub</description>
    <pubDate>Mon, 18 May 2026 01:59:19 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>Anil-matcha/Open-Generative-AI</title>
      <link>https://github.com/Anil-matcha/Open-Generative-AI</link>
      <description>&lt;p&gt;Open-source alternative to AI video platforms — Free AI image &amp; video generation studio with 200+ models (Flux, Midjourney, Kling, Sora, Veo). No content filters. Self-hosted, MIT licensed.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Open Generative AI — Open-Source Alternative to AI Video Platforms&lt;/h1&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;The free, open-source alternative to AI Video Platforms.&lt;/strong&gt; Generate AI images and videos using 200+ state-of-the-art models — no content filters, no closed ecosystem, no subscription fees.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Community:&lt;/strong&gt; Join &lt;a href=&quot;https://raw.githubusercontent.com/Anil-matcha/Open-Generative-AI/main/reddit.com/r/muapi&quot;&gt;Reddit&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://discord.gg/QhTrNRU4r3&quot;&gt;Discord&lt;/a&gt; for discussions and support&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;🤖 &lt;strong&gt;Automate media generations with AI coding agents:&lt;/strong&gt; &lt;a href=&quot;https://github.com/SamurAIGPT/Generative-Media-Skills&quot;&gt;Generative-Media-Skills&lt;/a&gt; — a library of skills that let agents like &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;Codex&lt;/strong&gt;, and other coding assistants drive 200+ image/video models end-to-end (prompt → generate → edit → stitch) directly from your terminal. Perfect for building automated media pipelines without touching a UI.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Related projects&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Open-source Node based workflow builder&lt;/strong&gt; -&amp;gt; &lt;a href=&quot;https://github.com/SamurAIGPT/Vibe-Workflow&quot;&gt;https://github.com/SamurAIGPT/Vibe-Workflow&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Open-source AI Clipping — turn any long-form YouTube video into viral-ready vertical shorts&lt;/strong&gt; -&amp;gt; &lt;a href=&quot;https://github.com/SamurAIGPT/AI-Youtube-Shorts-Generator&quot;&gt;https://github.com/SamurAIGPT/AI-Youtube-Shorts-Generator&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Open-source AI Design Agent&lt;/strong&gt; -&amp;gt; &lt;a href=&quot;https://github.com/Anil-matcha/Open-AI-Design-Agent&quot;&gt;https://github.com/Anil-matcha/Open-AI-Design-Agent&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;🌐 Try it Online — No Install Required&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Hosted version:&lt;/strong&gt; &lt;a href=&quot;https://muapi.ai/open-generative-ai&quot;&gt;https://muapi.ai/open-generative-ai&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Use all four studios (Image, Video, Lip Sync, Cinema) directly in your browser — no Node.js, no setup. Sign up for a free account to start generating. The hosted version is always up to date with the latest models.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Follow&lt;/strong&gt; the &lt;a href=&quot;https://x.com/matchaman11&quot;&gt;creator&lt;/a&gt; for updates&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⬇️ Download Desktop App&lt;/h2&gt; 
&lt;p&gt;One-click installers — no Node.js or terminal required.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Platform&lt;/th&gt; 
   &lt;th&gt;Download&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;macOS Apple Silicon (M1/M2/M3/M4)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI-1.0.9-arm64.dmg&quot;&gt;Open Generative AI-1.0.9-arm64.dmg&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;macOS Intel (x64)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI-1.0.9.dmg&quot;&gt;Open Generative AI-1.0.9.dmg&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windows (x64)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Anil-matcha/Open-Generative-AI/releases/download/v1.0.9/Open.Generative.AI.Setup.1.0.9.exe&quot;&gt;Open Generative AI Setup 1.0.9.exe&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux (Ubuntu x64)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/Anil-matcha/Open-Generative-AI/releases/tag/v1.0.9&quot;&gt;v1.0.9 release&lt;/a&gt; (&lt;code&gt;.AppImage&lt;/code&gt; / &lt;code&gt;.deb&lt;/code&gt;), or build locally with &lt;code&gt;npm run electron:build:linux&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;All releases: &lt;a href=&quot;https://github.com/Anil-matcha/Open-Generative-AI/releases&quot;&gt;github.com/Anil-matcha/Open-Generative-AI/releases&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;macOS Installation Guide&lt;/h3&gt; 
&lt;p&gt;Because the app is not notarized by Apple, macOS Gatekeeper will block it on first launch. Follow these steps:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; — Mount the DMG and drag the app to &lt;code&gt;/Applications&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; — Open Terminal and run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;xattr -cr &quot;/Applications/Open Generative AI.app&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; — Right-click the app in &lt;code&gt;/Applications&lt;/code&gt; → click &lt;strong&gt;Open&lt;/strong&gt; → click &lt;strong&gt;Open&lt;/strong&gt; again on the dialog&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;You only need to do this once. After that, the app opens normally.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;Alternative (no Terminal):&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Try to open the app — macOS will block it&lt;/li&gt; 
 &lt;li&gt;Go to &lt;strong&gt;System Settings → Privacy &amp;amp; Security&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Scroll down to find &lt;em&gt;&quot;Open Generative AI was blocked&quot;&lt;/em&gt;&lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;Open Anyway&lt;/strong&gt; → &lt;strong&gt;Open&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Windows Installation — SmartScreen warning fix&lt;/h3&gt; 
&lt;p&gt;Windows SmartScreen may show a warning because the installer is not code-signed:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Click &lt;strong&gt;More info&lt;/strong&gt; on the SmartScreen dialog&lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;Run anyway&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The app will install silently to &lt;code&gt;%LocalAppData%&lt;/code&gt; with a Start Menu shortcut.&lt;/p&gt; 
&lt;h3&gt;Ubuntu / Linux Installation&lt;/h3&gt; 
&lt;p&gt;Linux artifacts are available when building with Electron Builder:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build Linux installers (AppImage + .deb)
npm run electron:build:linux
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Generated files are written to the &lt;code&gt;release/&lt;/code&gt; folder:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;AppImage&lt;/strong&gt; — portable, run directly after making executable:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;chmod +x &quot;release/Open Generative AI-*.AppImage&quot;
./release/Open\ Generative\ AI-*.AppImage
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;.deb&lt;/strong&gt; — install on Debian/Ubuntu:&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt install ./release/open-generative-ai_*_amd64.deb
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If AppImage fails to start on older systems, install &lt;code&gt;libfuse2&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt install libfuse2
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Ubuntu 24.04+ / AppArmor sandbox restriction&lt;/h4&gt; 
&lt;p&gt;Ubuntu 24.04 and later enable a kernel security policy (&lt;code&gt;apparmor_restrict_unprivileged_userns&lt;/code&gt;) that blocks Chromium&#39;s user-namespace sandbox. If the app fails to start silently or crashes immediately, you have two options:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Option A — Recommended: install the &lt;code&gt;.deb&lt;/code&gt; instead.&lt;/strong&gt; The &lt;code&gt;.deb&lt;/code&gt; package ships an AppArmor profile that grants the required permission automatically on install with no system-wide changes.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Option B — Temporary system fix (AppImage users):&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This lasts until next reboot. To make it permanent:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &#39;kernel.apparmor_restrict_unprivileged_userns=0&#39; | sudo tee /etc/sysctl.d/99-userns.conf
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;p&gt;Open Generative AI is a free, open-source AI image, video, cinema, and lip sync studio that brings creative workflows to everyone. No content filters, no prompt rejections, no guardrails — just full creative freedom. Powered by &lt;a href=&quot;https://muapi.ai&quot;&gt;Muapi.ai&lt;/a&gt;, it supports text-to-image, image-to-image, text-to-video, image-to-video, and audio-driven lip sync generation across models like Flux, Nano Banana, Midjourney, Kling, Sora, Veo, Seedream, Infinite Talk, LTX Lipsync, Wan 2.2, and more — all from a sleek, modern interface you can self-host and customize.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Why Open Generative AI instead of other AI Video Platforms?&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;No filters&lt;/strong&gt; — no content filters, no nanny guardrails, no prompt rejections&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Free &amp;amp; open-source&lt;/strong&gt; — no subscription, no vendor lock-in&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Self-hosted&lt;/strong&gt; — your data stays on your machine, full creative control&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;200+ models&lt;/strong&gt; — text-to-image, image-to-image, text-to-video, image-to-video, lip sync&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-image input&lt;/strong&gt; — feed up to 14 reference images into compatible models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Lip Sync Studio&lt;/strong&gt; — animate portraits or sync lips to any audio with 9 dedicated models&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Extensible&lt;/strong&gt; — add your own models, modify the UI, build on top of it&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For a deep dive into the technical architecture and the philosophy behind the &quot;Infinite Budget&quot; cinema workflow, see our &lt;a href=&quot;https://medium.com/@anilmatcha/&quot;&gt;comprehensive guide and roadmap&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;⚡ Local Model Inference (Desktop App Only)&lt;/h2&gt; 
&lt;p&gt;The desktop app supports &lt;strong&gt;two independent local engines&lt;/strong&gt;. Pick whichever fits the machine you actually run on:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Engine&lt;/th&gt; 
   &lt;th&gt;What it is&lt;/th&gt; 
   &lt;th&gt;Best for&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;sd.cpp&lt;/strong&gt; (bundled)&lt;/td&gt; 
   &lt;td&gt;C++ engine from &lt;a href=&quot;https://github.com/leejet/stable-diffusion.cpp&quot;&gt;stable-diffusion.cpp&lt;/a&gt;, runs on the same machine as the app. Metal GPU on Apple Silicon, CUDA/Vulkan/ROCm on Linux/Windows.&lt;/td&gt; 
   &lt;td&gt;Image-only models. Works on Mac M-series.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Wan2GP&lt;/strong&gt; (BYO server)&lt;/td&gt; 
   &lt;td&gt;HTTP client to a user-run &lt;a href=&quot;https://github.com/deepbeepmeep/Wan2GP&quot;&gt;Wan2GP&lt;/a&gt; server. The server runs Python + PyTorch on a CUDA/ROCm GPU; the desktop app only sends prompts and receives results.&lt;/td&gt; 
   &lt;td&gt;Video models (Wan 2.2, Hunyuan, LTX) and large image models (Flux, Qwen-Image). NVIDIA/AMD GPU required on the &lt;em&gt;server&lt;/em&gt;; the desktop app itself can run on a Mac.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Both engines share the same UI: open &lt;strong&gt;Settings → Local Models&lt;/strong&gt; to configure each.&lt;/p&gt; 
&lt;h3&gt;Engine 1 — sd.cpp (bundled)&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Size&lt;/th&gt; 
   &lt;th&gt;Notes&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Z-Image Turbo&lt;/strong&gt; ⚡&lt;/td&gt; 
   &lt;td&gt;Diffusion Transformer&lt;/td&gt; 
   &lt;td&gt;2.5 GB + 2.7 GB aux&lt;/td&gt; 
   &lt;td&gt;8-step turbo. Heavy on memory.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Z-Image Base&lt;/strong&gt; ⚡&lt;/td&gt; 
   &lt;td&gt;Diffusion Transformer&lt;/td&gt; 
   &lt;td&gt;3.5 GB + 2.7 GB aux&lt;/td&gt; 
   &lt;td&gt;50-step high-quality. Heavy on memory.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Dreamshaper 8&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;SD 1.5&lt;/td&gt; 
   &lt;td&gt;2.1 GB&lt;/td&gt; 
   &lt;td&gt;20-step versatile. Lightest tested option on Mac.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Realistic Vision v5.1&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;SD 1.5&lt;/td&gt; 
   &lt;td&gt;2.1 GB&lt;/td&gt; 
   &lt;td&gt;25-step photorealistic&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Anything v5&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;SD 1.5&lt;/td&gt; 
   &lt;td&gt;2.1 GB&lt;/td&gt; 
   &lt;td&gt;20-step anime/illustration&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;SDXL Base 1.0&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;SDXL&lt;/td&gt; 
   &lt;td&gt;6.9 GB&lt;/td&gt; 
   &lt;td&gt;30-step high-res&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Z-Image models&lt;/strong&gt; require two shared auxiliary files (downloaded once, shared across both models):&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Qwen3-4B Text Encoder&lt;/strong&gt; — 2.4 GB&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;FLUX VAE&lt;/strong&gt; — 335 MB&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;How to use:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open &lt;strong&gt;Settings → Local Models&lt;/strong&gt; in the desktop app&lt;/li&gt; 
 &lt;li&gt;Install the &lt;strong&gt;sd.cpp inference engine&lt;/strong&gt; (one click — auto-downloaded)&lt;/li&gt; 
 &lt;li&gt;Download your chosen model (and auxiliary files for Z-Image)&lt;/li&gt; 
 &lt;li&gt;In &lt;strong&gt;Image Studio&lt;/strong&gt;, click the &lt;strong&gt;⚡ Local&lt;/strong&gt; toggle next to the model selector&lt;/li&gt; 
 &lt;li&gt;Select your local model and generate — no API key needed&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;All downloads happen inside the app. Nothing is installed system-wide.&lt;/p&gt; 
&lt;h3&gt;Engine 2 — Wan2GP (remote Gradio server)&lt;/h3&gt; 
&lt;p&gt;The app does &lt;strong&gt;not&lt;/strong&gt; bundle Python or model weights for Wan2GP. You run Wan2GP yourself on a machine with a CUDA or ROCm GPU and point the desktop app at its URL.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# On your GPU machine
git clone https://github.com/deepbeepmeep/Wan2GP
cd Wan2GP
./install.sh                          # or install.bat on Windows
python wgp.py --listen --server-name 0.0.0.0   # binds to all interfaces
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then in the desktop app: &lt;strong&gt;Settings → Local Models → Wan2GP server&lt;/strong&gt;, paste the URL (e.g. &lt;code&gt;http://192.168.1.42:7860&lt;/code&gt;), click &lt;strong&gt;Test&lt;/strong&gt;, then &lt;strong&gt;Save&lt;/strong&gt;. The Wan2GP models become available — image models in &lt;strong&gt;Image Studio&lt;/strong&gt;, video models reachable via the same generation API (Image Studio rejects video output explicitly; full Video Studio wiring is on the roadmap).&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Model&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Notes&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Flux.1 Dev&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Image&lt;/td&gt; 
   &lt;td&gt;1024px, 28 steps&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Qwen Image&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Image&lt;/td&gt; 
   &lt;td&gt;1024px, 30 steps&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Wan 2.2 (T2V / I2V)&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Video&lt;/td&gt; 
   &lt;td&gt;Slow on consumer GPUs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Hunyuan Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Video&lt;/td&gt; 
   &lt;td&gt;High-quality T2V&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;LTX Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Video&lt;/td&gt; 
   &lt;td&gt;Fastest video option&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Why a separate server?&lt;/strong&gt; Wan2GP&#39;s runtime (Sage attention, flash-attn, AWQ/GGUF kernels) is CUDA-only — there is no MPS / Apple Silicon path. Treating it as a remote server lets a Mac-only user keep the desktop app while offloading inference to a Linux/Windows GPU box, a gaming PC on the LAN, or a rented RunPod/vast.ai instance.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Local inference is only available in the desktop app.&lt;/strong&gt; The hosted web version always uses cloud APIs.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Hardware Notes&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;sd.cpp&lt;/strong&gt; runs on CPU (all platforms) and &lt;strong&gt;Metal GPU&lt;/strong&gt; on Apple Silicon (M1/M2/M3/M4); CUDA/Vulkan/ROCm on Linux/Windows.&lt;/li&gt; 
 &lt;li&gt;Metal GPU acceleration is built into the macOS desktop binary — significantly faster than CPU-only.&lt;/li&gt; 
 &lt;li&gt;Recommended for sd.cpp Z-Image: 16 GB RAM (7.4 GB weights + 2.4 GB compute buffer). On a base 8 GB M-series Mac, &lt;strong&gt;Z-Image is known to hang the system&lt;/strong&gt; — stick to SD 1.5 there.&lt;/li&gt; 
 &lt;li&gt;For SD 1.5 on M2: expect ~1–2 s/step with the Metal dylib active. If you see ~10 s/step instead, the binary may have fallen back to CPU — see verification below.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Verifying the SD 1.5 path (the fastest sanity test on Mac)&lt;/h3&gt; 
&lt;p&gt;If you want to confirm sd.cpp is installed correctly without going through the UI, you can drive &lt;code&gt;sd-cli&lt;/code&gt; directly. This is the same binary the app uses.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. App data layout (created on first app launch)
APP_DATA=&quot;$HOME/Library/Application Support/open-generative-ai/local-ai&quot;
ls &quot;$APP_DATA/bin&quot;     # sd-cli, libstable-diffusion.dylib
ls &quot;$APP_DATA/models&quot;  # whatever you&#39;ve downloaded

# 2. Grab a small SD 1.5 model directly (Dreamshaper 8, ~2 GB)
curl -L --fail --progress-bar \
  -o &quot;$APP_DATA/models/DreamShaper_8_pruned.safetensors&quot; \
  &quot;https://huggingface.co/Lykon/DreamShaper/resolve/main/DreamShaper_8_pruned.safetensors&quot;

# 3. Run a single 512x512 / 12-step inference
DYLD_LIBRARY_PATH=&quot;$APP_DATA/bin&quot; &quot;$APP_DATA/bin/sd-cli&quot; \
  -m &quot;$APP_DATA/models/DreamShaper_8_pruned.safetensors&quot; \
  -p &quot;a serene mountain lake at sunrise, oil painting&quot; \
  -o /tmp/sd15-test.png \
  --steps 12 -H 512 -W 512 --cfg-scale 7.5 --seed 42 \
  --sampling-method euler_a
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A healthy run on Apple Silicon prints &lt;code&gt;total params memory size = 1969.78MB (VRAM 1969.78MB, RAM 0.00MB)&lt;/code&gt; (Metal-backed) and produces a coherent 512×512 PNG. If &lt;code&gt;VRAM&lt;/code&gt; is &lt;code&gt;0.00MB&lt;/code&gt; instead, the dylib is CPU-only — check &lt;code&gt;otool -L &quot;$APP_DATA/bin/libstable-diffusion.dylib&quot; | grep -i metal&lt;/code&gt; and reinstall the engine from &lt;strong&gt;Settings → Local Models&lt;/strong&gt; if Metal is missing.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Image Studio&lt;/strong&gt; — Generate images from text prompts (50+ text-to-image models) or transform existing images (55+ image-to-image models). Switches model set automatically based on whether a reference image is provided. Quality and resolution controls visible for models that support them.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Local Inference&lt;/strong&gt; — Two engines: &lt;strong&gt;sd.cpp&lt;/strong&gt; (bundled, runs on Mac/Win/Linux with Metal/CUDA/Vulkan/ROCm) for SD 1.5, SDXL, and Z-Image; and &lt;strong&gt;Wan2GP&lt;/strong&gt; (BYO Gradio server) for Flux, Qwen-Image, and video models (Wan 2.2, Hunyuan, LTX). Configure both in Settings → Local Models.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-Image Input&lt;/strong&gt; — Upload up to 14 reference images for compatible edit models (Nano Banana 2 Edit, Flux Kontext Dev, GPT-4o Edit, and more). Multi-select picker with order badges, batch upload, and a &quot;Use Selected&quot; confirmation flow.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Video Studio&lt;/strong&gt; — Generate videos from text prompts (40+ text-to-video models) or animate a start-frame image (60+ image-to-video models). Same intelligent mode switching as Image Studio.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Lip Sync Studio&lt;/strong&gt; — Animate portrait images or sync lips on existing videos using audio. 9 dedicated models across two modes: portrait image + audio → talking video, and video + audio → lipsync video.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cinema Studio&lt;/strong&gt; — Interface for photorealistic cinematic shots with pro camera controls (Lens, Focal Length, Aperture)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Workflow Studio&lt;/strong&gt; — Build and run multi-step AI pipelines visually. Chain image, video, and audio models into automated flows. Browse community templates, create your own with a node-based editor, and run them via an interactive playground.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Upload History&lt;/strong&gt; — Reference images are uploaded once and stored locally. A picker panel lets you reuse any previously uploaded image across sessions — no re-uploading.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Smart Controls&lt;/strong&gt; — Dynamic aspect ratio, resolution/quality, and duration pickers that adapt to each model&#39;s capabilities (including t2i models with resolution or quality options)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Generation History&lt;/strong&gt; — Browse, revisit, and download all past generations (persisted in browser storage)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Image &amp;amp; Video Download&lt;/strong&gt; — One-click download of generated outputs in full resolution&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;API Key Management&lt;/strong&gt; — Secure API key storage in browser localStorage (never sent to any server except Muapi)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Responsive Design&lt;/strong&gt; — Works seamlessly on desktop and mobile with dark glassmorphism UI&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🖼️ Image Studio — Dual Mode&lt;/h3&gt; 
&lt;p&gt;The Image Studio automatically switches between two model sets:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Mode&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Trigger&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Models&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Prompt&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Text-to-Image&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Default (no image)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;50+ t2i models (Flux, Nano Banana 2, Seedream 5.0, Ideogram, GPT-4o, Midjourney…)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Required&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Image-to-Image&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Reference image uploaded&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;55+ i2i models (Kontext, Nano Banana 2 Edit, Seedream 5.0 Edit, Seededit, Upscaler…)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Newly Added Models&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Model&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Type&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Features&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Nano Banana 2&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Text-to-Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Google Gemini 3.1 Flash Image · Resolution 1K/2K/4K · Google Search enhancement · aspect ratio &lt;code&gt;auto&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Nano Banana 2 Edit&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Image-to-Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Up to &lt;strong&gt;14 reference images&lt;/strong&gt; · Resolution 1K/2K/4K · Google Search enhancement&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Seedream 5.0&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Text-to-Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ByteDance · Quality basic/high · 8 aspect ratios · up to 4K&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Seedream 5.0 Edit&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Image-to-Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ByteDance · Natural language style transfer · Quality basic/high&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;MiniMax Image 01&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Text-to-Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;MiniMax · 8 aspect ratios · up to 4 images per request · 1500 char prompt&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Multi-Image Input&lt;/h4&gt; 
&lt;p&gt;Models that accept multiple reference images expose a multi-select picker when active:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Model&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Max Images&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Nano Banana 2 Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;14&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Nano Banana Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;10&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Flux Kontext Dev I2I&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;10&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Kling O1 Edit Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;10&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;GPT-4o Edit / GPT Image 1.5 Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;10&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Bytedance Seedream Edit v4 / v4.5&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;10&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Vidu Q2 Reference to Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;7&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Flux 2 Flex/Pro Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;8&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Nano Banana Pro Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;8&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Flux Kontext Pro/Max I2I&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;2&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Wan 2.5/2.6 Image Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;2–3&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Qwen Image Edit Plus / 2511&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;3&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;GPT-4o Image to Image&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;5&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Flux 2 Klein 4b/9b Edit&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;4&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;When a multi-image model is selected the upload trigger switches to multi-select mode:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Checkboxes with order numbers&lt;/strong&gt; — images are sent to the model in the order you select them&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Batch upload&lt;/strong&gt; — pick multiple files at once from your file dialog&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Count badge&lt;/strong&gt; on the trigger shows how many images are active; a &lt;code&gt;+&lt;/code&gt; badge appears when more slots are available&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&quot;Use Selected&quot; button&lt;/strong&gt; confirms and closes the picker&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🎬 Video Studio — Dual Mode&lt;/h3&gt; 
&lt;p&gt;The Video Studio follows the same pattern:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Mode&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Trigger&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Models&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Prompt&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Text-to-Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Default (no image)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;40+ t2v models (Kling, Sora, Veo, Wan, Seedance 2.0, Hailuo, Runway…)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Required&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Image-to-Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Start frame uploaded&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;60+ i2v models (Kling I2V, Veo3 I2V, Runway I2V, Wan I2V, Seedance 2.0 I2V, Midjourney I2V…)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Newly Added Models&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Model&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Type&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Features&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Seedance 2.0&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Text-to-Video&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ByteDance · Aspect ratios 16:9 / 9:16 / 4:3 / 3:4 · Duration 5 / 10 / 15s · Quality basic/high&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Seedance 2.0 I2V&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Image-to-Video&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ByteDance · Animate images into video · Up to 9 reference images · Aspect ratios 16:9 / 9:16 / 4:3 / 3:4 · Duration 5 / 10 / 15s · Quality basic/high&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Seedance 2.0 Extend&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Video Extension&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;ByteDance · Seamlessly continue any Seedance 2.0 generation · Preserves style, motion &amp;amp; audio · Optional continuation prompt · Duration 5 / 10 / 15s · Quality basic/high&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Grok Imagine T2V&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Text-to-Video&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;xAI · Duration 6 / 10 / &lt;strong&gt;15s&lt;/strong&gt; · Modes: fun / normal / spicy · Aspect ratios 9:16 / 16:9 / 2:3 / 3:2 / 1:1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Grok Imagine I2V&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Image-to-Video&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;xAI · Duration 6 / 10 / &lt;strong&gt;15s&lt;/strong&gt; · Modes: fun / normal / spicy · Cinematic motion from still images&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;MiniMax Hailuo 02 / 2.3 Standard &amp;amp; Pro&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Text-to-Video / Image-to-Video&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;MiniMax · Full HD video · Multiple aspect ratios · Fast variant included&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🎙️ Lip Sync Studio&lt;/h3&gt; 
&lt;p&gt;The &lt;strong&gt;Lip Sync Studio&lt;/strong&gt; generates audio-driven talking videos using 9 models across two input modes:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Mode&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Trigger&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Portrait Image&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Default&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Upload a portrait image + audio file → animated talking video&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Switch to Video mode&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Upload an existing video + audio file → lipsync video&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Image-based Models (Portrait Image + Audio → Video)&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Model&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Endpoint&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Resolutions&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Prompt&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Infinite Talk&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;infinitetalk-image-to-video&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;480p, 720p&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Wan 2.2 Speech to Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;wan2.2-speech-to-video&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;480p, 720p&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;LTX 2.3 Lipsync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;ltx-2.3-lipsync&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;480p, 720p, 1080p&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;LTX 2 19B Lipsync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;ltx-2-19b-lipsync&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;480p, 720p, 1080p&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Video-based Models (Video + Audio → Lipsync Video)&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Model&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Endpoint&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Resolutions&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Prompt&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Sync Lipsync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;sync-lipsync&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;LatentSync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;latentsync-video&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Creatify Lipsync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;creatify-lipsync&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Veed Lipsync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;veed-lipsync&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;—&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Infinite Talk V2V&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;infinitetalk-video-to-video&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;480p, 720p&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Optional&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Select &lt;strong&gt;Portrait Image&lt;/strong&gt; or &lt;strong&gt;Video&lt;/strong&gt; mode using the toggle&lt;/li&gt; 
 &lt;li&gt;Upload your portrait image (or video) using the image/video upload button&lt;/li&gt; 
 &lt;li&gt;Upload your audio file using the audio upload button&lt;/li&gt; 
 &lt;li&gt;Optionally enter a prompt to guide the motion style&lt;/li&gt; 
 &lt;li&gt;Select a model and resolution (where supported), then click &lt;strong&gt;Generate&lt;/strong&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Generation history is saved separately in &lt;code&gt;lipsync_history&lt;/code&gt; and pending jobs resume automatically on page reload.&lt;/p&gt; 
&lt;h3&gt;🔀 Workflow Studio&lt;/h3&gt; 
&lt;p&gt;The &lt;strong&gt;Workflow Studio&lt;/strong&gt; lets you build and run multi-step AI pipelines without writing code.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Key capabilities:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Templates&lt;/strong&gt; — Start from pre-built workflows (image chains, video pipelines, and more)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;My Workflows&lt;/strong&gt; — Save and manage your own custom pipelines&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Community&lt;/strong&gt; — Browse and run workflows published by other users&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Node-based Builder&lt;/strong&gt; — Drag-and-drop visual editor to connect models and route outputs between steps&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Playground&lt;/strong&gt; — Run any workflow interactively with a form UI; results render inline&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;API execution&lt;/strong&gt; — Every workflow is also callable via the Muapi API&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;💡 &lt;strong&gt;Want to add workflows to your own app?&lt;/strong&gt; Check out &lt;strong&gt;&lt;a href=&quot;https://github.com/SamurAIGPT/Vibe-Workflow&quot;&gt;Vibe Workflow&lt;/a&gt;&lt;/strong&gt; — the open-source workflow engine powering this feature. Drop it into any project.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🎥 Cinema Studio Controls&lt;/h3&gt; 
&lt;p&gt;The &lt;strong&gt;Cinema Studio&lt;/strong&gt; offers precise control over the virtual camera, translating your choices into optimized prompt modifiers:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Category&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Available Options&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Cameras&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Modular 8K Digital, Full-Frame Cine Digital, Grand Format 70mm Film, Studio Digital S35, Classic 16mm Film, Premium Large Format Digital&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Lenses&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Creative Tilt, Compact Anamorphic, Extreme Macro, 70s Cinema Prime, Classic Anamorphic, Premium Modern Prime, Warm Cinema Prime, Swirl Bokeh Portrait, Vintage Prime, Halation Diffusion, Clinical Sharp Prime&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Focal Lengths&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;8mm (Ultra-Wide), 14mm, 24mm, 35mm (Human Eye), 50mm (Portrait), 85mm (Tight Portrait)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Apertures&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;f/1.4 (Shallow DoF), f/4 (Balanced), f/11 (Deep Focus)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;📁 Upload History &amp;amp; Picker&lt;/h3&gt; 
&lt;p&gt;Every image you upload is saved locally (URL + thumbnail) so you never upload the same file twice:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Click the upload button to open the &lt;strong&gt;reference image picker&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Previously uploaded images appear in a 3-column grid with thumbnails&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Single-image models&lt;/strong&gt; — click a thumbnail to instantly select and close&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-image models&lt;/strong&gt; — toggle multiple thumbnails (shown with order numbers), then click &lt;strong&gt;Use Selected&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Upload new images with the &lt;strong&gt;Upload files&lt;/strong&gt; button (supports multi-file selection in multi-image mode)&lt;/li&gt; 
 &lt;li&gt;Remove individual images from history with the ✕ button&lt;/li&gt; 
 &lt;li&gt;History persists across browser sessions (stored in &lt;code&gt;localStorage&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; (v18+)&lt;/li&gt; 
 &lt;li&gt;A &lt;a href=&quot;https://muapi.ai&quot;&gt;Muapi.ai&lt;/a&gt; API key&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Setup&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Most users want the desktop app, not this dev path.&lt;/strong&gt; If you just want to run Open Generative AI on your machine, &lt;a href=&quot;https://raw.githubusercontent.com/Anil-matcha/Open-Generative-AI/main/#-download-desktop-app&quot;&gt;download a prebuilt installer&lt;/a&gt; instead — no Node.js required. The instructions below are for contributors building from source.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Pick the entry point that matches your goal:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Desktop app (Electron)&lt;/strong&gt; → &lt;code&gt;npm run electron:dev&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Hosted web version (Next.js)&lt;/strong&gt; → &lt;code&gt;npm run dev&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the repository (with submodules — required for the workflow + agent packages)
git clone --recurse-submodules https://github.com/Anil-matcha/Open-Generative-AI.git
cd Open-Generative-AI

# If you already cloned without --recurse-submodules, run this once:
# git submodule update --init --recursive

# Install dependencies + build workspace packages (studio, workflow, agents).
# This step is REQUIRED — `npm install` alone is not enough; the workspaces
# need to be built before either dev script will work.
npm run setup

# Then start ONE of:
npm run electron:dev   # Desktop app (Electron + Vite) — recommended
npm run dev            # Hosted web version (Next.js) → http://localhost:3000
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You&#39;ll be prompted to enter your Muapi API key on first use (skip the key if you only plan to use local models).&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Troubleshooting — &lt;code&gt;Couldn&#39;t find a &#39;pages&#39; directory&lt;/code&gt;&lt;/strong&gt;: this means Next.js can&#39;t see the &lt;code&gt;app/&lt;/code&gt; folder. Confirm you&#39;re running &lt;code&gt;npm run dev&lt;/code&gt; from the repo root (the directory that contains &lt;code&gt;app/&lt;/code&gt;, &lt;code&gt;package.json&lt;/code&gt;, and &lt;code&gt;next.config.mjs&lt;/code&gt;), and that you cloned with submodules. Re-run &lt;code&gt;npm run setup&lt;/code&gt; if &lt;code&gt;packages/Vibe-Workflow&lt;/code&gt; or &lt;code&gt;packages/Open-Poe-AI&lt;/code&gt; are empty.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Production Build&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run build
npm run start
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Desktop App Build&lt;/h3&gt; 
&lt;p&gt;Build native desktop apps with Electron:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# macOS (DMG — Intel + Apple Silicon)
npm run electron:build

# Windows (NSIS installer — x64 + ARM64)
npm run electron:build:win

# Linux (AppImage + DEB — x64)
npm run electron:build:linux

# Both platforms in one pass
npm run electron:build:all
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Installers are output to the &lt;code&gt;release/&lt;/code&gt; folder. Pre-built binaries are also available on the &lt;a href=&quot;https://github.com/Anil-matcha/Open-Generative-AI/releases&quot;&gt;Releases page&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;🏗️ Architecture&lt;/h2&gt; 
&lt;p&gt;The app is a &lt;strong&gt;Next.js monorepo&lt;/strong&gt; with a shared &lt;code&gt;packages/studio&lt;/code&gt; component library.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Open-Generative-AI/
├── app/                        # Next.js App Router
│   ├── layout.js               # Root layout (Tailwind, fonts)
│   ├── page.js                 # Redirects → /studio
│   └── studio/
│       └── page.js             # Studio page — renders StandaloneShell
├── components/
│   ├── StandaloneShell.js      # Tab nav + BYOK (API key from localStorage)
│   └── ApiKeyModal.js          # API key entry modal
├── packages/
│   └── studio/                 # Shared React component library
│       └── src/
│           ├── index.js        # Exports: ImageStudio, VideoStudio, LipSyncStudio, CinemaStudio, WorkflowStudio
│           ├── models.js       # 200+ model definitions (single source of truth)
│           ├── muapi.js        # API client (named exports, apiKey as first param)
│           └── components/
│               ├── ImageStudio.jsx    # Dual-mode t2i/i2i studio
│               ├── VideoStudio.jsx    # Dual-mode t2v/i2v studio
│               ├── LipSyncStudio.jsx  # Portrait/video + audio → talking video
│               ├── CinemaStudio.jsx   # Pro studio with camera controls
│               └── WorkflowStudio.jsx # Multi-step pipeline builder &amp;amp; playground
├── next.config.mjs             # transpilePackages: [&#39;studio&#39;]
├── tailwind.config.js
└── package.json                # workspaces: [&quot;packages/studio&quot;]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;packages/studio&lt;/code&gt; library is also consumed by the hosted version on &lt;a href=&quot;https://muapi.ai&quot;&gt;muapi.ai&lt;/a&gt; — model updates made in &lt;code&gt;packages/studio/src/models.js&lt;/code&gt; apply to both the self-hosted app and the hosted version automatically.&lt;/p&gt; 
&lt;h2&gt;🔌 API Integration&lt;/h2&gt; 
&lt;p&gt;The app communicates with &lt;a href=&quot;https://muapi.ai&quot;&gt;Muapi.ai&lt;/a&gt; using a two-step pattern:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Submit&lt;/strong&gt; — &lt;code&gt;POST /api/v1/{model-endpoint}&lt;/code&gt; with prompt and parameters&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Poll&lt;/strong&gt; — &lt;code&gt;GET /api/v1/predictions/{request_id}/result&lt;/code&gt; until status is &lt;code&gt;completed&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Authentication uses the &lt;code&gt;x-api-key&lt;/code&gt; header. During development, a Vite proxy handles CORS by routing &lt;code&gt;/api&lt;/code&gt; requests to &lt;code&gt;https://api.muapi.ai&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;File uploads use &lt;code&gt;POST /api/v1/upload_file&lt;/code&gt; (multipart/form-data) and return a hosted URL that is passed to image-conditioned models. For multi-image models the full &lt;code&gt;images_list&lt;/code&gt; array is forwarded to the API in one request.&lt;/p&gt; 
&lt;p&gt;Lip sync jobs use the same two-step pattern: a dedicated &lt;code&gt;processLipSync()&lt;/code&gt; method accepts &lt;code&gt;image_url&lt;/code&gt; or &lt;code&gt;video_url&lt;/code&gt; alongside &lt;code&gt;audio_url&lt;/code&gt;, dispatches to the model&#39;s endpoint, and polls until the output video URL is available.&lt;/p&gt; 
&lt;h2&gt;🎨 Supported Model Categories&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Category&lt;/th&gt; 
   &lt;th&gt;Count&lt;/th&gt; 
   &lt;th&gt;Examples&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Text-to-Image&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;50+&lt;/td&gt; 
   &lt;td&gt;Flux Dev, Nano Banana 2, Seedream 5.0, Ideogram v3, Midjourney v7, GPT-4o, SDXL&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Image-to-Image&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;55+&lt;/td&gt; 
   &lt;td&gt;Nano Banana 2 Edit (×14), Flux Kontext Pro, GPT-4o Edit, Seededit v3, Upscaler, Background Remover&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Text-to-Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;40+&lt;/td&gt; 
   &lt;td&gt;Kling v3, Sora 2, Veo 3, Wan 2.6, Seedance 2.0, Seedance 2.0 Extend, Seedance Pro, Hailuo 2.3, Runway Gen-3&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Image-to-Video&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;60+&lt;/td&gt; 
   &lt;td&gt;Kling v2.1 I2V, Veo3 I2V, Runway I2V, Seedance 2.0 I2V, Midjourney v7 I2V, Hunyuan I2V, Wan2.2 I2V&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Lip Sync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;9&lt;/td&gt; 
   &lt;td&gt;Infinite Talk I2V, Wan 2.2 Speech to Video, LTX 2.3 Lipsync, LTX 2 19B Lipsync, Sync, LatentSync, Creatify, Veed, Infinite Talk V2V&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;🛠️ Tech Stack&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Next.js 14&lt;/strong&gt; — App Router, server components, fast dev server&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;React 18&lt;/strong&gt; — Studio UI components&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tailwind CSS v3&lt;/strong&gt; — Utility-first styling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;npm workspaces&lt;/strong&gt; — Monorepo with shared &lt;code&gt;packages/studio&lt;/code&gt; library&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://Muapi.ai&quot;&gt;Muapi.ai&lt;/a&gt;&lt;/strong&gt; — AI model API gateway&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🤔 How is this different from other AI Video Plaforms?&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Open Generative AI&lt;/strong&gt; is a community-driven, open-source alternative that provides similar creative capabilities without the closed ecosystem:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Other providers&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Open Generative AI&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Subscription-based&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Free (open-source)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Content filters&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Yes — prompts blocked or altered&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;None&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Restrictions&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Platform guardrails enforced&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Full creative freedom&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Models&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Proprietary&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;200+ open &amp;amp; commercial models&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Multi-image input&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Limited&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Up to 14 images per request&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Lip sync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;No&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;9 models, image &amp;amp; video modes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Hosted version&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Subscription&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Free at &lt;a href=&quot;https://muapi.ai/open-generative-ai&quot;&gt;muapi.ai/open-generative-ai&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Self-hosting&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;No&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Yes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Customizable&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;No&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Fully hackable&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Data privacy&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Cloud-based&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Your data stays local&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;Source code&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Closed&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;MIT licensed&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;MIT&lt;/p&gt; 
&lt;h2&gt;🙏 Credits&lt;/h2&gt; 
&lt;p&gt;Built with &lt;a href=&quot;https://muapi.ai&quot;&gt;Muapi.ai&lt;/a&gt; — the unified API for AI image and video generation models.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;strong&gt;Deep Dive&lt;/strong&gt;: For more details on the &quot;AI Influencer&quot; engine, upcoming &quot;Popcorn&quot; storyboarding features, and the future of this project, read the &lt;a href=&quot;https://medium.com/@anilmatcha/&quot;&gt;full technical overview&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;em&gt;Looking for a free, open-source AI Video Platform? Open Generative AI is an open-source AI image and video generation studio — with no content filters that you can self-host, customize, and extend.&lt;/em&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/0af157b1addc70361224daff6e679f68226dd79f3bbeeeb40a3c8cc3dfa8098e/Anil-matcha/Open-Generative-AI" medium="image" />
      
    </item>
    
    <item>
      <title>decolua/9router</title>
      <link>https://github.com/decolua/9router</link>
      <description>&lt;p&gt;Unlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40+ providers. Auto-fallback, RTK -40% tokens, never hit limits.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/images/9router.png?1&quot; alt=&quot;9Router Dashboard&quot; width=&quot;800&quot; /&gt; 
 &lt;h1&gt;9Router - FREE AI Router &amp;amp; Token Saver&lt;/h1&gt; 
 &lt;p&gt;&lt;strong&gt;Never stop coding. Save 20-40% tokens with RTK + auto-fallback to FREE &amp;amp; cheap AI models.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Connect All AI Code Tools (Claude Code, Cursor, Antigravity, Copilot, Codex, Gemini, OpenCode, Cline, OpenClaw...) to 40+ AI Providers &amp;amp; 100+ Models.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/9router&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/v/9router.svg?sanitize=true&quot; alt=&quot;npm&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.npmjs.com/package/9router&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/dm/9router.svg?sanitize=true&quot; alt=&quot;Downloads&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hub.docker.com/r/decolua/9router&quot;&gt;&lt;img src=&quot;https://img.shields.io/docker/pulls/decolua/9router.svg?logo=docker&amp;amp;label=Docker%20pulls&quot; alt=&quot;Docker Pulls&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/decolua/9router/pkgs/container/9router&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/GHCR-decolua%2F9router-blue?logo=github&quot; alt=&quot;GHCR&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/decolua/9router/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/l/9router.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/22628&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/22628&quot; alt=&quot;decolua%2F9router | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/#-quick-start&quot;&gt;🚀 Quick Start&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/#-key-features&quot;&gt;💡 Features&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/#-setup-guide&quot;&gt;📖 Setup&lt;/a&gt; • &lt;a href=&quot;https://9router.com&quot;&gt;🌐 Website&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/i18n/README.vi.md&quot;&gt;🇻🇳 Tiếng Việt&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/i18n/README.zh-CN.md&quot;&gt;🇨🇳 中文&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/i18n/README.ja-JP.md&quot;&gt;🇯🇵 日本語&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤔 Why 9Router?&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Stop wasting money, tokens and hitting limits:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;❌ Subscription quota expires unused every month&lt;/li&gt; 
 &lt;li&gt;❌ Rate limits stop you mid-coding&lt;/li&gt; 
 &lt;li&gt;❌ Tool outputs (git diff, grep, ls...) burn tokens fast&lt;/li&gt; 
 &lt;li&gt;❌ Expensive APIs ($20-50/month per provider)&lt;/li&gt; 
 &lt;li&gt;❌ Manual switching between providers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;9Router solves this:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;✅ &lt;strong&gt;RTK Token Saver&lt;/strong&gt; - Auto-compress tool_result content, save 20-40% tokens per request&lt;/li&gt; 
 &lt;li&gt;✅ &lt;strong&gt;Maximize subscriptions&lt;/strong&gt; - Track quota, use every bit before reset&lt;/li&gt; 
 &lt;li&gt;✅ &lt;strong&gt;Auto fallback&lt;/strong&gt; - Subscription → Cheap → Free, zero downtime&lt;/li&gt; 
 &lt;li&gt;✅ &lt;strong&gt;Multi-account&lt;/strong&gt; - Round-robin between accounts per provider&lt;/li&gt; 
 &lt;li&gt;✅ &lt;strong&gt;Universal&lt;/strong&gt; - Works with Claude Code, Codex, Cursor, Cline, any CLI tool&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔄 How It Works&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;┌─────────────┐
│  Your CLI   │  (Claude Code, Codex, OpenClaw, Cursor, Cline...)
│   Tool      │
└──────┬──────┘
       │ http://localhost:20128/v1
       ↓
┌─────────────────────────────────────────────┐
│           9Router (Smart Router)            │
│  • RTK Token Saver (cut tool_result tokens) │
│  • Format translation (OpenAI ↔ Claude)     │
│  • Quota tracking                           │
│  • Auto token refresh                       │
└──────┬──────────────────────────────────────┘
       │
       ├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, GitHub Copilot
       │   ↓ quota exhausted
       ├─→ [Tier 2: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
       │   ↓ budget limit
       └─→ [Tier 3: FREE] Kiro, OpenCode Free, Vertex ($300 credits)

Result: Never stop coding, minimal cost + 20-40% token savings via RTK
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⚡ Quick Start&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;1. Install globally:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install -g 9router
9router
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;🎉 Dashboard opens at &lt;code&gt;http://localhost:20128&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2. Connect a FREE provider (no signup needed):&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Dashboard → Providers → Connect &lt;strong&gt;Kiro AI&lt;/strong&gt; (free Claude unlimited) or &lt;strong&gt;OpenCode Free&lt;/strong&gt; (no auth) → Done!&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;3. Use in your CLI tool:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Claude Code/Codex/OpenClaw/Cursor/Cline Settings:
  Endpoint: http://localhost:20128/v1
  API Key: [copy from dashboard]
  Model: kr/claude-sonnet-4.5
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;That&#39;s it!&lt;/strong&gt; Start coding with FREE AI models.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Alternative: run from source (this repository):&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;This repository package is private (&lt;code&gt;9router-app&lt;/code&gt;), so source/Docker execution is the expected local development path.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp .env.example .env
npm install
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Production mode:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm run build
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Default URLs:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Dashboard: &lt;code&gt;http://localhost:20128/dashboard&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;OpenAI-compatible API: &lt;code&gt;http://localhost:20128/v1&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Video Guides&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;table&gt; 
  &lt;tbody&gt;
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;320&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=raEyZPg5xE0&quot;&gt; &lt;img src=&quot;https://img.youtube.com/vi/raEyZPg5xE0/maxresdefault.jpg&quot; alt=&quot;9Router Setup Tutorial&quot; width=&quot;300&quot; /&gt; &lt;/a&gt;&lt;br /&gt; &lt;b&gt;🇺🇸 English&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;9Router + Claude Code FREE Setup&lt;br /&gt;by &lt;a href=&quot;https://www.youtube.com/@BuildAIWithHamid&quot;&gt;Build AI With Hamid&lt;/a&gt;&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;320&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=X69n5Lm06Yw&quot;&gt; &lt;img src=&quot;https://img.youtube.com/vi/X69n5Lm06Yw/maxresdefault.jpg&quot; alt=&quot;Tiết kiệm chi phí LLM với 9Router&quot; width=&quot;300&quot; /&gt; &lt;/a&gt;&lt;br /&gt; &lt;b&gt;🇻🇳 Tiếng Việt&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;Tiết kiệm chi phí LLM cho OpenClaw với 9Router&lt;br /&gt;by &lt;a href=&quot;https://www.youtube.com/c/M%C3%ACAIblog&quot;&gt;Mì AI&lt;/a&gt;&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;320&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=o3qYCyjrFYg&quot;&gt; &lt;img src=&quot;https://img.youtube.com/vi/o3qYCyjrFYg/maxresdefault.jpg&quot; alt=&quot;Claude Code FREE Forever&quot; width=&quot;300&quot; /&gt; &lt;/a&gt;&lt;br /&gt; &lt;b&gt;🇺🇸 English&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;Claude Code FREE Forever — Unlimited Models&lt;br /&gt;by &lt;a href=&quot;https://www.youtube.com/@BuildAIWithHamid&quot;&gt;Build AI With Hamid&lt;/a&gt;&lt;/sub&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;320&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=Ttpc26m39Dw&quot;&gt; &lt;img src=&quot;https://img.youtube.com/vi/Ttpc26m39Dw/maxresdefault.jpg&quot; alt=&quot;Claude CLI Free Setup&quot; width=&quot;300&quot; /&gt; &lt;/a&gt;&lt;br /&gt; &lt;b&gt;🇺🇸 English&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;Claude CLI Free Setup with 9Router 🚀&lt;br /&gt;by &lt;a href=&quot;https://www.youtube.com/@CodeVerseSoban&quot;&gt;CodeVerse Soban&lt;/a&gt;&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;320&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=G-5A_D5Pm6Y&quot;&gt; &lt;img src=&quot;https://img.youtube.com/vi/G-5A_D5Pm6Y/maxresdefault.jpg&quot; alt=&quot;Cài đặt OpenClaw Free A-Z&quot; width=&quot;300&quot; /&gt; &lt;/a&gt;&lt;br /&gt; &lt;b&gt;🇻🇳 Tiếng Việt&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;Cài Đặt OpenClaw Free Từ A-Z + 9Router&lt;br /&gt;by &lt;a href=&quot;https://www.youtube.com/@maigia&quot;&gt;Mai Gia&lt;/a&gt;&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;320&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=JXmg8_gccgE&quot;&gt; &lt;img src=&quot;https://img.youtube.com/vi/JXmg8_gccgE/maxresdefault.jpg&quot; alt=&quot;FREE OpenClaw with Claude Opus&quot; width=&quot;300&quot; /&gt; &lt;/a&gt;&lt;br /&gt; &lt;b&gt;🇺🇸 English&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;FREE OpenClaw + Claude Opus 4.6&lt;br /&gt;by &lt;a href=&quot;https://www.youtube.com/@BuildAIWithHamid&quot;&gt;Build AI With Hamid&lt;/a&gt;&lt;/sub&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt;
 &lt;/table&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;🎬 &lt;strong&gt;Made a video about 9Router?&lt;/strong&gt; Submit a &lt;a href=&quot;https://github.com/decolua/9router/pulls&quot;&gt;Pull Request&lt;/a&gt; adding your video to this section — we&#39;ll merge it!&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🛠️ Supported CLI Tools&lt;/h2&gt; 
&lt;p&gt;9Router works seamlessly with all major AI coding tools:&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;table&gt; 
  &lt;tbody&gt;
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/claude.png&quot; width=&quot;60&quot; alt=&quot;Claude Code&quot; /&gt;&lt;br /&gt; &lt;b&gt;Claude-Code&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/openclaw.png&quot; width=&quot;60&quot; alt=&quot;OpenClaw&quot; /&gt;&lt;br /&gt; &lt;b&gt;OpenClaw&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/codex.png&quot; width=&quot;60&quot; alt=&quot;Codex&quot; /&gt;&lt;br /&gt; &lt;b&gt;Codex&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/opencode.png&quot; width=&quot;60&quot; alt=&quot;OpenCode&quot; /&gt;&lt;br /&gt; &lt;b&gt;OpenCode&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/cursor.png&quot; width=&quot;60&quot; alt=&quot;Cursor&quot; /&gt;&lt;br /&gt; &lt;b&gt;Cursor&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/antigravity.png&quot; width=&quot;60&quot; alt=&quot;Antigravity&quot; /&gt;&lt;br /&gt; &lt;b&gt;Antigravity&lt;/b&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/cline.png&quot; width=&quot;60&quot; alt=&quot;Cline&quot; /&gt;&lt;br /&gt; &lt;b&gt;Cline&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/continue.png&quot; width=&quot;60&quot; alt=&quot;Continue&quot; /&gt;&lt;br /&gt; &lt;b&gt;Continue&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/droid.png&quot; width=&quot;60&quot; alt=&quot;Droid&quot; /&gt;&lt;br /&gt; &lt;b&gt;Droid&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/roo.png&quot; width=&quot;60&quot; alt=&quot;Roo&quot; /&gt;&lt;br /&gt; &lt;b&gt;Roo&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/copilot.png&quot; width=&quot;60&quot; alt=&quot;Copilot&quot; /&gt;&lt;br /&gt; &lt;b&gt;Copilot&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/kilocode.png&quot; width=&quot;60&quot; alt=&quot;Kilo Code&quot; /&gt;&lt;br /&gt; &lt;b&gt;Kilo Code&lt;/b&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt;
 &lt;/table&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🌐 Supported Providers&lt;/h2&gt; 
&lt;h3&gt;🔐 OAuth Providers&lt;/h3&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;table&gt; 
  &lt;tbody&gt;
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/claude.png&quot; width=&quot;60&quot; alt=&quot;Claude Code&quot; /&gt;&lt;br /&gt; &lt;b&gt;Claude-Code&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/antigravity.png&quot; width=&quot;60&quot; alt=&quot;Antigravity&quot; /&gt;&lt;br /&gt; &lt;b&gt;Antigravity&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/codex.png&quot; width=&quot;60&quot; alt=&quot;Codex&quot; /&gt;&lt;br /&gt; &lt;b&gt;Codex&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/github.png&quot; width=&quot;60&quot; alt=&quot;GitHub&quot; /&gt;&lt;br /&gt; &lt;b&gt;GitHub&lt;/b&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;120&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/cursor.png&quot; width=&quot;60&quot; alt=&quot;Cursor&quot; /&gt;&lt;br /&gt; &lt;b&gt;Cursor&lt;/b&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt;
 &lt;/table&gt; 
&lt;/div&gt; 
&lt;h3&gt;🆓 Free Providers&lt;/h3&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;table&gt; 
  &lt;tbody&gt;
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;150&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/kiro.png&quot; width=&quot;70&quot; alt=&quot;Kiro&quot; /&gt;&lt;br /&gt; &lt;b&gt;Kiro AI&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;Claude 4.5 + GLM-5 + MiniMax&lt;br /&gt;Unlimited FREE&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;150&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/opencode.png&quot; width=&quot;70&quot; alt=&quot;OpenCode Free&quot; /&gt;&lt;br /&gt; &lt;b&gt;OpenCode Free&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;No auth • Auto-fetch models&lt;br /&gt;Unlimited FREE&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;150&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/gemini.png&quot; width=&quot;70&quot; alt=&quot;Vertex AI&quot; /&gt;&lt;br /&gt; &lt;b&gt;Vertex AI&lt;/b&gt;&lt;br /&gt; &lt;sub&gt;Gemini 3 Pro + GLM-5 + DeepSeek&lt;br /&gt;$300 credits free&lt;/sub&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt;
 &lt;/table&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; iFlow, Qwen and Gemini CLI free tiers were discontinued in 2026. Use Kiro / OpenCode Free / Vertex instead.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🔑 API Key Providers (40+)&lt;/h3&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;table&gt; 
  &lt;tbody&gt;
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/openrouter.png&quot; width=&quot;50&quot; alt=&quot;OpenRouter&quot; /&gt;&lt;br /&gt; &lt;sub&gt;OpenRouter&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/glm.png&quot; width=&quot;50&quot; alt=&quot;GLM&quot; /&gt;&lt;br /&gt; &lt;sub&gt;GLM&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/kimi.png&quot; width=&quot;50&quot; alt=&quot;Kimi&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Kimi&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/minimax.png&quot; width=&quot;50&quot; alt=&quot;MiniMax&quot; /&gt;&lt;br /&gt; &lt;sub&gt;MiniMax&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/openai.png&quot; width=&quot;50&quot; alt=&quot;OpenAI&quot; /&gt;&lt;br /&gt; &lt;sub&gt;OpenAI&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/anthropic.png&quot; width=&quot;50&quot; alt=&quot;Anthropic&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Anthropic&lt;/sub&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/gemini.png&quot; width=&quot;50&quot; alt=&quot;Gemini&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Gemini&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/deepseek.png&quot; width=&quot;50&quot; alt=&quot;DeepSeek&quot; /&gt;&lt;br /&gt; &lt;sub&gt;DeepSeek&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/groq.png&quot; width=&quot;50&quot; alt=&quot;Groq&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Groq&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/xai.png&quot; width=&quot;50&quot; alt=&quot;xAI&quot; /&gt;&lt;br /&gt; &lt;sub&gt;xAI&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/mistral.png&quot; width=&quot;50&quot; alt=&quot;Mistral&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Mistral&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/perplexity.png&quot; width=&quot;50&quot; alt=&quot;Perplexity&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Perplexity&lt;/sub&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/together.png&quot; width=&quot;50&quot; alt=&quot;Together&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Together AI&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/fireworks.png&quot; width=&quot;50&quot; alt=&quot;Fireworks&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Fireworks&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/cerebras.png&quot; width=&quot;50&quot; alt=&quot;Cerebras&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Cerebras&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/cohere.png&quot; width=&quot;50&quot; alt=&quot;Cohere&quot; /&gt;&lt;br /&gt; &lt;sub&gt;Cohere&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/nvidia.png&quot; width=&quot;50&quot; alt=&quot;NVIDIA&quot; /&gt;&lt;br /&gt; &lt;sub&gt;NVIDIA&lt;/sub&gt; &lt;/td&gt; 
    &lt;td align=&quot;center&quot; width=&quot;100&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/decolua/9router/master/public/providers/siliconflow.png&quot; width=&quot;50&quot; alt=&quot;SiliconFlow&quot; /&gt;&lt;br /&gt; &lt;sub&gt;SiliconFlow&lt;/sub&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt;
 &lt;/table&gt; 
 &lt;p&gt;&lt;i&gt;...and 20+ more providers including Nebius, Chutes, Hyperbolic, and custom OpenAI/Anthropic compatible endpoints&lt;/i&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;💡 Key Features&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;What It Does&lt;/th&gt; 
   &lt;th&gt;Why It Matters&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🚀 &lt;strong&gt;RTK Token Saver&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rtk-ai/rtk&quot;&gt;RTK&lt;/a&gt; ⭐40K)&lt;/td&gt; 
   &lt;td&gt;Compress tool outputs (&lt;code&gt;git diff&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;tree&lt;/code&gt;...) before sending to LLM&lt;/td&gt; 
   &lt;td&gt;Save &lt;strong&gt;20-40% input tokens&lt;/strong&gt; per request&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🪨 &lt;strong&gt;Caveman Mode&lt;/strong&gt; (&lt;a href=&quot;https://github.com/JuliusBrussee/caveman&quot;&gt;Caveman&lt;/a&gt; ⭐52K)&lt;/td&gt; 
   &lt;td&gt;Inject caveman-speak prompt → LLM replies terse, technical substance preserved&lt;/td&gt; 
   &lt;td&gt;Save &lt;strong&gt;up to 65% output tokens&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎯 &lt;strong&gt;Smart 3-Tier Fallback&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Auto-route: Subscription → Cheap → Free&lt;/td&gt; 
   &lt;td&gt;Never stop coding, zero downtime&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📊 &lt;strong&gt;Real-Time Quota Tracking&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Live token count + reset countdown&lt;/td&gt; 
   &lt;td&gt;Maximize subscription value&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔄 &lt;strong&gt;Format Translation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro ↔ Vertex&lt;/td&gt; 
   &lt;td&gt;Works with any CLI tool&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;👥 &lt;strong&gt;Multi-Account Support&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Multiple accounts per provider&lt;/td&gt; 
   &lt;td&gt;Load balancing + redundancy&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🔄 &lt;strong&gt;Auto Token Refresh&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;OAuth tokens refresh automatically&lt;/td&gt; 
   &lt;td&gt;No manual re-login needed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🎨 &lt;strong&gt;Custom Combos&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Create unlimited model combinations&lt;/td&gt; 
   &lt;td&gt;Tailor fallback to your needs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📝 &lt;strong&gt;Request Logging&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Debug mode with full request/response logs&lt;/td&gt; 
   &lt;td&gt;Troubleshoot issues easily&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;💾 &lt;strong&gt;Cloud Sync&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sync config across devices&lt;/td&gt; 
   &lt;td&gt;Same setup everywhere&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;📊 &lt;strong&gt;Usage Analytics&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Track tokens, cost, trends over time&lt;/td&gt; 
   &lt;td&gt;Optimize spending&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;🌐 &lt;strong&gt;Deploy Anywhere&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Localhost, VPS, Docker, Cloudflare Workers&lt;/td&gt; 
   &lt;td&gt;Flexible deployment options&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📖 Feature Details&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;🚀 RTK Token Saver&lt;/h3&gt; 
 &lt;p&gt;Tool outputs (&lt;code&gt;git diff&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;tree&lt;/code&gt;, log dumps...) often eat 30-50% of your prompt budget. RTK detects them and applies smart, lossless compression &lt;strong&gt;before&lt;/strong&gt; the request hits the LLM:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Filters:&lt;/strong&gt; &lt;code&gt;git-diff&lt;/code&gt;, &lt;code&gt;git-status&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;find&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;tree&lt;/code&gt;, &lt;code&gt;dedup-log&lt;/code&gt;, &lt;code&gt;smart-truncate&lt;/code&gt;, &lt;code&gt;read-numbered&lt;/code&gt;, &lt;code&gt;search-list&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Auto-detect:&lt;/strong&gt; No config needed — RTK peeks the first 1KB of each &lt;code&gt;tool_result&lt;/code&gt; and picks the right filter.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Safe by design:&lt;/strong&gt; If a filter fails, throws, or makes output bigger, RTK silently keeps the original text. Errors never break your request.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Universal:&lt;/strong&gt; Works across all formats (OpenAI, Claude, Gemini, Cursor, Kiro, OpenAI Responses) because it runs &lt;strong&gt;before&lt;/strong&gt; any format translation.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Default ON:&lt;/strong&gt; Toggle anytime in Dashboard → Endpoint settings.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code&gt;Without RTK: 47K tokens sent to LLM
With RTK:    28K tokens sent to LLM   (40% saved · same context · same answer)
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;🎯 Smart 3-Tier Fallback&lt;/h3&gt; 
 &lt;p&gt;Create combos with automatic fallback:&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;Combo: &quot;my-coding-stack&quot;
  1. cc/claude-opus-4-6        (your subscription)
  2. glm/glm-4.7               (cheap backup, $0.6/1M)
  3. if/kimi-k2-thinking       (free fallback)

→ Auto switches when quota runs out or errors occur
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;📊 Real-Time Quota Tracking&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Token consumption per provider&lt;/li&gt; 
  &lt;li&gt;Reset countdown (5-hour, daily, weekly)&lt;/li&gt; 
  &lt;li&gt;Cost estimation for paid tiers&lt;/li&gt; 
  &lt;li&gt;Monthly spending reports&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;🔄 Format Translation&lt;/h3&gt; 
 &lt;p&gt;Seamless translation between formats:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;OpenAI&lt;/strong&gt; ↔ &lt;strong&gt;Claude&lt;/strong&gt; ↔ &lt;strong&gt;Gemini&lt;/strong&gt; ↔ &lt;strong&gt;Cursor&lt;/strong&gt; ↔ &lt;strong&gt;Kiro&lt;/strong&gt; ↔ &lt;strong&gt;Vertex&lt;/strong&gt; ↔ &lt;strong&gt;Antigravity&lt;/strong&gt; ↔ &lt;strong&gt;Ollama&lt;/strong&gt; ↔ &lt;strong&gt;OpenAI Responses&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;Your CLI tool sends OpenAI format → 9Router translates → Provider receives native format&lt;/li&gt; 
  &lt;li&gt;Works with any tool that supports custom OpenAI endpoints&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;👥 Multi-Account Support&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Add multiple accounts per provider&lt;/li&gt; 
  &lt;li&gt;Auto round-robin or priority-based routing&lt;/li&gt; 
  &lt;li&gt;Fallback to next account when one hits quota&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;🔄 Auto Token Refresh&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;OAuth tokens automatically refresh before expiration&lt;/li&gt; 
  &lt;li&gt;No manual re-authentication needed&lt;/li&gt; 
  &lt;li&gt;Seamless experience across all providers&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;🎨 Custom Combos&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Create unlimited model combinations&lt;/li&gt; 
  &lt;li&gt;Mix subscription, cheap, and free tiers&lt;/li&gt; 
  &lt;li&gt;Name your combos for easy access&lt;/li&gt; 
  &lt;li&gt;Share combos across devices with Cloud Sync&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;📝 Request Logging&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Enable debug mode for full request/response logs&lt;/li&gt; 
  &lt;li&gt;Track API calls, headers, and payloads&lt;/li&gt; 
  &lt;li&gt;Troubleshoot integration issues&lt;/li&gt; 
  &lt;li&gt;Export logs for analysis&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;💾 Cloud Sync&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Sync providers, combos, and settings across devices&lt;/li&gt; 
  &lt;li&gt;Automatic background sync&lt;/li&gt; 
  &lt;li&gt;Secure encrypted storage&lt;/li&gt; 
  &lt;li&gt;Access your setup from anywhere&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h4&gt;Cloud Runtime Notes&lt;/h4&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Prefer server-side cloud variables in production: 
   &lt;ul&gt; 
    &lt;li&gt;&lt;code&gt;BASE_URL&lt;/code&gt; (internal callback URL used by sync scheduler)&lt;/li&gt; 
    &lt;li&gt;&lt;code&gt;CLOUD_URL&lt;/code&gt; (cloud sync endpoint base)&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;NEXT_PUBLIC_BASE_URL&lt;/code&gt; and &lt;code&gt;NEXT_PUBLIC_CLOUD_URL&lt;/code&gt; are still supported for compatibility/UI, but server runtime now prioritizes &lt;code&gt;BASE_URL&lt;/code&gt;/&lt;code&gt;CLOUD_URL&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;Cloud sync requests now use timeout + fail-fast behavior to avoid UI hanging when cloud DNS/network is unavailable.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;📊 Usage Analytics&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Track token usage per provider and model&lt;/li&gt; 
  &lt;li&gt;Cost estimation and spending trends&lt;/li&gt; 
  &lt;li&gt;Monthly reports and insights&lt;/li&gt; 
  &lt;li&gt;Optimize your AI spending&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;💡 IMPORTANT - Understanding Dashboard Costs:&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;The &quot;cost&quot; displayed in Usage Analytics is &lt;strong&gt;for tracking and comparison purposes only&lt;/strong&gt;. 9Router itself &lt;strong&gt;never charges&lt;/strong&gt; you anything. You only pay providers directly (if using paid services).&lt;/p&gt; 
  &lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; If your dashboard shows &quot;$290 total cost&quot; while using iFlow models, this represents what you would have paid using paid APIs directly. Your actual cost = &lt;strong&gt;$0&lt;/strong&gt; (iFlow is free unlimited).&lt;/p&gt; 
  &lt;p&gt;Think of it as a &quot;savings tracker&quot; showing how much you&#39;re saving by using free models or routing through 9Router!&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;h3&gt;🌐 Deploy Anywhere&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;💻 &lt;strong&gt;Localhost&lt;/strong&gt; - Default, works offline&lt;/li&gt; 
  &lt;li&gt;☁️ &lt;strong&gt;VPS/Cloud&lt;/strong&gt; - Share across devices&lt;/li&gt; 
  &lt;li&gt;🐳 &lt;strong&gt;Docker&lt;/strong&gt; - One-command deployment&lt;/li&gt; 
  &lt;li&gt;🚀 &lt;strong&gt;Cloudflare Workers&lt;/strong&gt; - Global edge network&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;💰 Pricing at a Glance&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Tier&lt;/th&gt; 
   &lt;th&gt;Provider&lt;/th&gt; 
   &lt;th&gt;Cost&lt;/th&gt; 
   &lt;th&gt;Quota Reset&lt;/th&gt; 
   &lt;th&gt;Best For&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🚀 TOKEN SAVER&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;RTK (built-in)&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;FREE&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Always on&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Save 20-40% tokens on EVERY request&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;💳 SUBSCRIPTION&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Claude Code (Pro/Max)&lt;/td&gt; 
   &lt;td&gt;$20-200/mo&lt;/td&gt; 
   &lt;td&gt;5h + weekly&lt;/td&gt; 
   &lt;td&gt;Already subscribed&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Codex (Plus/Pro)&lt;/td&gt; 
   &lt;td&gt;$20-200/mo&lt;/td&gt; 
   &lt;td&gt;5h + weekly&lt;/td&gt; 
   &lt;td&gt;OpenAI users&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;GitHub Copilot&lt;/td&gt; 
   &lt;td&gt;$10-19/mo&lt;/td&gt; 
   &lt;td&gt;Monthly&lt;/td&gt; 
   &lt;td&gt;GitHub users&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Cursor IDE&lt;/td&gt; 
   &lt;td&gt;$20/mo&lt;/td&gt; 
   &lt;td&gt;Monthly&lt;/td&gt; 
   &lt;td&gt;Cursor users&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;💰 CHEAP&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;GLM-5.1 / GLM-4.7&lt;/td&gt; 
   &lt;td&gt;$0.6/1M&lt;/td&gt; 
   &lt;td&gt;Daily 10AM&lt;/td&gt; 
   &lt;td&gt;Budget backup&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;MiniMax M2.7&lt;/td&gt; 
   &lt;td&gt;$0.2/1M&lt;/td&gt; 
   &lt;td&gt;5-hour rolling&lt;/td&gt; 
   &lt;td&gt;Cheapest option&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Kimi K2.5&lt;/td&gt; 
   &lt;td&gt;$9/mo flat&lt;/td&gt; 
   &lt;td&gt;10M tokens/mo&lt;/td&gt; 
   &lt;td&gt;Predictable cost&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🆓 FREE&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Kiro AI&lt;/td&gt; 
   &lt;td&gt;$0&lt;/td&gt; 
   &lt;td&gt;Unlimited&lt;/td&gt; 
   &lt;td&gt;Claude 4.5 + GLM-5 + MiniMax free&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;OpenCode Free&lt;/td&gt; 
   &lt;td&gt;$0&lt;/td&gt; 
   &lt;td&gt;Unlimited&lt;/td&gt; 
   &lt;td&gt;No auth, auto-fetch models&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;Vertex AI&lt;/td&gt; 
   &lt;td&gt;$300 credits&lt;/td&gt; 
   &lt;td&gt;New GCP accounts&lt;/td&gt; 
   &lt;td&gt;Gemini 3 Pro + DeepSeek + GLM-5&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;💡 Pro Tip:&lt;/strong&gt; RTK + Kiro AI + OpenCode Free combo = &lt;strong&gt;$0 cost + 20-40% token savings&lt;/strong&gt;!&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;📊 Understanding 9Router Costs &amp;amp; Billing&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;9Router Billing Reality:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;✅ &lt;strong&gt;9Router software = FREE forever&lt;/strong&gt; (open source, never charges)&lt;br /&gt; ✅ &lt;strong&gt;Dashboard &quot;costs&quot; = Display/tracking only&lt;/strong&gt; (not actual bills)&lt;br /&gt; ✅ &lt;strong&gt;You pay providers directly&lt;/strong&gt; (subscriptions or API fees)&lt;br /&gt; ✅ &lt;strong&gt;FREE providers stay FREE&lt;/strong&gt; (iFlow, Kiro, Qwen = $0 unlimited)&lt;br /&gt; ❌ &lt;strong&gt;9Router never sends invoices&lt;/strong&gt; or charges your card&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;How Cost Display Works:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The dashboard shows &lt;strong&gt;estimated costs&lt;/strong&gt; as if you were using paid APIs directly. This is &lt;strong&gt;not billing&lt;/strong&gt; - it&#39;s a comparison tool to show your savings.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example Scenario:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Dashboard Display:
• Total Requests: 1,662
• Total Tokens: 47M
• Display Cost: $290

Reality Check:
• Provider: iFlow (FREE unlimited)
• Actual Payment: $0.00
• What $290 Means: Amount you SAVED by using free models!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Payment Rules:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Subscription providers&lt;/strong&gt; (Claude Code, Codex): Pay them directly via their websites&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cheap providers&lt;/strong&gt; (GLM, MiniMax): Pay them directly, 9Router just routes&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;FREE providers&lt;/strong&gt; (iFlow, Kiro, Qwen): Genuinely free forever, no hidden charges&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;9Router&lt;/strong&gt;: Never charges anything, ever&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎯 Use Cases&lt;/h2&gt; 
&lt;h3&gt;Case 1: &quot;I have Claude Pro subscription&quot;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Quota expires unused, rate limits during heavy coding&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Combo: &quot;maximize-claude&quot;
  1. cc/claude-opus-4-7        (use subscription fully)
  2. glm/glm-5.1               (cheap backup when quota out)
  3. kr/claude-sonnet-4.5      (free emergency fallback)

Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
vs. $20 + hitting limits = frustration
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Case 2: &quot;I want zero cost&quot;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Can&#39;t afford subscriptions, need reliable AI coding&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Combo: &quot;free-forever&quot;
  1. kr/claude-sonnet-4.5      (Claude 4.5 free unlimited)
  2. kr/glm-5                  (GLM-5 free via Kiro)
  3. oc/&amp;lt;auto&amp;gt;                 (OpenCode Free, no auth)

Monthly cost: $0
Quality: Production-ready models + RTK saves 20-40% tokens
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Case 3: &quot;I need 24/7 coding, no interruptions&quot;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Deadlines, can&#39;t afford downtime&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Combo: &quot;always-on&quot;
  1. cc/claude-opus-4-7        (best quality)
  2. cx/gpt-5.5                (second subscription)
  3. glm/glm-5.1               (cheap, resets daily)
  4. minimax/MiniMax-M2.7      (cheapest, 5h reset)
  5. kr/claude-sonnet-4.5      (free unlimited)

Result: 5 layers of fallback = zero downtime
Monthly cost: $20-200 (subscriptions) + $10-20 (backup)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Case 4: &quot;I want FREE AI in OpenClaw&quot;&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Need AI assistant in messaging apps (WhatsApp, Telegram, Slack...), completely free&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Combo: &quot;openclaw-free&quot;
  1. kr/claude-sonnet-4.5      (Claude 4.5 free)
  2. kr/glm-5                  (GLM-5 free)
  3. kr/MiniMax-M2.5           (MiniMax free)

Monthly cost: $0
Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;❓ Frequently Asked Questions&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📊 Why does my dashboard show high costs?&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;The dashboard tracks your token usage and displays &lt;strong&gt;estimated costs&lt;/strong&gt; as if you were using paid APIs directly. This is &lt;strong&gt;not actual billing&lt;/strong&gt; - it&#39;s a reference to show how much you&#39;re saving by using free models or existing subscriptions through 9Router.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Dashboard shows:&lt;/strong&gt; &quot;$290 total cost&quot;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Reality:&lt;/strong&gt; You&#39;re using iFlow (FREE unlimited)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Your actual cost:&lt;/strong&gt; &lt;strong&gt;$0.00&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;What $290 means:&lt;/strong&gt; Amount you &lt;strong&gt;saved&lt;/strong&gt; by using free models instead of paid APIs!&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;The cost display is a &quot;savings tracker&quot; to help you understand your usage patterns and optimization opportunities.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;💳 Will I be charged by 9Router?&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;No.&lt;/strong&gt; 9Router is free, open-source software that runs on your own computer. It never charges you anything.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;You only pay:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;✅ &lt;strong&gt;Subscription providers&lt;/strong&gt; (Claude Code $20/mo, Codex $20-200/mo) → Pay them directly on their websites&lt;/li&gt; 
  &lt;li&gt;✅ &lt;strong&gt;Cheap providers&lt;/strong&gt; (GLM, MiniMax) → Pay them directly, 9Router just routes your requests&lt;/li&gt; 
  &lt;li&gt;❌ &lt;strong&gt;9Router itself&lt;/strong&gt; → &lt;strong&gt;Never charges anything, ever&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;9Router is a local proxy/router. It doesn&#39;t have your credit card, can&#39;t send invoices, and has no billing system. It&#39;s completely free software.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🆓 Are FREE providers really unlimited?&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;Yes!&lt;/strong&gt; The current FREE providers (Kiro, OpenCode Free, Vertex) are genuinely free with &lt;strong&gt;no hidden charges&lt;/strong&gt;.&lt;/p&gt; 
 &lt;p&gt;These are free services offered by those respective companies:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Kiro AI&lt;/strong&gt;: Free unlimited Claude 4.5 + GLM-5 + MiniMax via AWS Builder ID / Google / GitHub OAuth&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;OpenCode Free&lt;/strong&gt;: No-auth passthrough proxy, models auto-fetched from &lt;code&gt;opencode.ai/zen/v1/models&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Vertex AI&lt;/strong&gt;: $300 free credits for new Google Cloud accounts (90 days)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;9Router just routes your requests to them - there&#39;s no &quot;catch&quot; or future billing. They&#39;re truly free services, and 9Router makes them easy to use with fallback support.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Discontinued free tiers (no longer recommended):&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;❌ &lt;strong&gt;iFlow&lt;/strong&gt;: Was free unlimited, now changed to paid (2026)&lt;/li&gt; 
  &lt;li&gt;❌ &lt;strong&gt;Qwen Code&lt;/strong&gt;: Free OAuth tier discontinued by Alibaba on 2026-04-15&lt;/li&gt; 
  &lt;li&gt;❌ &lt;strong&gt;Gemini CLI&lt;/strong&gt;: Still works, but using it with non-CLI tools (Claude, Codex, Cursor...) may result in account bans — only use if you stick to Gemini CLI itself&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;💰 How do I minimize my actual AI costs?&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;Free-First Strategy:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Start with 100% free combo:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;1. gc/gemini-3-flash (180K/month free from Google)
2. if/kimi-k2-thinking (unlimited free from iFlow)
3. qw/qwen3-coder-plus (unlimited free from Qwen)
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Cost: $0/month&lt;/strong&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Add cheap backup&lt;/strong&gt; only if you need it:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;4. glm/glm-4.7 ($0.6/1M tokens)
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Additional cost: Only pay for what you actually use&lt;/strong&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;strong&gt;Use subscription providers last:&lt;/strong&gt;&lt;/p&gt; 
   &lt;ul&gt; 
    &lt;li&gt;Only if you already have them&lt;/li&gt; 
    &lt;li&gt;9Router helps maximize their value through quota tracking&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Most users can operate at $0/month using only free tiers!&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;📈 What if my usage suddenly spikes?&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;9Router&#39;s smart fallback prevents surprise charges:&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Scenario:&lt;/strong&gt; You&#39;re on a coding sprint and blow through your quotas&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Without 9Router:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;❌ Hit rate limit → Work stops → Frustration&lt;/li&gt; 
  &lt;li&gt;❌ Or: Accidentally rack up huge API bills&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;With 9Router:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;✅ Subscription hits limit → Auto-fallback to cheap tier&lt;/li&gt; 
  &lt;li&gt;✅ Cheap tier gets expensive → Auto-fallback to free tier&lt;/li&gt; 
  &lt;li&gt;✅ Never stop coding → Predictable costs&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;You&#39;re in control:&lt;/strong&gt; Set spending limits per provider in dashboard, and 9Router respects them.&lt;/p&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📖 Setup Guide&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🔐 Subscription Providers (Maximize Value)&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;Claude Code (Pro/Max)&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Providers → Connect Claude Code
→ OAuth login → Auto token refresh
→ 5-hour + weekly quota tracking

Models:
  cc/claude-opus-4-7
  cc/claude-opus-4-6
  cc/claude-sonnet-4-6
  cc/claude-haiku-4-5-20251001
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Use Opus for complex tasks, Sonnet for speed. 9Router tracks quota per model!&lt;/p&gt; 
 &lt;h3&gt;OpenAI Codex (Plus/Pro)&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Providers → Connect Codex
→ OAuth login (port 1455)
→ 5-hour + weekly reset

Models:
  cx/gpt-5.5
  cx/gpt-5.4
  cx/gpt-5.3-codex
  cx/gpt-5.2-codex
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;GitHub Copilot&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Providers → Connect GitHub
→ OAuth via GitHub
→ Monthly reset (1st of month)

Models:
  gh/gpt-5.4
  gh/claude-opus-4.7
  gh/claude-sonnet-4.6
  gh/gemini-3.1-pro-preview
  gh/grok-code-fast-1
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Cursor IDE&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Providers → Connect Cursor
→ OAuth login
→ Monthly subscription

Models:
  cu/claude-4.6-opus-max
  cu/claude-4.5-sonnet-thinking
  cu/gpt-5.3-codex
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;💰 Cheap Providers (Backup)&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;GLM-5.1 / GLM-4.7 (Daily reset, $0.6/1M)&lt;/h3&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Sign up: &lt;a href=&quot;https://open.bigmodel.cn/&quot;&gt;Zhipu AI&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;Get API key from Coding Plan&lt;/li&gt; 
  &lt;li&gt;Dashboard → Add API Key: 
   &lt;ul&gt; 
    &lt;li&gt;Provider: &lt;code&gt;glm&lt;/code&gt;&lt;/li&gt; 
    &lt;li&gt;API Key: &lt;code&gt;your-key&lt;/code&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; &lt;code&gt;glm/glm-5.1&lt;/code&gt;, &lt;code&gt;glm/glm-5&lt;/code&gt;, &lt;code&gt;glm/glm-4.7&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Coding Plan offers 3× quota at 1/7 cost! Reset daily 10:00 AM.&lt;/p&gt; 
 &lt;h3&gt;MiniMax M2.7 (5h reset, $0.20/1M)&lt;/h3&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Sign up: &lt;a href=&quot;https://www.minimax.io/&quot;&gt;MiniMax&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;Get API key&lt;/li&gt; 
  &lt;li&gt;Dashboard → Add API Key&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; &lt;code&gt;minimax/MiniMax-M2.7&lt;/code&gt;, &lt;code&gt;minimax/MiniMax-M2.5&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Cheapest option for long context (1M tokens)!&lt;/p&gt; 
 &lt;h3&gt;Kimi K2.5 ($9/month flat)&lt;/h3&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Subscribe: &lt;a href=&quot;https://platform.moonshot.ai/&quot;&gt;Moonshot AI&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;Get API key&lt;/li&gt; 
  &lt;li&gt;Dashboard → Add API Key&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; &lt;code&gt;kimi/kimi-k2.5&lt;/code&gt;, &lt;code&gt;kimi/kimi-k2.5-thinking&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Fixed $9/month for 10M tokens = $0.90/1M effective cost!&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🆓 FREE Providers (Recommended)&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;Kiro AI (Claude 4.5 + GLM-5 + MiniMax FREE)&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Connect Kiro
→ AWS Builder ID, AWS IAM Identity Center, Google, or GitHub
→ Unlimited usage

Models:
  kr/claude-sonnet-4.5
  kr/claude-haiku-4.5
  kr/glm-5
  kr/MiniMax-M2.5
  kr/qwen3-coder-next
  kr/deepseek-3.2
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Best free option for Claude. No API key, no payment, fully unlimited.&lt;/p&gt; 
 &lt;h3&gt;OpenCode Free (No auth, auto-fetch models)&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Connect OpenCode Free
→ No login required (passthrough proxy)
→ Models auto-fetched from opencode.ai/zen/v1/models
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; Fastest setup. Just connect and start coding.&lt;/p&gt; 
 &lt;h3&gt;Vertex AI ($300 free credits for new GCP accounts)&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;Dashboard → Connect Vertex AI
→ Upload Google Cloud Service Account JSON
→ Enable Vertex AI API in your GCP project

Models:
  vertex/gemini-3.1-pro-preview
  vertex/gemini-3-flash-preview
  vertex/gemini-2.5-flash

Vertex Partner (Anthropic / DeepSeek / GLM / Qwen via Vertex):
  vertex-partner/glm-5-maas
  vertex-partner/deepseek-v3.2-maas
  vertex-partner/qwen3-next-80b-a3b-thinking-maas
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Pro Tip:&lt;/strong&gt; New Google Cloud accounts get $300 credits free for 90 days. Plenty for daily coding.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🎨 Create Combos&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;Example 1: Maximize Subscription → Cheap Backup&lt;/h3&gt; 
 &lt;pre&gt;&lt;code&gt;Dashboard → Combos → Create New

Name: premium-coding
Models:
  1. cc/claude-opus-4-7 (Subscription primary)
  2. glm/glm-5.1 (Cheap backup, $0.6/1M)
  3. minimax/MiniMax-M2.7 (Cheapest fallback, $0.20/1M)

Use in CLI: premium-coding

Monthly cost example (100M tokens):
  80M via Claude (subscription): $0 extra
  15M via GLM: $9
  5M via MiniMax: $1
  Total: $10 + your subscription
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Example 2: Free-Only (Zero Cost)&lt;/h3&gt; 
 &lt;pre&gt;&lt;code&gt;Name: free-combo
Models:
  1. kr/claude-sonnet-4.5 (Claude 4.5 free unlimited)
  2. kr/glm-5 (GLM-5 free via Kiro)
  3. vertex/gemini-3.1-pro-preview ($300 free credits)

Cost: $0 forever (+ 20-40% token savings via RTK)!
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🔧 CLI Integration&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;Cursor IDE&lt;/h3&gt; 
 &lt;pre&gt;&lt;code&gt;Settings → Models → Advanced:
  OpenAI API Base URL: http://localhost:20128/v1
  OpenAI API Key: [from 9router dashboard]
  Model: cc/claude-opus-4-7
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Or use combo: &lt;code&gt;premium-coding&lt;/code&gt;&lt;/p&gt; 
 &lt;h3&gt;Claude Code&lt;/h3&gt; 
 &lt;p&gt;Edit &lt;code&gt;~/.claude/config.json&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;anthropic_api_base&quot;: &quot;http://localhost:20128/v1&quot;,
  &quot;anthropic_api_key&quot;: &quot;your-9router-api-key&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Codex CLI&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export OPENAI_BASE_URL=&quot;http://localhost:20128&quot;
export OPENAI_API_KEY=&quot;your-9router-api-key&quot;

codex &quot;your prompt&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;OpenClaw&lt;/h3&gt; 
 &lt;p&gt;&lt;strong&gt;Option 1 — Dashboard (recommended):&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;Dashboard → CLI Tools → OpenClaw → Select Model → Apply
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Option 2 — Manual:&lt;/strong&gt; Edit &lt;code&gt;~/.openclaw/openclaw.json&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;agents&quot;: {
    &quot;defaults&quot;: {
      &quot;model&quot;: {
        &quot;primary&quot;: &quot;9router/kr/claude-sonnet-4.5&quot;
      }
    }
  },
  &quot;models&quot;: {
    &quot;providers&quot;: {
      &quot;9router&quot;: {
        &quot;baseUrl&quot;: &quot;http://127.0.0.1:20128/v1&quot;,
        &quot;apiKey&quot;: &quot;sk_9router&quot;,
        &quot;api&quot;: &quot;openai-completions&quot;,
        &quot;models&quot;: [
          {
            &quot;id&quot;: &quot;kr/claude-sonnet-4.5&quot;,
            &quot;name&quot;: &quot;Claude Sonnet 4.5 (Kiro Free)&quot;
          }
        ]
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; OpenClaw only works with local 9Router. Use &lt;code&gt;127.0.0.1&lt;/code&gt; instead of &lt;code&gt;localhost&lt;/code&gt; to avoid IPv6 resolution issues.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;h3&gt;Cline / Continue / RooCode&lt;/h3&gt; 
 &lt;pre&gt;&lt;code&gt;Provider: OpenAI Compatible
Base URL: http://localhost:20128/v1
API Key: [from dashboard]
Model: cc/claude-opus-4-7
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;🚀 Deployment&lt;/b&gt;&lt;/summary&gt; 
 &lt;h3&gt;VPS Deployment&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone and install
git clone https://github.com/decolua/9router.git
cd 9router
npm install
npm run build

# Configure
export JWT_SECRET=&quot;your-secure-secret-change-this&quot;
export INITIAL_PASSWORD=&quot;your-password&quot;
export DATA_DIR=&quot;/var/lib/9router&quot;
export PORT=&quot;20128&quot;
export HOSTNAME=&quot;0.0.0.0&quot;
export NODE_ENV=&quot;production&quot;
export NEXT_PUBLIC_BASE_URL=&quot;http://localhost:20128&quot;
export NEXT_PUBLIC_CLOUD_URL=&quot;https://9router.com&quot;
export API_KEY_SECRET=&quot;endpoint-proxy-api-key-secret&quot;
export MACHINE_ID_SALT=&quot;endpoint-proxy-salt&quot;

# Start
npm run start

# Or use PM2
npm install -g pm2
pm2 start npm --name 9router -- start
pm2 save
pm2 startup
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Docker&lt;/h3&gt; 
 &lt;p&gt;Published images (multi-platform &lt;code&gt;linux/amd64&lt;/code&gt; + &lt;code&gt;linux/arm64&lt;/code&gt;):&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Docker Hub: &lt;a href=&quot;https://hub.docker.com/r/decolua/9router&quot;&gt;&lt;code&gt;decolua/9router&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;GHCR: &lt;a href=&quot;https://github.com/decolua/9router/pkgs/container/9router&quot;&gt;&lt;code&gt;ghcr.io/decolua/9router&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Quick start (use published image):&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -d \
  --name 9router \
  -p 20128:20128 \
  -v &quot;$HOME/.9router:/app/data&quot; \
  -e DATA_DIR=/app/data \
  decolua/9router:latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;→ Open &lt;a href=&quot;http://localhost:20128&quot;&gt;http://localhost:20128&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Build from source (dev):&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/decolua/9router.git
cd 9router/app
docker build -t 9router .
docker run -d --name 9router -p 20128:20128 \
  -v &quot;$HOME/.9router:/app/data&quot; -e DATA_DIR=/app/data 9router
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Container defaults:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;PORT=20128&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;HOSTNAME=0.0.0.0&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Useful commands:&lt;/strong&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker logs -f 9router
docker restart 9router
docker stop 9router &amp;amp;&amp;amp; docker rm 9router
docker pull decolua/9router:latest   # update to latest
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Data persistence:&lt;/strong&gt; &lt;code&gt;$HOME/.9router/db/data.sqlite&lt;/code&gt; on host ↔ &lt;code&gt;/app/data/db/data.sqlite&lt;/code&gt; in container.&lt;/p&gt; 
 &lt;h3&gt;Environment Variables&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Variable&lt;/th&gt; 
    &lt;th&gt;Default&lt;/th&gt; 
    &lt;th&gt;Description&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;JWT_SECRET&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Auto-generated (&lt;code&gt;~/.9router/jwt-secret&lt;/code&gt;)&lt;/td&gt; 
    &lt;td&gt;JWT signing secret for dashboard auth cookie (override to share across instances)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;INITIAL_PASSWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;123456&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;First login password when no saved hash exists&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;DATA_DIR&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;~/.9router&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main app data location (SQLite at &lt;code&gt;$DATA_DIR/db/data.sqlite&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;PORT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;framework default&lt;/td&gt; 
    &lt;td&gt;Service port (&lt;code&gt;20128&lt;/code&gt; in examples)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;HOSTNAME&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;framework default&lt;/td&gt; 
    &lt;td&gt;Bind host (Docker defaults to &lt;code&gt;0.0.0.0&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;NODE_ENV&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;runtime default&lt;/td&gt; 
    &lt;td&gt;Set &lt;code&gt;production&lt;/code&gt; for deploy&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;BASE_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;http://localhost:20128&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Server-side internal base URL used by cloud sync jobs&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;CLOUD_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;https://9router.com&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Server-side cloud sync endpoint base URL&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;NEXT_PUBLIC_BASE_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Backward-compatible/public base URL (prefer &lt;code&gt;BASE_URL&lt;/code&gt; for server runtime)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;NEXT_PUBLIC_CLOUD_URL&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;https://9router.com&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Backward-compatible/public cloud URL (prefer &lt;code&gt;CLOUD_URL&lt;/code&gt; for server runtime)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;API_KEY_SECRET&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;endpoint-proxy-api-key-secret&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;HMAC secret for generated API keys&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;MACHINE_ID_SALT&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;endpoint-proxy-salt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Salt for stable machine ID hashing&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;ENABLE_REQUEST_LOGS&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Enables request/response logs under &lt;code&gt;logs/&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;AUTH_COOKIE_SECURE&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Force &lt;code&gt;Secure&lt;/code&gt; auth cookie (set &lt;code&gt;true&lt;/code&gt; behind HTTPS reverse proxy)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;REQUIRE_API_KEY&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Enforce Bearer API key on &lt;code&gt;/v1/*&lt;/code&gt; routes (recommended for internet-exposed deploys)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;HTTP_PROXY&lt;/code&gt;, &lt;code&gt;HTTPS_PROXY&lt;/code&gt;, &lt;code&gt;ALL_PROXY&lt;/code&gt;, &lt;code&gt;NO_PROXY&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;empty&lt;/td&gt; 
    &lt;td&gt;Optional outbound proxy for upstream provider calls&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;Notes:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Lowercase proxy variables are also supported: &lt;code&gt;http_proxy&lt;/code&gt;, &lt;code&gt;https_proxy&lt;/code&gt;, &lt;code&gt;all_proxy&lt;/code&gt;, &lt;code&gt;no_proxy&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;.env&lt;/code&gt; is not baked into Docker image (&lt;code&gt;.dockerignore&lt;/code&gt;); inject runtime config with &lt;code&gt;--env-file&lt;/code&gt; or &lt;code&gt;-e&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;On Windows, &lt;code&gt;APPDATA&lt;/code&gt; can be used for local storage path resolution.&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;INSTANCE_NAME&lt;/code&gt; appears in older docs/env templates, but is currently not used at runtime.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Runtime Files and Storage&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Main app state: &lt;code&gt;${DATA_DIR}/db/data.sqlite&lt;/code&gt; (SQLite — providers, combos, aliases, keys, settings, usage history)&lt;/li&gt; 
  &lt;li&gt;Auto backups: &lt;code&gt;${DATA_DIR}/db/backups/&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;Optional request/translator logs: &lt;code&gt;&amp;lt;repo&amp;gt;/logs/...&lt;/code&gt; when &lt;code&gt;ENABLE_REQUEST_LOGS=true&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;Both &lt;code&gt;${DATA_DIR}&lt;/code&gt; and &lt;code&gt;~/.9router&lt;/code&gt; resolve to the same location in a Docker container — the symlink &lt;code&gt;/root/.9router -&amp;gt; /app/data&lt;/code&gt; is created at build time.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📊 Available Models&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;b&gt;View all available models&lt;/b&gt;&lt;/summary&gt; 
 &lt;p&gt;&lt;strong&gt;Claude Code (&lt;code&gt;cc/&lt;/code&gt;)&lt;/strong&gt; - Pro/Max:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;cc/claude-opus-4-7&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cc/claude-opus-4-6&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cc/claude-sonnet-4-6&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cc/claude-sonnet-4-5-20250929&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cc/claude-haiku-4-5-20251001&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Codex (&lt;code&gt;cx/&lt;/code&gt;)&lt;/strong&gt; - Plus/Pro:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;cx/gpt-5.5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cx/gpt-5.4&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cx/gpt-5.3-codex&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cx/gpt-5.2-codex&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cx/gpt-5.1-codex-max&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;GitHub Copilot (&lt;code&gt;gh/&lt;/code&gt;)&lt;/strong&gt;:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;gh/gpt-5.4&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gh/claude-opus-4.7&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gh/claude-sonnet-4.6&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gh/gemini-3.1-pro-preview&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;gh/grok-code-fast-1&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Cursor (&lt;code&gt;cu/&lt;/code&gt;)&lt;/strong&gt; - Subscription:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;cu/claude-4.6-opus-max&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cu/claude-4.5-sonnet-thinking&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cu/gpt-5.3-codex&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;cu/kimi-k2.5&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;GLM (&lt;code&gt;glm/&lt;/code&gt;)&lt;/strong&gt; - $0.6/1M:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;glm/glm-5.1&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;glm/glm-5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;glm/glm-4.7&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;MiniMax (&lt;code&gt;minimax/&lt;/code&gt;)&lt;/strong&gt; - $0.2/1M:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;minimax/MiniMax-M2.7&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;minimax/MiniMax-M2.5&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Kimi (&lt;code&gt;kimi/&lt;/code&gt;)&lt;/strong&gt; - $9/mo flat:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;kimi/kimi-k2.5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kimi/kimi-k2.5-thinking&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Kiro (&lt;code&gt;kr/&lt;/code&gt;)&lt;/strong&gt; - FREE unlimited:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;kr/claude-sonnet-4.5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kr/claude-haiku-4.5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kr/glm-5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kr/MiniMax-M2.5&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kr/qwen3-coder-next&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;kr/deepseek-3.2&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;OpenCode Free (&lt;code&gt;oc/&lt;/code&gt;)&lt;/strong&gt; - FREE no-auth:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Auto-fetched from &lt;code&gt;opencode.ai/zen/v1/models&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Vertex AI (&lt;code&gt;vertex/&lt;/code&gt;)&lt;/strong&gt; - $300 free credits:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;code&gt;vertex/gemini-3.1-pro-preview&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;vertex/gemini-3-flash-preview&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;vertex/gemini-2.5-flash&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;vertex-partner/glm-5-maas&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;code&gt;vertex-partner/deepseek-v3.2-maas&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🐛 Troubleshooting&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&quot;Language model did not provide messages&quot;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Provider quota exhausted → Check dashboard quota tracker&lt;/li&gt; 
 &lt;li&gt;Solution: Use combo fallback or switch to cheaper tier&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Rate limiting&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Subscription quota out → Fallback to GLM/MiniMax&lt;/li&gt; 
 &lt;li&gt;Add combo: &lt;code&gt;cc/claude-opus-4-7 → glm/glm-5.1 → kr/claude-sonnet-4.5&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;OAuth token expired&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Auto-refreshed by 9Router&lt;/li&gt; 
 &lt;li&gt;If issues persist: Dashboard → Provider → Reconnect&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;High costs&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Enable RTK in Dashboard → Endpoint settings (default ON, saves 20-40% tokens)&lt;/li&gt; 
 &lt;li&gt;Check usage stats in Dashboard&lt;/li&gt; 
 &lt;li&gt;Switch primary model to GLM/MiniMax&lt;/li&gt; 
 &lt;li&gt;Use free tier (Kiro, OpenCode Free, Vertex) for non-critical tasks&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Dashboard opens on wrong port&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Set &lt;code&gt;PORT=20128&lt;/code&gt; and &lt;code&gt;NEXT_PUBLIC_BASE_URL=http://localhost:20128&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;First login not working&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check &lt;code&gt;INITIAL_PASSWORD&lt;/code&gt; in &lt;code&gt;.env&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;If unset, fallback password is &lt;code&gt;123456&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;No request logs under &lt;code&gt;logs/&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Set &lt;code&gt;ENABLE_REQUEST_LOGS=true&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🛠️ Tech Stack&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Runtime&lt;/strong&gt;: Node.js 20+&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Framework&lt;/strong&gt;: Next.js 16&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;UI&lt;/strong&gt;: React 19 + Tailwind CSS 4&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Database&lt;/strong&gt;: SQLite (better-sqlite3 / node:sqlite / sql.js fallback)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Streaming&lt;/strong&gt;: Server-Sent Events (SSE)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Auth&lt;/strong&gt;: OAuth 2.0 (PKCE) + JWT + API Keys&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📝 API Reference&lt;/h2&gt; 
&lt;h3&gt;Chat Completions&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;POST http://localhost:20128/v1/chat/completions
Authorization: Bearer your-api-key
Content-Type: application/json

{
  &quot;model&quot;: &quot;cc/claude-opus-4-6&quot;,
  &quot;messages&quot;: [
    {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;Write a function to...&quot;}
  ],
  &quot;stream&quot;: true
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;List Models&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;GET http://localhost:20128/v1/models
Authorization: Bearer your-api-key

→ Returns all models + combos in OpenAI format
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;📧 Support&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href=&quot;https://9router.com&quot;&gt;9router.com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href=&quot;https://github.com/decolua/9router&quot;&gt;github.com/decolua/9router&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Issues&lt;/strong&gt;: &lt;a href=&quot;https://github.com/decolua/9router/issues&quot;&gt;github.com/decolua/9router/issues&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;👥 Contributors&lt;/h2&gt; 
&lt;p&gt;Thanks to all contributors who helped make 9Router better!&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/decolua/9router/graphs/contributors&quot;&gt;&lt;img src=&quot;https://contrib.rocks/image?repo=decolua/9router&amp;amp;max=150&amp;amp;columns=15&amp;amp;anon=1&amp;amp;v=20260309&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📊 Star Chart&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://starchart.cc/decolua/9router&quot;&gt;&lt;img src=&quot;https://starchart.cc/decolua/9router.svg?variant=adaptive&quot; alt=&quot;Star Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;🔀 Forks&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/diegosouzapw/OmniRoute&quot;&gt;OmniRoute&lt;/a&gt;&lt;/strong&gt; — A full-featured TypeScript fork of 9Router. Adds 36+ providers, 4-tier auto-fallback, multi-modal APIs (images, embeddings, audio, TTS), circuit breaker, semantic cache, LLM evaluations, and a polished dashboard. 368+ unit tests. Available via npm and Docker.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🙏 Acknowledgments&lt;/h2&gt; 
&lt;p&gt;Built on the shoulders of giants:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;CLIProxyAPI(&lt;a href=&quot;https://github.com/router-for-me/CLIProxyAPI&quot;&gt;https://github.com/router-for-me/CLIProxyAPI&lt;/a&gt;)&lt;/strong&gt; — original Go implementation that inspired this JavaScript port.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/rtk-ai/rtk&quot;&gt;RTK&lt;/a&gt;&lt;/strong&gt; &lt;img src=&quot;https://img.shields.io/github/stars/rtk-ai/rtk?style=flat&amp;amp;color=yellow&quot; alt=&quot;Stars&quot; /&gt; — Rust token-saver. 9Router ports its compression pipeline to JS → &lt;strong&gt;−20-40% input tokens&lt;/strong&gt; on every request.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/JuliusBrussee/caveman&quot;&gt;Caveman&lt;/a&gt;&lt;/strong&gt; &lt;img src=&quot;https://img.shields.io/github/stars/JuliusBrussee/caveman?style=flat&amp;amp;color=yellow&quot; alt=&quot;Stars&quot; /&gt; by &lt;strong&gt;&lt;a href=&quot;https://github.com/JuliusBrussee&quot;&gt;@JuliusBrussee&lt;/a&gt;&lt;/strong&gt; — viral &lt;em&gt;&quot;why use many token when few token do trick&quot;&lt;/em&gt;. 9Router adapts its prompt → &lt;strong&gt;−65% output tokens&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Huge thanks to these authors — without their work, 9Router&#39;s token-saving features wouldn&#39;t exist. ⭐ them on GitHub!&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;MIT License - see &lt;a href=&quot;https://raw.githubusercontent.com/decolua/9router/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;sub&gt;Built with ❤️ for developers who code 24/7&lt;/sub&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/54ad3e5851800b47aa9e14b9947d7fbbd41698e9fc88347eba57f9d6573a1455/decolua/9router" medium="image" />
      
    </item>
    
    <item>
      <title>outsourc-e/hermes-workspace</title>
      <link>https://github.com/outsourc-e/hermes-workspace</link>
      <description>&lt;p&gt;Native web workspace for Hermes Agent — chat, terminal, memory, skills, inspector.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/public/claude-avatar.webp&quot; alt=&quot;Hermes Workspace&quot; width=&quot;80&quot; style=&quot;border-radius: 16px&quot; /&gt; 
 &lt;!-- avatar filename retained for cache stability — do not rename without coordinated cache-bust --&gt; 
 &lt;h1&gt;Hermes Workspace&lt;/h1&gt; 
 &lt;p&gt;&lt;strong&gt;Your AI agent&#39;s command center — chat, files, memory, skills, and terminal in one place.&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/CHANGELOG.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/version-2.3.0-2557b7.svg?sanitize=true&quot; alt=&quot;Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/license-MIT-blue.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://nodejs.org/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen.svg?sanitize=true&quot; alt=&quot;Node&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/CONTRIBUTING.md&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/PRs-welcome-6366F1.svg?sanitize=true&quot; alt=&quot;PRs Welcome&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Not a chat wrapper. A complete workspace — orchestrate agents, browse memory, manage skills, and control everything from one interface.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;v2 — zero-fork.&lt;/strong&gt; Clone, don&#39;t fork. Runs on vanilla &lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;&lt;code&gt;NousResearch/hermes-agent&lt;/code&gt;&lt;/a&gt; installed via Nous&#39;s own installer. Chat, sessions, memory, skills, jobs, MCP, terminal, dashboard, Agent View, and Operations are all in vanilla parity. &lt;strong&gt;Conductor&lt;/strong&gt; uses the dashboard mission API when available and falls back to Workspace-native Swarm dispatch (&lt;code&gt;mode: native-swarm&lt;/code&gt;) when the dashboard endpoint is absent, preserving zero-fork behavior (&lt;a href=&quot;https://github.com/outsourc-e/hermes-workspace/issues/262&quot;&gt;#262&lt;/a&gt;).&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/splash.png&quot; alt=&quot;Hermes Workspace&quot; /&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Swarm Mode&lt;/h2&gt; 
&lt;p&gt;Hermes Agent Swarm turns the workspace into a live control plane: unlimited Hermes Agents, 1 orchestrator, 0 humans manually dispatching. Persistent tmux workers keep context across tasks, rotate safely, and report proof-bearing checkpoints. Role-based dispatch routes builders, reviewers, docs, research, ops, triage, QA, and lab lanes without turning Eric into the task router. A byte-verified review gate protects release branches before PRs ship. Autonomous PR/issue lanes, lab experiments, and the repair playbook keep the machine moving while humans handle judgment.&lt;/p&gt; 
&lt;p&gt;Start here: &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/swarm/&quot;&gt;docs/swarm/&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Orchestrator Chat&lt;/strong&gt; — ask the control plane for one task, a decomposed mission, or a full broadcast.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-Agent Control Plane&lt;/strong&gt; — see persistent Hermes Agents, roles, state, runtime, and routing wires in one surface.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Kanban TaskBoard&lt;/strong&gt; — plan backlog, ready, running, review, blocked, and done lanes without leaving the workspace.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reports + Inbox&lt;/strong&gt; — review checkpoints, blockers, handoffs, and ready-for-human decisions.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;TUI View built in&lt;/strong&gt; — attach to tmux-backed workers or fall back to a live shell/log stream.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✨ What&#39;s inside&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;💬 &lt;strong&gt;Chat&lt;/strong&gt; — Real-time SSE streaming, tool call rendering, multi-session, markdown + syntax highlighting&lt;/li&gt; 
 &lt;li&gt;🧠 &lt;strong&gt;Memory&lt;/strong&gt; — Browse, search, and edit agent memory; markdown live editor&lt;/li&gt; 
 &lt;li&gt;🧩 &lt;strong&gt;Skills&lt;/strong&gt; — Browse 2,000+ skills with origin badges, filters, source paths, marketplace&lt;/li&gt; 
 &lt;li&gt;🔌 &lt;strong&gt;MCP&lt;/strong&gt; — Full /mcp page (catalog + marketplace + sources), or fallback to local config CRUD&lt;/li&gt; 
 &lt;li&gt;📁 &lt;strong&gt;Files + Terminal&lt;/strong&gt; — Full workspace file browser with Monaco; cross-platform PTY terminal&lt;/li&gt; 
 &lt;li&gt;🎮 &lt;strong&gt;Operations&lt;/strong&gt; — Multi-agent dashboard with profile presets (Sage/Trader/Builder/Scribe/Ops) and &#39;Needs setup&#39; detection&lt;/li&gt; 
 &lt;li&gt;📡 &lt;strong&gt;Conductor&lt;/strong&gt; — Mission dispatch + decomposition with dashboard-backed missions when available and Workspace-native Swarm fallback otherwise&lt;/li&gt; 
 &lt;li&gt;👥 &lt;strong&gt;Agent View&lt;/strong&gt; — Live agent panel in chat with avatar, queue, history, usage meter&lt;/li&gt; 
 &lt;li&gt;🐝 &lt;strong&gt;Swarm Mode&lt;/strong&gt; — Persistent tmux-backed Hermes Agent workers with role-based dispatch&lt;/li&gt; 
 &lt;li&gt;🗄️ &lt;strong&gt;Dashboard&lt;/strong&gt; — Aggregated overview: sessions, model mix, cost ledger, attention card, ops strip&lt;/li&gt; 
 &lt;li&gt;🎨 &lt;strong&gt;Themes&lt;/strong&gt; — Hermes, Nous, Bronze, Slate, Mono (light + dark)&lt;/li&gt; 
 &lt;li&gt;🔒 &lt;strong&gt;Security&lt;/strong&gt; — Auth middleware on every route, CSP, path-traversal guard, fail-closed remote bind&lt;/li&gt; 
 &lt;li&gt;📱 &lt;strong&gt;PWA + Tailscale&lt;/strong&gt; — Install as a native-feeling app; access from any device on your tailnet&lt;/li&gt; 
 &lt;li&gt;⚙️ &lt;strong&gt;Capability gates&lt;/strong&gt; — Features that need upstream endpoints (Conductor) show a clean placeholder instead of failing mid-action&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📸 Screenshots&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Chat&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Conductor&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/chat.png&quot; alt=&quot;Chat&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/conductor.png&quot; alt=&quot;Conductor&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Dashboard&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Memory&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/dashboard.png&quot; alt=&quot;Dashboard&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/memory.png&quot; alt=&quot;Memory&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Terminal&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Settings&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/terminal.png&quot; alt=&quot;Terminal&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/settings.png&quot; alt=&quot;Settings&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Tasks&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Jobs&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/tasks.png&quot; alt=&quot;Tasks&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/docs/screenshots/jobs.png&quot; alt=&quot;Jobs&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 Quick Start&lt;/h2&gt; 
&lt;p&gt;Three paths — pick the one that matches you:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Path&lt;/th&gt; 
   &lt;th&gt;Best for&lt;/th&gt; 
   &lt;th&gt;Time&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🐳 &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/#-docker-quickstart&quot;&gt;Docker Compose&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Self-hosters, home labs, &quot;give me a compose gig&quot;&lt;/td&gt; 
   &lt;td&gt;~2 min&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🌐 One-line install&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Local dev on macOS/Linux&lt;/td&gt; 
   &lt;td&gt;~3 min&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🔌 Attach to existing &lt;code&gt;hermes-agent&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;You already run Hermes Agent&lt;/td&gt; 
   &lt;td&gt;~1 min&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;One-line install&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/install.sh | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This installs &lt;code&gt;hermes-agent&lt;/code&gt; via Nous&#39;s official installer, clones this repo, sets up &lt;code&gt;.env&lt;/code&gt;, and installs dependencies. Then:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hermes gateway run                  # terminal 1
cd ~/hermes-workspace &amp;amp;&amp;amp; pnpm dev   # terminal 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Open &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;. That&#39;s it.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Already running &lt;code&gt;hermes-agent&lt;/code&gt;? Attach the workspace to it&lt;/h3&gt; 
&lt;p&gt;If you already have &lt;code&gt;hermes-agent&lt;/code&gt; installed (via Nous&#39;s official installer, a source checkout, systemd, Docker, or another existing setup) and it&#39;s serving the gateway at &lt;code&gt;http://&amp;lt;host&amp;gt;:8642&lt;/code&gt;, you don&#39;t need to reinstall anything — just point the workspace at it.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
pnpm install
cp .env.example .env

# Point at your existing Hermes Agent services.
echo &#39;HERMES_API_URL=http://127.0.0.1:8642&#39; &amp;gt;&amp;gt; .env
# Zero-fork installs also need the separate dashboard API for config/sessions/skills/jobs.
echo &#39;HERMES_DASHBOARD_URL=http://127.0.0.1:9119&#39; &amp;gt;&amp;gt; .env

# If your gateway was started with API_SERVER_KEY (auth enabled), set the same value:
# echo &#39;HERMES_API_TOKEN=***&#39; &amp;gt;&amp;gt; .env

pnpm dev                            # http://localhost:3000 (override with PORT=4000 pnpm dev)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Requirements on the agent side:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Gateway bound to an address the workspace can reach (typically &lt;code&gt;API_SERVER_HOST=0.0.0.0&lt;/code&gt; + the port exposed).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;API_SERVER_ENABLED=true&lt;/code&gt; in &lt;code&gt;~/.hermes/.env&lt;/code&gt; (or the agent&#39;s env) so the gateway serves core APIs on &lt;code&gt;:8642&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;hermes dashboard&lt;/code&gt; running (default &lt;code&gt;http://127.0.0.1:9119&lt;/code&gt;) for zero-fork installs. The dashboard provides config, sessions, skills, and jobs APIs.&lt;/li&gt; 
 &lt;li&gt;If &lt;code&gt;API_SERVER_KEY&lt;/code&gt; is set, the workspace must pass the same value via &lt;code&gt;HERMES_API_TOKEN&lt;/code&gt; — otherwise leave both unset.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Verify both services before opening the workspace:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;curl http://127.0.0.1:8642/health&lt;/code&gt; should return ok.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;curl http://127.0.0.1:9119/api/status&lt;/code&gt; should return dashboard metadata.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Then start the workspace and complete onboarding — it should detect the gateway + dashboard pair and unlock the enhanced panes automatically.&lt;/p&gt; 
&lt;h4&gt;Running on a remote host (Tailscale / VPN / LAN)&lt;/h4&gt; 
&lt;p&gt;If the workspace and its browser live on different machines — e.g. the workspace runs on a Pi/Mac/home server and you access it from your phone over Tailscale — point &lt;code&gt;HERMES_API_URL&lt;/code&gt; at the &lt;strong&gt;reachable&lt;/strong&gt; backend address, not &lt;code&gt;127.0.0.1&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# On the server running the workspace + gateway:
echo &#39;HERMES_API_URL=http://100.x.y.z:8642&#39; &amp;gt;&amp;gt; .env
echo &#39;HERMES_DASHBOARD_URL=http://100.x.y.z:9119&#39; &amp;gt;&amp;gt; .env

# Also tell the gateway to listen on all interfaces so Tailscale peers can reach it.
# In ~/.hermes/.env (or wherever the gateway reads config):
echo &#39;API_SERVER_HOST=0.0.0.0&#39; &amp;gt;&amp;gt; ~/.hermes/.env
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then restart the gateway, dashboard, and workspace. Hit the workspace from the remote device and the connection probe will use the Tailscale IP instead of localhost. Both &lt;code&gt;HERMES_API_URL&lt;/code&gt; and &lt;code&gt;HERMES_DASHBOARD_URL&lt;/code&gt; must be set to Tailscale/LAN-reachable URLs — setting only one will leave the other probing &lt;code&gt;127.0.0.1&lt;/code&gt; and failing.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;If you&#39;ve already started the workspace&lt;/strong&gt;, you can update both URLs from &lt;code&gt;Settings → Connection&lt;/code&gt; without restarting. The values are persisted to &lt;code&gt;~/.hermes/workspace-overrides.json&lt;/code&gt; and take effect immediately (gateway capabilities are reprobed on save). Editing &lt;code&gt;.env&lt;/code&gt; still works for pre-start config and for CI/containers.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Manual install&lt;/h3&gt; 
&lt;p&gt;Hermes Workspace works with any OpenAI-compatible backend. If your backend also exposes Hermes Agent gateway APIs, enhanced features like sessions, memory, skills, and jobs unlock automatically.&lt;/p&gt; 
&lt;h4&gt;Prerequisites&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Node.js 22+&lt;/strong&gt; — &lt;a href=&quot;https://nodejs.org/&quot;&gt;nodejs.org&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;An OpenAI-compatible backend&lt;/strong&gt; — local, self-hosted, or remote&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Optional:&lt;/strong&gt; Python 3.11+ if you want to run a Hermes Agent gateway locally&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Step 1: Start your backend&lt;/h4&gt; 
&lt;p&gt;Point Hermes Workspace at any backend that supports:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;POST /v1/chat/completions&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;GET /v1/models&lt;/code&gt; recommended&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Example Hermes Agent gateway setup (from scratch):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install hermes-agent via Nous&#39;s official installer
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# Configure a provider + start the gateway
hermes setup
hermes gateway run
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Our one-liner installer (below) does both steps automatically. If you&#39;re using another OpenAI-compatible server, just note its base URL.&lt;/p&gt; 
&lt;h3&gt;Step 2: Install &amp;amp; Run Hermes Workspace&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# In a new terminal
git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
pnpm install
cp .env.example .env
printf &#39;\nHERMES_API_URL=http://127.0.0.1:8642\n&#39; &amp;gt;&amp;gt; .env
pnpm dev                   # Starts on http://localhost:3000
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Verify:&lt;/strong&gt; Open &lt;code&gt;http://localhost:3000&lt;/code&gt; and complete the onboarding flow. First connect the backend, then verify chat works. If your gateway exposes Hermes Agent APIs, advanced features appear automatically.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h4&gt;Environment Variables&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-env&quot;&gt;# OpenAI-compatible backend URL
HERMES_API_URL=http://127.0.0.1:8642

# Optional: provider keys the Hermes Agent gateway can read at runtime.
# You only need the key(s) for whichever provider(s) you actually use.
# OPENAI_API_KEY=sk-...                # GPT / o-series / OpenAI-compatible
# OPENROUTER_API_KEY=sk-or-v1-...      # OpenRouter (incl. free models)
# GOOGLE_API_KEY=AIza...               # Gemini
# (Ollama / LM Studio / local servers don&#39;t need a key)

# Optional: password-protect the web UI
# HERMES_PASSWORD=your_password
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🧠 Local Models (Ollama, Atomic Chat, LM Studio, vLLM)&lt;/h2&gt; 
&lt;p&gt;Hermes Workspace supports two modes with local models:&lt;/p&gt; 
&lt;h3&gt;Portable Mode (Easiest)&lt;/h3&gt; 
&lt;p&gt;Point the workspace directly at your local server — no Hermes Agent gateway needed.&lt;/p&gt; 
&lt;h3&gt;Atomic Chat&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Start workspace pointed at Atomic Chat
HERMES_API_URL=http://127.0.0.1:1337/v1 pnpm dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Download &lt;a href=&quot;https://atomic.chat/&quot;&gt;Atomic Chat&lt;/a&gt;, launch the desktop app, and make sure a model is loaded before starting Hermes Workspace.&lt;/p&gt; 
&lt;h3&gt;Ollama&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Start Ollama
OLLAMA_ORIGINS=* ollama serve

# Start workspace pointed at Ollama
HERMES_API_URL=http://127.0.0.1:11434 pnpm dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Chat works immediately. Sessions, memory, and skills show &quot;Not Available&quot; — that&#39;s expected in portable mode.&lt;/p&gt; 
&lt;h3&gt;Enhanced Mode (Full Features)&lt;/h3&gt; 
&lt;p&gt;Route through the Hermes Agent gateway for sessions, memory, skills, jobs, and tools.&lt;/p&gt; 
&lt;p&gt;Here are two explicit &lt;code&gt;~/.hermes/config.yaml&lt;/code&gt; examples for the local providers we support directly in the workspace:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Atomic Chat&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;provider: atomic-chat
model: your-model-name
custom_providers:
  - name: atomic-chat
    base_url: http://127.0.0.1:1337/v1
    api_key: atomic-chat
    api_mode: chat_completions
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;provider: ollama
model: qwen3:32b
custom_providers:
  - name: ollama
    base_url: http://127.0.0.1:11434/v1
    api_key: ollama
    api_mode: chat_completions
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can adapt the same shape for other OpenAI-compatible local runners, but &lt;code&gt;Atomic Chat&lt;/code&gt; and &lt;code&gt;Ollama&lt;/code&gt; are the two built-in local paths documented in the workspace UI.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;2. Enable the API server in &lt;code&gt;~/.hermes/.env&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-env&quot;&gt;API_SERVER_ENABLED=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;3. Start the gateway, dashboard, and workspace:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hermes gateway run          # Starts core APIs on :8642
hermes dashboard            # Starts dashboard APIs on :9119
HERMES_API_URL=http://127.0.0.1:8642 \
HERMES_DASHBOARD_URL=http://127.0.0.1:9119 \
pnpm dev
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For authenticated gateways, also set &lt;code&gt;HERMES_API_TOKEN&lt;/code&gt; in the workspace environment to the same value as &lt;code&gt;API_SERVER_KEY&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;All workspace features unlock automatically once both services are reachable — sessions persist, memory saves across chats, skills are available, and the dashboard shows real usage data.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Works with any OpenAI-compatible server&lt;/strong&gt; — Atomic Chat, Ollama, LM Studio, vLLM, llama.cpp, LocalAI, etc. Just change the &lt;code&gt;base_url&lt;/code&gt; and &lt;code&gt;model&lt;/code&gt; in the config above.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤝 Pair an Agent with the Workspace&lt;/h2&gt; 
&lt;p&gt;Workspace is the UI. &lt;strong&gt;Hermes Agent&lt;/strong&gt; is the brain. They talk over two HTTP services on localhost (or any reachable network).&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;┌───────────────┐         :8642 gateway          ┌────────────────┐
│   Workspace    │ ─────────────────────▶ │  Hermes Agent  │
│   :3000 (UI)   │ ◀───────────────────── │  CLI / brain   │
└───────────────┘         :9119 dashboard        └────────────────┘
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Two services, three commands&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hermes gateway run     # terminal 1 · :8642 · chat, models, streaming, jobs
hermes dashboard       # terminal 2 · :9119 · sessions, skills, config, MCP
cd ~/hermes-workspace &amp;amp;&amp;amp; pnpm dev   # terminal 3 · :3000 · the UI
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; &lt;code&gt;pnpm start:all&lt;/code&gt; starts gateway + dashboard + workspace in one shot if you&#39;ve installed via the one-liner.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Windows (PowerShell + WSL) one-command startup&lt;/h3&gt; 
&lt;p&gt;If you use Hermes Workspace from Windows with the agent running in WSL, use the helper script in this repo:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;# from the repo root
.\scripts\start-hermes-workspace.ps1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To force a clean relaunch of the tmux session:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;.\scripts\start-hermes-workspace.ps1 -Restart
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Optional parameters:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;-Distro &amp;lt;name&amp;gt;&lt;/code&gt; to target a non-default WSL distro&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-WorkspacePath &amp;lt;/path/in/wsl&amp;gt;&lt;/code&gt; if your clone is not at &lt;code&gt;~/hermes-workspace&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;-SessionName &amp;lt;name&amp;gt;&lt;/code&gt; to use a custom tmux session name&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Verify the pairing&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl http://127.0.0.1:8642/health        # → {&quot;status&quot;:&quot;ok&quot;,&quot;platform&quot;:&quot;hermes-agent&quot;}
curl http://127.0.0.1:9119/api/status    # → {&quot;status&quot;:&quot;ok&quot;, ...}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Both must return &lt;code&gt;200&lt;/code&gt;. If either fails, the workspace will fall back to &lt;strong&gt;portable mode&lt;/strong&gt; (chat works, sessions/skills/memory show &quot;Not Available&quot;).&lt;/p&gt; 
&lt;h3&gt;&lt;code&gt;.env&lt;/code&gt; settings the workspace cares about&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-env&quot;&gt;# Required: where the gateway is
HERMES_API_URL=http://127.0.0.1:8642

# Recommended: where the dashboard is (unlocks sessions/skills/config/MCP/jobs)
HERMES_DASHBOARD_URL=http://127.0.0.1:9119

# Only if your gateway was started with API_SERVER_KEY=... — paste the same value:
# HERMES_API_TOKEN=***

# Optional: password-protect the web UI itself
# HERMES_PASSWORD=***
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Common pairing scenarios&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Scenario&lt;/th&gt; 
   &lt;th&gt;Set this&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Workspace + gateway on the same machine&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;HERMES_API_URL=http://127.0.0.1:8642&lt;/code&gt;, &lt;code&gt;HERMES_DASHBOARD_URL=http://127.0.0.1:9119&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Gateway on a remote server (Tailscale / VPN)&lt;/td&gt; 
   &lt;td&gt;Set both URLs to the reachable IP (e.g. &lt;code&gt;http://100.x.y.z:8642&lt;/code&gt;) and add &lt;code&gt;API_SERVER_HOST=0.0.0.0&lt;/code&gt; to the gateway&#39;s &lt;code&gt;~/.hermes/.env&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Already-running &lt;code&gt;hermes-agent&lt;/code&gt; from upstream installer&lt;/td&gt; 
   &lt;td&gt;Just set &lt;code&gt;HERMES_API_URL&lt;/code&gt; + &lt;code&gt;HERMES_DASHBOARD_URL&lt;/code&gt; and skip the one-liner installer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multiple agent profiles&lt;/td&gt; 
   &lt;td&gt;Profiles live under &lt;code&gt;~/.hermes/profiles/&amp;lt;name&amp;gt;&lt;/code&gt; — the dashboard switches between them at runtime; workspace follows automatically&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Live re-pairing (no restart)&lt;/h3&gt; 
&lt;p&gt;If you&#39;ve already started the workspace, change either URL from &lt;strong&gt;Settings → Connection&lt;/strong&gt; without restarting. Values persist to &lt;code&gt;~/.hermes/workspace-overrides.json&lt;/code&gt; and gateway capabilities are reprobed on save.&lt;/p&gt; 
&lt;h3&gt;Troubleshooting&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;Could not reach Hermes gateway on 8645, 8642, or 8643&lt;/code&gt;&lt;/strong&gt; — gateway isn&#39;t running, or &lt;code&gt;HERMES_API_URL&lt;/code&gt; points somewhere unreachable. Run &lt;code&gt;hermes gateway run&lt;/code&gt; and re-check.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Workspace shows &quot;portable mode&quot; / extended APIs missing&lt;/strong&gt; — dashboard isn&#39;t running. Start &lt;code&gt;hermes dashboard&lt;/code&gt; in another terminal and refresh.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;Unauthorized&lt;/code&gt; on every API call&lt;/strong&gt; — gateway has &lt;code&gt;API_SERVER_KEY&lt;/code&gt; set but workspace is missing &lt;code&gt;HERMES_API_TOKEN&lt;/code&gt;. Match them.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;code&gt;Could not connect&lt;/code&gt; from your phone over Tailscale&lt;/strong&gt; — gateway is bound to loopback. Set &lt;code&gt;API_SERVER_HOST=0.0.0.0&lt;/code&gt; in &lt;code&gt;~/.hermes/.env&lt;/code&gt; and restart it.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🐳 Docker Quickstart&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/codespaces/new?hide_repo_select=true&amp;amp;ref=main&amp;amp;repo=outsourc-e/hermes-workspace&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/GitHub%20Codespaces-Open-181717?logo=github&quot; alt=&quot;Open in GitHub Codespaces&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;The Docker setup runs both the &lt;strong&gt;Hermes Agent gateway&lt;/strong&gt; and &lt;strong&gt;Hermes Workspace&lt;/strong&gt; together.&lt;/p&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Docker Compose&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;A configured Hermes Agent model provider&lt;/strong&gt; — run &lt;code&gt;hermes setup&lt;/code&gt; / &lt;code&gt;hermes model&lt;/code&gt;, or provide a key for whichever provider you use. This workspace does not require Anthropic.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Step 1: Configure Environment&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/outsourc-e/hermes-workspace.git
cd hermes-workspace
cp .env.example .env
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Edit &lt;code&gt;.env&lt;/code&gt; and add &lt;strong&gt;at least one&lt;/strong&gt; LLM provider key — whichever provider you want hermes-agent to use:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-env&quot;&gt;# Pick one (or more). You do NOT need all of these.
# OPENAI_API_KEY=sk-...                # GPT / o-series / OpenAI-compatible
# OPENROUTER_API_KEY=sk-or-v1-...      # OpenRouter (free models available)
# GOOGLE_API_KEY=AIza...               # Gemini
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Using &lt;strong&gt;Ollama, LM Studio, or another local server&lt;/strong&gt;? No key needed — just point hermes-agent at your local endpoint via the onboarding flow.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; &lt;code&gt;hermes-agent&lt;/code&gt; needs to be able to reach &lt;em&gt;some&lt;/em&gt; model. If you don&#39;t configure any provider (API key or local server), chat will fail on first message.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Step 2: Start the Services&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose up
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This pulls two pre-built images and starts them:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;hermes-agent&lt;/strong&gt; → &lt;code&gt;nousresearch/hermes-agent:latest&lt;/code&gt; on port &lt;strong&gt;8642&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;hermes-workspace&lt;/strong&gt; → &lt;code&gt;ghcr.io/outsourc-e/hermes-workspace:latest&lt;/code&gt; on port &lt;strong&gt;3000&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;No local build. First run takes a minute to pull; subsequent starts are instant. Agent state (config, sessions, skills, memory, credentials) persists in the legacy-named &lt;code&gt;claude-data&lt;/code&gt; Docker volume, so containers can be recreated without data loss.&lt;/p&gt; 
&lt;h3&gt;Step 3: Access the Workspace&lt;/h3&gt; 
&lt;p&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; and complete the onboarding.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Verify:&lt;/strong&gt; Check the Docker logs for &lt;code&gt;[gateway] Connected to Hermes Agent&lt;/code&gt; — this confirms the workspace successfully connected to the agent.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Building from source&lt;/h3&gt; 
&lt;p&gt;Want to hack on the workspace and have local changes hot-built into the container? Use the dev overlay:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose -f docker-compose.yml -f docker-compose.dev.yml up --build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The base &lt;code&gt;docker-compose.yml&lt;/code&gt; stays untouched — the overlay adds a &lt;code&gt;build:&lt;/code&gt; block for the &lt;code&gt;hermes-workspace&lt;/code&gt; service so the local repo is compiled instead of pulled. The Hermes Agent service still uses the canonical &lt;code&gt;nousresearch/hermes-agent:latest&lt;/code&gt; image; if you need a custom agent build, tag it locally and override &lt;code&gt;image:&lt;/code&gt; in your own &lt;code&gt;compose.override.yml&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Using a Pre-Built Image (Coolify / Easypanel / Dokploy / Unraid)&lt;/h3&gt; 
&lt;p&gt;Deploying Hermes Workspace to a PaaS or home-lab stack? Pull the image directly from GitHub Container Registry:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ghcr.io/outsourc-e/hermes-workspace:latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Available tags:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Tag&lt;/th&gt; 
   &lt;th&gt;What it is&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;latest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Latest &lt;code&gt;main&lt;/code&gt; commit (stable; recommended)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;v2.0.0&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Pinned semver tag&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;main-&amp;lt;sha&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Specific commit&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Minimal Coolify / Easypanel config:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;service: hermes-workspace
image: ghcr.io/outsourc-e/hermes-workspace:latest
port: 3000
env:
  HERMES_API_URL: http://hermes-agent:8642   # point at your gateway
  HERMES_API_TOKEN: ${API_SERVER_KEY}        # if gateway auth is enabled
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The image is built for &lt;code&gt;linux/amd64&lt;/code&gt; and &lt;code&gt;linux/arm64&lt;/code&gt;. Pair it with either a &lt;code&gt;nousresearch/hermes-agent:latest&lt;/code&gt; container (what our &lt;code&gt;docker-compose.yml&lt;/code&gt; does by default) or an existing gateway on another host.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📱 Install as App (Recommended)&lt;/h2&gt; 
&lt;p&gt;Hermes Workspace is a &lt;strong&gt;Progressive Web App (PWA)&lt;/strong&gt; — install it for the full native app experience with no browser chrome, keyboard shortcuts, and offline support.&lt;/p&gt; 
&lt;h3&gt;🖥️ Desktop (macOS / Windows / Linux)&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open Hermes Workspace in &lt;strong&gt;Chrome&lt;/strong&gt; or &lt;strong&gt;Edge&lt;/strong&gt; at &lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Click the &lt;strong&gt;install icon&lt;/strong&gt; (⊕) in the address bar&lt;/li&gt; 
 &lt;li&gt;Click &lt;strong&gt;Install&lt;/strong&gt; — Hermes Workspace opens as a standalone desktop app&lt;/li&gt; 
 &lt;li&gt;Pin to Dock / Taskbar for quick access&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;macOS users:&lt;/strong&gt; After installing, you can also add it to your Launchpad.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;📱 iPhone / iPad (iOS Safari)&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open Hermes Workspace in &lt;strong&gt;Safari&lt;/strong&gt; on your iPhone&lt;/li&gt; 
 &lt;li&gt;Tap the &lt;strong&gt;Share&lt;/strong&gt; button (□↑)&lt;/li&gt; 
 &lt;li&gt;Scroll down and tap &lt;strong&gt;&quot;Add to Home Screen&quot;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Tap &lt;strong&gt;Add&lt;/strong&gt; — the Hermes Workspace icon appears on your home screen&lt;/li&gt; 
 &lt;li&gt;Launch from home screen for the full native app experience&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;🤖 Android&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Open Hermes Workspace in &lt;strong&gt;Chrome&lt;/strong&gt; on your Android device&lt;/li&gt; 
 &lt;li&gt;Tap the &lt;strong&gt;three-dot menu&lt;/strong&gt; (⋮) → &lt;strong&gt;&quot;Add to Home screen&quot;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Tap &lt;strong&gt;Add&lt;/strong&gt; — Hermes Workspace is now a native-feeling app on your device&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📡 Mobile Access via Tailscale&lt;/h2&gt; 
&lt;p&gt;Access Hermes Workspace from anywhere on your devices — no port forwarding, no VPN complexity.&lt;/p&gt; 
&lt;h3&gt;Setup&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Install Tailscale&lt;/strong&gt; on your Mac and mobile device:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Mac: &lt;a href=&quot;https://tailscale.com/download&quot;&gt;tailscale.com/download&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;iPhone/Android: Search &quot;Tailscale&quot; in the App Store / Play Store&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Sign in&lt;/strong&gt; to the same Tailscale account on both devices&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Find your Mac&#39;s Tailscale IP:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;tailscale ip -4
# Example output: 100.x.x.x
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Open Hermes Workspace on your phone:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;http://100.x.x.x:3000
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Add to Home Screen&lt;/strong&gt; using the steps above for the full app experience&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;💡 Tailscale works over any network — home wifi, mobile data, even across countries. Your traffic stays end-to-end encrypted.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🖥️ Native Desktop App&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Status: In Development&lt;/strong&gt; — A native Electron-based desktop app is in active development.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;The desktop app will offer:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Native window management and tray icon&lt;/li&gt; 
 &lt;li&gt;System notifications for agent events and mission completions&lt;/li&gt; 
 &lt;li&gt;Auto-launch on startup&lt;/li&gt; 
 &lt;li&gt;Deep OS integration (macOS menu bar, Windows taskbar)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;In the meantime:&lt;/strong&gt; Install Hermes Workspace as a PWA (see above) for a near-native desktop experience — it works great.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;☁️ Cloud &amp;amp; Hosted Setup&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Status: Coming Soon&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;A fully managed cloud version of Hermes Workspace is in development:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;One-click deploy&lt;/strong&gt; — No self-hosting required&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Multi-device sync&lt;/strong&gt; — Access your agents from any device&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Team collaboration&lt;/strong&gt; — Shared mission control for your whole team&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Automatic updates&lt;/strong&gt; — Always on the latest version&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Features pending cloud infrastructure:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Cross-device session sync&lt;/li&gt; 
 &lt;li&gt;Team shared memory and workspaces&lt;/li&gt; 
 &lt;li&gt;Cloud-hosted backend with managed uptime&lt;/li&gt; 
 &lt;li&gt;Webhook integrations and external triggers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔒 Security &amp;amp; deployment env vars&lt;/h2&gt; 
&lt;p&gt;Key safeguards — most are on by default, the env vars below are for remote / Docker deployments where you opt out of the loopback default.&lt;/p&gt; 
&lt;h3&gt;Built-in safeguards&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Auth middleware on every API route&lt;/li&gt; 
 &lt;li&gt;CSP headers via meta tags&lt;/li&gt; 
 &lt;li&gt;Path-traversal prevention on file/memory routes (real-path boundary check, not string prefix)&lt;/li&gt; 
 &lt;li&gt;Rate limiting on endpoints&lt;/li&gt; 
 &lt;li&gt;Fail-closed startup guard: refuses to bind non-loopback without &lt;code&gt;HERMES_PASSWORD&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Session cookies: &lt;code&gt;HttpOnly&lt;/code&gt; + &lt;code&gt;SameSite=Strict&lt;/code&gt; + &lt;code&gt;Secure&lt;/code&gt; (in production)&lt;/li&gt; 
 &lt;li&gt;Optional password protection for the web UI&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Env vars for remote / Docker deployments&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;HERMES_PASSWORD&lt;/code&gt; — required whenever &lt;code&gt;HOST ≠ 127.0.0.1&lt;/code&gt; (legacy &lt;code&gt;CLAUDE_PASSWORD&lt;/code&gt; still honored as a fallback)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;COOKIE_SECURE=1&lt;/code&gt; — force the &lt;code&gt;Secure&lt;/code&gt; cookie flag when terminating HTTPS at a proxy&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;COOKIE_SECURE=0&lt;/code&gt; — disable the &lt;code&gt;Secure&lt;/code&gt; flag for plain-HTTP LAN deployments (&lt;code&gt;HOST=0.0.0.0&lt;/code&gt; without HTTPS); without this, browsers silently drop session cookies and login fails (#149)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;TRUST_PROXY=1&lt;/code&gt; — trust &lt;code&gt;x-forwarded-for&lt;/code&gt; / &lt;code&gt;x-real-ip&lt;/code&gt; (only set behind a sanitizing reverse proxy)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;HERMES_DASHBOARD_TOKEN&lt;/code&gt; — explicit bearer for dashboard API (preferred over the legacy HTML-scrape fallback)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;HERMES_API_TOKEN&lt;/code&gt; — bearer for the Hermes Agent gateway when started with &lt;code&gt;API_SERVER_KEY&lt;/code&gt; (legacy &lt;code&gt;CLAUDE_API_TOKEN&lt;/code&gt; still honored)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;HERMES_ALLOW_INSECURE_REMOTE=1&lt;/code&gt; — bypass the fail-closed guard (not recommended)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;See &lt;code&gt;.env.example&lt;/code&gt; for the full list. Credits to &lt;a href=&quot;https://github.com/kiosvantra&quot;&gt;@kiosvantra&lt;/a&gt; for the security audit surfacing #121–#125.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔧 Troubleshooting&lt;/h2&gt; 
&lt;h3&gt;&quot;Workspace loads but chat doesn&#39;t work&quot;&lt;/h3&gt; 
&lt;p&gt;The workspace auto-detects your gateway&#39;s capabilities on startup. Check your terminal for a line like:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[gateway] http://127.0.0.1:8642 available: health, models; missing: sessions, skills, memory, config, jobs
[gateway] Missing Hermes Agent APIs detected. Update hermes-agent to the latest version.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Upgrade to the latest stock &lt;code&gt;hermes-agent&lt;/code&gt;, which ships the extended endpoints:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd ~/hermes-agent &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; uv pip install -e .
hermes gateway run
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;(If you installed via a different path, follow your Nous installer&#39;s upgrade instructions.) If you were on the old &lt;code&gt;outsourc-e/hermes-agent&lt;/code&gt; fork, it&#39;s no longer needed as of v2 — uninstall it and use upstream instead.&lt;/p&gt; 
&lt;h3&gt;&quot;Connection refused&quot; or workspace hangs on load&lt;/h3&gt; 
&lt;p&gt;Your Hermes Agent gateway isn&#39;t running. Start it:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hermes gateway run
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;First-time run? Do &lt;code&gt;hermes setup&lt;/code&gt; first to pick a provider and model.&lt;/p&gt; 
&lt;h3&gt;Ollama: chat returns empty or model shows &quot;Offline&quot;&lt;/h3&gt; 
&lt;p&gt;Make sure your &lt;code&gt;~/.hermes/config.yaml&lt;/code&gt; has the &lt;code&gt;custom_providers&lt;/code&gt; section and &lt;code&gt;API_SERVER_ENABLED=true&lt;/code&gt; in &lt;code&gt;~/.hermes/.env&lt;/code&gt;. See &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/#-local-models-ollama-lm-studio-vllm&quot;&gt;Local Models&lt;/a&gt; above.&lt;/p&gt; 
&lt;p&gt;Also ensure Ollama is running with CORS enabled:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;OLLAMA_ORIGINS=* ollama serve
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Use &lt;code&gt;http://127.0.0.1:11434/v1&lt;/code&gt; (not &lt;code&gt;localhost&lt;/code&gt;) as the base URL.&lt;/p&gt; 
&lt;p&gt;Verify: &lt;code&gt;curl http://localhost:8642/health&lt;/code&gt; should return &lt;code&gt;{&quot;status&quot;: &quot;ok&quot;}&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;&quot;Using upstream NousResearch/hermes-agent&quot;&lt;/h3&gt; 
&lt;p&gt;v2+ runs on vanilla &lt;code&gt;hermes-agent&lt;/code&gt;. &lt;strong&gt;No fork required.&lt;/strong&gt; The upstream ships every endpoint the workspace needs for chat, sessions, memory, skills, config, jobs, MCP, terminal, and Agent View.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Conductor note:&lt;/strong&gt; when the dashboard mission API is available, Workspace uses it directly. When that endpoint is absent, Workspace uses its native Swarm fallback and returns &lt;code&gt;mode: native-swarm&lt;/code&gt;. The fallback dispatches through Workspace Swarm workers, keeps status available through &lt;code&gt;/api/conductor-spawn?missionId=...&lt;/code&gt;, and cancels through &lt;code&gt;/api/conductor-stop&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;If you&#39;re pinned to an older &lt;code&gt;hermes-agent&lt;/code&gt; version and missing core endpoints, the workspace will degrade gracefully to &lt;strong&gt;portable mode&lt;/strong&gt; with basic chat — upgrade upstream to restore full features.&lt;/p&gt; 
&lt;h3&gt;Docker: &quot;Unauthorized&quot; or &quot;Connection refused&quot; to hermes-agent&lt;/h3&gt; 
&lt;p&gt;If using Docker Compose and getting auth errors:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Check at least one provider key is set:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;grep -E &#39;_API_KEY&#39; .env
# Should show one of: OPENAI_API_KEY, OPENROUTER_API_KEY, GOOGLE_API_KEY, or another provider key you intentionally use.
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;(hermes-agent reads whichever key matches the provider configured in &lt;code&gt;~/.hermes/config.yaml&lt;/code&gt;.)&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;View the agent container logs:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose logs hermes-agent
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Look for startup errors or missing API key warnings.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Verify the agent health endpoint:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl http://localhost:8642/health
# Should return: {&quot;status&quot;: &quot;ok&quot;}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Restart with fresh containers:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose down
docker compose up --build
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Check workspace logs for gateway status:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker compose logs hermes-workspace
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Look for: &lt;code&gt;[gateway] http://hermes-agent:8642 mode=...&lt;/code&gt; — if it shows &lt;code&gt;mode=disconnected&lt;/code&gt;, the agent isn&#39;t running correctly.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Docker: older &lt;code&gt;claude webapi&lt;/code&gt; docs are wrong&lt;/h3&gt; 
&lt;p&gt;The &lt;code&gt;claude webapi&lt;/code&gt; command referenced in some pre-rename docs doesn&#39;t exist. The correct commands are:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;hermes gateway run    # FastAPI gateway on :8642
hermes dashboard      # dashboard plugin on :9119 (sessions/skills/jobs/config)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The Docker setup runs both automatically — no action needed if using &lt;code&gt;docker compose up&lt;/code&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🗺️ Roadmap&lt;/h2&gt; 
&lt;h3&gt;Shipped ✅&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;What it does&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Chat + SSE streaming&lt;/td&gt; 
   &lt;td&gt;Live agent output with tool call rendering&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Files + Terminal&lt;/td&gt; 
   &lt;td&gt;Full workspace file browser + cross-platform PTY&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Memory + Skills browsers&lt;/td&gt; 
   &lt;td&gt;Edit memory, browse 2,000+ skills with marketplace&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Dashboard&lt;/td&gt; 
   &lt;td&gt;Sessions, model mix, cost ledger, attention card&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Operations&lt;/td&gt; 
   &lt;td&gt;Multi-agent management with preset personas&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Agent View&lt;/td&gt; 
   &lt;td&gt;Live agent panel in chat&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Swarm Mode&lt;/td&gt; 
   &lt;td&gt;Persistent tmux-backed worker pool with role dispatch&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;MCP page&lt;/td&gt; 
   &lt;td&gt;Full catalog + marketplace + sources&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Mobile PWA + Tailscale&lt;/td&gt; 
   &lt;td&gt;Install as native-feeling app on any device&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Themes&lt;/td&gt; 
   &lt;td&gt;Hermes / Nous / Bronze / Slate / Mono (light + dark)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Capability gates&lt;/td&gt; 
   &lt;td&gt;Graceful &#39;upstream not ready&#39; placeholders&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Multi-provider&lt;/td&gt; 
   &lt;td&gt;OpenAI/OpenAI-compatible, OpenRouter, Google, Ollama, LM Studio, vLLM, Atomic Chat, and other Hermes-supported providers&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;In progress 🔨&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Conductor missions&lt;/td&gt; 
   &lt;td&gt;Workspace UI is shipped; uses dashboard mission API when available and Workspace-native Swarm fallback otherwise (see &lt;a href=&quot;https://github.com/outsourc-e/hermes-workspace/issues/262&quot;&gt;#262&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Native Desktop App (Electron)&lt;/td&gt; 
   &lt;td&gt;Spec&#39;d; PWA install path works today&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Coming 🔜&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Cloud / Hosted version&lt;/td&gt; 
   &lt;td&gt;Pending infra&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Team collaboration&lt;/td&gt; 
   &lt;td&gt;Pending cloud + multi-tenant work&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⭐ Star History&lt;/h2&gt; 
&lt;h2&gt;&lt;a href=&quot;https://www.star-history.com/#outsourc-e/hermes-workspace&amp;amp;type=date&amp;amp;logscale&amp;amp;legend=top-left&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=outsourc-e/hermes-workspace&amp;amp;type=date&amp;amp;logscale&amp;amp;legend=top-left&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/h2&gt; 
&lt;h2&gt;💛 Support the Project&lt;/h2&gt; 
&lt;p&gt;Hermes Workspace is free and open source. If it&#39;s saving you time and powering your workflow, consider supporting development:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;ETH:&lt;/strong&gt; &lt;code&gt;0xB332D4C60f6FBd94913e3Fd40d77e3FE901FAe22&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/sponsors/outsourc-e&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Sponsor-%E2%9D%A4-pink?logo=github&quot; alt=&quot;GitHub Sponsors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Every contribution helps keep this project moving. Thank you 🙏&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;PRs are welcome! See &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for guidelines.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Bug fixes → open a PR directly&lt;/li&gt; 
 &lt;li&gt;New features → open an issue first to discuss&lt;/li&gt; 
 &lt;li&gt;Security issues → see &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/SECURITY.md&quot;&gt;SECURITY.md&lt;/a&gt; for responsible disclosure&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;MIT — see &lt;a href=&quot;https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;sub&gt;Built with ⚡ by &lt;a href=&quot;https://github.com/outsourc-e&quot;&gt;@outsourc-e&lt;/a&gt; and the Hermes Workspace community&lt;/sub&gt; 
&lt;/div&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/1182887460/882411b1-88cc-46da-8d1b-990a4964c920" medium="image" />
      
    </item>
    
    <item>
      <title>jo-inc/camofox-browser</title>
      <link>https://github.com/jo-inc/camofox-browser</link>
      <description>&lt;p&gt;Stealth headless browser for AI agents — bypass Cloudflare, bot detection, and anti-scraping. Drop-in Puppeteer/Playwright replacement.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/fox.png&quot; alt=&quot;camofox-browser&quot; width=&quot;200&quot; /&gt; 
 &lt;h1&gt;camofox-browser&lt;/h1&gt; 
 &lt;p&gt;&lt;strong&gt;Anti-detection browser server for AI agents, powered by Camoufox&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt; &lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-MIT-yellow.svg?sanitize=true&quot; alt=&quot;License: MIT&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/jo-inc/camofox-browser/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/jo-inc/camofox-browser&quot; alt=&quot;GitHub stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.npmjs.com/package/camofox-browser&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/v/camofox-browser&quot; alt=&quot;npm version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/jo-inc/camofox-browser/commits&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/jo-inc/camofox-browser&quot; alt=&quot;GitHub last commit&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
 &lt;p&gt; Standing on the mighty shoulders of &lt;a href=&quot;https://camoufox.com&quot;&gt;Camoufox&lt;/a&gt; - a Firefox fork with fingerprint spoofing at the C++ level. &lt;/p&gt; 
&lt;/div&gt; 
&lt;br /&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://askjo.ai?ref=camofox&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/jo-logo.png&quot; alt=&quot;Jo&quot; width=&quot;80&quot; height=&quot;80&quot; align=&quot;left&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;Built by the team behind &lt;a href=&quot;https://askjo.ai?ref=camofox&quot;&gt;&lt;strong&gt;jo, a personal AI agent&lt;/strong&gt;&lt;/a&gt; that runs half on your Mac, half on a dedicated cloud machine just for you -- with zero maintenance needed. Available on macOS, Telegram, WhatsApp, and email. &lt;a href=&quot;https://askjo.ai?ref=camofox&quot;&gt;Try the beta free -&amp;gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;br /&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/jo-inc/camofox-browser &amp;amp;&amp;amp; cd camofox-browser
npm install &amp;amp;&amp;amp; npm start
# -&amp;gt; http://localhost:9377
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Why&lt;/h2&gt; 
&lt;p&gt;AI agents need to browse the real web. Playwright gets blocked. Headless Chrome gets fingerprinted. Stealth plugins become the fingerprint.&lt;/p&gt; 
&lt;p&gt;Camoufox patches Firefox at the &lt;strong&gt;C++ implementation level&lt;/strong&gt; - &lt;code&gt;navigator.hardwareConcurrency&lt;/code&gt;, WebGL renderers, AudioContext, screen geometry, WebRTC - all spoofed before JavaScript ever sees them. No shims, no wrappers, no tells.&lt;/p&gt; 
&lt;p&gt;This project wraps that engine in a REST API built for agents: accessibility snapshots instead of bloated HTML, stable element refs for clicking, and search macros for common sites.&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;C++ Anti-Detection&lt;/strong&gt; - bypasses Google, Cloudflare, and most bot detection&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Element Refs&lt;/strong&gt; - stable &lt;code&gt;e1&lt;/code&gt;, &lt;code&gt;e2&lt;/code&gt;, &lt;code&gt;e3&lt;/code&gt; identifiers for reliable interaction&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Token-Efficient&lt;/strong&gt; - accessibility snapshots are ~90% smaller than raw HTML&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Runs on Anything&lt;/strong&gt; - lazy browser launch + idle shutdown keeps memory at ~40MB when idle. Designed to share a box with the rest of your stack -- Raspberry Pi, $5 VPS, shared infra.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Session Isolation&lt;/strong&gt; - separate cookies/storage per user&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Cookie Import&lt;/strong&gt; - inject Netscape-format cookie files for authenticated browsing&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Proxy + GeoIP&lt;/strong&gt; - route traffic through residential proxies with automatic locale/timezone&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Structured Logging&lt;/strong&gt; - JSON log lines with request IDs for production observability&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;YouTube Transcripts&lt;/strong&gt; - extract captions from any YouTube video via yt-dlp, no API key needed&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Search Macros&lt;/strong&gt; - &lt;code&gt;@google_search&lt;/code&gt;, &lt;code&gt;@youtube_search&lt;/code&gt;, &lt;code&gt;@amazon_search&lt;/code&gt;, &lt;code&gt;@reddit_subreddit&lt;/code&gt;, and 10 more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Snapshot Screenshots&lt;/strong&gt; - include a base64 PNG screenshot alongside the accessibility snapshot&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Large Page Handling&lt;/strong&gt; - automatic snapshot truncation with offset-based pagination&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Download Capture&lt;/strong&gt; - capture browser downloads and fetch them via API (optional inline base64)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;DOM Image Extraction&lt;/strong&gt; - list &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; src/alt and optionally return inline data URLs&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Deploy Anywhere&lt;/strong&gt; - Docker, &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt;, Railway&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;VNC Interactive Login&lt;/strong&gt; - log into sites visually via noVNC, export storage state for agent reuse&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;OpenAPI Docs&lt;/strong&gt; - auto-generated spec at &lt;a href=&quot;http://localhost:9377/openapi.json&quot;&gt;&lt;code&gt;/openapi.json&lt;/code&gt;&lt;/a&gt; and interactive docs at &lt;a href=&quot;http://localhost:9377/docs&quot;&gt;&lt;code&gt;/docs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Structured Extract&lt;/strong&gt; - &lt;code&gt;POST /tabs/:tabId/extract&lt;/code&gt; with a JSON Schema that maps properties to snapshot refs via &lt;code&gt;x-ref&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Session Tracing&lt;/strong&gt; - opt-in per-session Playwright trace capture (screenshots + DOM snapshots + network) with API endpoints to list, fetch, and delete trace zips&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Telemetry&lt;/strong&gt; - automatic &lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/lib/reporter.js#L28-L290&quot;&gt;anonymized crash/hang telemetry&lt;/a&gt; via GitHub Issues. Identifies which sites cause failures and common failure patterns. Private domains are HMAC-hashed, paths/params stripped, tokens/IPs redacted. Opt-out with &lt;code&gt;CAMOFOX_CRASH_REPORT_ENABLED=false&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Optional Dependencies&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Dependency&lt;/th&gt; 
   &lt;th&gt;Purpose&lt;/th&gt; 
   &lt;th&gt;Install&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/yt-dlp/yt-dlp&quot;&gt;yt-dlp&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;YouTube transcript extraction (fast path)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;pip install yt-dlp&lt;/code&gt; or &lt;code&gt;brew install yt-dlp&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The Docker image includes yt-dlp. For local dev, install it for the &lt;code&gt;/youtube/transcript&lt;/code&gt; endpoint. Without it, the endpoint falls back to a slower browser-based method.&lt;/p&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;h3&gt;OpenClaw Plugin&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;openclaw plugins install @askjo/camofox-browser
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Tools:&lt;/strong&gt; &lt;code&gt;camofox_create_tab&lt;/code&gt; | &lt;code&gt;camofox_snapshot&lt;/code&gt; | &lt;code&gt;camofox_click&lt;/code&gt; | &lt;code&gt;camofox_type&lt;/code&gt; | &lt;code&gt;camofox_navigate&lt;/code&gt; | &lt;code&gt;camofox_scroll&lt;/code&gt; | &lt;code&gt;camofox_screenshot&lt;/code&gt; | &lt;code&gt;camofox_close_tab&lt;/code&gt; | &lt;code&gt;camofox_list_tabs&lt;/code&gt; | &lt;code&gt;camofox_import_cookies&lt;/code&gt;&lt;/p&gt; 
&lt;h3&gt;Standalone&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/jo-inc/camofox-browser
cd camofox-browser
npm install
npm start  # downloads Camoufox on first run (~300MB)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Default port is &lt;code&gt;9377&lt;/code&gt;. See &lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/#environment-variables&quot;&gt;Environment Variables&lt;/a&gt; for all options.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; the postinstall script unsets &lt;code&gt;PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD&lt;/code&gt; for itself before fetching the Camoufox binary. Without that override, an exported &lt;code&gt;PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1&lt;/code&gt; (common when Playwright is configured to use system Chrome) would silently skip the binary download and crash the server at runtime.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;External Camoufox executable:&lt;/strong&gt; set &lt;code&gt;CAMOUFOX_EXECUTABLE=/path/to/camoufox-bin&lt;/code&gt; before &lt;code&gt;npm install&lt;/code&gt; and when starting the server to skip the bundled download and launch that executable. Compatibility aliases are &lt;code&gt;CAMOUFOX_EXECUTABLE_PATH&lt;/code&gt; and &lt;code&gt;CAMOFOX_EXECUTABLE_PATH&lt;/code&gt;. This is useful for NixOS paths such as &lt;code&gt;/nix/store/.../camoufox-bin&lt;/code&gt;; the executable must come from a Camoufox bundle that includes &lt;code&gt;properties.json&lt;/code&gt;, &lt;code&gt;version.json&lt;/code&gt;, and &lt;code&gt;fontconfig/&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Air-gapped or custom binary management:&lt;/strong&gt; prefer &lt;code&gt;CAMOUFOX_EXECUTABLE&lt;/code&gt; when you already have a Camoufox bundle. Otherwise disable the auto-fetch with &lt;code&gt;npm install --ignore-scripts&lt;/code&gt; (skips lifecycle scripts for &lt;em&gt;every&lt;/em&gt; dependency -- bluntest option) or, more surgically, &lt;code&gt;npm install --omit=optional&lt;/code&gt; plus a manual &lt;code&gt;npx camoufox-js fetch&lt;/code&gt; step against your mirror. Note that &lt;code&gt;PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install&lt;/code&gt; no longer skips the Camoufox download (the postinstall sanitizes the env locally); use &lt;code&gt;--ignore-scripts&lt;/code&gt; or &lt;code&gt;CAMOUFOX_EXECUTABLE&lt;/code&gt; for that.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Docker&lt;/h3&gt; 
&lt;p&gt;The included &lt;code&gt;Makefile&lt;/code&gt; auto-detects your CPU architecture and pre-downloads Camoufox + yt-dlp binaries outside the Docker build, so rebuilds are fast (~30s vs ~3min).&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Build and start (auto-detects arch: aarch64 on M1/M2, x86_64 on Intel)
make up

# Stop and remove the container
make down

# Force a clean rebuild (e.g. after upgrading VERSION/RELEASE)
make reset

# Just download binaries (without building)
make fetch

# Override arch or version explicitly
make up ARCH=x86_64
make up VERSION=135.0.1 RELEASE=beta.24
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;WARNING: Do not run &lt;code&gt;docker build&lt;/code&gt; directly.&lt;/strong&gt; The Dockerfile uses bind mounts to pull pre-downloaded binaries from &lt;code&gt;dist/&lt;/code&gt;. Always use &lt;code&gt;make up&lt;/code&gt; (or &lt;code&gt;make fetch&lt;/code&gt; then &lt;code&gt;make build&lt;/code&gt;) -- it downloads the binaries first.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;&lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;For &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt; or other remote CI, you&#39;ll need a Dockerfile that downloads binaries at build time instead of using bind mounts.&lt;/p&gt; 
&lt;h3&gt;Railway&lt;/h3&gt; 
&lt;p&gt;A &lt;code&gt;railway.toml&lt;/code&gt; is included. It uses &lt;code&gt;Dockerfile.ci&lt;/code&gt; (which downloads binaries at build time) and maps Railway&#39;s &lt;code&gt;PORT&lt;/code&gt; env var to &lt;code&gt;CAMOFOX_PORT&lt;/code&gt; automatically.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install Railway CLI, then:
railway link
railway up
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Set secrets via the Railway dashboard or CLI:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;railway variables set CAMOFOX_API_KEY=&quot;your-generated-key&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;h3&gt;Cookie Import&lt;/h3&gt; 
&lt;p&gt;Import cookies from your browser into Camoufox to skip interactive login on sites like LinkedIn, Amazon, etc.&lt;/p&gt; 
&lt;h4&gt;Setup&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;1. Generate a secret key:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# macOS / Linux
openssl rand -hex 32
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;2. Set the environment variable before starting OpenClaw:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export CAMOFOX_API_KEY=&quot;your-generated-key&quot;
openclaw start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The same key is used by both the plugin (to authenticate requests) and the server (to verify them). Both run from the same environment -- set it once.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Why an env var?&lt;/strong&gt; The key is a secret. Plugin config in &lt;code&gt;openclaw.json&lt;/code&gt; is stored in plaintext, so secrets don&#39;t belong there. Set &lt;code&gt;CAMOFOX_API_KEY&lt;/code&gt; in your shell profile, systemd unit, Docker env, or &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt; secrets.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Cookie import is disabled by default.&lt;/strong&gt; If &lt;code&gt;CAMOFOX_API_KEY&lt;/code&gt; is not set, the server rejects all cookie requests with 403.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;3. Export cookies from your browser:&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Install a browser extension that exports Netscape-format cookie files (e.g., &quot;cookies.txt&quot; for Chrome/Firefox). Export the cookies for the site you want to authenticate.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;4. Place the cookie file:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p ~/.camofox/cookies
cp ~/Downloads/linkedin_cookies.txt ~/.camofox/cookies/linkedin.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The default directory is &lt;code&gt;~/.camofox/cookies/&lt;/code&gt;. Override with &lt;code&gt;CAMOFOX_COOKIES_DIR&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;5. Ask your agent to import them:&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Import my LinkedIn cookies from linkedin.txt&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;The agent calls &lt;code&gt;camofox_import_cookies&lt;/code&gt; -&amp;gt; reads the file -&amp;gt; POSTs to the server with the Bearer token -&amp;gt; cookies are injected into the browser session. Subsequent &lt;code&gt;camofox_create_tab&lt;/code&gt; calls to &lt;a href=&quot;http://linkedin.com&quot;&gt;linkedin.com&lt;/a&gt; will be authenticated.&lt;/p&gt; 
&lt;h4&gt;How it works&lt;/h4&gt; 
&lt;pre&gt;&lt;code&gt;~/.camofox/cookies/linkedin.txt          (Netscape format, on disk)
        |
        v
camofox_import_cookies tool              (parses file, filters by domain)
        |
        v  POST /sessions/:userId/cookies
        |  Authorization: Bearer &amp;lt;CAMOFOX_API_KEY&amp;gt;
        |  Body: { cookies: [Playwright cookie objects] }
        v
camofox server                           (validates, sanitizes, injects)
        |
        v  context.addCookies(...)
        |
Camoufox browser session                 (authenticated browsing)
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;cookiesPath&lt;/code&gt; is resolved relative to the cookies directory -- path traversal outside it is blocked&lt;/li&gt; 
 &lt;li&gt;Max 500 cookies per request, 5MB file size limit&lt;/li&gt; 
 &lt;li&gt;Cookie objects are sanitized to an allowlist of Playwright fields&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Session Persistence&lt;/h3&gt; 
&lt;p&gt;By default, camofox persists each user&#39;s cookies and localStorage to &lt;code&gt;~/.camofox/profiles/&lt;/code&gt;. Sessions survive browser restarts -- log in once (via cookies or VNC), and subsequent sessions restore the authenticated state automatically.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;~/.camofox/
|-- cookies/          # Bootstrap cookie files (Netscape format)
\-- profiles/         # Persisted session state (auto-managed)
    \-- &amp;lt;hashed-userId&amp;gt;/
        \-- storage_state.json
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Override the directory with &lt;code&gt;CAMOFOX_PROFILE_DIR&lt;/code&gt; or set &lt;code&gt;&quot;profileDir&quot;&lt;/code&gt; in the persistence plugin config. To disable persistence, set &lt;code&gt;&quot;persistence&quot;: { &quot;enabled&quot;: false }&lt;/code&gt; in &lt;code&gt;camofox.config.json&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Session Tracing&lt;/h3&gt; 
&lt;p&gt;Capture a Playwright trace of every action in a session: page screenshots, DOM snapshots, network requests, and console output. Output is a single &lt;code&gt;.zip&lt;/code&gt; file you can open in Playwright&#39;s built-in Trace Viewer.&lt;/p&gt; 
&lt;p&gt;Opt-in per session by passing &lt;code&gt;trace: true&lt;/code&gt; when opening the first tab:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST http://localhost:9377/tabs \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;userId&quot;:&quot;agent1&quot;,&quot;sessionKey&quot;:&quot;task1&quot;,&quot;url&quot;:&quot;https://example.com&quot;,&quot;trace&quot;:true}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The trace is written when the session closes. Close the session to flush it, then list, fetch, and view:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Close the session to flush the trace
curl -X DELETE http://localhost:9377/sessions/agent1

# List trace files
curl http://localhost:9377/sessions/agent1/traces
# {&quot;traces&quot;:[{&quot;filename&quot;:&quot;trace-2026-04-18T04-05-00-...zip&quot;,&quot;sizeBytes&quot;:42810,&quot;createdAt&quot;:...}]}

# Download (Content-Type: application/zip)
curl http://localhost:9377/sessions/agent1/traces/trace-2026-04-18T04-05-00-abc.zip &amp;gt; session.zip

# View it in Playwright&#39;s Trace Viewer
npx playwright show-trace session.zip

# Delete
curl -X DELETE http://localhost:9377/sessions/agent1/traces/trace-2026-04-18T04-05-00-abc.zip
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Why traces instead of video: Camoufox is Firefox-based, and Playwright&#39;s &lt;code&gt;recordVideo&lt;/code&gt; is Chromium-only. Traces work on Firefox and give you more than video (network + DOM + console + screenshots).&lt;/p&gt; 
&lt;p&gt;Tracing cannot be toggled on an existing session. &lt;code&gt;DELETE /sessions/:userId&lt;/code&gt; first if you need to change the flag.&lt;/p&gt; 
&lt;p&gt;Storage defaults to &lt;code&gt;~/.camofox/traces/&amp;lt;hashed-userId&amp;gt;/&lt;/code&gt; and is swept on server startup:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;CAMOFOX_TRACES_DIR&lt;/code&gt; - base directory (default: &lt;code&gt;~/.camofox/traces&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;CAMOFOX_TRACES_MAX_BYTES&lt;/code&gt; - max size per trace, removed at next startup if exceeded (default: 50MB)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;CAMOFOX_TRACES_TTL_HOURS&lt;/code&gt; - traces older than this are removed at next startup (default: 24)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Standalone server usage&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST http://localhost:9377/sessions/agent1/cookies \
  -H &#39;Content-Type: application/json&#39; \
  -H &#39;Authorization: Bearer YOUR_CAMOFOX_API_KEY&#39; \
  -d &#39;{&quot;cookies&quot;:[{&quot;name&quot;:&quot;foo&quot;,&quot;value&quot;:&quot;bar&quot;,&quot;domain&quot;:&quot;example.com&quot;,&quot;path&quot;:&quot;/&quot;,&quot;expires&quot;:-1,&quot;httpOnly&quot;:false,&quot;secure&quot;:false}]}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Docker / &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt; / Railway&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -p 9377:9377 \
  -e CAMOFOX_API_KEY=&quot;your-generated-key&quot; \
  -v ~/.camofox/cookies:/home/node/.camofox/cookies:ro \
  camofox-browser
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;fly secrets set CAMOFOX_API_KEY=&quot;your-generated-key&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For Railway:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;railway variables set CAMOFOX_API_KEY=&quot;your-generated-key&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Proxy + GeoIP&lt;/h3&gt; 
&lt;p&gt;Route all browser traffic through a proxy with automatic locale, timezone, and geolocation derived from the proxy&#39;s IP address via Camoufox&#39;s built-in GeoIP.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Simple proxy (single endpoint):&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export PROXY_HOST=166.88.179.132
export PROXY_PORT=46040
export PROXY_USERNAME=myuser
export PROXY_PASSWORD=mypass
npm start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Backconnect proxy (rotating sticky sessions):&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;For providers like Decodo, Bright Data, or Oxylabs that offer a single gateway endpoint with session-based sticky IPs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export PROXY_STRATEGY=backconnect
export PROXY_BACKCONNECT_HOST=gate.provider.com
export PROXY_BACKCONNECT_PORT=7000
export PROXY_USERNAME=myuser
export PROXY_PASSWORD=mypass
npm start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Each browser context gets a unique sticky session, so different users get different IP addresses. Sessions rotate automatically on proxy errors or Google blocks.&lt;/p&gt; 
&lt;p&gt;Or in Docker:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker run -p 9377:9377 \
  -e PROXY_HOST=166.88.179.132 \
  -e PROXY_PORT=46040 \
  -e PROXY_USERNAME=myuser \
  -e PROXY_PASSWORD=mypass \
  camofox-browser
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;When a proxy is configured:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;All traffic routes through the proxy&lt;/li&gt; 
 &lt;li&gt;Camoufox&#39;s GeoIP automatically sets &lt;code&gt;locale&lt;/code&gt;, &lt;code&gt;timezone&lt;/code&gt;, and &lt;code&gt;geolocation&lt;/code&gt; to match the proxy&#39;s exit IP&lt;/li&gt; 
 &lt;li&gt;Browser fingerprint (language, timezone, coordinates) is consistent with the proxy location&lt;/li&gt; 
 &lt;li&gt;Without a proxy, defaults to &lt;code&gt;en-US&lt;/code&gt;, &lt;code&gt;America/Los_Angeles&lt;/code&gt;, San Francisco coordinates&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Telemetry&lt;/h3&gt; 
&lt;p&gt;Browser automation fails in ways that are hard to predict -- Cloudflare challenges, site redesigns breaking selectors, redirect loops, dialog storms, renderer crashes. The scope is wide and the failure modes are diverse. Without telemetry, the only signal is &quot;it didn&#39;t work.&quot;&lt;/p&gt; 
&lt;p&gt;Telemetry gives us structured data on &lt;em&gt;which sites fail&lt;/em&gt;, &lt;em&gt;how they fail&lt;/em&gt;, and &lt;em&gt;how often&lt;/em&gt;, so we can prioritize fixes for the patterns that actually affect users. It files GitHub Issues automatically when:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Uncaught exceptions&lt;/strong&gt; crash the process&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Event loop stalls&lt;/strong&gt; exceed 5 seconds (watchdog detection)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Frustration patterns&lt;/strong&gt; -- 3+ consecutive failures (timeout, dead context, navigation abort) on the same tab&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Each report includes the failure type, stack trace, tab health counters (HTTP status histogram, console errors, request failures, redirect depth), and the target URL -- all anonymized.&lt;/p&gt; 
&lt;h4&gt;How it works&lt;/h4&gt; 
&lt;p&gt;Telemetry is sent to a lightweight Cloudflare Worker endpoint at &lt;a href=&quot;https://camofox-telemetry.askjo.workers.dev/health&quot;&gt;&lt;code&gt;https://camofox-telemetry.askjo.workers.dev&lt;/code&gt;&lt;/a&gt;. The endpoint holds the GitHub App credentials as environment secrets -- &lt;strong&gt;no secrets are shipped in this package&lt;/strong&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lib/reporter.js (client, no secrets)
    |  anonymize -&amp;gt; POST https://camofox-telemetry.askjo.workers.dev/report
    v
Cloudflare Worker (holds GitHub App key)
    |  validate -&amp;gt; rate-limit -&amp;gt; dedup -&amp;gt; create GitHub Issue
    v
GitHub Issue created
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The endpoint source code is in this repo at &lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/workers/crash-reporter/index.ts&quot;&gt;&lt;code&gt;workers/crash-reporter/index.ts&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Verification&lt;/h4&gt; 
&lt;p&gt;You don&#39;t have to trust us -- verify what the live endpoint is running:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Ask the endpoint what code it&#39;s running
curl https://camofox-telemetry.askjo.workers.dev/source
# -&amp;gt; { &quot;commit&quot;: &quot;abc1234&quot;, &quot;sha256&quot;: &quot;e3b0c44...&quot;, &quot;source&quot;: &quot;https://github.com/...&quot; }

# 2. Compare the sha256 against the source in this repo
sha256sum workers/crash-reporter/index.ts

# 3. Check the commit matches what CI deployed
#    https://github.com/jo-inc/camofox-browser/actions/workflows/telemetry-deploy.yml
git log --oneline workers/crash-reporter/index.ts | head -1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If the hashes don&#39;t match, the endpoint is running different code than what&#39;s in the repo. The deploy workflow (&lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/.github/workflows/telemetry-deploy.yml&quot;&gt;&lt;code&gt;.github/workflows/telemetry-deploy.yml&lt;/code&gt;&lt;/a&gt;) injects the commit and source hash at deploy time -- every deploy is auditable in &lt;a href=&quot;https://github.com/jo-inc/camofox-browser/actions/workflows/telemetry-deploy.yml&quot;&gt;GitHub Actions&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Or skip verification entirely: &lt;code&gt;CAMOFOX_CRASH_REPORT_ENABLED=false&lt;/code&gt; disables all telemetry, or point to &lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/#self-hosted-telemetry-endpoint&quot;&gt;your own endpoint&lt;/a&gt; with &lt;code&gt;CAMOFOX_CRASH_REPORT_URL&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Privacy&lt;/h4&gt; 
&lt;p&gt;All reported data goes through paranoid anonymization (&lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/lib/reporter.js#L28-L290&quot;&gt;&lt;code&gt;lib/reporter.js&lt;/code&gt; L28-290&lt;/a&gt;) before leaving the process:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;URLs&lt;/strong&gt; -- well-known public domains (Google, Amazon, Reddit, Cloudflare, etc.) are shown verbatim so we can identify which sites cause problems. Private/unknown domains are replaced with a stable HMAC hash (&lt;code&gt;site-a1b2c3d4&lt;/code&gt;) -- same hash across reports for correlation, but not reversible to the original domain. Path segments become &lt;code&gt;*/*/*&lt;/code&gt; (depth only). Query params become &lt;code&gt;?[3]&lt;/code&gt; (count only). No keys, values, or path content is ever included.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;File paths&lt;/strong&gt; -&amp;gt; stripped to filename only (&lt;code&gt;&amp;lt;path&amp;gt;/server.js&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tokens, secrets, API keys&lt;/strong&gt; -&amp;gt; &lt;code&gt;&amp;lt;token&amp;gt;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;IPs, emails, env vars&lt;/strong&gt; -&amp;gt; redacted&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Docker/Fly machine IDs&lt;/strong&gt; -&amp;gt; &lt;code&gt;&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tab health&lt;/strong&gt; -- pure counters (crash count, error count, status code histogram). No page content, no URLs, no user data.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Duplicate issues are detected by stack signature and get a &lt;code&gt;+1&lt;/code&gt; comment instead of a new issue.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Disable telemetry
export CAMOFOX_CRASH_REPORT_ENABLED=false

# Point to your own endpoint (see below)
export CAMOFOX_CRASH_REPORT_URL=https://your-endpoint.example.com/report

# Adjust rate limit (default: 10 per hour)
export CAMOFOX_CRASH_REPORT_RATE_LIMIT=5
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Self-hosted telemetry endpoint&lt;/h4&gt; 
&lt;p&gt;To file telemetry reports in your own GitHub repo instead of &lt;code&gt;jo-inc/camofox-browser&lt;/code&gt;:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Create a GitHub App&lt;/strong&gt; -- &lt;a href=&quot;https://github.com/settings/apps/new&quot;&gt;Settings -&amp;gt; Developer settings -&amp;gt; GitHub Apps -&amp;gt; New&lt;/a&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Permissions: &lt;strong&gt;Repository -&amp;gt; Issues -&amp;gt; Read &amp;amp; Write&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;Uncheck &lt;strong&gt;Webhook -&amp;gt; Active&lt;/strong&gt; (not needed)&lt;/li&gt; 
   &lt;li&gt;Click &lt;strong&gt;Generate a key&lt;/strong&gt; -- downloads a &lt;code&gt;.pem&lt;/code&gt; file&lt;/li&gt; 
   &lt;li&gt;Install the app on your target repo (Install App -&amp;gt; select repo)&lt;/li&gt; 
   &lt;li&gt;Note your &lt;strong&gt;App ID&lt;/strong&gt; (number on the app&#39;s General page) and &lt;strong&gt;Installation ID&lt;/strong&gt; (from the URL after installing: &lt;code&gt;github.com/settings/installations/{id}&lt;/code&gt;)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Deploy the endpoint&lt;/strong&gt; -- clone this repo and deploy the worker:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd workers/crash-reporter
# Edit wrangler.toml: set account_id to your Cloudflare account ID
npx wrangler deploy
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;The worker is a single TypeScript file with zero npm dependencies. It also runs on Deno, Bun, or any runtime with the Web Crypto API.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Set worker secrets:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd workers/crash-reporter
echo &quot;YOUR_APP_ID&quot; | npx wrangler secret put GH_APP_ID
echo &quot;YOUR_INSTALL_ID&quot; | npx wrangler secret put GH_INSTALL_ID
# Key must be PKCS#8 DER base64 (not raw PEM)
openssl pkcs8 -topk8 -inform PEM -outform DER -nocrypt -in your-app.pem | \
  base64 | tr -d &#39;\n&#39; | npx wrangler secret put GH_PRIVATE_KEY
# File issues in your repo
echo &quot;your-org/your-repo&quot; | npx wrangler secret put GH_REPO
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Point camofox-browser to your endpoint:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export CAMOFOX_CRASH_REPORT_URL=https://your-worker.your-subdomain.workers.dev/report
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Verify:&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl https://your-worker.your-subdomain.workers.dev/health
# -&amp;gt; {&quot;status&quot;:&quot;ok&quot;}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Structured Logging&lt;/h3&gt; 
&lt;p&gt;All log output is JSON (one object per line) for easy parsing by log aggregators:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{&quot;ts&quot;:&quot;2026-02-11T23:45:01.234Z&quot;,&quot;level&quot;:&quot;info&quot;,&quot;msg&quot;:&quot;req&quot;,&quot;reqId&quot;:&quot;a1b2c3d4&quot;,&quot;method&quot;:&quot;POST&quot;,&quot;path&quot;:&quot;/tabs&quot;,&quot;userId&quot;:&quot;agent1&quot;}
{&quot;ts&quot;:&quot;2026-02-11T23:45:01.567Z&quot;,&quot;level&quot;:&quot;info&quot;,&quot;msg&quot;:&quot;res&quot;,&quot;reqId&quot;:&quot;a1b2c3d4&quot;,&quot;status&quot;:200,&quot;ms&quot;:333}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Health check requests (&lt;code&gt;/health&lt;/code&gt;) are excluded from request logging to reduce noise.&lt;/p&gt; 
&lt;h3&gt;Basic Browsing&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Create a tab
curl -X POST http://localhost:9377/tabs \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;userId&quot;: &quot;agent1&quot;, &quot;sessionKey&quot;: &quot;task1&quot;, &quot;url&quot;: &quot;https://example.com&quot;}&#39;

# Get accessibility snapshot with element refs
curl &quot;http://localhost:9377/tabs/TAB_ID/snapshot?userId=agent1&quot;
# -&amp;gt; { &quot;snapshot&quot;: &quot;[button e1] Submit  [link e2] Learn more&quot;, ... }

# Click by ref
curl -X POST http://localhost:9377/tabs/TAB_ID/click \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;userId&quot;: &quot;agent1&quot;, &quot;ref&quot;: &quot;e1&quot;}&#39;

# Type into an element
curl -X POST http://localhost:9377/tabs/TAB_ID/type \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;userId&quot;: &quot;agent1&quot;, &quot;ref&quot;: &quot;e2&quot;, &quot;text&quot;: &quot;hello&quot;, &quot;pressEnter&quot;: true}&#39;

# Navigate with a search macro
curl -X POST http://localhost:9377/tabs/TAB_ID/navigate \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;userId&quot;: &quot;agent1&quot;, &quot;macro&quot;: &quot;@google_search&quot;, &quot;query&quot;: &quot;best coffee beans&quot;}&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;API&lt;/h2&gt; 
&lt;h3&gt;Tab Lifecycle&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Method&lt;/th&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Create tab with initial URL&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs?userId=X&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;List open tabs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/stats&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Tab stats (tool calls, visited URLs)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DELETE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close tab&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DELETE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/group/:groupId&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close all tabs in a group&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;DELETE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/sessions/:userId&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close all tabs for a user&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Page Interaction&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Method&lt;/th&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/snapshot&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Accessibility snapshot with element refs. Query params: &lt;code&gt;includeScreenshot=true&lt;/code&gt; (add base64 PNG), &lt;code&gt;offset=N&lt;/code&gt; (paginate large snapshots)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/click&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Click element by ref or CSS selector&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/type&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Type text into element&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/press&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Press a keyboard key&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/scroll&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll page (up/down/left/right)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/navigate&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Navigate to URL or search macro&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/wait&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Wait for selector or timeout&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/links&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Extract all links on page&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/images&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;List &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; elements. Query params: &lt;code&gt;includeData=true&lt;/code&gt; (return inline data URLs), &lt;code&gt;maxBytes=N&lt;/code&gt;, &lt;code&gt;limit=N&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/downloads&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;List captured downloads. Query params: &lt;code&gt;includeData=true&lt;/code&gt; (base64 file data), &lt;code&gt;consume=true&lt;/code&gt; (clear after read), &lt;code&gt;maxBytes=N&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/screenshot&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Take screenshot&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/back&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go back&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/forward&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go forward&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/tabs/:id/refresh&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Refresh page&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;YouTube Transcript&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Method&lt;/th&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/youtube/transcript&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Extract captions from a YouTube video&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST http://localhost:9377/youtube/transcript \
  -H &#39;Content-Type: application/json&#39; \
  -d &#39;{&quot;url&quot;: &quot;https://www.youtube.com/watch?v=dQw4w9WgXcQ&quot;, &quot;languages&quot;: [&quot;en&quot;]}&#39;
# -&amp;gt; { &quot;status&quot;: &quot;ok&quot;, &quot;transcript&quot;: &quot;[00:18] [music] We&#39;re no strangers to love [music]\n...&quot;, &quot;video_title&quot;: &quot;...&quot;, &quot;total_words&quot;: 548 }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Uses &lt;a href=&quot;https://github.com/yt-dlp/yt-dlp&quot;&gt;yt-dlp&lt;/a&gt; when available (fast, no browser needed). Falls back to a browser-based intercept method if yt-dlp is not installed -- this is slower and less reliable due to YouTube ad pre-rolls.&lt;/p&gt; 
&lt;h3&gt;Server&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Method&lt;/th&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/health&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Health check&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/start&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Start browser engine&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/stop&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Stop browser engine&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Sessions&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Method&lt;/th&gt; 
   &lt;th&gt;Endpoint&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;POST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/sessions/:userId/cookies&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Add cookies to a user session (Playwright cookie objects)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;GET&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;/sessions/:userId/storage_state&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Export cookies + localStorage (&lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/plugins/vnc/&quot;&gt;VNC plugin&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Search Macros&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;@google_search&lt;/code&gt; | &lt;code&gt;@youtube_search&lt;/code&gt; | &lt;code&gt;@amazon_search&lt;/code&gt; | &lt;code&gt;@reddit_search&lt;/code&gt; | &lt;code&gt;@reddit_subreddit&lt;/code&gt; | &lt;code&gt;@wikipedia_search&lt;/code&gt; | &lt;code&gt;@twitter_search&lt;/code&gt; | &lt;code&gt;@yelp_search&lt;/code&gt; | &lt;code&gt;@spotify_search&lt;/code&gt; | &lt;code&gt;@netflix_search&lt;/code&gt; | &lt;code&gt;@linkedin_search&lt;/code&gt; | &lt;code&gt;@instagram_search&lt;/code&gt; | &lt;code&gt;@tiktok_search&lt;/code&gt; | &lt;code&gt;@twitch_search&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Reddit macros return JSON directly (no HTML parsing needed):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;@reddit_search&lt;/code&gt; - search all of Reddit, returns JSON with 25 results&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;@reddit_subreddit&lt;/code&gt; - browse a subreddit (e.g., query &lt;code&gt;&quot;programming&quot;&lt;/code&gt; -&amp;gt; &lt;code&gt;/r/programming.json&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Environment Variables&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Variable&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_PORT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Server port&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;9377&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PORT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Server port (fallback, for platforms like &lt;a href=&quot;http://Fly.io&quot;&gt;Fly.io&lt;/a&gt;, Railway)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;9377&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_API_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enable cookie import endpoint (disabled if unset)&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_ADMIN_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Required for &lt;code&gt;POST /stop&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_ACCESS_KEY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;If set, all routes (except &lt;code&gt;/health&lt;/code&gt;, cookie import, and &lt;code&gt;/stop&lt;/code&gt;) require &lt;code&gt;Authorization: Bearer &amp;lt;key&amp;gt;&lt;/code&gt;. Lets you safely expose the server beyond loopback.&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOUFOX_EXECUTABLE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;External Camoufox executable to use instead of downloading/launching the bundled cache. Must point to a Camoufox bundle with sibling resources.&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOUFOX_EXECUTABLE_PATH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Compatibility alias for &lt;code&gt;CAMOUFOX_EXECUTABLE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_EXECUTABLE_PATH&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Compatibility alias for &lt;code&gt;CAMOUFOX_EXECUTABLE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_COOKIES_DIR&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Directory for cookie files&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;~/.camofox/cookies&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_PROFILE_DIR&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Directory for persisted session profiles&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;~/.camofox/profiles&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_TRACES_DIR&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Directory for session trace zips&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;~/.camofox/traces&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_TRACES_MAX_BYTES&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Max size per trace, removed on next startup if exceeded&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;52428800&lt;/code&gt; (50MB)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_TRACES_TTL_HOURS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Traces older than this are swept on startup&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;24&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MAX_SESSIONS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Max concurrent browser sessions&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;50&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MAX_TABS_PER_SESSION&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Max tabs per session&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;SESSION_TIMEOUT_MS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Session inactivity timeout&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;1800000&lt;/code&gt; (30min)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;BROWSER_IDLE_TIMEOUT_MS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Kill browser when idle (0 = never)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;300000&lt;/code&gt; (5min)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;HANDLER_TIMEOUT_MS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Max time for any handler&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;30000&lt;/code&gt; (30s)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MAX_CONCURRENT_PER_USER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Concurrent request cap per user&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;MAX_OLD_SPACE_SIZE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Node.js V8 heap limit (MB)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;128&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_STRATEGY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Proxy mode: &lt;code&gt;backconnect&lt;/code&gt; (rotating sticky sessions) or blank (single endpoint)&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_PROVIDER&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Provider name for session format (e.g. &lt;code&gt;decodo&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;decodo&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_HOST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Proxy hostname or IP (simple mode)&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_PORT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Proxy port (simple mode)&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_USERNAME&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Proxy auth username&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_PASSWORD&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Proxy auth password&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_BACKCONNECT_HOST&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Backconnect gateway hostname&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_BACKCONNECT_PORT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Backconnect gateway port&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;7000&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_COUNTRY&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Target country for proxy geo-targeting&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;PROXY_STATE&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Target state/region for proxy geo-targeting&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;TAB_INACTIVITY_MS&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close tabs idle longer than this&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;300000&lt;/code&gt; (5min)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_CRASH_REPORT_ENABLED&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enable anonymized crash/hang telemetry (&lt;code&gt;false&lt;/code&gt; to disable)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_CRASH_REPORT_URL&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Telemetry endpoint (&lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/#self-hosted-telemetry-endpoint&quot;&gt;self-hosted endpoint&lt;/a&gt;)&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;https://camofox-telemetry.askjo.workers.dev/report&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_CRASH_REPORT_REPO&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;GitHub repo for telemetry issues&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;jo-inc/camofox-browser&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;CAMOFOX_CRASH_REPORT_RATE_LIMIT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Max telemetry reports per hour&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ENABLE_VNC&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Enable VNC plugin for interactive browser access (&lt;code&gt;1&lt;/code&gt;)&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;VNC_PASSWORD&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Password for VNC access (recommended in production)&lt;/td&gt; 
   &lt;td&gt;-&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NOVNC_PORT&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;noVNC web UI port&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;6080&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;Browser Instance (Camoufox)
\-- User Session (BrowserContext) - isolated cookies/storage
    |-- Tab Group (sessionKey: &quot;conv1&quot;)
    |   |-- Tab (google.com)
    |   \-- Tab (github.com)
    \-- Tab Group (sessionKey: &quot;conv2&quot;)
        \-- Tab (amazon.com)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Sessions auto-expire after 30 minutes of inactivity. The browser itself shuts down after 5 minutes with no active sessions, and relaunches on the next request.&lt;/p&gt; 
&lt;p&gt;When a session&#39;s tab limit is reached, the oldest/least-used tab is automatically recycled instead of returning an error -- so long-running agent sessions don&#39;t hit dead ends.&lt;/p&gt; 
&lt;h2&gt;Security Model&lt;/h2&gt; 
&lt;p&gt;This section documents the security boundaries of camofox-browser for users and automated security reviewers.&lt;/p&gt; 
&lt;h3&gt;Code isolation&lt;/h3&gt; 
&lt;p&gt;All &lt;code&gt;process.env&lt;/code&gt; reads are centralized in &lt;code&gt;lib/config.js&lt;/code&gt;. All &lt;code&gt;child_process&lt;/code&gt; usage is in &lt;code&gt;lib/launcher.js&lt;/code&gt; (server subprocess) and &lt;code&gt;plugins/youtube/youtube.js&lt;/code&gt; (yt-dlp). The main &lt;code&gt;server.js&lt;/code&gt; has route handlers but zero &lt;code&gt;process.env&lt;/code&gt; reads and zero &lt;code&gt;child_process&lt;/code&gt; imports. No single file combines environment/credential access with network sends.&lt;/p&gt; 
&lt;h3&gt;No embedded secrets&lt;/h3&gt; 
&lt;p&gt;Zero credentials, private keys, API tokens, or signing keys ship in this package. All secrets are provided at runtime via environment variables (&lt;code&gt;CAMOFOX_API_KEY&lt;/code&gt;, &lt;code&gt;CAMOFOX_ACCESS_KEY&lt;/code&gt;) or are Cloudflare Worker environment secrets (telemetry endpoint GitHub App key).&lt;/p&gt; 
&lt;h3&gt;Cookie import is disabled by default&lt;/h3&gt; 
&lt;p&gt;The cookie import endpoint (&lt;code&gt;POST /sessions/:userId/cookies&lt;/code&gt;) is gated behind &lt;code&gt;CAMOFOX_API_KEY&lt;/code&gt;. If this env var is not set, the server rejects all cookie import requests with HTTP 403. Cookie files are read from a sandboxed directory (&lt;code&gt;~/.camofox/cookies/&lt;/code&gt;) with path traversal protection -- attempts to escape the directory are blocked. Max 500 cookies per request, 5MB file size limit.&lt;/p&gt; 
&lt;h3&gt;Access control&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;CAMOFOX_ACCESS_KEY&lt;/code&gt; provides global bearer token authentication for all routes (except &lt;code&gt;/health&lt;/code&gt;). When set, every request must include &lt;code&gt;Authorization: Bearer &amp;lt;key&amp;gt;&lt;/code&gt;. Recommended for any deployment beyond localhost.&lt;/p&gt; 
&lt;h3&gt;Binary download&lt;/h3&gt; 
&lt;p&gt;The Camoufox browser engine (~300MB) is downloaded at &lt;code&gt;npm install&lt;/code&gt; time by &lt;a href=&quot;https://www.npmjs.com/package/camoufox-js&quot;&gt;&lt;code&gt;camoufox-js&lt;/code&gt;&lt;/a&gt;, an npm package maintained by the &lt;a href=&quot;https://camoufox.com&quot;&gt;Camoufox project&lt;/a&gt;. It downloads from &lt;a href=&quot;https://github.com/nicedayzhu/camoufox/releases&quot;&gt;official GitHub releases&lt;/a&gt; with integrity verification handled by &lt;code&gt;camoufox-js&lt;/code&gt;. No custom download URLs, no URL shorteners, no raw IP addresses.&lt;/p&gt; 
&lt;h3&gt;Telemetry&lt;/h3&gt; 
&lt;p&gt;Anonymized crash/hang telemetry is sent to a Cloudflare Worker endpoint. The endpoint source is &lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/workers/crash-reporter/index.ts&quot;&gt;in this repo&lt;/a&gt; and auditable. Verification: &lt;code&gt;GET /source&lt;/code&gt; on the endpoint returns the deployed commit hash and sha256 so you can compare against the repo. The reporter (&lt;a href=&quot;https://raw.githubusercontent.com/jo-inc/camofox-browser/master/lib/reporter.js#L28-L290&quot;&gt;&lt;code&gt;lib/reporter.js&lt;/code&gt; L28-290&lt;/a&gt;) applies paranoid anonymization: private domains are HMAC-hashed (not reversible), paths are stripped, tokens/IPs/emails are redacted. No page content, cookies, or user data is ever sent. Disable with &lt;code&gt;CAMOFOX_CRASH_REPORT_ENABLED=false&lt;/code&gt; or point to your own endpoint with &lt;code&gt;CAMOFOX_CRASH_REPORT_URL&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Session persistence&lt;/h3&gt; 
&lt;p&gt;The persistence plugin saves cookies and localStorage to &lt;code&gt;~/.camofox/profiles/&amp;lt;hashed-userId&amp;gt;/&lt;/code&gt; so authenticated sessions survive browser restarts. UserIds are hashed for directory names. Disable via &lt;code&gt;camofox.config.json&lt;/code&gt; by removing &lt;code&gt;persistence&lt;/code&gt; from the plugins array.&lt;/p&gt; 
&lt;h3&gt;Network access&lt;/h3&gt; 
&lt;p&gt;Outbound connections are made to: (1) URLs the agent navigates to (core functionality), (2) the telemetry endpoint (anonymized, opt-out available). Inbound: the REST API on localhost:9377 (default), optionally protected by &lt;code&gt;CAMOFOX_ACCESS_KEY&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Subprocess usage&lt;/h3&gt; 
&lt;p&gt;Two subprocesses may be spawned: (1) the Camoufox browser engine (core functionality, &lt;code&gt;lib/launcher.js&lt;/code&gt;), (2) yt-dlp for YouTube transcript extraction (optional, &lt;code&gt;plugins/youtube/youtube.js&lt;/code&gt;). Both are isolated in dedicated files separate from route handlers.&lt;/p&gt; 
&lt;h2&gt;Testing&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm test              # all tests
npm run test:e2e      # e2e tests only
npm run test:live     # live site tests (Google, macros)
npm run test:debug    # with server output
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;npm&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm install @askjo/camofox-browser
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://camoufox.com&quot;&gt;Camoufox&lt;/a&gt; - Firefox-based browser with C++ anti-detection&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://camoufox.com/about/&quot;&gt;Donate to Camoufox&#39;s original creator daijro&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://openclaw.ai&quot;&gt;OpenClaw&lt;/a&gt; - Open-source AI agent framework&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Crypto Scam Warning&lt;/h2&gt; 
&lt;p&gt;Sketchy people are doing sketchy things with crypto tokens named &quot;Camofox&quot; now that this project is getting attention. &lt;strong&gt;Camofox is not a crypto project and will never be one.&lt;/strong&gt; Any token, coin, or NFT using the Camofox name has nothing to do with us.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/5bf81a070cb0884f43eabe2f84315b69f7ef591db7dc9e8ed3a0a15fdf2117db/jo-inc/camofox-browser" medium="image" />
      
    </item>
    
    <item>
      <title>coreyhaines31/marketingskills</title>
      <link>https://github.com/coreyhaines31/marketingskills</link>
      <description>&lt;p&gt;Marketing skills for Claude Code and AI agents. CRO, copywriting, SEO, analytics, and growth engineering.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Marketing Skills for AI Agents&lt;/h1&gt; 
&lt;p&gt;A collection of AI agent skills focused on marketing tasks. Built for technical marketers and founders who want AI coding agents to help with conversion optimization, copywriting, SEO, analytics, and growth engineering. Works with Claude Code, OpenAI Codex, Cursor, Windsurf, and any agent that supports the &lt;a href=&quot;https://agentskills.io&quot;&gt;Agent Skills spec&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Built by &lt;a href=&quot;https://corey.co?ref=marketingskills&quot;&gt;Corey Haines&lt;/a&gt;. Need hands-on help? Check out &lt;a href=&quot;https://conversionfactory.co?ref=marketingskills&quot;&gt;Conversion Factory&lt;/a&gt; — Corey&#39;s agency for conversion optimization, landing pages, and growth strategy. Want to learn more about marketing? Subscribe to &lt;a href=&quot;https://swipefiles.com?ref=marketingskills&quot;&gt;Swipe Files&lt;/a&gt;. Want an autonomous AI agent that uses these skills to be your CMO? Try &lt;a href=&quot;https://magistermarketing.com?ref=marketingskills&quot;&gt;Magister&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;New to the terminal and coding agents? Check out the companion guide &lt;a href=&quot;https://codingformarketers.com?ref=marketingskills&quot;&gt;Coding for Marketers&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Contributions welcome!&lt;/strong&gt; Found a way to improve a skill or have a new one to add? &lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/#contributing&quot;&gt;Open a PR&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Run into a problem or have a question? &lt;a href=&quot;https://github.com/coreyhaines31/marketingskills/issues&quot;&gt;Open an issue&lt;/a&gt; — we&#39;re happy to help.&lt;/p&gt; 
&lt;h2&gt;What are Skills?&lt;/h2&gt; 
&lt;p&gt;Skills are markdown files that give AI agents specialized knowledge and workflows for specific tasks. When you add these to your project, your agent can recognize when you&#39;re working on a marketing task and apply the right frameworks and best practices.&lt;/p&gt; 
&lt;h2&gt;How Skills Work Together&lt;/h2&gt; 
&lt;p&gt;Skills reference each other and build on shared context. The &lt;code&gt;product-marketing&lt;/code&gt; skill is the foundation — every other skill checks it first to understand your product, audience, and positioning before doing anything.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;                            ┌──────────────────────────────────────┐
                            │          product-marketing           │
                            │    (read by all other skills first)  │
                            └──────────────────┬───────────────────┘
                                               │
    ┌──────────────┬─────────────┬─────────────┼─────────────┬──────────────┬──────────────┐
    ▼              ▼             ▼             ▼             ▼              ▼              ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────┐ ┌──────────┐ ┌─────────────┐ ┌───────────┐
│  SEO &amp;amp;   │ │   CRO    │ │Content &amp;amp; │ │  Paid &amp;amp;    │ │ Growth &amp;amp; │ │  Sales &amp;amp;    │ │ Strategy  │
│ Content  │ │          │ │   Copy   │ │Measurement │ │Retention │ │    GTM      │ │           │
├──────────┤ ├──────────┤ ├──────────┤ ├────────────┤ ├──────────┤ ├─────────────┤ ├───────────┤
│seo-audit │ │cro       │ │copywritng│ │ads         │ │referrals │ │revops       │ │mktg-ideas │
│ai-seo    │ │signup    │ │copy-edit │ │ad-creative │ │free-tools│ │sales-enable │ │mktg-psych │
│site-arch │ │onboarding│ │cold-email│ │ab-testing  │ │churn-    │ │launch       │ │customer-  │
│programm  │ │popups    │ │emails    │ │analytics   │ │ prevent  │ │pricing      │ │ research  │
│schema    │ │paywalls  │ │social    │ │            │ │community │ │competitors  │ │           │
│content   │ │          │ │video     │ │            │ │lead-magnt│ │comp-profile │ │           │
│aso       │ │          │ │image     │ │            │ │co-mktg   │ │directory    │ │           │
└────┬─────┘ └────┬─────┘ └────┬─────┘ └─────┬──────┘ └────┬─────┘ └──────┬──────┘ └─────┬─────┘
     │            │            │              │             │              │              │
     └────────────┴─────┬──────┴──────────────┴─────────────┴──────────────┴──────────────┘
                        │
         Skills cross-reference each other:
           copywriting ↔ cro ↔ ab-testing
           revops ↔ sales-enablement ↔ cold-email
           seo-audit ↔ schema ↔ ai-seo
           customer-research → copywriting, cro, competitors
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See each skill&#39;s &lt;strong&gt;Related Skills&lt;/strong&gt; section for the full dependency map.&lt;/p&gt; 
&lt;h2&gt;Available Skills&lt;/h2&gt; 
&lt;!-- SKILLS:START --&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Skill&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/ab-testing/&quot;&gt;ab-testing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program....&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/ad-creative/&quot;&gt;ad-creative&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/ads/&quot;&gt;ads&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X,...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/ai-seo/&quot;&gt;ai-seo&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to optimize content for AI search engines, get cited by LLMs, or appear in AI-generated answers....&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/analytics/&quot;&gt;analytics&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to set up, improve, or audit analytics tracking and measurement. Also use when the user mentions...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/aso/&quot;&gt;aso&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to audit or optimize an App Store or Google Play listing. Also use when the user mentions &#39;ASO...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/churn-prevention/&quot;&gt;churn-prevention&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/co-marketing/&quot;&gt;co-marketing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to find co-marketing partners, plan joint campaigns, or brainstorm partnership opportunities. Use...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/cold-email/&quot;&gt;cold-email&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Write B2B cold emails and follow-up sequences that get replies. Use when the user wants to write cold outreach emails,...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/community-marketing/&quot;&gt;community-marketing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Build and leverage online communities to drive product growth and brand loyalty. Use when the user wants to create a...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/competitor-profiling/&quot;&gt;competitor-profiling&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to research, profile, or analyze competitors from their URLs. Also use when the user mentions...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/competitors/&quot;&gt;competitors&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create competitor comparison or alternative pages for SEO and sales enablement. Also use when...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/content-strategy/&quot;&gt;content-strategy&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to plan a content strategy, decide what content to create, or figure out what topics to cover. Also...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/copy-editing/&quot;&gt;copy-editing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to edit, review, or improve existing marketing copy, or refresh outdated content. Also use when the...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/copywriting/&quot;&gt;copywriting&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to write, rewrite, or improve marketing copy for any page — including homepage, landing pages,...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/cro/&quot;&gt;cro&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to optimize, improve, or increase conversions on any marketing page or form — including homepage,...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/customer-research/&quot;&gt;customer-research&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to conduct, analyze, or synthesize customer research. Use when the user mentions &quot;customer...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/directory-submissions/&quot;&gt;directory-submissions&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to submit their product to startup, SaaS, AI, agent, MCP, no-code, or review directories for...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/emails/&quot;&gt;emails&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/free-tools/&quot;&gt;free-tools&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/image/&quot;&gt;image&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create, generate, edit, or optimize images for marketing — blog heroes, social graphics, product...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/launch/&quot;&gt;launch&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to plan a product launch, feature announcement, or release strategy. Also use when the user...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/lead-magnets/&quot;&gt;lead-magnets&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create, plan, or optimize a lead magnet for email capture or lead generation. Also use when the...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/marketing-ideas/&quot;&gt;marketing-ideas&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user needs marketing ideas, inspiration, or strategies for their SaaS or software product. Also use when the...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/marketing-psychology/&quot;&gt;marketing-psychology&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to apply psychological principles, mental models, or behavioral science to marketing. Also use when...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/onboarding/&quot;&gt;onboarding&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value. Also...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/paywalls/&quot;&gt;paywalls&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates. Also use...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/popups/&quot;&gt;popups&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/pricing/&quot;&gt;pricing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/product-marketing/&quot;&gt;product-marketing&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create or update their product marketing context document. Also use when the user mentions...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/programmatic-seo/&quot;&gt;programmatic-seo&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create SEO-driven pages at scale using templates and data. Also use when the user mentions...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/referrals/&quot;&gt;referrals&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create, optimize, or analyze a referral program, affiliate program, or word-of-mouth strategy....&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/revops/&quot;&gt;revops&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes....&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/sales-enablement/&quot;&gt;sales-enablement&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts. Also...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/schema/&quot;&gt;schema&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to add, fix, or optimize schema markup and structured data on their site. Also use when the user...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/seo-audit/&quot;&gt;seo-audit&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to audit, review, or diagnose SEO issues on their site. Also use when the user mentions &quot;SEO...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/signup/&quot;&gt;signup&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to optimize signup, registration, account creation, or trial activation flows. Also use when the...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/site-architecture/&quot;&gt;site-architecture&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to plan, map, or restructure their website&#39;s page hierarchy, navigation, URL structure, or internal...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/social/&quot;&gt;social&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram,...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/skills/video/&quot;&gt;video&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When the user wants to create, generate, or produce video content using AI tools or programmatic frameworks. Also use...&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- SKILLS:END --&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Option 1: CLI Install (Recommended)&lt;/h3&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://github.com/vercel-labs/skills&quot;&gt;npx skills&lt;/a&gt; to install skills directly:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install all skills
npx skills add coreyhaines31/marketingskills

# Install specific skills
npx skills add coreyhaines31/marketingskills --skill cro copywriting

# List available skills
npx skills add coreyhaines31/marketingskills --list
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This automatically installs to your &lt;code&gt;.agents/skills/&lt;/code&gt; directory (and symlinks into &lt;code&gt;.claude/skills/&lt;/code&gt; for Claude Code compatibility).&lt;/p&gt; 
&lt;h3&gt;Option 2: Claude Code Plugin&lt;/h3&gt; 
&lt;p&gt;Install via Claude Code&#39;s built-in plugin system:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Add the marketplace
/plugin marketplace add coreyhaines31/marketingskills

# Install all marketing skills
/plugin install marketing-skills
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Option 3: Clone and Copy&lt;/h3&gt; 
&lt;p&gt;Clone the entire repo and copy the skills folder:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/coreyhaines31/marketingskills.git
cp -r marketingskills/skills/* .agents/skills/
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Option 4: Git Submodule&lt;/h3&gt; 
&lt;p&gt;Add as a submodule for easy updates:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git submodule add https://github.com/coreyhaines31/marketingskills.git .agents/marketingskills
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then reference skills from &lt;code&gt;.agents/marketingskills/skills/&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Option 5: Fork and Customize&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fork this repository&lt;/li&gt; 
 &lt;li&gt;Customize skills for your specific needs&lt;/li&gt; 
 &lt;li&gt;Clone your fork into your projects&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;Option 6: SkillKit (Multi-Agent)&lt;/h3&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://github.com/rohitg00/skillkit&quot;&gt;SkillKit&lt;/a&gt; to install skills across multiple AI agents (Claude Code, Cursor, Copilot, etc.):&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install all skills
npx skillkit install coreyhaines31/marketingskills

# Install specific skills
npx skillkit install coreyhaines31/marketingskills --skill cro copywriting

# List available skills
npx skillkit install coreyhaines31/marketingskills --list
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Upgrading from v1.x to v2.0&lt;/h2&gt; 
&lt;p&gt;v2.0 renames 17 skills and consolidates &lt;code&gt;page-cro&lt;/code&gt; + &lt;code&gt;form-cro&lt;/code&gt; into a single &lt;code&gt;cro&lt;/code&gt; skill. If you installed the v1.x skills, you&#39;ll have &lt;strong&gt;stale old-name folders&lt;/strong&gt; in your install directory after upgrading — the new skills install alongside the old ones, so you&#39;ll see both &lt;code&gt;skills/page-cro/&lt;/code&gt; and &lt;code&gt;skills/cro/&lt;/code&gt;, etc. Clean them up:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# From the directory where you installed the skills (e.g., .agents/skills/ or .claude/skills/)
rm -rf page-cro form-cro \
       ab-test-setup analytics-tracking aso-audit competitor-alternatives \
       email-sequence free-tool-strategy launch-strategy onboarding-cro \
       paid-ads paywall-upgrade-cro popup-cro pricing-strategy \
       product-marketing-context referral-program schema-markup \
       signup-flow-cro social-content
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then reinstall the v2.0 skills via your usual method (e.g., &lt;code&gt;npx skills add coreyhaines31/marketingskills&lt;/code&gt;).&lt;/p&gt; 
&lt;h3&gt;Migrate the product marketing context file&lt;/h3&gt; 
&lt;p&gt;In v2.0 the context file moved from &lt;code&gt;.claude/&lt;/code&gt; to &lt;code&gt;.agents/&lt;/code&gt; and was renamed from &lt;code&gt;product-marketing-context.md&lt;/code&gt; to &lt;code&gt;product-marketing.md&lt;/code&gt;. Move your existing context file:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p .agents
# v2.0 file (or pre-v2.0 file with new name)
mv .claude/product-marketing.md .agents/product-marketing.md 2&amp;gt;/dev/null
# pre-v2.0 file with legacy name
mv .claude/product-marketing-context.md .agents/product-marketing.md 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Skills will still check &lt;code&gt;.claude/&lt;/code&gt; and the legacy &lt;code&gt;product-marketing-context.md&lt;/code&gt; filename as fallbacks, so nothing breaks if you don&#39;t migrate.&lt;/p&gt; 
&lt;h3&gt;Full rename map&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Old&lt;/th&gt; 
   &lt;th&gt;New&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;ab-test-setup&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ab-testing&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;analytics-tracking&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;analytics&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;aso-audit&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;aso&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;competitor-alternatives&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;competitors&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;email-sequence&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;emails&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;form-cro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;merged into &lt;code&gt;cro&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;free-tool-strategy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;free-tools&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;launch-strategy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;launch&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;onboarding-cro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;onboarding&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;page-cro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;cro&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;paid-ads&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;paywall-upgrade-cro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;paywalls&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;popup-cro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;popups&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;pricing-strategy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;pricing&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;product-marketing-context&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;product-marketing&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;referral-program&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;referrals&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;schema-markup&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;schema&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;signup-flow-cro&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;signup&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;social-content&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;social&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Once installed, just ask your agent to help with marketing tasks:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;Help me optimize this landing page for conversions&quot;
→ Uses cro skill

&quot;Write homepage copy for my SaaS&quot;
→ Uses copywriting skill

&quot;Set up GA4 tracking for signups&quot;
→ Uses analytics skill

&quot;Create a 5-email welcome sequence&quot;
→ Uses emails skill
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also invoke skills directly:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/cro
/emails
/seo-audit
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Skill Categories&lt;/h2&gt; 
&lt;h3&gt;Conversion Optimization&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;cro&lt;/code&gt; - Pages and forms&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;signup&lt;/code&gt; - Registration flows&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;onboarding&lt;/code&gt; - Post-signup activation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;popups&lt;/code&gt; - Modals and overlays&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;paywalls&lt;/code&gt; - In-app upgrade moments&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Content &amp;amp; Copy&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;copywriting&lt;/code&gt; - Marketing page copy&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;copy-editing&lt;/code&gt; - Edit and polish existing copy&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cold-email&lt;/code&gt; - B2B cold outreach emails and sequences&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;emails&lt;/code&gt; - Automated email flows&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;social&lt;/code&gt; - Social media content&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;image&lt;/code&gt; - AI image generation, design tools, and optimization&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;SEO &amp;amp; Discovery&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;seo-audit&lt;/code&gt; - Technical and on-page SEO&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ai-seo&lt;/code&gt; - AI search optimization (AEO, GEO, LLMO)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;programmatic-seo&lt;/code&gt; - Scaled page generation&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;site-architecture&lt;/code&gt; - Page hierarchy, navigation, URL structure&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;competitors&lt;/code&gt; - Comparison and alternative pages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;schema&lt;/code&gt; - Structured data&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Paid &amp;amp; Distribution&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;ads&lt;/code&gt; - Google, Meta, LinkedIn ad campaigns&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ad-creative&lt;/code&gt; - Bulk ad creative generation and iteration&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;social&lt;/code&gt; - Social media scheduling and strategy&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Measurement &amp;amp; Testing&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;analytics&lt;/code&gt; - Event tracking setup&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ab-testing&lt;/code&gt; - Experiment design&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Retention&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;churn-prevention&lt;/code&gt; - Cancel flows, save offers, dunning, payment recovery&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Growth Engineering&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;co-marketing&lt;/code&gt; - Partner identification and joint campaigns&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;free-tools&lt;/code&gt; - Marketing tools and calculators&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;referrals&lt;/code&gt; - Referral and affiliate programs&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Strategy &amp;amp; Monetization&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;marketing-ideas&lt;/code&gt; - 140 SaaS marketing ideas&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;marketing-psychology&lt;/code&gt; - Mental models and psychology&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;launch&lt;/code&gt; - Product launches and announcements&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pricing&lt;/code&gt; - Pricing, packaging, and monetization&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Sales &amp;amp; RevOps&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;revops&lt;/code&gt; - Lead lifecycle, scoring, routing, pipeline management&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;sales-enablement&lt;/code&gt; - Sales decks, one-pagers, objection docs, demo scripts&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Found a way to improve a skill? Have a new skill to suggest? PRs and issues welcome!&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for guidelines on adding or improving skills.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coreyhaines31/marketingskills/main/LICENSE&quot;&gt;MIT&lt;/a&gt; - Use these however you want.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/90b56a3ee370c89151ada1973bfed3f4378649c450dbf23841b7a07310645b2a/coreyhaines31/marketingskills" medium="image" />
      
    </item>
    
    <item>
      <title>zarazhangrui/follow-builders</title>
      <link>https://github.com/zarazhangrui/follow-builders</link>
      <description>&lt;p&gt;AI builders digest — monitors top AI builders on X and YouTube podcasts, remixes their content into digestible summaries. Follow builders, not influencers.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;strong&gt;English&lt;/strong&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/zarazhangrui/follow-builders/main/README.zh-CN.md&quot;&gt;中文&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Follow Builders, Not Influencers&lt;/h1&gt; 
&lt;p&gt;An AI-powered digest that tracks the top builders in AI — researchers, founders, PMs, and engineers who are actually building things — and delivers curated summaries of what they&#39;re saying.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Philosophy:&lt;/strong&gt; Follow people who build products and have original opinions, not influencers who regurgitate information.&lt;/p&gt; 
&lt;h2&gt;What You Get&lt;/h2&gt; 
&lt;p&gt;A daily or weekly digest delivered to your preferred messaging app (Telegram, Discord, WhatsApp, etc.) with:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Summaries of new podcast episodes from top AI podcasts&lt;/li&gt; 
 &lt;li&gt;Key posts and insights from 25 curated AI builders on X/Twitter&lt;/li&gt; 
 &lt;li&gt;Full articles from official AI company blogs (Anthropic Engineering, Claude Blog)&lt;/li&gt; 
 &lt;li&gt;Links to all original content&lt;/li&gt; 
 &lt;li&gt;Available in English, Chinese, or bilingual&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Install the skill in your agent (OpenClaw or Claude Code)&lt;/li&gt; 
 &lt;li&gt;Say &quot;set up follow builders&quot; or invoke &lt;code&gt;/follow-builders&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;The agent walks you through setup conversationally — no config files to edit&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The agent will ask you:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;How often you want your digest (daily or weekly) and what time&lt;/li&gt; 
 &lt;li&gt;What language you prefer&lt;/li&gt; 
 &lt;li&gt;How you want it delivered (Telegram, email, or in-chat)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;No API keys needed — all content is fetched centrally. Your first digest arrives immediately after setup.&lt;/p&gt; 
&lt;h2&gt;Changing Settings&lt;/h2&gt; 
&lt;p&gt;Your delivery preferences are configurable through conversation. Just tell your agent:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&quot;Switch to weekly digests on Monday mornings&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;Change language to Chinese&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;Make the summaries shorter&quot;&lt;/li&gt; 
 &lt;li&gt;&quot;Show me my current settings&quot;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The source list (builders and podcasts) is curated centrally and updates automatically — you always get the latest sources without doing anything.&lt;/p&gt; 
&lt;h2&gt;Customizing the Summaries&lt;/h2&gt; 
&lt;p&gt;The skill uses plain-English prompt files to control how content is summarized. You can customize them two ways:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Through conversation (recommended):&lt;/strong&gt; Tell your agent what you want — &quot;Make summaries more concise,&quot; &quot;Focus on actionable insights,&quot; &quot;Use a more casual tone.&quot; The agent updates the prompts for you.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Direct editing (power users):&lt;/strong&gt; Edit the files in the &lt;code&gt;prompts/&lt;/code&gt; folder:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;summarize-podcast.md&lt;/code&gt; — how podcast episodes are summarized&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;summarize-tweets.md&lt;/code&gt; — how X/Twitter posts are summarized&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;summarize-blogs.md&lt;/code&gt; — how blog posts are summarized&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;digest-intro.md&lt;/code&gt; — the overall digest format and tone&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;translate.md&lt;/code&gt; — how English content is translated to Chinese&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These are plain English instructions, not code. Changes take effect on the next digest.&lt;/p&gt; 
&lt;h2&gt;Default Sources&lt;/h2&gt; 
&lt;h3&gt;Podcasts (6)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@LatentSpacePod&quot;&gt;Latent Space&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLOhHNjZItNnMm5tdW61JpnyxeYH5NDDx8&quot;&gt;Training Data&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@NoPriorsPodcast&quot;&gt;No Priors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@RedpointAI&quot;&gt;Unsupervised Learning&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@DataDrivenNYC&quot;&gt;The MAD Podcast with Matt Turck&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLuMcoKK9mKgHtW_o9h5sGO2vXrffKHwJL&quot;&gt;AI &amp;amp; I by Every&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;AI Builders on X (25)&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://x.com/karpathy&quot;&gt;Andrej Karpathy&lt;/a&gt;, &lt;a href=&quot;https://x.com/swyx&quot;&gt;Swyx&lt;/a&gt;, &lt;a href=&quot;https://x.com/joshwoodward&quot;&gt;Josh Woodward&lt;/a&gt;, &lt;a href=&quot;https://x.com/kevinweil&quot;&gt;Kevin Weil&lt;/a&gt;, &lt;a href=&quot;https://x.com/petergyang&quot;&gt;Peter Yang&lt;/a&gt;, &lt;a href=&quot;https://x.com/thenanyu&quot;&gt;Nan Yu&lt;/a&gt;, &lt;a href=&quot;https://x.com/realmadhuguru&quot;&gt;Madhu Guru&lt;/a&gt;, &lt;a href=&quot;https://x.com/AmandaAskell&quot;&gt;Amanda Askell&lt;/a&gt;, &lt;a href=&quot;https://x.com/_catwu&quot;&gt;Cat Wu&lt;/a&gt;, &lt;a href=&quot;https://x.com/trq212&quot;&gt;Thariq&lt;/a&gt;, &lt;a href=&quot;https://x.com/GoogleLabs&quot;&gt;Google Labs&lt;/a&gt;, &lt;a href=&quot;https://x.com/amasad&quot;&gt;Amjad Masad&lt;/a&gt;, &lt;a href=&quot;https://x.com/rauchg&quot;&gt;Guillermo Rauch&lt;/a&gt;, &lt;a href=&quot;https://x.com/alexalbert__&quot;&gt;Alex Albert&lt;/a&gt;, &lt;a href=&quot;https://x.com/levie&quot;&gt;Aaron Levie&lt;/a&gt;, &lt;a href=&quot;https://x.com/ryolu_&quot;&gt;Ryo Lu&lt;/a&gt;, &lt;a href=&quot;https://x.com/garrytan&quot;&gt;Garry Tan&lt;/a&gt;, &lt;a href=&quot;https://x.com/mattturck&quot;&gt;Matt Turck&lt;/a&gt;, &lt;a href=&quot;https://x.com/zarazhangrui&quot;&gt;Zara Zhang&lt;/a&gt;, &lt;a href=&quot;https://x.com/nikunj&quot;&gt;Nikunj Kothari&lt;/a&gt;, &lt;a href=&quot;https://x.com/steipete&quot;&gt;Peter Steinberger&lt;/a&gt;, &lt;a href=&quot;https://x.com/danshipper&quot;&gt;Dan Shipper&lt;/a&gt;, &lt;a href=&quot;https://x.com/adityaag&quot;&gt;Aditya Agarwal&lt;/a&gt;, &lt;a href=&quot;https://x.com/sama&quot;&gt;Sam Altman&lt;/a&gt;, &lt;a href=&quot;https://x.com/claudeai&quot;&gt;Claude&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Official Blogs (2)&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.anthropic.com/engineering&quot;&gt;Anthropic Engineering&lt;/a&gt; — technical deep-dives from the Anthropic team&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://claude.com/blog&quot;&gt;Claude Blog&lt;/a&gt; — product announcements and updates from Claude&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;OpenClaw&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# From ClawhHub (coming soon)
clawhub install follow-builders

# Or manually
git clone https://github.com/zarazhangrui/follow-builders.git ~/skills/follow-builders
cd ~/skills/follow-builders/scripts &amp;amp;&amp;amp; npm install
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Claude Code&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/zarazhangrui/follow-builders.git ~/.claude/skills/follow-builders
cd ~/.claude/skills/follow-builders/scripts &amp;amp;&amp;amp; npm install
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;An AI agent (OpenClaw, Claude Code, or similar)&lt;/li&gt; 
 &lt;li&gt;Internet connection (to fetch the central feed)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;That&#39;s it. No API keys needed. All content (blog articles + YouTube transcripts + X/Twitter posts) is fetched centrally and updated daily.&lt;/p&gt; 
&lt;h2&gt;How It Works&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;A central feed is updated daily with the latest content from all sources (blog articles via web scraping, YouTube transcripts via Supadata, X/Twitter via official API)&lt;/li&gt; 
 &lt;li&gt;Your agent fetches the feed — one HTTP request, no API keys&lt;/li&gt; 
 &lt;li&gt;Your agent remixes the raw content into a digestible summary using your preferences&lt;/li&gt; 
 &lt;li&gt;The digest is delivered to your messaging app (or shown in-chat)&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/zarazhangrui/follow-builders/main/examples/sample-digest.md&quot;&gt;examples/sample-digest.md&lt;/a&gt; for what the output looks like.&lt;/p&gt; 
&lt;h2&gt;Privacy&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;No API keys are sent anywhere — all content is fetched centrally&lt;/li&gt; 
 &lt;li&gt;If you use Telegram/email delivery, those keys are stored locally in &lt;code&gt;~/.follow-builders/.env&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;The skill only reads public content (public blog posts, public YouTube videos, public X posts)&lt;/li&gt; 
 &lt;li&gt;Your configuration, preferences, and reading history stay on your machine&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;MIT&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/54ad3e5851800b47aa9e14b9947d7fbbd41698e9fc88347eba57f9d6573a1455/zarazhangrui/follow-builders" medium="image" />
      
    </item>
    
    <item>
      <title>microsoft/power-platform-skills</title>
      <link>https://github.com/microsoft/power-platform-skills</link>
      <description>&lt;p&gt;A plugin marketplace for Claude Code/GitHub Copilot that provides Power Platform development plugins, including reusable skills, agents, and commands for building and deploying solutions.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Power Platform Skills&lt;/h1&gt; 
&lt;p&gt;Official agent skills/plugins for Power Platform development by Microsoft.&lt;/p&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;This repository is a &lt;strong&gt;plugin marketplace&lt;/strong&gt; containing Claude Code/GitHub Copilot plugins for Power Platform services. Each plugin provides skills, agents, and commands to help developers build on the Power Platform.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Quick Install (Recommended)&lt;/h3&gt; 
&lt;p&gt;Run the installer to set up all plugins with auto-update enabled:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Windows (PowerShell)&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;iwr https://raw.githubusercontent.com/microsoft/power-platform-skills/main/scripts/install.js -OutFile install.js; node install.js; del install.js
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Mac OS/Linux/Windows (cmd)&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://raw.githubusercontent.com/microsoft/power-platform-skills/main/scripts/install.js | node
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The installer automatically:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Installs &lt;code&gt;pac&lt;/code&gt; CLI if not already installed&lt;/li&gt; 
 &lt;li&gt;Detects available tools (Claude Code, GitHub Copilot CLI)&lt;/li&gt; 
 &lt;li&gt;Registers the plugin marketplace and installs all listed plugins&lt;/li&gt; 
 &lt;li&gt;Enables auto-update so plugins stay current&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Manual Installation&lt;/h3&gt; 
&lt;p&gt;If you prefer to install manually, run these commands inside a Claude Code or GitHub Copilot CLI session:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Add the marketplace&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/plugin marketplace add microsoft/power-platform-skills
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Install the desired plugin&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;/plugin install power-pages@power-platform-skills
/plugin install model-apps@power-platform-skills
/plugin install code-apps@power-platform-skills
/plugin install canvas-apps@power-platform-skills
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Available Plugins&lt;/h2&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/power-platform-skills/main/plugins/power-pages/README.md&quot;&gt;Power Pages&lt;/a&gt; (&lt;code&gt;plugins/power-pages&lt;/code&gt;)&lt;/h3&gt; 
&lt;p&gt;Create and deploy Power Pages sites using modern development approaches.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Currently supported&lt;/strong&gt;: Code Sites (SPAs) with React, Angular, Vue, or Astro&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/power-platform-skills/main/plugins/model-apps/README.md&quot;&gt;Model Apps&lt;/a&gt; (&lt;code&gt;plugins/model-apps&lt;/code&gt;)&lt;/h3&gt; 
&lt;p&gt;Build and deploy Power Apps generative pages for model-driven apps.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: React + TypeScript + Fluent, deployed via PAC CLI&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/power-platform-skills/main/plugins/code-apps/AGENTS.md&quot;&gt;Code Apps&lt;/a&gt; (&lt;code&gt;plugins/code-apps&lt;/code&gt;)&lt;/h3&gt; 
&lt;p&gt;Build and deploy Power Apps code apps connected to Power Platform via connectors.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: React + Vite + TypeScript, deployed via PAC CLI&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://raw.githubusercontent.com/microsoft/power-platform-skills/main/plugins/canvas-apps/AGENTS.md&quot;&gt;Canvas Apps&lt;/a&gt; (&lt;code&gt;plugins/canvas-apps&lt;/code&gt;)&lt;/h3&gt; 
&lt;p&gt;Author Power Apps Canvas Apps using the Canvas Authoring MCP server.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: PA YAML (&lt;code&gt;.pa.yaml&lt;/code&gt;) authored via &lt;code&gt;CanvasAuthoringMcpServer&lt;/code&gt;, requires .NET 10 SDK&lt;/p&gt; 
&lt;h2&gt;Local Development&lt;/h2&gt; 
&lt;p&gt;To develop and test plugins locally, follow these steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Clone this repository&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Launch Claude Code with plugin path:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;claude --plugin-dir /path/to/power-platform-skills/plugins/power-pages
claude --plugin-dir /path/to/power-platform-skills/plugins/model-apps
claude --plugin-dir /path/to/power-platform-skills/plugins/code-apps
claude --plugin-dir /path/to/power-platform-skills/plugins/canvas-apps
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Running Without Interruption&lt;/h2&gt; 
&lt;p&gt;Plugins in this repo may invoke multiple tools (file edits, shell commands, MCP servers) during a session, which can result in frequent approval prompts. Use the options below to reduce or eliminate these interruptions.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;: Auto-approval options give the agent the same access you have on your machine. Only use these in trusted or sandboxed environments.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Claude Code&lt;/h3&gt; 
&lt;h4&gt;Option 1 — Permission mode (recommended)&lt;/h4&gt; 
&lt;p&gt;Set the &lt;code&gt;acceptEdits&lt;/code&gt; mode to auto-approve file edits while still prompting for shell commands:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-jsonc&quot;&gt;// .claude/settings.json (project-level) or ~/.claude/settings.json (user-level)
{
  &quot;defaultMode&quot;: &quot;acceptEdits&quot;,
  &quot;permissions&quot;: {
    &quot;allow&quot;: [
      &quot;Bash(npm run *)&quot;,
      &quot;Bash(git *)&quot;,
      &quot;Bash(pac *)&quot;
      // add other commands your workflow needs
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Option 2 — Allow all tools&lt;/h4&gt; 
&lt;p&gt;Press &lt;kbd&gt;Shift&lt;/kbd&gt;+&lt;kbd&gt;Tab&lt;/kbd&gt; during a session to cycle to &lt;strong&gt;auto-accept&lt;/strong&gt; mode, or launch with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;claude --dangerously-skip-permissions
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://code.claude.com/docs/en/permissions&quot;&gt;Claude Code permissions docs&lt;/a&gt; for the full reference.&lt;/p&gt; 
&lt;h3&gt;GitHub Copilot CLI&lt;/h3&gt; 
&lt;h4&gt;Option 1 — Allow specific tools (recommended)&lt;/h4&gt; 
&lt;p&gt;Pre-approve only the tools your workflow needs:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;copilot --allow-tool &#39;write&#39; --allow-tool &#39;shell(npm run build)&#39; --allow-tool &#39;shell(pac *)&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Option 2 — Allow all tools in Copilot&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;copilot --allow-all-tools
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To allow everything except dangerous commands:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;copilot --allow-all-tools --deny-tool &#39;shell(rm)&#39; --deny-tool &#39;shell(git push)&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://docs.github.com/en/copilot/how-tos/use-copilot-agents/use-copilot-cli&quot;&gt;Copilot CLI docs&lt;/a&gt; for the full reference.&lt;/p&gt; 
&lt;h2&gt;Repository Structure&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;power-platform-skills/
├── .claude-plugin/
│   └── marketplace.json      # Marketplace manifest (lists all plugins)
├── .claude/
│   └── settings.json         # Auto-allowed tools (pac, node, dotnet, etc.)
├── plugins/
│   ├── power-pages/          # Power Pages plugin
│   │   ├── .claude-plugin/
│   │   │   └── plugin.json
│   │   ├── commands/
│   │   ├── shared/
│   │   └── skills/
│   ├── model-apps/           # Model Apps plugin
│   |   ├── .claude-plugin/
│   │   └── plugin.json
│   |   ├── commands/
│   |   ├── skills/
│   |   ├── shared/           # Shared references + samples
│   |   └── github/           # GitHub Copilot instructions
│   ├── code-apps/            # Code Apps plugin
│   │   ├── .claude-plugin/
│   │   │   └── plugin.json
│   │   ├── agents/
│   │   ├── skills/
│   │   └── shared/           # Shared instructions + references
│   └── canvas-apps/          # Canvas Apps plugin
│       ├── .claude-plugin/
│       │   └── plugin.json
│       ├── references/       # Technical + design guides
│       └── skills/
├── AGENTS.md                 # Development guidelines
└── README.md
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-pages/configure/create-code-sites&quot;&gt;Power Pages Code Sites&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/rest/api/power-platform/powerpages/websites&quot;&gt;Power Pages REST API&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-apps/maker/model-driven-apps/generative-page-external-tools&quot;&gt;Generative Pages with External Tools&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/power-apps/developer/code-apps/&quot;&gt;Power Apps Code Apps&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/power-platform/developer/cli/reference&quot;&gt;PAC CLI Reference&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/microsoft/power-platform-skills/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for contribution guide.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;The code in this repo is licensed under the &lt;a href=&quot;https://raw.githubusercontent.com/microsoft/power-platform-skills/main/LICENSE&quot;&gt;MIT&lt;/a&gt; license.&lt;/p&gt; 
&lt;h2&gt;Trademarks&lt;/h2&gt; 
&lt;p&gt;This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow &lt;a href=&quot;https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general&quot;&gt;Microsoft&#39;s Trademark &amp;amp; Brand Guidelines&lt;/a&gt;. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party&#39;s policies.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/3a6dff3b1ba4496651c6a6263c4120efe1e42ab980854f6f89506862c0a62bd1/microsoft/power-platform-skills" medium="image" />
      
    </item>
    
    <item>
      <title>HeyPuter/puter</title>
      <link>https://github.com/HeyPuter/puter</link>
      <description>&lt;p&gt;🌐 The Internet Computer! Free, Open-Source, and Self-Hostable.&lt;/p&gt;&lt;hr&gt;&lt;h3 align=&quot;center&quot;&gt;&lt;img width=&quot;80&quot; alt=&quot;Puter.com, The Personal Cloud Computer: All your files, apps, and games in one place accessible from anywhere at any time.&quot; src=&quot;https://assets.puter.site/puter-logo.png&quot; /&gt;&lt;/h3&gt; 
&lt;h3 align=&quot;center&quot;&gt;The Open-Source Internet Computer!&lt;/h3&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://puter.com/?ref=github.com&quot;&gt;&lt;strong&gt;« LIVE DEMO »&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt; &lt;br /&gt; &lt;a href=&quot;https://puter.com/?ref=github.com&quot;&gt;Puter.com&lt;/a&gt; · &lt;a href=&quot;https://apps.puter.com/&quot;&gt;App Store&lt;/a&gt; · &lt;a href=&quot;https://developer.puter.com&quot; target=&quot;_blank&quot;&gt;Developers&lt;/a&gt; · &lt;a href=&quot;https://discord.com/invite/PQcx7Teh8u&quot;&gt;Discord&lt;/a&gt; · &lt;a href=&quot;https://reddit.com/r/puter&quot;&gt;Reddit&lt;/a&gt; · &lt;a href=&quot;https://twitter.com/HeyPuter&quot;&gt;X&lt;/a&gt; &lt;/p&gt; 
&lt;h3 align=&quot;center&quot;&gt;&lt;img width=&quot;800&quot; style=&quot;border-radius:5px;&quot; alt=&quot;screenshot&quot; src=&quot;https://assets.puter.site/puter.com-screenshot.webp&quot; /&gt;&lt;/h3&gt; 
&lt;br /&gt; 
&lt;h2&gt;Puter&lt;/h2&gt; 
&lt;p&gt;Puter is an advanced, open-source, self-hostable internet computer designed to be feature-rich, fast, and highly extensible.&lt;/p&gt; 
&lt;h3&gt;For Users&lt;/h3&gt; 
&lt;p&gt;Puter&#39;s goal is to provide you with every app and feature you need to work, create, and play under one roof. From a simple &lt;a href=&quot;https://online-notepad.com&quot;&gt;Notepad&lt;/a&gt; and &lt;a href=&quot;https://voice-recorder.com&quot;&gt;Voice Recorder&lt;/a&gt; to &lt;a href=&quot;https://apps.puter.com/app/spreadsheet&quot;&gt;Spreadsheet&lt;/a&gt; and &lt;a href=&quot;https://online-camera.com&quot;&gt;Camera&lt;/a&gt;, Puter wants to be the all-in-one solution for your digital life.&lt;/p&gt; 
&lt;h3&gt;For Developers&lt;/h3&gt; 
&lt;p&gt;Puter provides everything you need to build and publish web apps and games. From &lt;a href=&quot;https://developer.puter.com/ai/&quot;&gt;AI&lt;/a&gt; to &lt;a href=&quot;https://developer.puter.com/object-storage/&quot;&gt;Cloud Storage&lt;/a&gt; and &lt;a href=&quot;https://developer.puter.com/key-value-database/&quot;&gt;Database&lt;/a&gt; to &lt;a href=&quot;https://developer.puter.com/serverless-workers/&quot;&gt;Serverless Workers&lt;/a&gt;, Puter has you covered. Puter also helps you get users! Once you build your app, you can publish it on our &lt;a href=&quot;https://apps.puter.com/&quot;&gt;App Store&lt;/a&gt; to reach and monetize users.&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;h3&gt;💻 Local Development&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;→&lt;/strong&gt; This should launch Puter at &lt;a href=&quot;http://puter.localhost:4100&quot;&gt;http://puter.localhost:4100&lt;/a&gt;&lt;/p&gt; 
&lt;br /&gt; 
&lt;h3&gt;🚀 Self-Hosting&lt;/h3&gt; 
&lt;h4&gt;Linux/macOS&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://puter.com/selfhost | sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Windows&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;irm https://puter.com/selfhost?os=windows | iex
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;→&lt;/strong&gt; For more details, see &lt;a href=&quot;https://raw.githubusercontent.com/HeyPuter/puter/main/doc/self-hosting.md&quot;&gt;Self-Hosting Puter&lt;/a&gt;.&lt;/p&gt; 
&lt;br /&gt; 
&lt;h3&gt;☁️ &lt;a href=&quot;http://Puter.com&quot;&gt;Puter.com&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Puter is available as a hosted service at &lt;a href=&quot;https://puter.com&quot;&gt;&lt;strong&gt;puter.com&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;Connect with the maintainers and community through these channels:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Bug report or feature request? Please &lt;a href=&quot;https://github.com/HeyPuter/puter/issues/new/choose&quot;&gt;open an issue&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Discord: &lt;a href=&quot;https://discord.com/invite/PQcx7Teh8u&quot;&gt;discord.com/invite/PQcx7Teh8u&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;X (Twitter): &lt;a href=&quot;https://x.com/HeyPuter&quot;&gt;x.com/HeyPuter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Reddit: &lt;a href=&quot;https://www.reddit.com/r/puter/&quot;&gt;reddit.com/r/puter/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Mastodon: &lt;a href=&quot;https://mastodon.social/@puter&quot;&gt;mastodon.social/@puter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Security issues or abuse reports? &lt;a href=&quot;mailto:security@puter.com&quot;&gt;security@puter.com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Email maintainers at &lt;a href=&quot;mailto:hi@puter.com&quot;&gt;hi@puter.com&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;We are always happy to help you with any questions you may have. Don&#39;t hesitate to ask!&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This repository, including all its contents, sub-projects, modules, and components, is licensed under &lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/LICENSE.txt&quot;&gt;AGPL-3.0&lt;/a&gt; unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;Translations&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ar.md&quot;&gt;Arabic / العربية&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.hy.md&quot;&gt;Armenian / Հայերեն&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.bn.md&quot;&gt;Bengali / বাংলা&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.zh.md&quot;&gt;Chinese / 中文&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.da.md&quot;&gt;Danish / Dansk&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/README.md&quot;&gt;English&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.fa.md&quot;&gt;Farsi / فارسی&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.fi.md&quot;&gt;Finnish / Suomi&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.fr.md&quot;&gt;French / Français&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.de.md&quot;&gt;German / Deutsch&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.he.md&quot;&gt;Hebrew/ עברית&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.hi.md&quot;&gt;Hindi / हिंदी&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.hu.md&quot;&gt;Hungarian / Magyar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.id.md&quot;&gt;Indonesian / Bahasa Indonesia&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.it.md&quot;&gt;Italian / Italiano&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.jp.md&quot;&gt;Japanese / 日本語&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ko.md&quot;&gt;Korean / 한국어&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.my.md&quot;&gt;Malay / Bahasa Malaysia&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ml.md&quot;&gt;Malayalam / മലയാളം&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.pl.md&quot;&gt;Polish / Polski&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.pt.md&quot;&gt;Portuguese / Português&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.pa.md&quot;&gt;Punjabi / ਪੰਜਾਬੀ&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ro.md&quot;&gt;Romanian / Română&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ru.md&quot;&gt;Russian / Русский&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.es.md&quot;&gt;Spanish / Español&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.sv.md&quot;&gt;Swedish / Svenska&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ta.md&quot;&gt;Tamil / தமிழ்&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.te.md&quot;&gt;Telugu / తెలుగు&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.th.md&quot;&gt;Thai / ไทย&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.tr.md&quot;&gt;Turkish / Türkçe&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ua.md&quot;&gt;Ukrainian / Українська&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.ur.md&quot;&gt;Urdu / اردو&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HeyPuter/puter/raw/main/doc/i18n/README.vi.md&quot;&gt;Vietnamese / Tiếng Việt&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/766341786/5e729d54-12e9-4552-b394-b75aca569e42" medium="image" />
      
    </item>
    
    <item>
      <title>fspecii/ace-step-ui</title>
      <link>https://github.com/fspecii/ace-step-ui</link>
      <description>&lt;p&gt;🎵 The Ultimate Open Source Suno Alternative - Professional UI for ACE-Step 1.5 AI Music Generation. Free, local, unlimited. Stop paying for Suno!&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/🎵-ACE--Step_UI-ff69b4?style=for-the-badge&amp;amp;labelColor=1a1a1a&quot; alt=&quot;ACE-Step UI&quot; height=&quot;60&quot; /&gt; &lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;ACE-Step UI&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;The Ultimate Open Source Suno Alternative&lt;/strong&gt;&lt;br /&gt; &lt;em&gt;Seamless integration with &lt;a href=&quot;https://github.com/ace-step/ACE-Step-1.5&quot;&gt;ACE-Step 1.5&lt;/a&gt; - The Open Source AI Music Generation Model&lt;/em&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.youtube.com/@Ambsd-yy7os&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/▶_Subscribe-YouTube-FF0000?style=for-the-badge&amp;amp;logo=youtube&quot; alt=&quot;Subscribe on YouTube&quot; /&gt; &lt;/a&gt; &lt;a href=&quot;https://x.com/AmbsdOP&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/Follow-@AmbsdOP-1DA1F2?style=for-the-badge&amp;amp;logo=x&amp;amp;logoColor=white&quot; alt=&quot;Follow on X&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/#-demo&quot;&gt;Demo&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/#-why-ace-step-ui&quot;&gt;Why ACE-Step&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/#-features&quot;&gt;Features&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/#-installation&quot;&gt;Installation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/#-usage&quot;&gt;Usage&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/#-contributing&quot;&gt;Contributing&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/React-18.3-61DAFB?style=flat-square&amp;amp;logo=react&quot; alt=&quot;React&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/TypeScript-5.x-3178C6?style=flat-square&amp;amp;logo=typescript&quot; alt=&quot;TypeScript&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/TailwindCSS-3.x-06B6D4?style=flat-square&amp;amp;logo=tailwindcss&quot; alt=&quot;TailwindCSS&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/SQLite-Local_First-003B57?style=flat-square&amp;amp;logo=sqlite&quot; alt=&quot;SQLite&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/License-MIT-green?style=flat-square&quot; alt=&quot;License&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/stars/fspecii/ace-step-ui?style=flat-square&quot; alt=&quot;Stars&quot; /&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎬 Demo&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.youtube.com/watch?v=8zg0Xi36qGc&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/▶_Watch_Full_Demo-YouTube-FF0000?style=for-the-badge&amp;amp;logo=youtube&quot; alt=&quot;Watch Demo on YouTube&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/docs/demo.gif&quot; alt=&quot;ACE-Step UI - Open Source Suno Alternative&quot; width=&quot;100%&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;em&gt;Generate professional AI music with a Spotify-like interface - 100% free and local&lt;/em&gt; &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 Why ACE-Step UI?&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Tired of paying $10+/month for Suno or Udio?&lt;/strong&gt; ACE-Step 1.5 is the &lt;strong&gt;open source Suno killer&lt;/strong&gt; that runs locally on your own GPU - and ACE-Step UI gives you a &lt;strong&gt;beautiful, professional interface&lt;/strong&gt; to harness its full power.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Suno/Udio&lt;/th&gt; 
   &lt;th&gt;ACE-Step UI&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;$10-50/month&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;FREE forever&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Privacy&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Cloud-based&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;100% local&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Ownership&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Licensed&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;You own everything&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Customization&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Limited&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Full control&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Queue Limits&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Restricted&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Unlimited&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Commercial Use&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Expensive tiers&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;No restrictions&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;What Makes ACE-Step 1.5 Special?&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;State-of-the-art quality&lt;/strong&gt; rivaling commercial services&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Full song generation&lt;/strong&gt; up to 4+ minutes with vocals&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Runs locally&lt;/strong&gt; - no internet required after setup&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Open source&lt;/strong&gt; - inspect, modify, improve&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Active development&lt;/strong&gt; - constant improvements&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;h3&gt;🎵 AI Music Generation&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Full Song Generation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Create complete songs with vocals and lyrics up to 4+ minutes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Instrumental Mode&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Generate instrumental tracks without vocals&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Custom Mode&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Fine-tune BPM, key, time signature, and duration&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Style Tags&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Define genre, mood, tempo, and instrumentation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Batch Generation&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Generate multiple variations at once&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI Enhance&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Enrich genre tags into detailed captions with proper BPM/key/time&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Thinking Mode&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Let AI reason about structure and generate audio codes&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🎨 Advanced Parameters&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Reference Audio&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Use any audio file as a style reference&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Audio Cover&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Transform existing audio with new styles&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Repainting&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Regenerate specific sections of a track&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Seed Control&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Reproduce exact generations for consistency&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Inference Steps&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Control quality vs speed tradeoff&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🎤 Lyrics &amp;amp; Prompts&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Lyrics Editor&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Write and format lyrics with structure tags&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Format Assistant&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;AI-powered caption and lyrics formatting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Prompt Templates&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Quick-start with genre presets&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Reuse Prompts&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Clone settings from any previous generation&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🎧 Professional Interface&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Spotify-Inspired UI&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Clean, modern design with dark/light mode&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Bottom Player&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Full-featured player with waveform and progress&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Library Management&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Browse, search, and organize all your tracks&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Likes &amp;amp; Playlists&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Organize favorites into custom playlists&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Real-time Progress&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Live generation progress with queue position&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;LAN Access&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Use from any device on your local network&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;🛠️ Built-in Tools&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Feature&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Audio Editor&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Trim, fade, and apply effects with AudioMass&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Stem Extraction&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Separate vocals, drums, bass, and other with Demucs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Video Generator&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Create music videos with Pexels backgrounds&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Gradient Covers&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Beautiful procedural album art (no internet needed)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;💻 Tech Stack&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Layer&lt;/th&gt; 
   &lt;th&gt;Technologies&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;React 18, TypeScript, TailwindCSS, Vite&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Express.js, SQLite, better-sqlite3&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI Engine&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/ace-step/ACE-Step-1.5&quot;&gt;ACE-Step 1.5&lt;/a&gt; (Gradio API)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Audio Tools&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;AudioMass, Demucs, FFmpeg&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📋 Requirements&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Requirement&lt;/th&gt; 
   &lt;th&gt;Specification&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;18 or higher&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Python&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;3.10+ (3.11 recommended) OR Windows Portable Package&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;NVIDIA GPU&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;4GB+ VRAM (works without LLM), 12GB+ recommended (with LLM)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;CUDA&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;12.8 (for Windows Portable Package)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;FFmpeg&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;For audio processing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;uv&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Python package manager (recommended for standard install)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⚡ Quick Start&lt;/h2&gt; 
&lt;h3&gt;🎯 Pinokio - 1-Click Install (Recommended for All Users!)&lt;/h3&gt; 
&lt;p&gt;The easiest way to get ACE-Step UI up and running on &lt;strong&gt;any platform&lt;/strong&gt; — no terminal, no manual setup:&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://beta.pinokio.co/apps/github-com-cocktailpeanut-ace-step-ui-pinokio&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/⚡_Install_with_Pinokio-One_Click-ff69b4?style=for-the-badge&amp;amp;labelColor=1a1a1a&quot; alt=&quot;Install with Pinokio&quot; height=&quot;50&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://pinokio.computer&quot;&gt;Pinokio&lt;/a&gt;&lt;/strong&gt; handles everything automatically: Python, Node.js, dependencies, model downloads, and launching. Just click install and start making music.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h3&gt;🪟 Windows - One-Click Start (Easiest!)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;cd ace-step-ui
start-all.bat
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;That&#39;s it!&lt;/strong&gt; This starts everything: API + Backend + Frontend in one command.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; By default, it looks for ACE-Step in &lt;code&gt;..\ACE-Step-1.5&lt;/code&gt;. If yours is elsewhere, set &lt;code&gt;ACESTEP_PATH&lt;/code&gt; first:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;set ACESTEP_PATH=C:\path\to\ACE-Step-1.5
start-all.bat
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🪟 Windows - Manual Start&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;REM 1. Start ACE-Step Gradio (with API endpoints)
cd C:\ACE-Step-1.5
python_embeded\python -m acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1

REM 2. Start ACE-Step UI (in another terminal)
cd ace-step-ui
start.bat
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Linux / macOS - One-Click Start (Easiest!)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd ace-step-ui
./start-all.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;That&#39;s it!&lt;/strong&gt; This starts everything: Gradio + Backend + Frontend in one command.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; By default, it looks for ACE-Step in &lt;code&gt;../ACE-Step-1.5&lt;/code&gt;. If yours is elsewhere, set &lt;code&gt;ACESTEP_PATH&lt;/code&gt; first:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export ACESTEP_PATH=/path/to/ACE-Step-1.5
./start-all.sh
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;To stop:&lt;/strong&gt; &lt;code&gt;./stop-all.sh&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Linux / macOS - Manual Start&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Start ACE-Step Gradio with API (in ACE-Step-1.5 directory)
cd /path/to/ACE-Step-1.5
uv run acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1

# 2. Start ACE-Step UI (in another terminal)
cd ace-step-ui
./start.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Windows (Standard Installation)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;REM 1. Start ACE-Step Gradio with API (in ACE-Step-1.5 directory)
cd C:\path\to\ACE-Step-1.5
uv run acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1

REM 2. Start ACE-Step UI (in another terminal)
cd ace-step-ui
start.bat
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Open &lt;strong&gt;&lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;/strong&gt; and start creating!&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📦 Installation&lt;/h2&gt; 
&lt;h3&gt;1. Install ACE-Step (The AI Engine)&lt;/h3&gt; 
&lt;h4&gt;🪟 Windows Portable Package (Recommended for Windows)&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;The easiest way to get started on Windows!&lt;/strong&gt; This package includes everything pre-configured:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Download&lt;/strong&gt; &lt;a href=&quot;https://files.acemusic.ai/acemusic/win/ACE-Step-1.5.7z&quot;&gt;ACE-Step-1.5.7z&lt;/a&gt; (~5GB)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Extract&lt;/strong&gt; to &lt;code&gt;C:\ACE-Step-1.5&lt;/code&gt; (or your preferred location)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Done!&lt;/strong&gt; The package includes &lt;code&gt;python_embeded&lt;/code&gt; with all dependencies&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;✅ &lt;strong&gt;Works with 4GB GPU&lt;/strong&gt; - No LLM installation required ✅ &lt;strong&gt;CUDA 12.8&lt;/strong&gt; included ✅ &lt;strong&gt;Zero setup hassle&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Thinking Mode (LLM features) is automatically disabled on GPUs with &amp;lt;12GB VRAM. You can still enable it manually if you have 12GB+.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h4&gt;Standard Installation (All Platforms)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone ACE-Step 1.5 - the open source Suno alternative
git clone https://github.com/ace-step/ACE-Step-1.5
cd ACE-Step-1.5

# Create virtual environment and install
uv venv
uv pip install -e .

# Models download automatically on first run (~5GB)
cd ..
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;2. Install ACE-Step UI (This Repository)&lt;/h3&gt; 
&lt;h4&gt;Linux / macOS&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Clone the UI
git clone https://github.com/fspecii/ace-step-ui
cd ace-step-ui

# Run setup script (installs all dependencies)
./setup.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Windows&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;REM Clone the UI
git clone https://github.com/fspecii/ace-step-ui
cd ace-step-ui

REM Run setup script (installs all dependencies)
setup.bat
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Manual Installation (All Platforms)&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Install frontend dependencies
npm install

# Install server dependencies
cd server
npm install
cd ..

# Copy environment file
# Linux/macOS:
cp server/.env.example server/.env
# Windows:
copy server\.env.example server\.env
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎮 Usage&lt;/h2&gt; 
&lt;h3&gt;Step 1: Start ACE-Step Gradio Server&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;🪟 Windows Portable Package:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;cd C:\ACE-Step-1.5
python_embeded\python -m acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Linux / macOS:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /path/to/ACE-Step-1.5
uv run acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Windows (Standard Installation):&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;cd C:\path\to\ACE-Step-1.5
uv run acestep --port 8001 --enable-api --backend pt --server-name 127.0.0.1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Wait for &quot;API endpoints enabled&quot; before proceeding.&lt;/p&gt; 
&lt;h3&gt;Step 2: Start ACE-Step UI&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Linux / macOS:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd ace-step-ui
./start.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Windows:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-batch&quot;&gt;cd ace-step-ui
start.bat
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Step 3: Create Music!&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Access&lt;/th&gt; 
   &lt;th&gt;URL&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Local&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;LAN (other devices)&lt;/td&gt; 
   &lt;td&gt;http://YOUR_IP:3000&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;⚙️ Configuration&lt;/h2&gt; 
&lt;p&gt;Edit &lt;code&gt;server/.env&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-env&quot;&gt;# Server
PORT=3001

# ACE-Step Gradio URL (must match --port used when starting ACE-Step)
ACESTEP_API_URL=http://localhost:8001

# Database (local-first, no cloud)
DATABASE_PATH=./data/acestep.db

# Optional: Pexels API for video backgrounds
PEXELS_API_KEY=your_key_here
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🎼 Generation Modes&lt;/h2&gt; 
&lt;h3&gt;Simple Mode&lt;/h3&gt; 
&lt;p&gt;Just describe what you want. ACE-Step handles the rest.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&quot;An upbeat pop song about summer adventures with catchy hooks&quot;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Custom Mode&lt;/h3&gt; 
&lt;p&gt;Full control over every parameter:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Parameter&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Lyrics&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Full lyrics with &lt;code&gt;[Verse]&lt;/code&gt;, &lt;code&gt;[Chorus]&lt;/code&gt; tags&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Style&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Genre, mood, instruments, tempo&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Duration&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;30-240 seconds&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;BPM&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;60-200 beats per minute&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Key&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Musical key (C major, A minor, etc.)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;AI Enhance &amp;amp; Thinking Mode&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Mode&lt;/th&gt; 
   &lt;th&gt;What it does&lt;/th&gt; 
   &lt;th&gt;Speed impact&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI Enhance OFF&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sends your style tags directly to the model&lt;/td&gt; 
   &lt;td&gt;Fastest&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AI Enhance ON&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;LLM enriches your tags into a detailed caption and generates proper BPM, key, time signature&lt;/td&gt; 
   &lt;td&gt;+10-20s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Thinking Mode&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Full LLM reasoning with audio code generation&lt;/td&gt; 
   &lt;td&gt;Slowest, best quality&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If your genre tags (e.g. &quot;pop, rock&quot;) produce ballad-like output, turn on &lt;strong&gt;AI Enhance&lt;/strong&gt; for much better genre accuracy. No extra VRAM needed — the LLM runs on CPU with the PT backend.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Batch Size &amp;amp; Bulk Generation&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Setting&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Batch Size&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Number of variations generated per job (1-4). Default is &lt;strong&gt;1&lt;/strong&gt; for broad GPU compatibility. Higher values generate more variations but use more VRAM. &lt;strong&gt;8GB GPU users should keep this at 1.&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Bulk Generate&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Queue multiple independent generation jobs (1-10). Each job runs sequentially, so this is safe for any GPU.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;LM Backend&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Choose between &lt;strong&gt;PT&lt;/strong&gt; (~1.6 GB VRAM) and &lt;strong&gt;VLLM&lt;/strong&gt; (~9.2 GB VRAM). PT is the default and works on most GPUs.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Both batch size and bulk count are remembered in your browser — set them once and they stick for future sessions.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🔧 Built-in Tools&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Tool&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🎚️ Audio Editor&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Cut, trim, fade, and apply effects&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🎤 Stem Extraction&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Separate vocals, drums, bass, other&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🎬 Video Generator&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Create music videos with stock footage&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;🎨 Album Art&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Auto-generated gradient covers&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🐛 Troubleshooting&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Issue&lt;/th&gt; 
   &lt;th&gt;Solution&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ACE-Step not reachable&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Ensure Gradio server is running with &lt;code&gt;--enable-api&lt;/code&gt; flag (see Usage section)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;CUDA out of memory&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Use &lt;code&gt;--backend pt&lt;/code&gt; (default), set batch size to &lt;strong&gt;1&lt;/strong&gt;, reduce duration, or disable Thinking Mode&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;4GB GPU - Out of memory&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Use &lt;strong&gt;PT&lt;/strong&gt; backend (default), batch size &lt;strong&gt;1&lt;/strong&gt;, and keep &lt;strong&gt;Thinking Mode OFF&lt;/strong&gt;. LLM features require 12GB+&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Genre always sounds like ballad&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Enable &lt;strong&gt;AI Enhance&lt;/strong&gt; toggle in the Style section — it enriches your tags with proper metadata&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;AttributeError: &#39;NoneType&#39;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Update to latest ACE-Step-1.5 (fix merged in PR #109)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Songs show 0:00 duration&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Install FFmpeg: &lt;code&gt;sudo apt install ffmpeg&lt;/code&gt; (Linux) or download from &lt;a href=&quot;https://ffmpeg.org&quot;&gt;ffmpeg.org&lt;/a&gt; (Windows)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;LAN access not working&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Check firewall allows ports 3000 and 3001&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;We need your help to make ACE-Step UI even better!&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;This is a community-driven project and contributions are what make open source amazing. Whether you&#39;re fixing bugs, adding features, improving documentation, or sharing ideas - every contribution counts!&lt;/p&gt; 
&lt;h3&gt;Ways to Contribute&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;🐛 &lt;strong&gt;Report bugs&lt;/strong&gt; - Found an issue? Open a GitHub issue&lt;/li&gt; 
 &lt;li&gt;💡 &lt;strong&gt;Suggest features&lt;/strong&gt; - Have an idea? We&#39;d love to hear it&lt;/li&gt; 
 &lt;li&gt;🔧 &lt;strong&gt;Submit PRs&lt;/strong&gt; - Code contributions are always welcome&lt;/li&gt; 
 &lt;li&gt;📖 &lt;strong&gt;Improve docs&lt;/strong&gt; - Help others get started&lt;/li&gt; 
 &lt;li&gt;⭐ &lt;strong&gt;Star the repo&lt;/strong&gt; - Show your support!&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;How to Contribute&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Fork the repository&lt;/li&gt; 
 &lt;li&gt;Create a feature branch (&lt;code&gt;git checkout -b feature/amazing-feature&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Commit your changes (&lt;code&gt;git commit -m &#39;Add amazing feature&#39;&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Push to the branch (&lt;code&gt;git push origin feature/amazing-feature&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;Open a Pull Request&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📣 Stay Connected&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://www.youtube.com/@Ambsd-yy7os&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/YouTube-Subscribe_for_Tutorials-FF0000?style=for-the-badge&amp;amp;logo=youtube&quot; alt=&quot;YouTube&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://x.com/AmbsdOP&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/X_(Twitter)-Follow_for_Updates-1DA1F2?style=for-the-badge&amp;amp;logo=x&amp;amp;logoColor=white&quot; alt=&quot;X/Twitter&quot; /&gt; &lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Subscribe and follow for:&lt;/strong&gt;&lt;br /&gt; 🎥 Video tutorials and demos&lt;br /&gt; 🚀 New feature announcements&lt;br /&gt; 💡 Tips and tricks&lt;br /&gt; 🎵 AI music generation news &lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🙏 Credits&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/ace-step/ACE-Step-1.5&quot;&gt;ACE-Step&lt;/a&gt;&lt;/strong&gt; - The revolutionary open source AI music generation model&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/pkalogiros/AudioMass&quot;&gt;AudioMass&lt;/a&gt;&lt;/strong&gt; - Web audio editor&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/facebookresearch/demucs&quot;&gt;Demucs&lt;/a&gt;&lt;/strong&gt; - Audio source separation&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://www.pexels.com&quot;&gt;Pexels&lt;/a&gt;&lt;/strong&gt; - Stock video backgrounds&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;📄 License&lt;/h2&gt; 
&lt;p&gt;This project is open source under the &lt;a href=&quot;https://raw.githubusercontent.com/fspecii/ace-step-ui/main/LICENSE&quot;&gt;MIT License&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;⭐ If ACE-Step UI helps you create amazing music, please star this repo! ⭐&lt;/strong&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;em&gt;Made with ❤️ for the open-source AI music community&lt;/em&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt;Stop paying for Suno. Start creating with ACE-Step.&lt;/strong&gt; &lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/c66ed7973c9954042a16fcc41fd3cd4cc61ad28cbf4ac894748ba9289b622100/fspecii/ace-step-ui" medium="image" />
      
    </item>
    
    <item>
      <title>datawhalechina/easy-vibe</title>
      <link>https://github.com/datawhalechina/easy-vibe</link>
      <description>&lt;p&gt;💻 vibe coding 2026 | Your first modern Coding course for beginners to master step by step.&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/easy-vibe-logo-hd.svg?sanitize=true&quot; alt=&quot;Easy-Vibe Logo&quot; width=&quot;300&quot; /&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/banner.png&quot; alt=&quot;Easy-Vibe Banner&quot; width=&quot;100%&quot; /&gt; 
 &lt;p align=&quot;center&quot; style=&quot;font-size: 1.2em; color: #666; margin: 20px 0;&quot;&gt; Jump right in and vibe together — if you can talk, you can build apps.&lt;br /&gt; &lt;span style=&quot;font-size: 0.9em; color: #888;&quot;&gt;直接上手，一起 vibe！会说话就会做应用。&lt;/span&gt; &lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://trendshift.io/repositories/22079&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://trendshift.io/api/badge/repositories/22079&quot; alt=&quot;datawhalechina/easy-vibe | Trendshift&quot; style=&quot;width: 250px; height: 55px;&quot; width=&quot;250&quot; height=&quot;55&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; 🚀 &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/welcome.html&quot;&gt;Start Exploring&lt;/a&gt; · ✨ &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/appendix/&quot;&gt;Interactive Tutorial&lt;/a&gt; · 🦞 &lt;a href=&quot;https://github.com/datawhalechina/hello-claw&quot;&gt;Learn OpenClaw&lt;/a&gt; · 📖 &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#table-of-contents&quot;&gt;Table of Contents&lt;/a&gt;&lt;br /&gt; &lt;span style=&quot;font-size: 0.85em; color: #888;&quot;&gt;🚀 &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/welcome.html&quot;&gt;开始体验&lt;/a&gt; · ✨ &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/zh-cn/appendix/&quot;&gt;交互式教程&lt;/a&gt; · 🦞 &lt;a href=&quot;https://github.com/datawhalechina/hello-claw&quot;&gt;学习 OpenClaw&lt;/a&gt; · 📖 &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#table-of-contents&quot;&gt;查看目录&lt;/a&gt;&lt;/span&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/welcome.html&quot;&gt;Read Online&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-content-navigation&quot;&gt;Learning Map&lt;/a&gt;&lt;br /&gt; &lt;span style=&quot;font-size: 0.85em; color: #888;&quot;&gt; &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/welcome.html&quot;&gt;开始阅读&lt;/a&gt; · &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-content-navigation&quot;&gt;学习地图&lt;/a&gt; &lt;/span&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/datawhalechina/easy-vibe/stargazers&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/stars/datawhalechina/easy-vibe?color=660874&amp;amp;style=for-the-badge&amp;amp;logo=star&amp;amp;logoColor=white&amp;amp;labelColor=1a1a2e&quot; alt=&quot;Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/datawhalechina/easy-vibe/network/members&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/forks/datawhalechina/easy-vibe?color=660874&amp;amp;style=for-the-badge&amp;amp;logo=git-fork&amp;amp;logoColor=white&amp;amp;labelColor=1a1a2e&quot; alt=&quot;Forks&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/LICENSE&quot; target=&quot;_blank&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/License-CC_BY_NC_SA_4.0-4ecdc4?style=for-the-badge&amp;amp;logo=creative-commons&amp;amp;logoColor=white&amp;amp;labelColor=1a1a2e&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
 &lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/README.md&quot;&gt;&lt;img alt=&quot;English&quot; src=&quot;https://img.shields.io/badge/English-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/zh-CN/README.md&quot;&gt;&lt;img alt=&quot;简体中文&quot; src=&quot;https://img.shields.io/badge/简体中文-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/zh-TW/README.md&quot;&gt;&lt;img alt=&quot;繁體中文&quot; src=&quot;https://img.shields.io/badge/繁體中文-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/ja-JP/README.md&quot;&gt;&lt;img alt=&quot;日本語&quot; src=&quot;https://img.shields.io/badge/日本語-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/es-ES/README.md&quot;&gt;&lt;img alt=&quot;Español&quot; src=&quot;https://img.shields.io/badge/Español-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/fr-FR/README.md&quot;&gt;&lt;img alt=&quot;Français&quot; src=&quot;https://img.shields.io/badge/Français-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/ko-KR/README.md&quot;&gt;&lt;img alt=&quot;한국어&quot; src=&quot;https://img.shields.io/badge/한국어-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/ar-SA/README.md&quot;&gt;&lt;img alt=&quot;العربية&quot; src=&quot;https://img.shields.io/badge/العربية-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/vi-VN/README.md&quot;&gt;&lt;img alt=&quot;Tiếng_Việt&quot; src=&quot;https://img.shields.io/badge/Tiếng_Việt-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/docs-readme/de-DE/README.md&quot;&gt;&lt;img alt=&quot;Deutsch&quot; src=&quot;https://img.shields.io/badge/Deutsch-d9d9d9&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;/div&gt; 
&lt;table align=&quot;center&quot;&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; valign=&quot;top&quot; align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/gif-header.png&quot; width=&quot;100%&quot; /&gt; &lt;br /&gt; &lt;strong&gt;A beginner-friendly learning map&lt;/strong&gt; &lt;br /&gt; &lt;sub&gt;Clear guidance from zero, so you can stop &quot;learning and forgetting&quot;&lt;/sub&gt; &lt;/td&gt; 
   &lt;td width=&quot;50%&quot; valign=&quot;top&quot; align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/gif-tutorial.png&quot; width=&quot;100%&quot; /&gt; &lt;br /&gt; &lt;strong&gt;Step-by-step visual tutorials&lt;/strong&gt; &lt;br /&gt; &lt;sub&gt;Detailed walkthroughs that feel like learning with a private tutor&lt;/sub&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; valign=&quot;top&quot; align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/gif-ide.gif&quot; width=&quot;100%&quot; /&gt; &lt;br /&gt; &lt;strong&gt;Immersive simulated coding&lt;/strong&gt; &lt;br /&gt; &lt;sub&gt;Virtual mouse guidance helps you quickly learn the core IDE workflow&lt;/sub&gt; &lt;/td&gt; 
   &lt;td width=&quot;50%&quot; valign=&quot;top&quot; align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/gif-diffusion.gif&quot; width=&quot;100%&quot; /&gt; &lt;br /&gt; &lt;strong&gt;Visible AI principles&lt;/strong&gt; &lt;br /&gt; &lt;sub&gt;Animated explanations make it easy to see how AI generates images&lt;/sub&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td width=&quot;50%&quot; valign=&quot;top&quot; align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/gif-rag.gif&quot; width=&quot;100%&quot; /&gt; &lt;br /&gt; &lt;strong&gt;Learn RAG like a game&lt;/strong&gt; &lt;br /&gt; &lt;sub&gt;Interactive components let you click through the full RAG data flow&lt;/sub&gt; &lt;/td&gt; 
   &lt;td width=&quot;50%&quot; valign=&quot;top&quot; align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/git-terminal.gif&quot; width=&quot;100%&quot; /&gt; &lt;br /&gt; &lt;strong&gt;Visual terminal concepts&lt;/strong&gt; &lt;br /&gt; &lt;sub&gt;Command-line behavior becomes intuitive when the underlying logic is visualized&lt;/sub&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;h3&gt;⭐ &lt;a href=&quot;https://github.com/datawhalechina/easy-vibe&quot; style=&quot;color: #d0cd16ff;&quot;&gt;Star the repo here&lt;/a&gt; to help accelerate updates ❤️&lt;/h3&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot; style=&quot;margin: 30px 0;&quot;&gt; 
 &lt;a href=&quot;https://github.com/datawhalechina/easy-vibe/issues/new?template=story_submission.md&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/stories_image.png&quot; alt=&quot;Share Your Vibe Story&quot; width=&quot;80%&quot; style=&quot;border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.15);&quot; /&gt; &lt;/a&gt; 
 &lt;p style=&quot;margin-top: 15px; font-size: 1.1em; color: #666;&quot;&gt; 📝 &lt;strong&gt;Have your own vibe coding story?&lt;/strong&gt; Submit it here and inspire others! &lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#why-easy-vibe&quot;&gt;Why Easy-Vibe&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-news&quot;&gt;News&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#who-this-is-for&quot;&gt;Who This Is For&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#your-learning-paths&quot;&gt;Your Learning Paths&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#study-suggestions&quot;&gt;Study Suggestions&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#i-beginner-entry&quot;&gt;I. Beginner Entry&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#ii-junior-and-mid-level-developers&quot;&gt;II. Junior and Mid-Level Developers&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#iii-advanced-developers&quot;&gt;III. Advanced Developers&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-appendix-knowledge-base&quot;&gt;Appendix Knowledge Base&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#%EF%B8%8F-how-to-learn&quot;&gt;How To Learn&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-run-locally&quot;&gt;Run Locally&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#other-courses&quot;&gt;Other Courses&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-contributing--contributors&quot;&gt;Contributing &amp;amp; Contributors&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#-license&quot;&gt;LICENSE&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Why Easy-Vibe&lt;/h2&gt; 
&lt;p&gt;Want an expense tracker? Say it.&lt;/p&gt; 
&lt;p&gt;Need a booking system with WeChat login? Say it.&lt;/p&gt; 
&lt;p&gt;Want a blog with comments? Say it.&lt;/p&gt; 
&lt;p&gt;In the AI era, programming starts by describing what you want.&lt;/p&gt; 
&lt;p&gt;Easy-Vibe teaches you how to turn that into a real product.&lt;/p&gt; 
&lt;h2&gt;🔥 News&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;[2026-03-29]&lt;/strong&gt; ✨ &lt;strong&gt;Vibe Stories launched and upgraded with real user journeys&lt;/strong&gt;: Added a new homepage Vibe Stories section with an interactive carousel and dedicated story pages, then replaced placeholder content with four real user stories featuring a rural primary school teacher, a college student, a high school IT teacher, and a truck driver who built real products with AI. &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/zh-cn/vibe-stories/story-1.html&quot;&gt;👉 View the stories&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;[2026-03-26]&lt;/strong&gt; 🚀 &lt;strong&gt;Major Stage 2 practice update&lt;/strong&gt;: Completed the SaaS capstone project &quot;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/assignments/fullstack-app/&quot;&gt;Your First SaaS Full-Stack App: Copywriting Generator Website&lt;/a&gt;&quot; and substantially expanded the &quot;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/stripe-payment/&quot;&gt;How to integrate Stripe and payment systems&lt;/a&gt;&quot; section, plus key content around multi-product UI and WeChat Mini Program backend workflows.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;[2026-03-25]&lt;/strong&gt; 📚 &lt;strong&gt;New appendix: User Research and Requirement Validation&lt;/strong&gt;: Added four new articles covering idea sourcing, the Double Diamond model, Jobs to Be Done, and The Mom Test to help beginners discover and validate product ideas. &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/appendix/&quot;&gt;👉 Read the appendix&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;[2026-03-25]&lt;/strong&gt; 📚 &lt;strong&gt;English documentation fully updated&lt;/strong&gt;: Stage 2 (Full-stack Development) and Stage 3 (Advanced Development) are now fully available in English. &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/&quot;&gt;👉 Start learning&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;details&gt; 
 &lt;summary&gt;Past News&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-03-02]&lt;/strong&gt; 🦞 &lt;strong&gt;OpenClaw and AI Agent friendly support&lt;/strong&gt;: Added &lt;code&gt;llms.txt&lt;/code&gt; so OpenClaw, Claude, Cursor, Trae, and other AI agents can quickly understand the repository structure and find the right tutorial content.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-03-01]&lt;/strong&gt; The &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/&quot;&gt;Advanced Development section&lt;/a&gt; has been comprehensively upgraded with deep guides for Claude Code, including MCP, Skills, Agent Teams, and more, along with eight cross-platform project tutorials.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-02-25]&lt;/strong&gt; Updated the &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/appendix/&quot;&gt;Appendix Knowledge Base&lt;/a&gt;, now covering 9 knowledge areas and 80+ interactive topics.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-01-27]&lt;/strong&gt; Added Android and iOS app development tutorials.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-01-19]&lt;/strong&gt; Released interactive demos for Prompt Engineering, AI history, authentication design, Git principles, and more.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-01-16]&lt;/strong&gt; Reorganized the project structure and formally established a beginner entry path.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-01-14]&lt;/strong&gt; Completed a large update to the Stage 1 product prototyping docs.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-01-13]&lt;/strong&gt; Refactored the documentation architecture and fully enabled multi-language support.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;[2026-01-01]&lt;/strong&gt; Released the core learning map for the project.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h2&gt;Who This Is For&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Complete beginners&lt;/strong&gt;: Build your first project first, then understand how it works&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Product managers / founders&lt;/strong&gt;: Validate ideas fast and build MVPs at low cost&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Students&lt;/strong&gt;: Develop practical skills for the AI era&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Junior developers&lt;/strong&gt;: Learn the full path from idea to launch&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Mid-level and senior developers&lt;/strong&gt;: Upgrade your AI collaboration workflow for complex projects&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Your Learning Paths&lt;/h2&gt; 
&lt;h3&gt;🎮 I want a fast first win&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Everyone &lt;strong&gt;What you will learn&lt;/strong&gt;: What AI coding actually feels like through a simple, concrete hands-on example &lt;strong&gt;What you will get&lt;/strong&gt;: A clear first impression of vibe coding and how to work with AI by conversation&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/ai-capabilities-through-games/&quot;&gt;Start here&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;💡 I want to turn an idea into a product prototype&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Beginners / product managers / founders &lt;strong&gt;What you will learn&lt;/strong&gt;: Learning roadmap, AI IDE tools, idea validation, prototyping, AI capability integration, and full demo iteration &lt;strong&gt;What you will get&lt;/strong&gt;: A demoable AI product prototype you can actually show to users or teammates&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/learning-map/&quot;&gt;Start learning&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;🚀 I want to build full-stack products end to end&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Junior developers / indie hackers / advanced learners &lt;strong&gt;What you will learn&lt;/strong&gt;: Frontend workflows, design-to-code, databases, backend APIs, deployment, billing, and major projects &lt;strong&gt;What you will get&lt;/strong&gt;: The ability to independently ship modern AI-enabled web applications&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/&quot;&gt;Start learning&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;AI-Native: I want advanced Claude Code and agent workflows&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Developers interested in AI-native engineering &lt;strong&gt;What you will learn&lt;/strong&gt;: Claude Code, MCP, Skills, Agent Teams, long-running tasks, Spec Coding, and cross-platform app delivery &lt;strong&gt;What you will get&lt;/strong&gt;: A stronger workflow for complex AI-assisted development and automation&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/&quot;&gt;Go to advanced development&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;📚 I want reference material and fundamentals&lt;/h3&gt; 
&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;: Everyone &lt;strong&gt;What you will learn&lt;/strong&gt;: Computer fundamentals, frontend/backend basics, infrastructure, AI principles, and engineering practices &lt;strong&gt;What you will get&lt;/strong&gt;: A long-term reference knowledge base covering 9 major knowledge areas&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/appendix/&quot;&gt;Browse the knowledge base&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Study Suggestions&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;If you are a beginner, product manager, or founder, start with &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/learning-map/&quot;&gt;Stage 1&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;If you want to move from prototypes to full-stack delivery, start with &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/&quot;&gt;Stage 2&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;If you want advanced Claude Code workflows or cross-platform projects, go to &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/&quot;&gt;Stage 3&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;If you get blocked by concepts or missing background knowledge, use the &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/appendix/&quot;&gt;Appendix Knowledge Base&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;📖 Content Navigation&lt;/h3&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/assets/readme-image1.png&quot; alt=&quot;Learning Map&quot; width=&quot;70%&quot; style=&quot;border-radius: 10px; box-shadow: 0 8px 20px rgba(45,55,72,0.3); margin: 15px 0;&quot; /&gt; 
&lt;/div&gt; 
&lt;h3&gt;I. Beginner Entry&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/learning-map/&quot;&gt;Learning Map&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;A guided overview of the full learning journey&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/ai-capabilities-through-games/&quot;&gt;AI Era: If You Can Speak, You Can Code&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Get your first feel for AI coding through examples like Snake&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/introduction-to-ai-ide/&quot;&gt;Master AI Programming Tools&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn how AI IDE tools work and build simple local projects with them&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/finding-great-idea/&quot;&gt;Find Great Ideas&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn how to discover and validate product ideas worth building&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/building-prototype/&quot;&gt;Build Product Prototypes&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Move from requirements to single-page and multi-page product prototypes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/integrating-ai-capabilities/&quot;&gt;Integrate AI Capabilities&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Integrate text, image, and video AI features&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/complete-project-practice/&quot;&gt;Complete project practice&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Simulate real scenarios, collect user feedback, and iterate on a full project&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Appendix: Product and Business Thinking&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-a-product-thinking/&quot;&gt;Product Thinking and Solution Design&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Core frameworks for going from zero to one with a product&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-industry-scenarios/&quot;&gt;AI Industry Application Scenarios (B-end)&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Understand how AI is applied across industries&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-c-consumer-scenarios/&quot;&gt;AI Consumer Scenarios Inspiration (C-end)&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Explore product opportunities in consumer AI&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Appendix: User Research and Requirement Validation&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-idea-sources/&quot;&gt;Where to find ideas: 3 reference sources that work best for beginners&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build a reliable pipeline for finding concrete product opportunities&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-double-diamond/&quot;&gt;Double Diamond: first do the right thing, then do it right&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Use a structured process to move from scattered inspiration to a workable direction&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-jobs-to-be-done/&quot;&gt;Use Jobs to Be Done to find what users really want done&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Analyze user goals through real tasks instead of surface-level feature requests&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-mom-test/&quot;&gt;The Mom Test: a user interview method for validating demand&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn how to ask better questions and avoid false-positive feedback&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Appendix: Technical Solutions&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-b-common-errors/&quot;&gt;What to do if you encounter errors&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Common vibe coding issues and how to troubleshoot them&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-articles/example0-1/vibe-coding-tools-snake-game-tutorial&quot;&gt;Comparison of Seven AI Programming Tools&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Compare major AI coding platforms through hands-on testing&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-1/appendix-articles/example0-2/vibe-coding-tools-build-website-with-ai-coding-and-design-agents&quot;&gt;Design Websites with Agents&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn multi-agent collaboration in practice&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;II. Junior and Mid-Level Developers&lt;/h3&gt; 
&lt;h4&gt;Frontend&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/lovart-assets/&quot;&gt;Frontend 0: Build Your Own Asset-Production Agent with Lovart&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Use Nanobanana and Lovart to batch-generate visual assets and build a drawing agent with intent recognition&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/figma-mastergo/&quot;&gt;Frontend 1: Figma &amp;amp; MasterGo Basics&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn the workflow from design drafts to implementation-ready UI thinking&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/ui-design/&quot;&gt;Frontend 2: Build Your First Modern App - UI Design&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn the UI design foundations behind modern application interfaces&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/multi-product-ui/&quot;&gt;Frontend 3: UI Guidelines and Multi-Product Design&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Improve consistency and aesthetics across multiple products with shared UI rules&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/llm-skills-beautiful/&quot;&gt;Frontend 4: Make Interfaces Beautiful with LLMs and Skills&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Use prompts and plugins to make AI generate more polished, distinctive interfaces&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/hogwarts-portraits/&quot;&gt;Frontend 4: Let&#39;s Build Hogwarts Portraits&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build an interactive AI-image frontend project from scratch&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/design-to-code/&quot;&gt;Frontend 6: From Design Prototype to Project Code&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Turn design prototypes into frontend code that can really run in the browser&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/frontend/modern-component-library/&quot;&gt;Frontend 7: Upgrade Your UI with Modern Component Libraries&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Use component libraries to build professional interfaces faster&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Backend&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/git-workflow/&quot;&gt;Backend 1: Learn Git and GitHub&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Master core version control operations and collaboration workflows with Git&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/database-supabase/&quot;&gt;Backend 2: From Database to Supabase&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn relational database basics and use Supabase as a modern BaaS platform&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/ai-interface-code/&quot;&gt;Backend 3: Backend API Design and Development&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Use AI to assist API design, backend code generation, and API documentation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/zeabur-deployment/&quot;&gt;Backend 4: Ship Your Product Prototype&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Quickly deploy full-stack applications to the cloud with Zeabur&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/modern-cli/&quot;&gt;Backend 5: From IDEs to CLI AI Coding Tools&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Explore terminal-first AI coding workflows for modern development&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/backend/stripe-payment/&quot;&gt;Backend 6: Integrate Stripe and Other Billing Systems&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Add monetization with payment and billing capabilities&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Major Projects&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/assignments/fullstack-app/&quot;&gt;Major Project 1: Your First SaaS Full-Stack App - AI Copywriting Website&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build an AI marketing copy workspace with login, generation, billing, and admin management&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/assignments/modern-frontend-trae/&quot;&gt;Major Project 2: Online Exam and Management System&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build an online exam system with question generation, test-taking flows, and admin tools&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;AI Capabilities Appendix&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-2/ai-capabilities/dify-knowledge-base/&quot;&gt;AI 1: Dify Basics &amp;amp; Knowledge Base Integration&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn to build AI applications with Dify and integrate private knowledge bases&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;III. Advanced Developers&lt;/h3&gt; 
&lt;h4&gt;Claude Code Core Skills&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/basics/&quot;&gt;Getting started with Claude Code&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Installation, setup, fundamentals, and useful commands&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/mcp/&quot;&gt;Claude Code MCP guide&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Connect Claude Code to GitHub, databases, APIs, and other services through MCP&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/skills/&quot;&gt;Claude Code Skills guide&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Package expertise into reusable skills you can use again and again&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/long-running-tasks/&quot;&gt;How to keep Claude Code working for long-running tasks&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Design long-running tasks so coding tools can keep working until the job is done&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/agent-teams/&quot;&gt;Claude Agent Teams guide&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Coordinate multiple AI instances like a real development team&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/superpowers/&quot;&gt;Claude Code Superpowers for engineering-grade development&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Help AI produce engineering-grade code with TDD and best practices&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/workflow/&quot;&gt;Claude Code workflow best practices&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Best practices for refactoring, code review, and daily development&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/mobile-development/&quot;&gt;Claude Code remote development on mobile&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Use Claude Code beyond the desktop and build a productive remote workflow on mobile devices&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/claude-agent-sdk/&quot;&gt;Claude Agent SDK complete guide&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build custom agent workflows and integrate Claude into your own tools with the SDK&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/core-skills/spec-coding/&quot;&gt;From vibe coding to spec coding&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Move from ad-hoc prompting to a more structured, specification-driven AI development workflow&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Cross-Platform Development&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/choose-platform/&quot;&gt;How to choose the right platform for your app&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Compare app forms and choose the right platform based on users, scenarios, and delivery goals&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/wechat-miniprogram/&quot;&gt;Build a WeChat Mini Program&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Understand the ecosystem and ship a frontend mini program from template to launch&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/wechat-miniprogram-backend/&quot;&gt;Build a WeChat Mini Program with backend&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Add backend logic and databases to complete the full business loop&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/android-app/&quot;&gt;Build an Android app&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn Android app development with a modern native workflow&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/ios-app/&quot;&gt;Build an iOS app&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Learn iOS app development and the conventions of the Apple ecosystem&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/pwa-local-app/&quot;&gt;Build a local PWA app&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Turn a website into a real app with offline support, push, and installation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/browser-ai-extension/&quot;&gt;Build a browser AI assistant extension&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Create a Chrome extension that summarizes any page with either cloud APIs or built-in AI&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/electron-voice-to-text/&quot;&gt;Build an Electron desktop app&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build a voice-to-text desktop app with Electron for three platforms&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/nft-minting/&quot;&gt;Rapidly build and mint an NFT&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Write a smart contract from scratch, deploy it, and mint your own NFT&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/vscode-extension/&quot;&gt;Build a VS Code extension&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build an AI project assistant with templates, code chat, and multi-file Q&amp;amp;A&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/cross-platform/qt-industrial-hmi/&quot;&gt;Build an industrial-grade Qt desktop app&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Create a real-time Qt HMI system with trends, alerts, and monitoring&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;AI Capabilities Appendix&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Section&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;Key Content&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/ai-advanced/rag-introduction/&quot;&gt;What is RAG and how does it work&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Build a systematic understanding of RAG principles and common architectures&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/stage-3/ai-advanced/langgraph-advanced-rag/&quot;&gt;Intermediate and advanced RAG workflows with LangGraph&lt;/a&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Design multi-step workflows and more advanced RAG systems&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;📚 Appendix Knowledge Base&lt;/h3&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Covering &lt;strong&gt;9 major knowledge areas&lt;/strong&gt; and &lt;strong&gt;80+ interactive topics&lt;/strong&gt;, this appendix uses animation and visual components to help you intuitively understand core concepts from computer fundamentals to the AI frontier.&lt;/p&gt; 
 &lt;p&gt;👉 &lt;a href=&quot;https://datawhalechina.github.io/easy-vibe/en/appendix/&quot;&gt;View the full appendix&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;🎓 Other Courses&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#other-courses&quot;&gt;Hands-on Modern RL&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/datawhalechina/easy-vibe/main/#other-courses&quot;&gt;Learn Harness Engineering&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🛠️ How To Learn&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Read and practice the sections that match your current level. If you get stuck, feel free to open an issue.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;💻 Run Locally&lt;/h2&gt; 
&lt;h3&gt;Modern approach&lt;/h3&gt; 
&lt;p&gt;In an AI IDE chat window such as VS Code, Cursor, or Trae, you can simply say:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Please help me run this project locally.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Traditional approach&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Open &lt;code&gt;http://localhost:3000&lt;/code&gt; in your browser.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Other Courses&lt;/h2&gt; 
&lt;p&gt;Our team has also created other courses! Check them out:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/walkinglabs/hands-on-modern-rl&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/HANDS--ON_MODERN_RL-0052cc?style=for-the-badge&quot; alt=&quot;Hands-on Modern RL&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Hands-on Modern RL&lt;/strong&gt;: An open-source, hands-on curriculum bridging the gap from basic RL concepts to LLM alignment, RLVR, and advanced Agentic systems.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/walkinglabs/learn-harness-engineering/tree/main&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/LEARN_HARNESS_ENGINEERING-0052cc?style=for-the-badge&quot; alt=&quot;Learn Harness Engineering&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Learn Harness Engineering&lt;/strong&gt;: A comprehensive guide to harness engineering.&lt;/p&gt; 
&lt;h2&gt;🤝 Contributing &amp;amp; Contributors&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;If you find an issue or see something that can be improved, feel free to open an issue. If nobody replies, you can also contact the &lt;a href=&quot;https://github.com/datawhalechina/DOPMC/raw/main/OP.md&quot;&gt;Datawhale support team&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;If you want to contribute, open a pull request. If nobody replies, you can also contact the &lt;a href=&quot;https://github.com/datawhalechina/DOPMC/raw/main/OP.md&quot;&gt;Datawhale support team&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;If you want to start a new Datawhale open-source project, please follow the &lt;a href=&quot;https://github.com/datawhalechina/DOPMC/raw/main/GUIDE.md&quot;&gt;Datawhale Open Source Project Guide&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;🙏 Contributors&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sanbuphy&quot;&gt;Sanbu - Project Lead&lt;/a&gt; (Datawhale member)&lt;/li&gt; 
 &lt;li&gt;Fang Ke - Mentor (Datawhale member, Tsinghua University)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yerim25&quot;&gt;Yerim Kang&lt;/a&gt; (Practice projects, Tsinghua University)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ChileenZ&quot;&gt;Zhilin Zhao&lt;/a&gt; (Practice projects, Tsinghua University)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://yixuan20.github.io/&quot;&gt;Yixuan Li&lt;/a&gt; (Visual design, Tsinghua University)&lt;/li&gt; 
 &lt;li&gt;Siyi Liu (Practice projects, Tsinghua University)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/liulx25xx&quot;&gt;Lixin Liu&lt;/a&gt; (Practice projects, Tsinghua University)&lt;/li&gt; 
 &lt;li&gt;Everyone in the AI Vibe Coding 101 internal testing group who shared suggestions and feedback&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Special Thanks&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Thanks to &lt;a href=&quot;https://github.com/Sm1les&quot;&gt;@Sm1les&lt;/a&gt; for the help and support on this project&lt;/li&gt; 
 &lt;li&gt;Thanks to every contributor and everyone who supported the project with feedback and stars ❤️&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;a href=&quot;https://www.star-history.com/#datawhalechina/easy-vibe&amp;amp;type=timeline&amp;amp;legend=top-left&quot;&gt; 
  &lt;picture&gt; 
   &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://api.star-history.com/svg?repos=datawhalechina/easy-vibe&amp;amp;type=timeline&amp;amp;theme=dark&amp;amp;legend=top-left&quot; /&gt; 
   &lt;source media=&quot;(prefers-color-scheme: light)&quot; srcset=&quot;https://api.star-history.com/svg?repos=datawhalechina/easy-vibe&amp;amp;type=timeline&amp;amp;legend=top-left&quot; /&gt; 
  &lt;/picture&gt; &lt;/a&gt; 
&lt;/div&gt; 
&lt;div align=&quot;center&quot; style=&quot;margin-top: 30px;&quot;&gt; 
 &lt;a href=&quot;https://github.com/datawhalechina/easy-vibe/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=datawhalechina/easy-vibe&quot; /&gt; &lt;/a&gt; 
&lt;/div&gt; 
&lt;h2&gt;📄 LICENSE&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/4.0/&quot;&gt; &lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width:0&quot; src=&quot;https://img.shields.io/badge/license-CC%20BY--NC--SA%204.0-lightgrey&quot; /&gt; &lt;/a&gt; 
 &lt;br /&gt; This work is licensed under the 
 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/4.0/&quot;&gt; Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License &lt;/a&gt;. 
&lt;/div&gt; 
&lt;h2&gt;Star History&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.star-history.com/#datawhalechina/easy-vibe&amp;amp;type=date&amp;amp;legend=top-left&quot;&gt;&lt;img src=&quot;https://api.star-history.com/svg?repos=datawhalechina/easy-vibe&amp;amp;type=date&amp;amp;legend=top-left&quot; alt=&quot;Star History Chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/982db0df5bb1bbc4ab4ee5678a7f8490d2bd4202afe753e0b7a572507147bf01/datawhalechina/easy-vibe" medium="image" />
      
    </item>
    
    <item>
      <title>SillyTavern/SillyTavern</title>
      <link>https://github.com/SillyTavern/SillyTavern</link>
      <description>&lt;p&gt;LLM Frontend for Power Users.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a name=&quot;readme-top&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/01a6ae9a-16aa-45f2-8bff-32b5dc587e44&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt;English | &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/release/readme-de_de.md&quot;&gt;German&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/release/readme-zh_cn.md&quot;&gt;中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/release/readme-zh_tw.md&quot;&gt;繁體中文&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/release/readme-ja_jp.md&quot;&gt;日本語&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/release/readme-ru_ru.md&quot;&gt;Русский&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/release/readme-ko_kr.md&quot;&gt;한국어&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/SillyTavern/SillyTavern/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/SillyTavern/SillyTavern.svg?sanitize=true&quot; alt=&quot;GitHub Stars&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/SillyTavern/SillyTavern/forks&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/forks/SillyTavern/SillyTavern.svg?sanitize=true&quot; alt=&quot;GitHub Forks&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/SillyTavern/SillyTavern/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/SillyTavern/SillyTavern.svg?sanitize=true&quot; alt=&quot;GitHub Issues&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/SillyTavern/SillyTavern/pulls&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues-pr/SillyTavern/SillyTavern.svg?sanitize=true&quot; alt=&quot;GitHub Pull Requests&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;p&gt;SillyTavern provides a single unified interface for many LLM APIs (KoboldAI/CPP, Horde, NovelAI, Ooba, Tabby, OpenAI, OpenRouter, Claude, Mistral and more), a mobile-friendly layout, Visual Novel Mode, Automatic1111 &amp;amp; ComfyUI API image generation integration, TTS, WorldInfo (lorebooks), customizable UI, auto-translate, more prompt options than you&#39;d ever want or need, and endless growth potential via third-party extensions.&lt;/p&gt; 
&lt;p&gt;We have a &lt;a href=&quot;https://docs.sillytavern.app/&quot;&gt;Documentation website&lt;/a&gt; to answer most of your questions and help you get started.&lt;/p&gt; 
&lt;h2&gt;What is SillyTavern?&lt;/h2&gt; 
&lt;p&gt;SillyTavern (or ST for short) is a locally installed user interface that allows you to interact with text generation LLMs, image generation engines, and TTS voice models.&lt;/p&gt; 
&lt;p&gt;Beginning in February 2023 as a fork of TavernAI 1.2.8, SillyTavern now has over 300 contributors and 3 years of independent development under its belt, and continues to serve as a leading software for savvy AI hobbyists.&lt;/p&gt; 
&lt;h2&gt;Our Vision&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;We aim to empower users with as much utility and control over their LLM prompts as possible. The steep learning curve is part of the fun!&lt;/li&gt; 
 &lt;li&gt;We do not provide any online or hosted services, nor programmatically track any user data.&lt;/li&gt; 
 &lt;li&gt;SillyTavern is a passion project brought to you by a dedicated community of LLM enthusiasts, and will always be free and open sourced.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Do I need a powerful PC to run SillyTavern?&lt;/h2&gt; 
&lt;p&gt;The hardware requirements are minimal: it will run on anything that can run NodeJS 20 or higher. If you intend to do LLM inference on your local machine, we recommend a 3000-series NVIDIA graphics card with at least 6GB of VRAM, but actual requirements may vary depending on the model and backend you choose to use.&lt;/p&gt; 
&lt;h2&gt;Questions or suggestions?&lt;/h2&gt; 
&lt;h3&gt;Discord server&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://discord.gg/sillytavern&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/1100685673633153084?color=5865F2&amp;amp;label=discord&amp;amp;labelColor=black&amp;amp;logo=discord&amp;amp;logoColor=white&amp;amp;style=for-the-badge&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;&lt;a href=&quot;https://discord.gg/sillytavern&quot;&gt;Join our Discord community!&lt;/a&gt; Get support, share favorite characters and prompts.&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
&lt;/table&gt; 
&lt;p&gt;Or get in touch with the developers directly:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Discord: cohee, rossascends, wolfsblvt&lt;/li&gt; 
 &lt;li&gt;Reddit: &lt;a href=&quot;https://www.reddit.com/user/RossAscends/&quot;&gt;/u/RossAscends&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/user/sillylossy/&quot;&gt;/u/sillylossy&lt;/a&gt;, &lt;a href=&quot;https://www.reddit.com/user/Wolfsblvt/&quot;&gt;u/Wolfsblvt&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SillyTavern/SillyTavern/issues&quot;&gt;Post a GitHub issue&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;I like your project! How do I contribute?&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Send pull requests. Learn how to contribute: &lt;a href=&quot;https://raw.githubusercontent.com/SillyTavern/SillyTavern/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Send feature suggestions and issue reports using the provided templates.&lt;/li&gt; 
 &lt;li&gt;Read this entire readme file and check the documentation website first, to avoid sending duplicate issues.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;img width=&quot;500&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/9b5f32f0-c3b3-4102-b3f5-0e9213c0f50f&quot; /&gt; 
&lt;img width=&quot;500&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/913fdbaa-7d33-42f1-ae2c-89dca41c53d1&quot; /&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;For detailed installation instructions, please visit our documentation:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.sillytavern.app/installation/windows/&quot;&gt;Windows Installation Guide&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.sillytavern.app/installation/linuxmacos/&quot;&gt;MacOS/Linux Installation Guide&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.sillytavern.app/installation/android-(termux)/&quot;&gt;Android (Termux) Installation Guide&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.sillytavern.app/installation/docker/&quot;&gt;Docker Installation Guide&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License and credits&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TavernAI/TavernAI&quot;&gt;TavernAI&lt;/a&gt; 1.2.8 by Humi: MIT License&lt;/li&gt; 
 &lt;li&gt;Portions of CncAnon&#39;s TavernAITurbo mod used with permission&lt;/li&gt; 
 &lt;li&gt;Visual Novel Mode inspired by the work of PepperTaco (&lt;a href=&quot;https://github.com/peppertaco/Tavern/&quot;&gt;https://github.com/peppertaco/Tavern/&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Noto Sans font by Google (OFL license)&lt;/li&gt; 
 &lt;li&gt;Lexer/Parser by Chevrotain (Apache-2.0 license) &lt;a href=&quot;https://github.com/chevrotain/chevrotain&quot;&gt;https://github.com/chevrotain/chevrotain&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Icon theme by Font Awesome &lt;a href=&quot;https://fontawesome.com&quot;&gt;https://fontawesome.com&lt;/a&gt; (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)&lt;/li&gt; 
 &lt;li&gt;Default content by @OtisAlejandro (Seraphina character and lorebook) and @kallmeflocc (10K Discord Users Celebratory Background)&lt;/li&gt; 
 &lt;li&gt;Docker guide by &lt;a href=&quot;https://github.com/mrguymiah&quot;&gt;@mrguymiah&lt;/a&gt; and &lt;a href=&quot;https://github.com/Bronya-Rand&quot;&gt;@Bronya-Rand&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;kokoro-js library by &lt;a href=&quot;https://github.com/hexgrad&quot;&gt;@hexgrad&lt;/a&gt; (Apache-2.0 License)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Top Contributors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/SillyTavern/SillyTavern/graphs/contributors&quot;&gt;&lt;img src=&quot;https://contrib.rocks/image?repo=SillyTavern/SillyTavern&quot; alt=&quot;Contributors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;!-- LINK GROUP --&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/599524116/e5c0abc1-5005-4944-98dd-997206a15418" medium="image" />
      
    </item>
    
    <item>
      <title>juliangarnier/anime</title>
      <link>https://github.com/juliangarnier/anime</link>
      <description>&lt;p&gt;JavaScript animation engine&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Anime.js&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; 
 &lt;picture align=&quot;center&quot;&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;./assets/images/animejs-v4-logo-animation-dark.gif&quot; /&gt; 
  &lt;img align=&quot;center&quot; alt=&quot;Anime.js V4 logo animation&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/images/animejs-v4-logo-animation.gif&quot; width=&quot;560&quot; /&gt; 
 &lt;/picture&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;strong&gt; &lt;em&gt;Anime.js&lt;/em&gt; is a fast, multipurpose and lightweight JavaScript animation library with a simple, yet powerful API.&lt;br /&gt; It works with CSS properties, SVG, DOM attributes and JavaScript Objects. &lt;/strong&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img alt=&quot;NPM Downloads&quot; src=&quot;https://img.shields.io/npm/dm/animejs?style=flat-square&amp;amp;logo=npm&quot; /&gt; &lt;img alt=&quot;jsDelivr hits (npm)&quot; src=&quot;https://img.shields.io/jsdelivr/npm/hm/animejs?style=flat-square&amp;amp;logo=jsdeliver&quot; /&gt; &lt;img alt=&quot;GitHub Sponsors&quot; src=&quot;https://img.shields.io/github/sponsors/juliangarnier?style=flat-square&amp;amp;logo=github&quot; /&gt; &lt;/p&gt; 
&lt;h2&gt;Sponsors&lt;/h2&gt; 
&lt;p&gt;Anime.js is 100% free and is only made possible with the help of our sponsors. Help the project become sustainable by sponsoring us on &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt;GitHub Sponsors&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Platinum sponsors&lt;/h3&gt; 
&lt;table&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-large.png?v=200126&quot; width=&quot;310&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-large.png?v=200126&quot; width=&quot;310&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-large.png?v=200126&quot; width=&quot;310&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Silver sponsors&lt;/h3&gt; 
&lt;table&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://www.testmuai.com/?utm_medium=sponsor&amp;amp;utm_source=animejs&quot;&gt; 
     &lt;picture&gt; 
      &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;./assets/sponsors/testmu-ai-logomark.png?v=200126&quot; /&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/testmu-ai-logomark-dark.png?v=200126&quot; width=&quot;141&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-small.png?v=200126&quot; width=&quot;141&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-small.png?v=200126&quot; width=&quot;141&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-small.png?v=200126&quot; width=&quot;141&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-small.png?v=200126&quot; width=&quot;141&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt; 
     &lt;picture&gt; 
      &lt;img align=&quot;center&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/sponsors/placeholder-small.png?v=200126&quot; width=&quot;141&quot; /&gt; 
     &lt;/picture&gt; &lt;/a&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Get featured here by becoming a &lt;a target=&quot;_blank&quot; href=&quot;https://github.com/sponsors/juliangarnier&quot;&gt;GitHub Sponsor&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Anime.js V4 works by importing ES modules like so:&lt;/p&gt; 
&lt;table&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td&gt; &lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;import {
  animate,
  stagger,
} from &#39;animejs&#39;;

animate(&#39;.square&#39;, {
  x: 320,
  rotate: { from: -180 },
  duration: 1250,
  delay: stagger(65, { from: &#39;center&#39; }),
  ease: &#39;inOutQuint&#39;,
  loop: true,
  alternate: true
});
&lt;/code&gt;&lt;/pre&gt; &lt;/td&gt; 
   &lt;td&gt; &lt;img align=&quot;center&quot; alt=&quot;Anime.js code example&quot; src=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/assets/images/usage-example-result.gif&quot; /&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;h2&gt;V4 Documentation&lt;/h2&gt; 
&lt;p&gt;The full documentation is available &lt;a href=&quot;https://animejs.com/documentation&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;V3 Migration guide&lt;/h2&gt; 
&lt;p&gt;You can find the v3 to v4 migration guide &lt;a href=&quot;https://github.com/juliangarnier/anime/wiki/Migrating-from-v3-to-v4&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;NPM development scripts&lt;/h2&gt; 
&lt;p&gt;First, run &lt;code&gt;npm i&lt;/code&gt; to install all the necessary packages. Then, execute the following scripts with &lt;code&gt;npm run &amp;lt;script&amp;gt;&lt;/code&gt;.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;script&lt;/th&gt; 
   &lt;th&gt;action&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;dev&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Watches for changes in &lt;code&gt;src/**/*.js&lt;/code&gt;, bundles the ESM version to &lt;code&gt;lib/&lt;/code&gt; and creates type declarations in &lt;code&gt;types/&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;dev:test&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Runs &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;test:browser&lt;/code&gt; concurrently&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;build&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Bundles ESM / UMD / CJS / IIFE versions to &lt;code&gt;lib/&lt;/code&gt; and creates type declarations in &lt;code&gt;types/&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;test:browser&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Starts a local server and runs all browser-related tests&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;test:node&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Starts Node-related tests&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;open:examples&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Starts a local server to browse the examples locally&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;© &lt;a href=&quot;http://juliangarnier.com&quot;&gt;Julian Garnier&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/juliangarnier/anime/master/LICENSE.md&quot;&gt;MIT License&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/53809090/dbff3ffc-8459-43db-8a05-b6fdca5c9ed9" medium="image" />
      
    </item>
    
    <item>
      <title>gorhill/uBlock</title>
      <link>https://github.com/gorhill/uBlock</link>
      <description>&lt;p&gt;uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/commits/master&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/gorhill/ublock?label=Commits&quot; alt=&quot;Badge Commits&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/uBlockOrigin/uBlock-issues/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/uBlockOrigin/uBlock-issues&quot; alt=&quot;Badge Issues&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://crowdin.com/project/ublock&quot;&gt;&lt;img src=&quot;https://d322cqt584bo4o.cloudfront.net/ublock/localized.svg?sanitize=true&quot; alt=&quot;Badge Localization&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/LICENSE.txt&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPLv3-blue.svg?sanitize=true&quot; alt=&quot;Badge License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.npmjs.com/package/@gorhill/ubo-core&quot;&gt;&lt;img src=&quot;https://img.shields.io/npm/v/@gorhill/ubo-core&quot; alt=&quot;Badge NPM&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://addons.mozilla.org/addon/ublock-origin/&quot;&gt;&lt;img src=&quot;https://img.shields.io/amo/rating/ublock-origin?label=Firefox&quot; alt=&quot;Badge Mozilla&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm&quot;&gt;&lt;img src=&quot;https://img.shields.io/chrome-web-store/rating/cjpalhdlnbpafiamejdnhcphjbkeiagm?label=Chrome&quot; alt=&quot;Badge Chrome&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/dynamic/json?label=Edge&amp;amp;color=brightgreen&amp;amp;query=%24.averageRating&amp;amp;suffix=%2F%35&amp;amp;url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fodfafepnkmbhccpbejgmiehpchacaeak&quot; alt=&quot;Badge Edge&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h1 align=&quot;center&quot;&gt; &lt;sub&gt; &lt;img src=&quot;https://github.com/gorhill/uBlock/raw/master/src/img/ublock.svg?sanitize=true&quot; height=&quot;38&quot; width=&quot;38&quot; /&gt; &lt;/sub&gt; uBlock Origin (uBO) &lt;/h1&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Browser&lt;/th&gt; 
   &lt;th&gt;Install from ...&lt;/th&gt; 
   &lt;th&gt;Status&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b0136512-56a5-4856-8c50-4971c957a24f&quot; alt=&quot;Get uBlock Origin for Firefox&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://addons.mozilla.org/addon/ublock-origin/&quot;&gt;Firefox Add-ons&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox&quot;&gt;uBO works best on Firefox&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3a7569f8-688b-4eb1-a643-8d0fe173aefe&quot; alt=&quot;Get uBlock Origin for Microsoft Edge&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak&quot;&gt;Edge Add-ons&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/938f080c-fe64-4e48-8b89-4bfceabb56e6&quot; alt=&quot;Get uBlock Origin for Opera&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://addons.opera.com/extensions/details/ublock/&quot;&gt;Opera Add-ons&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/5463ef88-873b-4516-8514-5277664cfde7&quot; alt=&quot;Get uBlock Origin for Chromium&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm&quot;&gt;Chrome Web Store&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/uBlockOrigin/uBlock-issues/wiki/About-Google-Chrome&#39;s-%22This-extension-may-soon-no-longer-be-supported%22&quot;&gt;About Google Chrome&#39;s &quot;This extension may soon no longer be supported&quot;&lt;/a&gt;&lt;br /&gt;End of support on Chrome 139&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2e9037c4-836d-44c1-a716-ba96e89daaff&quot; alt=&quot;Get uBlock Origin for Thunderbird&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://addons.thunderbird.net/thunderbird/addon/ublock-origin/&quot;&gt;Thunderbird Add-ons&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/uBlockOrigin/uBlock-issues/issues/2928&quot;&gt;No longer updated and stuck at 1.49.2.&lt;/a&gt; Later versions require &quot;GitHub - Releases&quot;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/c/c2/GitHub_Invertocat_Logo.svg?sanitize=true&quot; height=&quot;50&quot; alt=&quot;Get uBlock Origin through GitHub&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/releases&quot;&gt;GitHub - Releases&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Stable and development versions on Firefox, Chromium MV2, and Thunderbird. Must be placed manually into web browsers; the Chromium and Thunderbird versions usually won&#39;t auto-update.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;p&gt;uBlock Origin (uBO) is a CPU and memory-efficient &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Blocking-mode&quot;&gt;wide-spectrum content blocker&lt;/a&gt; for Chromium and Firefox. It blocks ads, trackers, coin miners, popups, annoying anti-blockers, malware sites, etc., by default using &lt;a href=&quot;https://easylist.to/#easylist&quot;&gt;EasyList&lt;/a&gt;, &lt;a href=&quot;https://easylist.to/#easyprivacy&quot;&gt;EasyPrivacy&lt;/a&gt;, &lt;a href=&quot;https://pgl.yoyo.org/adservers/&quot;&gt;Peter Lowe&#39;s Blocklist&lt;/a&gt;, &lt;a href=&quot;https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist&quot;&gt;Online Malicious URL Blocklist&lt;/a&gt;, and uBO &lt;a href=&quot;https://github.com/uBlockOrigin/uAssets/tree/master/filters&quot;&gt;filter lists&lt;/a&gt;. There are many other lists available to block even more. Hosts files are also supported. uBO uses the EasyList filter syntax and &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#extended-syntax&quot;&gt;extends&lt;/a&gt; the syntax to work with custom rules and filters.&lt;/p&gt; 
&lt;p&gt;You may easily unselect any preselected filter lists if you think uBO blocks too much. For reference, Adblock Plus installs with only EasyList, ABP filters, and Acceptable Ads enabled by default.&lt;/p&gt; 
&lt;p&gt;It is important to note that using a blocker is &lt;strong&gt;NOT&lt;/strong&gt; &lt;a href=&quot;https://x.com/LeaVerou/status/518154828166725632&quot;&gt;theft&lt;/a&gt;. Do not fall for this creepy idea. The &lt;em&gt;ultimate&lt;/em&gt; logical consequence of &lt;code&gt;blocking = theft&lt;/code&gt; is the criminalization of the inalienable right to privacy.&lt;/p&gt; 
&lt;p&gt;Ads, &quot;unintrusive&quot; or not, are just the visible portion of the privacy-invading means entering your browser when you visit most sites. &lt;strong&gt;uBO&#39;s primary goal is to help users neutralize these privacy-invading methods&lt;/strong&gt; in a way that welcomes those users who do not wish to use more technical means.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#documentation&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#installation&quot;&gt;Installation&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#firefox&quot;&gt;Firefox&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#thunderbird&quot;&gt;Thunderbird&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#chromium&quot;&gt;Chromium&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#all-programs&quot;&gt;All Programs&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#enterprise-deployment&quot;&gt;Enterprise Deployment&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#release-history&quot;&gt;Release History&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#translations&quot;&gt;Translations&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/#about&quot;&gt;About&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Basic Mode&lt;/th&gt; 
   &lt;th&gt;Advanced Mode&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;The &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface&quot;&gt;simple popup user interface&lt;/a&gt; for an install-it-and-forget-it type of installation that is configured optimally by default.&lt;/td&gt; 
   &lt;td&gt;The &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-quick-guide&quot;&gt;advanced popup user interface&lt;/a&gt; includes a point-and-click firewall that is configurable on a per-site basis.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot;&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/585534/232531044-c4ac4dd5-0b60-4c1e-aabb-914be04b846c.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot;&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-quick-guide&quot;&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/585534/232531439-a8f81cc3-6622-45c4-8b32-7348cecf6e98.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Visit the &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki&quot;&gt;Wiki&lt;/a&gt; for documentation.&lt;/p&gt; 
&lt;p&gt;For support, questions, or help, visit &lt;a href=&quot;https://www.reddit.com/r/uBlockOrigin/&quot;&gt;/r/uBlockOrigin&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Permissions&quot;&gt;Required Permissions&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Firefox&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/addon/ublock-origin/&quot;&gt;Firefox Add-ons&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/raw/master/dist/README.md#for-beta-version&quot;&gt;Development Builds&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;uBO &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox&quot;&gt;works best&lt;/a&gt; on Firefox and is available for desktop and Android versions.&lt;/p&gt; 
&lt;h4&gt;Thunderbird&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://addons.thunderbird.net/thunderbird/addon/ublock-origin/&quot;&gt;Thunderbird Add-ons&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;In Thunderbird, uBlock Origin does not affect emails, just feeds.&lt;/p&gt; 
&lt;h4&gt;Chromium&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm&quot;&gt;Chrome Web Store&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak&quot;&gt;Microsoft Edge Add-ons&lt;/a&gt; (Published by &lt;a href=&quot;https://github.com/nicole-ashley&quot;&gt;Nicole Rolls&lt;/a&gt; until version 1.62. Ownership transfer at version 1.64.)&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://addons.opera.com/extensions/details/ublock/&quot;&gt;Opera Add-ons&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii&quot;&gt;Development Builds&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;uBO should be compatible with any Chromium-based browser.&lt;/p&gt; 
&lt;h4&gt;All Programs&lt;/h4&gt; 
&lt;p&gt;Do &lt;strong&gt;NOT&lt;/strong&gt; use uBO with any other content blocker. uBO &lt;a href=&quot;https://www.debugbear.com/blog/chrome-extensions-website-performance#the-impact-of-ad-blocking-on-website-performance&quot;&gt;performs&lt;/a&gt; as well as or better than most popular blockers. Other blockers can prevent uBO&#39;s privacy or anti-blocker-defusing features from working correctly.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/tree/master/dist#install&quot;&gt;Manual Installation&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Enterprise Deployment&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Deploying-uBlock-Origin&quot;&gt;Deploying uBO&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Release History&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/releases&quot;&gt;Releases Page&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Translations&lt;/h2&gt; 
&lt;p&gt;Help translate uBO via &lt;a href=&quot;https://crowdin.com/project/ublock&quot;&gt;Crowdin&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;About&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/MANIFESTO.md&quot;&gt;Manifesto&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Privacy-policy&quot;&gt;Privacy Policy&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/gorhill/uBlock/master/LICENSE.txt&quot;&gt;GPLv3 License&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Free. Open-source. For users by users. No donations sought.&lt;/p&gt; 
&lt;p&gt;If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which are available to use by all for free.&lt;/p&gt; 
&lt;!----&gt; 
&lt;!--[ Internal ]--------------------------------&gt; 
&lt;!--[ Badges ]---------------------------------&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/af5084cdcce06b000dc8ec2d43aa290c970254118ad39f42a49323e732515722/gorhill/uBlock" medium="image" />
      
    </item>
    
  </channel>
</rss>
