Skip to content

Getting Started with BTT ViViD

BTT ViViD is a fully-specified design - unlike a modular design such as ERCF or Box Turtle, almost every menuconfig default is already correct the moment you pick it: board, pins, LEDs, environment sensor, heater and per-gate NFC readers all come pre-filled. What's genuinely left for you to decide is small: whether you have the official ViViD buffer board, and which of your computer's serial devices is which - because a ViViD unit and its buffer are two separate controller boards, not one.

The examples use the default Klipper object name unit0. You can choose a different name under Name → Klipper object name on the first install, and set a separate Display name for the UI. See Naming an MMU unit; use your chosen name where these examples show unit-specific names or pin prefixes.

First clone the Happy Hare repository as described in Cloning Happy Hare.

Then run the installer:

cd Happy-Hare
./install.sh

The first run opens menuconfig automatically because no .mmu_config exists yet; no -i flag is needed.

Choosing the MMU type

Highlight MMU Type and press Enter, move down to BTT ViViD and press Space to select it. A second line appears indented directly underneath it - BTT ViViD buffer - already checked:

MMU Type list, BTT ViViD selected with its buffer sub-option already checked

Leave BTT ViViD buffer checked if you have the official buffer board fitted on the bowden tube (its own separate MCU, with its own sync-feedback tension/compression sensors already wired) - that's the common case, and it's suggested on by default. Uncheck it only if you're using a different buffer mechanism entirely, which you'd then add under MMU Features / Additions instead.

Board type doesn't need a visit at all - ViViD only has one controller board, BTT ViViD MCU, and it's already selected:

Board type screen showing BTT ViViD MCU as the only, already-selected option

Gate count is fixed at 4 too; unlike a modular design, there's no separate prompt for it.

MCU connections: two separate boards

This is the one part of ViViD setup that genuinely needs your input, and it needs it twice - once for the ViViD unit's own MCU, and once for the buffer's, because they're two independent boards that each show up as their own serial device.

From the top menu, enter MCU connection:

MCU connection submenu for the MMU: connection type Serial, resolved serial device Other/manually entered

This is a small submenu, not a single screen: the first row is the Serial/CANbus choice (already Serial, right for a USB-attached board), and the second - Select serial device for MMU - is where you actually pick which serial device. Enter that second row and every currently-connected device shows up by its full /dev/serial/by-id/ name - BTT's own boards name themselves clearly, so telling the two apart is normally just reading the list:

Select serial device for MMU  --->
    ( ) usb-Klipper_stm32g0b1xx_vivid_410030000150505539323520-if00
    ( ) usb-Klipper_stm32f042x6_buffer_2D0001000143565335383320-if00
    ( ) Other / manually entered

The ViViD unit's device string contains vivid, the buffer's contains buffer. Pick the vivid one here - it shows Other / manually entered above only because nothing was plugged in when this screenshot was captured.

Back out to the top and enter the buffer's own connection screen, Buffer MCU connection:

Buffer MCU connection submenu: connection type Serial, resolved serial device Other/manually entered

Same shape, same list, but this time enter Select serial device for sync-feedback buffer and pick the buffer one instead:

Select serial device for sync-feedback buffer  --->
    ( ) usb-Klipper_stm32g0b1xx_vivid_410030000150505539323520-if00
    (X) usb-Klipper_stm32f042x6_buffer_2D0001000143565335383320-if00
    ( ) Other / manually entered

If a board you expect isn't listed at all, Klipper doesn't have a valid serial connection to it yet - check that its firmware is flashed and it's actually plugged in before assuming menuconfig is at fault. Other / manually entered lets you type the exact /dev/serial/by-id/... path directly, which works identically to picking it from the list once the device does show up.

MMU Features / Additions

Worth a glance even though there's nothing to add for a stock ViViD:

MMU Features / Additions screen: LEDs, sync-feedback buffer, environment sensor, controller fan, heater and NFC readers fixed on; eject buttons and encoder optional

LEDs, the sync-feedback buffer (supplied by the buffer board from the previous step), the environment sensor, controller fan, heater, and NFC readers are all already switched on and marked (FIXED), because every stock ViViD ships with them. The profile supplies its heater fan and controller fan directly, so their hardware settings do not appear as editable generic fan hardware menus. The dimmed file hint identifies the board-supplied configuration. See Fans & Airflow for the distinction between these fans and managed fans. The old-style filament buffer to catch loose filament is fixed off instead - the filament movement also moves the spool on this design. Eject buttons and an encoder are the genuine options here and default off; enable whichever ones you actually built.

Picking a toolhead

From the top menu, enter Toolhead:

