{"slug": "show-hn-minimax-h3-on-a-16gb-mac-5-days-after-open-weights", "title": "Show HN: MiniMax H3 on a 16GB Mac, 5 days after open weights", "summary": "VPIPE, a new macOS app from developer tgo-app-dev, runs MiniMax H3, a 33B multimodal model generating video and audio, on Apple Silicon Macs with as little as 16 GB RAM, achieving a 5-second 0.5 MP 24p 6-step clip in about 13 minutes on a base-model M5 MacBook Air. The app uses native Metal inference and weight streaming, and benchmarks show it outperforms the h3.c runtime, completing the same 960×544, 124-frame, 6-DiT-step workload in 12 min 15 sec on the M5 MacBook Air versus 16 min 22 sec for h3.c.", "body_md": "**Lightweight local multimodal AI pipelines and custom Metal inference for Apple Silicon Macs.**\n\n**Multimodal graph:** video, audio, images, text, and tool actions in one pipeline.**Native Metal inference:** custom kernels and no third-party tensor runtime, for optimal speed.**Base-model Mac friendly:** weight streaming and 4-bit model preparation for image/video generation on 16 GB machines.**Out-of-the-box workflows:** image editing, MiniMax H3 video, Qwen chat, realtime VQA, ASR/TTS, and local tool calling.**Reproducible Composer:** save layouts, prompts, params, and model config with each pipeline spec.**Easy to use:** macOS app, web UI control, and remote access from a phone browser.\n\n** Download the macOS app**\n·\n\n**·**\n\n[Run the first example](#first-example)**·**\n\n[Try image editing](/tgo-app-dev/vpipe/blob/main/docs/KLEIN-KV.md)\n\n[Try MiniMax H3 video](/tgo-app-dev/vpipe/blob/main/docs/MINIMAX-H3.md)For the easiest install, choose the largest `.dmg`\n\nin the latest release.\n\n*Prompt-driven image editing in Composer: live pipeline graph,\npreview panels, profiler, and reproducible model configuration.*\n\n-\nRuns\n\n**MiniMax H3** FL2VA and REF2VA on an Apple Silicon Mac — a 33B model generating video**and its soundtrack together**, on as little as 16 GB. Now with** Turbo LoRA**support! See[docs/MINIMAX-H3.md](/tgo-app-dev/vpipe/blob/main/docs/MINIMAX-H3.md)- 5s @ 0.5 MP 24p, 6 steps takes\n**~13 minutes** on a fanless 15-inch**base-model** M5 MacBook Air, 16 GB[1](#user-content-fn-1-ec1d135baf6f7af1e6b5ec6dc1d78d31)\n\n- 5s @ 0.5 MP 24p, 6 steps takes\n-\nRuns\n\n**LTX-2.5** on an Apple Silicon Mac — a 22B model generating video and its soundtrack together, again on as little as 16 GB, through the[vpipe-ltx-2.5 plugin](https://github.com/tgo-app-dev/vpipe-ltx-2.5). -\n**Image and video generation on base-model Macs** with weight streaming — walk through a reference image edit in[docs/KLEIN-KV.md](/tgo-app-dev/vpipe/blob/main/docs/KLEIN-KV.md) -\n**Realtime multimodal pipelines** for VQA, ASR, chat, TTS, image editing, video generation, and tool use. Now with**Qwen 3.8 27B** support! -\n**Full-modality runtime under 30 MB**, with a mobile-friendly web UI[2](#user-content-fn-2-ec1d135baf6f7af1e6b5ec6dc1d78d31) -\nExtra acceleration from the\n\n**NAX** matmul2d and convolution2d units on M5-generation hardware\n\nMatched MiniMax H3 runs using the same **960 × 544, 124-frame, 6-DiT-step**\nworkload and settings for both runtimes:\n\n| Hardware | VPIPE | h3.c |\n|---|---|---|\n| M4 Pro Mac mini, 64 GB RAM | 21 min 50 sec |\n27 min 40 sec |\n| Base M5 MacBook Air 15\", 16 GB RAM | 12 min 15 sec |\n16 min 22 sec |\n\nThese numbers are workload-specific measurements, not a universal runtime\nspeed claim. [3](#user-content-fn-3-ec1d135baf6f7af1e6b5ec6dc1d78d31)\n\n[Watch the VPIPE vs h3.c speed & quality comparison on YouTube →](https://www.youtube.com/shorts/i3F_Fzgt1UM)\n\n| Workload family | Verified status |\n|---|---|\n| Video + audio generation | MiniMax H3 FL2VA/REF2VA, Turbo LoRA, and LTX-2.5 plugin workflows. |\n| Image generation / editing | FLUX.2-klein-9b-kv: 4-bit reference image editing with 4-step default pipeline and compare-image UI on Apple Silicon. |\n| Multimodal / LLM / VLM inference | Qwen chat and VQA: local chat with image input, sampler control, stateful turns, and documented per-run token logs. |\n\nSee ** docs/MINIMAX-H3.md** for the H3 workload,\nsettings, caveats, and Turbo LoRA notes; see\n\n**and**\n\n[docs/KLEIN-KV.md](/tgo-app-dev/vpipe/blob/main/docs/KLEIN-KV.md)**for image editing and chat workflows.**\n\n[docs/QWEN35-CHAT.md](/tgo-app-dev/vpipe/blob/main/docs/QWEN35-CHAT.md)| Use case | What VPIPE provides |\n|---|---|\n| Local image editing | Prompt tuning, image comparison, mask/reference pipelines, and reproducible Composer layouts. |\n| Text-to-video and image-to-video | MiniMax H3 pipelines with video and soundtrack generation on Apple Silicon. |\n| Multimodal chat | Stateful local chat that can read images without re-prefilling the whole thread. |\n| Realtime VQA and video monitoring | Video capture, detection, tracking, audio tagging, overlays, preview, and profiling in one graph. |\n| Local AI agents | Sandboxed file, shell, Python, and web tools exposed through local MCP-style stages. |\n| Developer integration | A compact embeddable C++ runtime plus ready-to-run pipeline specs and reference workflows. |\n\n**What is VPIPE?** VPIPE is a local multimodal AI runtime for Apple Silicon\nMacs. It turns models, media streams, user input, and tool actions into\ninspectable C++ pipeline graphs.\n\n**Does VPIPE use MPS, MLX, or Python for inference?** No. VPIPE's generative\nmodel forward pass runs through Metal kernels directly via its own\n**metal-compute** backend. Python support exists only outside that forward path.\n\n**Can VPIPE run local image and video generation on a 16 GB Mac?** Yes, for\nsupported workflows. VPIPE uses weight streaming and 4-bit model preparation\nto make image editing and video generation practical on base-model Apple\nSilicon machines.\n\n**Is VPIPE a ComfyUI alternative for Mac?** For some local image and video\nworkflows, yes. VPIPE focuses on ready-to-run, reproducible pipelines with\nsaved UI layouts and a native Apple Silicon compute backend, rather than a\nlarge general-purpose node ecosystem.\n\n[ Install](#install) ·\n\n[·](#quickstart)\n\n**Quickstart**[·](#first-example)\n\n**First example**[·](#overview)\n\n**Overview**\n\n**Examples** For developers: [ Requirements](#requirements) ·\n\n[·](#build-from-source)\n\n**Build from source**[·](#run)\n\n**Run**[·](#tests)\n\n**Tests**[·](#structure)\n\n**Structure**[·](#acknowledgements)\n\n**Acknowledgements**\n\n**License**** Download the latest release ▸**\nOpen the\n\n`.dmg`\n\n, drag **Vpipe Manager** to Applications, and launch it. Requires an\n\n**Apple Silicon Mac** running\n\n**macOS 26 or later**.\n\nTwo builds are published. They are the same app; they differ only in whether FFmpeg travels with it:\n\n| Download | Size | Pick this if |\n|---|---|---|\n`VpipeManager-<version>-with-ffmpeg.dmg` |\n~28 MB | You want it to work immediately. Nothing else to install. |\n`VpipeManager-<version>-slim.dmg` |\n~16 MB | You already have FFmpeg installed — Homebrew's, say — and would rather use it. |\n\nThe bundled copy is a minimal **LGPL** build: it covers the common\nformats and keeps hardware H.264/HEVC/ProRes through VideoToolbox, but\nit has no libx264/x265. If you take the slim build, point the app at\nyour own FFmpeg — [Quickstart](#quickstart) covers where.\n\nThe app is signed and notarized, so it opens without a Gatekeeper\nwarning, and it updates itself: **Vpipe Manager ▸ Check for Updates…**\n\nWhat you get.The app is a launcher around the same two binaries the command line uses — it does not reimplement anything. Its real advantage ispermissions: Camera, Microphone and Local Network access are granted to the app under its own name, instead of to whichever terminal you happened to run from.\n\nEverything also builds from source. The pipeline core and the non-Apple stages are portable C++20 and build on Linux and Intel macOS; the on-device model stack needs an Apple Silicon Mac.\n\n```\ngit clone --recursive https://github.com/tgo-app-dev/vpipe.git\ncd vpipe && cmake -S . -B build && cmake --build build -j\n```\n\nThat is the whole story when the dependencies are already in place. For\nprerequisites, build options, the Metal toolchain and the rest, see\n** Requirements** and\n\n**below.**\n\n[Build from source](#build-from-source)Getting from a fresh install to a working browser UI. Everything here\nis in the app; the command-line equivalents are under [Run](#run).\n\n**1. Choose a work directory.** *Settings ▸ Work Directory ▸ Path ▸\nChoose…* — it defaults to `~/vpipe`\n\n.\n\nThis is where everything lives: `models/`\n\nfor anything downloaded or\nquantized, `sandbox/`\n\nfor files pipelines are allowed to write, and the\nLMDB registry and logs. **Pick a volume with room.** Prepared models\nrun to tens of gigabytes — MiniMax H3 downloads ~115 GB and peaks near\n155 GB while it quantizes — and the app shows the free space on the\nvolume you select. Moving it later means moving all of that.\n\n**2. Point at FFmpeg — only if you took the slim build.** *Settings ▸\nFFmpeg ▸ Library Path ▸ Choose…*\n\nHomebrew's is normally ** /opt/homebrew/lib**. The row above the\nbutton says whether a usable FFmpeg was found, so you are not guessing.\n\n**Use Default** returns to the bundled copy. Either way the change takes effect the next time you start a pipeline or the server — it is not picked up by something already running.\n\n**3. Decide who can reach the web UI.** *Settings ▸ Web UI ▸ Bind To*\n\n**This Mac only (127.0.0.1)**— nothing else on the network can connect, and no access key is needed. Start here.** Automatic (this Mac's LAN address)**, or a specific interface — so a phone or another computer can connect.\n\nAnything other than *This Mac only* makes the web UI reachable from your\nnetwork, and anyone who reaches it can start and stop pipelines, browse\nthe sandbox and drive models on this Mac. An 8-character access key is\nthe only thing in front of that, so use a LAN binding only when you actually\nneed another device, and not on networks you do not trust. The app\nwarns you in place when you select one.\n\n**Port** defaults to `9876`\n\n; change it if something else is using it.\n**HTTPS (Self-Signed)** is only needed for the low-latency Preview view\non another device — browsers restrict WebCodecs to secure contexts —\nand costs a one-time certificate warning.\n\n**4. Start it.** Open the **Web UI** pane and press **Start Server**,\nthen **Open in Browser**.\n\nIf you chose a LAN address in step 3, the pane also shows a **QR\ncode**: point a phone camera at it and the UI opens already\nauthenticated, with no key to retype. If you kept *This Mac only*,\nthere is no QR code — a phone could not reach `127.0.0.1`\n\nanyway. The\naccess key is still shown, but this Mac connects without it.\n**Open Work Folder** and **Open Sandbox Folder** reveal those\ndirectories in Finder.\n\nWhat the QR code contains.Only a URL:`http://<this Mac's LAN address>:<port>/<token>`\n\n. The token is 14 random characters, generated fresh at every start and never written to disk. Nothing about you, your files, your models or your machine is encoded in it — the single identifying detail is the LAN address, and that is a private one like`192.168.x.x`\n\n, which means nothing outside your own network.Treat it as a password anyway, because the token is not merely information. Scanning it redirects to\n\n`/?key=<access key>`\n\nand hands the access key over, so anyone who can both see the codeandreach that address gets exactly the control you have: starting and stopping pipelines, browsing the sandbox, driving models on this Mac. A photo, a screenshot or a screen share is enough for someone on the same network. Restarting the server invalidates it.\n\nThe status row along the bottom shows the machine's **thermal state**.\nSustained image or video generation heat-soaks a Mac, a fanless MacBook\nAir especially. When it reads *Throttling*, steps are taking longer\nbecause of the hardware, not because something has stalled.\n\n**Next:** the first example, below.\n\nThe shortest path from a working install to a model answering you: two\npipeline files, **~7.7 GB** on disk, and no conversion step to sit through —\nthis checkpoint arrives already quantized.\n\n**Get both pipelines**—and`prepare-qwen35-9b-optiq-4bit.vpipeline`\n\n(`qwen35-9b-chat.vpipeline`\n\n**Raw ▸ Save as**, or straight from`docs/pipelines/`\n\nin a clone).**In the web UI from the Quickstart**, open the Pipeline Manager,** Load**the`prepare-`\n\none and press**Start**. It downloads the model into your work directory and registers it there. Once, and never again.** Load the chat pipeline, Start it, open the User I/O panel**— and type at the`you>`\n\nprompt.\n\n```\nyou> In one sentence, what is the Pacific Ocean?\nThe Pacific Ocean is the largest and deepest ocean on Earth, covering more\nthan 30% of the planet's surface area and separating the continents of Asia\nand Australia to the east from North and South America to the west.\n```\n\nFive stages: a text input, the chat stage, a **sampler** stage carrying the\nvalues this checkpoint recommends for itself, and a feedback pair that makes\nit turn-by-turn. You can attach a picture to a turn — this model reads\nimages too.\n\n*The same pipeline from a phone — scan the QR code the server\nprints and the browser opens already authenticated. Here a photographed\nreceipt is transcribed, then questioned: the follow-up answers from the same\ncontext, and the Mac decodes at ~19.7 tok/s throughout.*\n\nFrom a source build the same two files run on the command line, which is where a chat prompt is most at home:\n\n```\ncd ~/vpipe                    # your work directory, with both files in it\n/path/to/vpipe --launch prepare-qwen35-9b-optiq-4bit.vpipeline\n/path/to/vpipe --launch qwen35-9b-chat.vpipeline\n```\n\n`/path/to/vpipe`\n\nis the binary from your build — `build/apps/vpipe/vpipe`\n\ninside the source tree.\n\n**▸ docs/QWEN35-CHAT.md** — the walkthrough: what each\nstage is for, why sampling is a stage rather than a config key, and the knobs\nworth knowing.\n\n**Then:** ** EXAMPLES.md** builds the same chat by hand in the\nweb UI, and adds speech transcription. For image editing from a reference\nphoto,\n\n**; for text-to-video**\n\n[docs/KLEIN-KV.md](/tgo-app-dev/vpipe/blob/main/docs/KLEIN-KV.md)*with sound*,\n\n**. Each ships the pipelines it describes.**\n\n[docs/MINIMAX-H3.md](/tgo-app-dev/vpipe/blob/main/docs/MINIMAX-H3.md)VPIPE has three main surfaces:\n\n-\n**Pipeline core**— coroutine-based`Job`\n\nstages connected by buffered ports, driven by a runtime that launches and drains them concurrently. Stages are composed into a pipeline from a JSON spec; each stage registers under a type name (e.g.`rtsp-capture`\n\n,`video-to-rgb`\n\n,`yolo-detection`\n\n,`onvif-discovery`\n\n,`rest-client`\n\n). This layer is portable C++20. -\n**On-device generative-model stack***(Apple Silicon)*— a from-scratch LLM/VLM/ASR/diffusion/video inference stack running on**metal-compute**, with custom kernels, model loading, quantization support, weight streaming, and resource planning for memory-constrained Macs. It powers stages such as`text-chat`\n\n,`visual-qa`\n\n,`realtime-vqa`\n\n,`audio-transcribe`\n\n,`generate-image`\n\n,`diffusion-conditioner`\n\n,`vae-encode`\n\n,`vae-decode`\n\n, and`generate-video`\n\n. -\n**Web UI and Composer**— a self-contained browser UI for launching, inspecting, profiling, and editing pipelines. The Composer can arrange pipeline editors, previews, image comparison views, text I/O, profiler views, files, logs, and stage-provided panels, then save that layout with the pipeline spec so a workflow can be reopened and reproduced.\n\nModels are loaded from local directories (sharded safetensors / GGUF) and are not bundled with the source.\n\nPlatform note.The pipeline core and the non-Apple stages build on Linux and Intel macOS, but the generative-model stack and the CoreML/Metal stages require anApple Silicon Mac. On arm64 macOS these features are detected and enabled automatically.\n\nEverything above describes the app. The rest of this file is the source tree: what it needs to build, how to drive the same session from the command line, from Python or from a test binary, and where things live.\n\n-\n**CMake ≥ 3.25** and a**C++20** compiler (Apple Clang or a recent Clang/GCC). -\n**Git**(the build pulls a few dependencies as submodules). -\n**FFmpeg development headers**—`libavformat`\n\n,`libavcodec`\n\n,`libavutil`\n\n,`libswresample`\n\n. VPIPE compiles against the headers and`dlopen`\n\ns the libraries at runtime, so FFmpeg must also be installed at runtime to decode media.- macOS:\n`brew install ffmpeg`\n\n- Debian/Ubuntu:\n`apt install libavformat-dev libavcodec-dev libavutil-dev libswresample-dev`\n\n- macOS:\n-\n**libcurl**— used by the`rest-client`\n\nstage. Provided by the SDK on macOS; on Linux install e.g.`apt install libcurl4-openssl-dev`\n\n. -\n**Python 3 + development headers**— only for the optional Python extension (built by default). Disable with`-DVPIPE_BUILD_PYTHON=OFF`\n\nif you don't need it. -\n**Apple Silicon Mac**— for the on-device inference stack and CoreML/Metal stages. -\n**Metal shader toolchain***(Apple Silicon builds only; recommended, not required)*— by default the build compiles`.metal`\n\nkernel sources into embedded metallibs using`xcrun -sdk macosx metal`\n\nand`xcrun -sdk macosx metallib`\n\n. These compilers are part of Xcode's**Metal Toolchain**; the standalone*Command Line Tools*do**not** include them, even though the rest of the build never opens Xcode.**No toolchain? The build falls back automatically.** If`metal`\n\n/`metallib`\n\naren't found at configure time, the build switches to**runtime-compile mode**: it embeds the Metal shader*source*and compiles each kernel on first use via the OS's built-in runtime compiler (`newLibraryWithSource:`\n\n), which needs no toolchain on the build**or** run machine. The Metal Toolchain is therefore optional; the tradeoff is a one-time per-kernel compile on first use instead of at build time. Force either mode with`-DVPIPE_METAL_RUNTIME_COMPILE=ON|OFF`\n\n.To get the faster build-time (AOT) path, install the toolchain. Two independent things can leave\n\n`metal`\n\n/`metallib`\n\nunavailable — both surface the same way, as`error: cannot execute tool 'metal'`\n\nor`xcrun: error: unable to find utility \"metal\"`\n\n:**1. The Metal Toolchain isn't installed.** On**Xcode 26 and later**(macOS 26) the Metal Toolchain is no longer bundled with Xcode by default — it's an optional component you download once. Install it from the command line (or via Xcode ▸ Settings ▸ Components ▸ Metal Toolchain ▸ Get):\n\n```\nxcodebuild -downloadComponent metalToolchain     # download + install\n```\n\nOn air-gapped or CI machines, export once and import where needed:\n\n```\nxcodebuild -downloadComponent metalToolchain -exportPath ~/Downloads\nxcodebuild -importComponent metalToolchain ~/Downloads/metalToolchain.dmg\n```\n\n**2.** If you installed the CLT and`xcrun`\n\npoints at the Command Line Tools, not Xcode.*then*Xcode,`xcrun`\n\noften still resolves to the standalone CLT, which lacks`metal`\n\n/`metallib`\n\n. Point the toolchain at Xcode:\n\n```\n# Direct xcrun at the Xcode app (run once; needs admin)\nsudo xcode-select --switch /Applications/Xcode.app/Contents/Developer\nsudo xcodebuild -license accept    # accept the license if you haven't\n```\n\nVerify the active developer dir and that both compilers resolve:\n\n``` php\nxcode-select -p                 # -> /Applications/Xcode.app/Contents/Developer\nxcrun -sdk macosx -f metal      # -> a path inside Xcode.app (not /Library/Developer/CommandLineTools)\nxcrun -sdk macosx -f metallib   # -> likewise\nxcrun -sdk macosx metal --version\n```\n\nTo switch back to the Command Line Tools later:\n\n`sudo xcode-select --switch /Library/Developer/CommandLineTools`\n\n.\n\n**1. Fetch dependencies.** LMDB and pugixml are always required; nanobind is\nneeded for the Python bindings, and metal-cpp for the Apple Silicon features:\n\n```\ngit submodule update --init extern/lmdb extern/pugixml extern/nanobind extern/metal-cpp\n```\n\n**2. Configure** (out-of-source build directory):\n\n```\ncmake -S . -B build\n```\n\nThis defaults to an optimized **Release** build, so the binaries you get are\nperformant out of the box. Override the build type explicitly if you want a\ndebug build:\n\n```\ncmake -S . -B build -DCMAKE_BUILD_TYPE=Debug\n```\n\n**3. Build:**\n\n```\ncmake --build build -j\n```\n\n`cmake --build`\n\nis generator-agnostic; use it rather than calling `make`\n\ndirectly so the build works regardless of which generator CMake selected.\n\nUseful options (pass at configure time with `-D`\n\n):\n\n| Option | Default | Effect |\n|---|---|---|\n`VPIPE_BUILD_PYTHON` |\n`ON` |\nBuild the `vpipe` Python extension (needs Python dev headers). |\n`VPIPE_BUILD_APPLE_SILICON` |\nauto (on for arm64 macOS) | Build the CoreML/metal-compute wrappers and the inference stages. |\n`CMAKE_BUILD_TYPE` |\n`Release` (when unset) |\nSet `Debug` for an unoptimized debug build. |\n\n**Install** (optional):\n\n```\ncmake --install build --prefix /path/to/install\n```\n\n`vpipe-web-ui`\n\nserves a browser-based Pipeline Manager bound to one VPIPE\nsession. The web assets are embedded in the binary, so no extra files are\nneeded:\n\n```\n./build/apps/web-ui/vpipe-web-ui                    # listens on the LAN address, port 9876\n./build/apps/web-ui/vpipe-web-ui --bind 127.0.0.1   # this machine only\n```\n\nThen open the printed URL (e.g. `http://localhost:9876`\n\n). By default it binds\nto the machine's LAN address so other devices can connect; remote connections\nmust supply the 8-character access key printed at startup, while localhost\nconnects without one. Options: `--bind ADDR`\n\n, `--port N`\n\n(`0`\n\n= any free port),\n`--config CFG`\n\n(inline JSON, a file path, or empty for defaults), `--help`\n\n.\n\nThe UI has a phone layout, and typing an 8-character key into a phone is\nexactly the friction that stops anyone from using it. `--show-qr`\n\nprints a\nQR code to the console next to the usual startup lines:\n\n```\n./build/apps/web-ui/vpipe-web-ui --show-qr\n```\n\nPoint a phone camera at it and the UI opens **already authenticated** — no key\nto read off the screen and retype. The phone layout is selected automatically\nfrom the device; `?ui=desktop`\n\n(or the drawer's *Desktop layout*) overrides it,\nand `?ui=phone`\n\nis how that layout is developed on a desktop.\n\nHow it works, and what it costs:\n\n**Two different secrets.** The 8-character access key is short because a human retypes it. The QR link carries its own, longer secret (14 characters of an uppercase alphanumeric alphabet, ~70 bits), because nothing has to read it — it only has to be unguessable.**One scan, then the key is gone.**`GET /<link-secret>`\n\nredirects to`/?key=<access key>`\n\n; the page adopts the key into`sessionStorage`\n\nand immediately strips it from the URL, so it never lands in the address bar, the history, or a bookmark. The key is tab-scoped and disappears when the tab closes.**The link is never printed.** Only the symbol is rendered — writing the URL beside it would put the secret into the scrollback, a screen share, or a terminal log, which is what the QR code exists to avoid. It is a secret in a URL: treat it as**only as private as the console displaying it**, and restart the server to invalidate it.** Both secrets are per-run**, generated at startup, and neither is written to disk.\n\nRequests from other computers carry the key as an `X-Auth-Key`\n\nheader (or a\n`?key=`\n\nparameter where the browser cannot set headers, such as a WebSocket\nhandshake or an `<img>`\n\nsource). Only `/api/*`\n\nis gated, and only for\nnon-loopback peers — static assets stay open so a remote browser can load the\npage in order to ask for the key in the first place.\n\nNote.Add`--tls`\n\nif you want the low-latency Preview view on a phone or any other LAN client: the browser's WebCodecs API is secure-context only, so it needs HTTPS off localhost. The certificate is self-signed and cached under`~/.vpipe/webui-tls`\n\n, so expect a one-time browser warning — and a QR scan lands on that warning rather than the UI until it is accepted.\n\n`vpipe`\n\nlaunches pipelines straight from the terminal — a thin command-line\nfront end over the same session and stages the web UI drives. It dynamically\nlinks `libvpipe`\n\n.\n\n```\n# A full pipeline from a saved spec file, or from inline JSON:\n./build/apps/vpipe/vpipe --launch my-pipeline.vpipeline\n./build/apps/vpipe/vpipe --launch '{\"id\":\"tick\",\"stages\":[{\"id\":\"c\",\"type\":\"chrono\",\"config\":{\"count\":5}}]}'\n\n# A single stage wrapped in a one-shot pipeline (handy for utility stages):\n./build/apps/vpipe/vpipe --launch-stage onvif-discovery\n./build/apps/vpipe/vpipe --launch-stage model-fetch \\\n  --stage-cfg model_path=mlx-community/Qwen3.5-4B-MLX-4bit\n```\n\n`--stage-cfg`\n\noverrides stage config: `key=value`\n\nafter `--launch-stage`\n\n, or\n`stage-id::key=value`\n\nto target a stage inside a `--launch`\n\nspec. Repeat\n`--launch`\n\n/ `--launch-stage`\n\nto run several pipelines **concurrently**;\n`Ctrl-C`\n\nstops them cleanly. `vpipe --help`\n\nlists every option, and\n** EXAMPLES.md** shows fetching a model from the terminal.\n\nThe extension lands in `build/python/`\n\n. Importing the package creates a default\nsession:\n\n``` python\nPYTHONPATH=build/python python3 -c \"import vpipe; print(vpipe.vpipe_version())\"\n```\n\nStartup configuration is resolved from `VPIPE_CONFIG`\n\n/ `VPIPE_CONFIG_FILE`\n\n, an\n`./init.vpipe`\n\nfile, or built-in defaults. Call `vpipe.create_session(config=...)`\n\nto make your own session.\n\nThe build produces a unit-test executable:\n\n```\n./build/vpipe_test                        # run everything\n./build/vpipe_test --list_tests\n./build/vpipe_test --filter '<pattern>'   # supports * and ? wildcards\n./build/vpipe_test --color off            # for captured/non-interactive output\n```\n\nSome tests exercise real models and are gated on environment variables that point at local model directories; when a variable is unset, the corresponding test skips.\n\n| Path | Contents |\n|---|---|\n`pipeline/` , `common/` , `interfaces/` , `include/` |\nPipeline core: jobs, ports, runtime, session, shared services. |\n`stages/` |\nPipeline stages (capture, decode, detection, REST, the LLM/VLM stages, …). |\n`generative-models/` |\nOn-device LLM/VLM/ASR stack (model families, tokenizers, encoders). |\n`apple-silicon/` |\nmetal-compute backend and CoreML C++ wrappers. |\n`gpu-kernels/metal/` |\nMetal compute kernels (attention, GEMM, quant, …). |\n`apps/` |\nExecutables: `vpipe` (CLI), `web-ui` , `db-log-reader` . |\n`python/` |\nPython bindings (nanobind). |\n`tests/` |\nUnit tests. |\n`extern/` , `3rd-party/` |\nVendored dependencies. |\n\nVPIPE builds on these projects:\n\n— the multimedia framework vpipe uses to decode and encode audio and video; compiled against its headers and[FFmpeg](https://ffmpeg.org)`dlopen`\n\ned at runtime.*LGPL-2.1-or-later (some optional components are GPL).*— the memory-mapped key-value store behind vpipe's databases: logs, the model registry, camera records.[LMDB](https://github.com/LMDB/lmdb)*OpenLDAP Public License 2.8.*— a light XML parser, used for the SOAP and WS-Discovery exchanges that find ONVIF cameras.[pugixml](https://github.com/zeux/pugixml)*MIT.*— the C++/Python binding layer the[nanobind](https://github.com/wjakob/nanobind)`vpipe`\n\nPython extension is built with.*BSD 3-Clause.*— header-only C++ bindings for Apple's Objective-C runtime; vpipe uses its[metal-cpp](https://github.com/bkaradzic/metal-cpp)`Foundation`\n\nheaders under the CoreML and metal-compute wrappers.*Apache-2.0.*— a header-only FFT, used by the audio feature extractors to build mel spectrograms.[pocketfft](https://gitlab.mpcdf.mpg.de/mtr/pocketfft)*BSD 3-Clause.*\n\n[MLX](https://github.com/ml-explore/mlx)*(MIT)* is Apple's array\nframework for machine learning on Apple Silicon. VPIPE does not link MLX and\ndoes not use it in the forward pass, but it does vendor a small set of MLX's\nMetal kernel headers — the \"steel\" GEMM and attention templates and their\nsupporting helpers — under\n`gpu-kernels/metal/vendored/mlx/backend/metal/kernels/steel`\n\n. Those headers\nare `#include`\n\nd by vpipe's own `.metal`\n\nsources and compiled into the\nembedded metallibs.\n\nFull copyright and license texts for everything bundled or vendored are in\n[ THIRD_PARTY_LICENSES.md](/tgo-app-dev/vpipe/blob/main/THIRD_PARTY_LICENSES.md).\n\nVPIPE is licensed under the **Apache License, Version 2.0** — see\n[ LICENSE](/tgo-app-dev/vpipe/blob/main/LICENSE). Bundled and vendored third-party components and their\nlicenses are documented in\n\n[.](/tgo-app-dev/vpipe/blob/main/THIRD_PARTY_LICENSES.md)\n\n`THIRD_PARTY_LICENSES.md`\n\nBrought to you by T-Go LLC, registered in California.", "url": "https://wpnews.pro/news/show-hn-minimax-h3-on-a-16gb-mac-5-days-after-open-weights", "canonical_source": "https://github.com/tgo-app-dev/vpipe", "published_at": "2026-08-22 07:21:38+00:00", "updated_at": "2026-08-22 07:43:14.097751+00:00", "lang": "en", "topics": ["generative-ai", "ai-tools", "ai-infrastructure"], "entities": ["VPIPE", "MiniMax H3", "Apple Silicon", "M5 MacBook Air", "M4 Pro Mac mini", "Metal", "LTX-2.5", "Qwen 3.8 27B"], "alternates": {"html": "https://wpnews.pro/news/show-hn-minimax-h3-on-a-16gb-mac-5-days-after-open-weights", "markdown": "https://wpnews.pro/news/show-hn-minimax-h3-on-a-16gb-mac-5-days-after-open-weights.md", "text": "https://wpnews.pro/news/show-hn-minimax-h3-on-a-16gb-mac-5-days-after-open-weights.txt", "jsonld": "https://wpnews.pro/news/show-hn-minimax-h3-on-a-16gb-mac-5-days-after-open-weights.jsonld"}}