Toolhead list, Stealthburner Clockwork2 Revo Voron selected

This step is entirely optional - skip it and Happy Hare falls back to generic "Other/Unknown" dimensions, a perfectly normal starting point. If your toolhead (extruder + hotend combo) happens to be in the list, though, picking it fills in real, community-measured values (extruder-entrance-to-nozzle distance, residual filament) instead of guesses, for free - here we've picked Stealthburner Clockwork2 Revo Voron at random, just to show what selecting one does. This choice is the same regardless of MMU type - it isn't ViViD-specific.

Contributions to the toolhead list are always welcome! If you would like to contribute your parameters to this toolhead database, please visit here to add your parameters to future installer updates.

An example software option: Spoolman NFC auto-create

From the top menu, enter Software Options. Since a stock ViViD already has an NFC reader on every gate, one option in the Spoolman section here is worth calling out specifically rather than skimming past: Auto-create a Spoolman spool from an unknown NFC/RFID tag?

Software Options screen, Spoolman section, Auto-create a Spoolman spool from an unknown NFC/RFID tag toggled on

Select spoolman spool manager support defaults to Off regardless of MMU type - ViViD's built-in NFC readers don't change that default, they just make the feature genuinely worth turning on. Auto-create itself needs deep NFC reads enabled and Push or Pull selected above it, not just Read-only - creating a spool record is itself a write back to Spoolman, so a mode that only reads isn't enough. With both set, scanning a tag Spoolman has never seen creates a new spool record from the tag's own metadata automatically, instead of the print pausing for you to assign one by hand. That kind of dependency is exactly what the on-screen help for any option spells out, so read it before assuming a checkbox alone will do something.

Explore the rest

That covers everything genuinely specific to a stock ViViD, but it's only a fraction of the menu. Endstops and Bowden movement, Tip Forming / Cutting, Purging and the rest are all worth a look - scroll all the way from the top to Paths & Services at the bottom at least once. Nothing you look at will break anything: moving the highlight and pressing ? for help costs nothing, and R resets whatever's highlighted back to its default.

Saving, and coming back later

When you're done, press Esc from the top level (or Q) to get the save prompt, and confirm. Happy Hare writes your .cfg files from what you chose.

The installer only forces menuconfig open automatically on that very first run. After that, running ./install.sh again just upgrades in place - it won't reopen the menu. To go back in and change something, use:

cd ~/Happy-Hare
./install.sh -i

This is the normal way to revisit any setting on this page - there's no need to ever hand-edit the generated .cfg files directly.

Note

The one thing worth knowing: each time you rerun -i over an existing configuration, it asks how to reconcile menuconfig with any edits made directly to your .cfg files. Merge/Refresh (option 1, the default) keeps your manual edits, offers to import them into menuconfig first, and applies only the settings you change there. Replace (option 2) regenerates everything from menuconfig, discarding direct edits.

If you only ever configure through menuconfig, as this page assumes, Replace is the recommended choice because it rebuilds your Happy Hare Klipper configuration files, ensuring a clean configuration that includes future Happy Hare software updates. See Choosing an upgrade mode for the differences.

Validating Hardware Setup

The shared Hardware Validation checklist covers the same checks in more depth. The sequence below calls out the stock ViViD hardware specifically.

With Klipper accepting the configuration and no startup errors, first confirm that both controller boards are connected: the ViViD MCU drives the selector, gear, entry sensors and built-in accessories, while the separate buffer MCU provides the four exit sensors and the tension/compression switches. An error for either MCU needs fixing before movement tests will be meaningful.

Entry and exit sensors. Run MMU_SENSORS, then insert a short piece of filament into gate 0. Its mmu_entry_0 sensor should change to TRIGGERED. Move the filament through the selected path to the buffer and confirm mmu_exit_0 triggers there too. Remove the filament and make sure both return to Open, then repeat for gates 1, 2 and 3:

MMU_SENSORS

The exact order in the output is not important; what matters is that only the sensor belonging to the gate under test changes state. A neighboring sensor changing instead usually means the gate wiring or buffer tube routing is crossed.

Indexed selector. Remove all filament before moving the selector. ViViD has a switch at every selector position, so there is no conventional home switch to find at startup. Exercise the selector motor, then select all four gates:

MMU_TEST_BUZZ_MOTOR MOTOR=selector
MMU_SELECT GATE=0
MMU_SELECT GATE=1
MMU_SELECT GATE=2
MMU_SELECT GATE=3

The buzz should make a small back-and-forth movement. Each selection should stop cleanly at the requested gate without a missed-index error. The physical order around the selector is not numerical (0, 3, 1, 2 is the stock ViViD order), so don't diagnose a fault merely because the mechanism doesn't visit the printed gate numbers clockwise.

Gear direction. ViViD has one shared gear stepper, so this test only needs to pass once. Select gate 0, insert some scrap filament, and make a short positive move:

MMU_SELECT GATE=0
MMU_TEST_MOVE MOVE=50

The filament should move away from the spool and toward the buffer. If it moves backward, invert the Gear dir pin under Pins / TMC → Gear pins in menuconfig by adding or removing !, restart Klipper, and test again.

Sync-feedback buffer. With the buffer unloaded, query its state, then move it gently through its travel by hand:

MMU_SYNC_FEEDBACK

The stock ViViD profile expects the spring to rest at Tension when unloaded. Moving away from that end should pass through neutral, and the opposite, excess-filament limit must report Compression. If tension and compression are reversed, swap the buffer's pin assignments rather than compensating elsewhere. See Sync-Feedback Buffer for the full sensor test and troubleshooting procedure.

A stock ViViD has no encoder or eSpooler, so skip those parts of the shared validation checklist unless you enabled the optional hardware yourself.

Calibration

Most ViViD values are already supplied by the installer. Bowden length is auto-calibrated the first time filament is loaded through the stock buffer, and the indexed selector ships with the correct gate order and a usable endstop-width default. The calibration worth doing before regular use is the shared gear stepper's rotation_distance.

Manufacturing tolerances in the drive gear change how much filament actually moves for a commanded distance. The installed value is a good starting point, but measuring your own improves load and unload accuracy.

  1. Select gate 0 and advance filament until it emerges from the ViViD/buffer path at a point where you can cut and measure it accurately.
  2. Cut it flush with that reference point.
  3. Command a 100 mm move while retaining gear grip:

    MMU_TEST_MOVE MOVE=100 GRIP=1
    
  4. Measure the actual length emitted and pass that number to the calibration command. For example, if the move produced 102.5 mm:

    MMU_CALIBRATE_GEAR MEASURED=102.5
    
  5. Cut the filament flush again and repeat the 100 mm test move to verify the result.

ViViD uses the same gear drive for all four gates, so calibrate it once—there is no per-gate gear calibration to repeat. See Calibration: Gear Rotation Distance for longer test moves, resetting the saved value, and the calculation Happy Hare performs.

Selector indexes (normally optional)

If every gate selected correctly during hardware validation, the stock index settings are sufficient. You can optionally let Happy Hare detect the physical gate order and center point of every index switch:

MMU_CALIBRATE_SELECTOR_INDEXES

Run this only with filament fully unloaded. It automatically measures and saves the switch widths; there is nothing to align by hand. This is most useful after selector work, a sensor replacement, or if selection is reliable but slower or less centered than expected. See Calibration: Selector Movement for the reporting-only and reset options.

The first real MMU_LOAD will learn the Bowden length automatically. Toolhead calibration remains optional if you selected a known toolhead during install; otherwise follow Calibration: Toolhead when you're ready to replace the generic dimensions with measurements from your printer.

Checking Basic Operation

With the hardware checked and gear rotation distance calibrated, test one complete filament cycle outside a print:

MMU_SELECT GATE=0
MMU_LOAD
MMU_UNLOAD

The first load can take longer because Happy Hare is also learning the Bowden length. Each command should then complete without a pause or unexpected calibration warning. Repeat the cycle on the other three gates so every index switch, entry sensor and buffer exit path is exercised before your first multi-material print.

If the hotend must be heated for the unload/tip-forming method you selected, preheat it to a safe temperature for the loaded material first. See Operation: Debugging Problems if a load or unload fails.

Slicer Setup

Add the Happy Hare hooks to your slicer's start g-code, end g-code, after-layer change and toolchange sections. Slicer Setup provides the exact snippets and placement for each supported slicer. Make those changes before trying a multi-material file.

Printing with MMU

The remaining choice before a first print is how to purge the previous color at each toolchange:

  • Slicer-controlled — use the slicer's wipe tower. This is the simplest starting point, but consumes bed space and filament.
  • Happy Hare-controlled — disable the wipe tower and use Purge: Simple for a purge line, or Purge: Blobifier with a dedicated purge station. The complete hand-off is covered under Purging without a wipe tower.

Toolchange retraction, z-hop and parking positions live in mmu_macro_vars.cfg and are exposed under Macro Variables in menuconfig. Review Toolchange Movement before changing those defaults.

Once the slicer hooks and purge method are set, slice a small two-color test object and run the first print. Starting with two gates keeps diagnosis simple while still exercising a real unload, selector move and reload.

What Next?