FUJI Drum cuts sixteen drums out of one moving image. This page documents the whole instrument feature by feature — the shader-to-drum pipeline, the three extraction engines, the pad voice, the pattern sequencer with REC and the 64-slot pattern bank, the 92 factory kits, the VFX chain, MIDI Learn, Ableton Link and Link Audio, and DAW hosting — exactly as built.
Overview
FUJI Drum is a native drum machine that ships as an AUv3 plug-in and a standalone app, for iOS and macOS (Mac Catalyst, "Optimized for Mac"). One purchase covers both platforms and both hosting modes. The DSP core is C++17, the AU bridge is Objective-C++, the UI and Metal renderer are Swift.
Its signature move: FUJI renders a Metal shader and gives each of its sixteen pads a different region of that same rendered image — its own scan row, channel weighting and luminance curve. The pads aren't sixteen samples; they're sixteen windows into one moving image. Change the shader — or blend toward a second one — and the whole kit re-cuts at once. It shares the .metal / .vkograph contract, the 93-shader starter pack and the DSP core with VKO1 and MESA.
Same UI, same engine — as a plug-in in your DAW, or its own app with pads, keyboard drumming and MIDI in.
Mac Catalyst gives FUJI a proper desktop window from the same codebase as the iPhone/iPad build.
Choke groups, per-pad filter and envelope, sidechain buses, two sends — a full voice on every pad.
Getting Started
Tap the kit name in the top bar. 92 factory kits ship, filed by feel, each a shader and a set of sixteen pad recipes with a pattern to hear it with.
Standalone: the on-screen grid, the computer keyboard laid over it, or any MIDI controller. AUv3: play from your DAW or a pad controller on the GM drum map.
The pattern is already programmed. Tap a step to toggle it, drag across steps to draw a run or erase one, drag a lit step up or down for velocity.
Tap REC and the transport starts. Finger-drum the pads — hits land on the grid, snapped to the nearest step at the velocity you played.
Step shader A. Every pad is cut from that image, so one tap re-skins the whole kit while the pattern keeps running.
Tap + below the step grid for a new slot. The bank shows as a grid of numbered cells: tap one to jump there, hold then drag one to reorder the set. Switches are beat-synced while it plays.
Portrait stacks vertically: the kit image on top, the selected pad's controls in the middle, the 4×4 grid under your thumbs. On a wide screen it splits into two columns so the image gets room and the pads get bigger. Landscape puts everything but the pads on one side, the grid alone on the other.
The Signature
No other drum machine works this way. FUJI imports a shader and uses its moving image as the sound source for every pad — not as decoration.
| Format | What it is |
|---|---|
Native .metal | A VKO1 iOS/macOS shader: one fragment function taking VertexOut + constant GeneratorUniforms&. Used as-is. |
Web-editor .metal | The VKO1 web editor's export. FUJI detects it and rewrites it into the native contract automatically. |
.vkograph JSON | A full node graph from the web editor or the iOS app. FUJI parses the JSON, extracts the Metal source, and traces the modifier-node chain — so the effect that bends the moving image also bends the sound. |
100% VKO1 / MESA compatible by construction: the importer and shader library are vendored from MESA byte-for-byte, and every shader path in FUJI — kit extraction, live viewport, pad tiles — goes through it.
FUJI bundles a 93-shader starter pack, grouped by feel — the same one VKO1 and MESA ship. To go past it you don't need Xcode or a line of Metal: the VKO1 web editor is free and runs in a browser. Build a shader or a node graph there, export .metal or .vkograph, and drop it into FUJI — the importer rewrites web-editor output into the native contract on the way in. Imported shaders persist in your library and sync across devices with your kits.
time uniform across frames.Two shader slots, side by side in the LAYER row under the kit image: tap A or B to open the shader browser for that slot, or use ‹ › beside B to step it through the library and audition it against A without opening anything. BLEND is a kit-wide morph: every pad crossfades its own reading of A into its reading of B, in time while the pattern runs. The palette (all 33 from VKO1) is part of the kit — recolouring the image regrades every sound cut from it, so a palette change re-extracts like a shader change. SCAN Y and BLEND are deliberately not automatable — they re-cut a pad's source, which is a GPU render plus an FFT bank; step parameter locks cover the per-hit case instead.
Extraction engines
| Engine | What it reads | Sounds like |
|---|---|---|
| CYCLE | One row → an 8-frame band-limited wavetable, played at pitch with a pitch envelope. | Kicks, toms, zaps, 808s |
| SCAN | Many rows read end to end → a raw one-shot buffer. | Hats, noise, claps, crashes, glitch |
| SPECTRAL | The image as a spectrogram → inverse FFT + overlap-add. X is time, Y is frequency (log-mapped — sky is treble, ground is bass), brightness is magnitude. | Cymbals, risers, reverse hits, textures |
| SAMPLE | An audio file you load, standing in for the shader on either side (or both). LOAD SAMPLE in the SOURCE panel. | Your own kicks, breaks, foley, vocal chops |
BODY is a live crossfade between the CYCLE (synth) side and whichever one-shot mode the pad is in, so a pad can be a synth drum, a scanned one, or anything between. The SCAN / SPECTRAL chip switches the one-shot side — both are the same pixels, one read as a waveform, one as a spectrum. A gradient becomes a sweep; a bright band becomes a resonance.
MORPH is the one to reach for. A pad's eight wavetable frames are eight different moments of the image, so locking or modulating morph really does read a different slice of the moving image — for free, no re-extraction.
LOAD SAMPLE in the SOURCE panel takes any WAV / AIFF / CAF / m4a. It replaces the shader on whichever side you route it to: 1-SHOT plays it straight (transposed by PITCH from its detected root), CYCLE chops it into eight frames that MORPH scrubs through, or both at once. BODY is still the crossfade between the two sides, so it doubles as the sample’s wet/dry against the wavetable. GAIN, TRIM (start/end) and REV shape it on the way in — no re-picking the file to adjust them. The audio rides inside a saved kit and, up to about 70 seconds, inside a shared .fujikit.
The Pad
The selected pad's controls sit in titled sections — the heading is the explanation. Every knob is a real AU parameter (26 per pad × 16 pads, plus 16 master), grouped per pad in a host's list.
BODY (wavetable ↔ one-shot), MORPH (scan across the eight frames), PURE (a clean sine at the fundamental), plus SCAN Y and TIME — the two that re-cut the source rather than shape it. LOAD SAMPLE swaps the shader source for an audio file (see Extraction engines).
PITCH (−36…+24 st), P.ENV and P.DEC for a pitch drop or rise into the hit, and SUB for a low sine reinforcement.
A filtered noise burst with its own level, decay, tone and Q. A wavetable has no transient of its own; without SNAP a snare is a pitched blip.
ATTACK and DECAY on the amp. Short and percussive by default; open the decay for pads, rolls and drones.
A zero-delay state-variable filter per voice — TONE, RESO, mode (LP/BP/HP) — with an envelope (F.ENV, F.DEC) that sweeps cutoff toward TONE. Static filters are why untreated pads all sound alike.
DRIVE, CRUSH and SHAPE — saturation, bit reduction and waveshaping, in front of the mix.
LEVEL, PAN, and two send amounts — DLY and REV — into the shared delay and reverb buses, each with its own return.
Four duck buses. Any pad can PUMP a bus (scaled by velocity) and any pad can DUCK from one. Set PUMP on the kick, DUCK on the pads, and the kit breathes. One shared release (REL) sets the feel for all four.
Pads sharing a non-zero choke group cut each other — and themselves — so a closed hat stops its own tail on a fast roll.
Sequencer
The step sequencer is clocked in the render block, not on a main-thread timer — so steps land on exact sample positions and the same code runs when FUJI is an AUv3. What you see in the pattern lane is a mirror of engine state, which is why it stays in time while the UI rebuilds a kit.
One row of −/+ steppers, no drag bars — they sat in the panel scroll path and a stray brush would reshape the beat. LENGTH is per pattern, 1–64 steps, stepping through 1 / 2 / 4 / 8 / 16 / 24 / 32 / 48 / 64 — a four-step fill can sit next to a thirty-two-step verse, and a cued switch adopts the new pattern’s length when it lands. SWING walks fixed musical stops from straight to a heavy shuffle; a learned MIDI CC still sets it continuously.
Elektron-style: a step can override its pad for that hit only, and the next unlocked step puts the pad back. Eight lockable parameters — morph, pitch, decay, tone, snap, drive, level, pan. Only live parameters are lockable; nothing here re-reads the shader. Lock MORPH first — the pad's frames are eight moments of the image, so a morph lock per step genuinely reads a different slice of the moving image.
Pattern dice rolls a fresh beat — density falling off by grid row (kick row anchors, top row is sparse fills), occasionally ratcheting a hit into a roll or dropping in a parameter lock. Kit dice re-rolls the sound: a new image (optional), a GPU-budgeted modifier chain on it, a second image blended in, a new palette, and every pad’s voice re-cut inside its grid row’s range, with delay/reverb sends dealt out — plus a rolled name.
Everything the kit dice touches is a toggle in SETTINGS → RANDOMIZER: SCAN POS, VOICES, SENDS, VFX, PALETTE, 2ND IMAGE, SWING, TEMPO (off by default). Set the scope to THIS PAD to re-roll one lane, and hold individual pads so a roll never touches them — a pad carrying a loaded sample keeps the sample and just gets shaped around it.
The two scopes read a style's signature differently, and deliberately. A signature only writes the lanes that define the genre, so most styles leave several blank — Lo-Fi Tape has no open hat, Ambient writes only four lanes of twelve. On WHOLE KIT those blank lanes stay silent: that restraint is what makes a rolled Boom Bap kit read as Boom Bap rather than as sixteen lanes of noise. On THIS PAD you have pointed at one pad and asked it for something, so a blank lane rolls freely instead — still shaped by the style's groove density and ratchet, just no longer held to a signature that has no opinion about that particular drum.
New REC & the pattern bank
Arm REC and a stopped transport starts (there's nothing to record onto otherwise). While it's armed, every pad hit — on-screen, computer keyboard, or MIDI — is written to the current pattern, snapped to the nearest step. The snap is computed in the render block from the live playhead phase, so it's beat-accurate, not "wherever the UI was." Disarm REC to keep playing over the take without adding to it.
The pattern is global — it isn't part of a kit, so swapping kits changes the sound and not the beat. The bank holds up to 64 slots — it’s just data, and one empty pattern costs about 40 KB. Under the step grid it shows as a grid of numbered cells, one per slot:
Move to another pattern while the sequencer is running and the grid changes at once — you can start editing the new one immediately — but the sound only switches when the current pattern loop wraps back to step 1. The cued cell shows a ring until the switch lands. Stopped, the switch is instant. This is the classic Elektron/Digitakt feel: the bank never jumps mid-phrase, and for the default 16-step grid the switch point is the bar line.
Saved the moment you touch it. The working bank autosaves to the shared container, so a live-recorded take survives a relaunch. There is only ever one working bank, though — the next edit overwrites it. Give a bank a name (the tray icon on the pattern strip) and it becomes a file of its own that you can come back to.
The tray icon on the pattern strip saves, browses, loads, exports and imports whole banks — every slot, its length, and which one was active. Saved banks live in the shared container next to your kits, so they sync across your devices and the plug-in and the app read the same list.
There is one SAVE, in the top bar, and it saves everything: the kit and the pattern bank, under one name. ⌘S does the same, ⌘⇧S is Save As, and ⌘S on an untitled kit opens Save As for you. The pattern-bank tray loads, exports and imports — it deliberately has no save of its own, so nothing called Save ever means something narrower than everything.standalone
Why this matters for the plug-in. A hosted FUJI keeps its bank in the DAW's own session state — self-contained, per instance, exactly as you left it. That's the right behaviour for a session, but it means the bank doesn't leave the project. Naming a bank is how you carry a beat from AUM on the iPad to the Mac app and back: build it, save it, and it's in the list on the other side.
SAVE writes two things under one name. PROJECTS — the folder button beside it in the top bar — is where they come back together: every name that has both a kit and a bank, each row saying what's in it (kit + 4 patterns), and one tap restores the sound and the beat. Deleting a project removes both halves, and asks first, because it's two files.
It's a browser, not a new file format: a project is exactly the pair SAVE already wrote, and nothing about how kits and banks are stored changed. The name is the link.
Why loading a kit still doesn't touch your beat. Patterns are global on purpose — auditioning kits over a beat you're building is a real way to work, and a kit browser that replaced the bank every time would wreck it. So the kit browser and the pattern tray keep loading one half each, and PROJECTS is the explicit give me back everything action. Three doors, and each one does what its name says.
Export a .fujipattern to hand a bank to someone else. Kits export as .fujikit with your own shaders embedded; the two are separate files because patterns and kits are separate things — loading a kit swaps the sound, not the beat.
A beat on every beat, accented on the pattern's downbeat, generated in the render block off the sequencer's own beat tap — so it can't drift from the pattern, and a tempo change moves both at once. Count in (Settings) plays one loop of clicks before a take starts keeping anything — the pads still sound so you can feel the groove, and the REC button counts the beats down. Click while recording brings the click on for the length of a take, Logic's option of the same name, so REC always gives you something to play against without the click running the rest of the time. Standalone only: in a DAW the host owns the click, and one coming out of an instrument would print onto the track.
Beside + (new empty slot) sits ⧉, which copies the current pattern into a fresh slot and moves you to it. Most patterns in a bank are a small edit away from a neighbour rather than written from scratch, so duplicating is usually the faster way in — build the variation on top of what already works.
The ↩ button beside the dice (or ⌘Z) steps the pattern back. A snapshot is taken before anything that can cost you work — arming REC, a randomize, a clear, a run of step edits — so leaving REC on by accident is one tap to fix rather than a hunt for which steps are new. Undo is per slot: it returns to the pattern the change was made in, rather than rewriting whichever one you happen to have paged to.
Master
After the sixteen voices and before the limiter sits one shared chain. Every pad has had SEND DELAY and SEND REVERB knobs from the start — this is the other end of those. The MASTER panel sits with the XY pad, above the per-pad controls, because like the XY pad it takes the whole mix.
| Section | What it does |
|---|---|
| COLOUR TAPE · FLUTTER · LO-FI · SHAPE · CHORUS | Saturation and tape wear across the mix, a bit-rate crush, a waveshaper, and a chorus for width. |
| DELAY TIME · FBACK · RETURN | Where each pad’s SEND DELAY lands. RETURN is how much of the bus you actually hear — a big send does nothing with the return down. |
| REVERB SIZE · DAMP · RETURN | Where SEND REVERB lands. DAMP rolls the top off the tail, which is what keeps a long reverb from sitting on the hats. |
| SIDECHAIN RELEASE | How fast a ducked pad comes back up. Which pads push and duck against which of the four buses is set per pad, in MIX. |
The colour chain is off by default. TAPE, FLUTTER, LO-FI, SHAPE and CHORUS sit behind an ON switch, so a kit sounds exactly as it always did until you ask for them — and bypassed they cost nothing. The switch covers those five only: DELAY and REVERB are buses the pads themselves drive, and bypassing those would silence the reverb the factory kits rely on. FUJI now also skips both buses entirely when their returns are down, which hands a dry kit back about 0.2% of a core with no switch to find.
It saves with the kit. The rack is part of a .fujikit, because a send is meaningless without the return it feeds — a kit that didn’t carry it would sound different wherever it was opened. Master volume is deliberately not in there: that’s output trim, so loading a kit never changes how loud FUJI is.
The kit dice rolls the rack too (the MASTER chip in Settings → Randomizer), from the same tone the pads read — dirt picks the colour, space the reverb, echo the delay, and the delay time lands on a division of the kit’s own tempo. At most two of the five colour nodes come on: not for CPU, but because stacking five saturators is mud and the pads already have their own drive and crush ahead of this. All 92 factory kits ship with a rack of their own, set by the folder they’re filed in.
What it costs. Each colour node early-outs when it’s at zero, so an unused one is free. With all five running the whole rack measures about 0.2% of one core at 48kHz — a fixed stereo cost on the master bus, not per-voice. The delay and reverb are always-on send buses either way, so their settings cost nothing at all.
Every control here is a real AU parameter, so a move records as host automation in Logic or Live and plays back through the same path.
Performance FX
Labelled PERF FX in the app, sitting between MASTER and VFX — three panels of effects, so each says which it is. A Kaoss-style pad on the master bus, between the sequencer and the pad's own controls because it takes the whole mix rather than one voice. One effect at a time, engaged only while you're touching it — these are played, not dialled in.
Off until you ask for it. Disabled is a real bypass in the DSP, not a dry mix: an unused FX section returns before touching a sample, so it costs nothing on the audio thread.
| Effect | X | Y |
|---|---|---|
| FILTER | Sweeps a lowpass shut one way, a highpass up the other, wide open in the middle. | Resonance. |
| STUTTER | Slice length, from a beat down to a thirty-second of one. | How much of the slice survives each repeat. |
| CRUSH | Sample-rate reduction. | Bit depth — split from X so you can get gritty without going chiptune. |
| GATE | Rate. | Depth. |
| DELAY | Time. Moving it mid-gesture pitches the tail the way a tape delay does. | Feedback. |
| SPACE | Room size. | How much of the room you hear. |
STUTTER, GATE and DELAY divide the sequencer's own BPM, so they land on the grid the pattern is already playing rather than on a rate of their own. The stutter's buffer runs behind everything and freezes the moment you touch — the slice is the bar you just heard, not one that starts recording when you press. The gate starts its cycle where you put it, instead of wherever a free-running LFO happened to be.
Engaging and releasing ride an 8ms ramp, and the gate's edges get their own smoothing on top: a hard square on a drum bus is all clicks. The pad sits ahead of the master fader and the limiter, so a resonant sweep can't blow the ceiling and pulling the output down still takes everything with it.
HOLD latches an effect on after you let go, so a hand stays free for the pads.
Arm the pencil and drag across the surface: it paints big cells onto a 16×8 grid. The cells are kept in the order you draw them — the path is the stroke — and while the effect is engaged the DSP walks them, one cell per tempo-division, looping. A drawn squiggle becomes a sweep that plays in time; under HOLD it's hands-free, and you get your hands back for the pads.
The line drawn through the cells is what makes the order legible: without it a scattered path is confetti with no way to see what it will play. The cell that's currently sounding lights up, and the XY dot rides it.
Drawing is a mode, and the tools are off the surface. A drag only draws while the pencil is armed; otherwise it plays, exactly as it always did. The three tools sit in a row above the pad, never on it, so there's nothing to catch with an elbow mid-set. The pad's border changes colour and a corner label names the live tool, so you know before you touch rather than after.
The ⤢ button opens the pad edge to edge, with the effect chips and tools above it and the pattern bank along the bottom. That pairing is the point: one hand works the effect, the other jumps patterns, and neither needs you to go hunting in a scrolled panel. Pattern switches are beat-synced there like everywhere else, so a set stays in time however frantic the jumping gets. Keyboard pads and Space keep working; Esc closes it.
Every part of the pad is a real AU parameter — FX On, FX Select, FX X, FX Y and FX Engage — so a live sweep records as automation in Logic or Live and draws back in afterwards. None of them re-cut a shader, so all five are safe to move per block. They're MIDI-learnable too, which is the way to drive the pad from a hardware XY or put engage on a footswitch. The drawn path is not a parameter — it's a shape, not a value — so it's stored alongside the FX settings rather than recorded into a lane; automate FX Engage instead and the path plays wherever you engage it.
Kits
A kit holds the shader(s), how all sixteen pads read them (scan row, time offset, engine, blend), and every pad's voice settings. It does not hold the pattern — that's the global bank. 92 factory kits ship, built from the same recipe you edit — nothing in them is a special case. They're filed into browsable folders by feel: Basics, House & Techno, Hip-Hop & Lo-Fi, Trap & Drill, Breaks & Jungle, World & Groove, Industrial & Hard, Glitch & Experimental, Ambient & Cinematic. Between them they use every one of the 93 shaders in the starter pack, so the library is a tour of the pack as much as a set of drum kits — and any two kits on the same shader read it in different places, which is the whole point.
.fujikit embeds any of your own custom shaders, so a beat sounds the same on the other end. Starter- and paid-pack shaders are referenced by name and resolve from the recipient's library.Deleted folder inside FUJI's iCloud container, and any copy on another device is left where it is. Deletes deliberately do not propagate, so another device stays a backup.
Generative
The kit dice can be pointed at a genre. Pick one in Settings → Randomizer → Style and every roll lands inside it — the kick, the hats, the reverb, the picture it reads, the tempo, and the beat that plays underneath.
A style is not a preset. It doesn't set values, it sets the ranges every rolled value is drawn from. Two rolls of 90s Acid are two different kits that both sound like 90s acid — which is the difference between a genre and a factory patch.
| Lever | What it does |
|---|---|
| Tone | Nine tilts — brightness, weight, dirt, space, echo, snap, decay, pitch drama, and how far the kit sits toward the synth side or the picture side. Every pad reads all nine in its own way: weight makes the kick deep and long but only nudges a hat; space is a wash on the cymbals and a gated blast on the snare. That's what keeps sixteen pads sounding like one kit. |
| Roles | Rolls are role-aware. FUJI's pads have fixed jobs, so a kick is rolled as a kick — deep, sub-heavy, with a drop on the front — and a hat as a hat. Where each pad reads the picture stays anchored to its role, because a shader's dark foreground and bright sky sound nothing alike. |
| The picture | Each style prefers shaders whose names match its world, and carries its own VFX pool — scanlines and RGB split for 80s Miami, datamosh and glitch for Industrial. If your library has none of them it quietly falls back to everything rather than refusing to roll. |
| Tempo & swing | Framed by the style, when those targets are switched on. Boom Bap swings hard at 88; Warehouse is dead straight at 134. |
| The beat | The pattern dice plays the style's signature beat rather than rolling from nothing — see below. |
Every style carries the archetypal pattern for its genre, written across the twelve drum pads. The pattern dice plays that beat rather than a probability field — four-on-the-floor with an offbeat open hat for acid, a gated backbeat and a layered clap for 80s Miami, an Amen-shaped break for jungle, a half-time snare on 3 under sixteen hats for trap.
It's varied every roll, not replayed: hits drop, ghost notes appear, velocities move. Loose styles drift further than tight ones — Jungle chops itself apart, Warehouse barely moves. Two things are protected, because they're what a beat hangs on: the downbeat never drops, and a lane holding a single crash won't sprout stray hits the way a hat line can.
The top row stays free. A signature covers KICK through RIDE only — ZAP, NOISE and the two FX pads are always left to the free roll, so even a canonical pattern gets one thing in it you didn't expect.
| Style | What a roll gives you |
|---|---|
| ANYTHING 84–146 BPM · either | The default, and the widest net FUJI casts: no shader preference, no signature beat, and a fresh random character every roll. This is the dice as it always was. |
| 80s MIAMI 100–118 BPM · straight | LinnDrum tightness, a gated snare, tuned toms, chrome and neon. Pictures: Synthwave, neon, grids, CRT, VHS Sound: Tightest kick in the set, huge reverb send under a very short snare — the gate, built from decay and send rather than a gate. |
| 90s ACID 124–140 BPM · straight | 808 sub under a 909 top — resonant squelch, crisp hats, delay not reverb. Pictures: Acid grids, lasers, plasma, vortices Sound: Deep sub kick with a long ring and a big pitch drop; the brightest hats after Jungle; almost no reverb. |
| BOOM BAP 82–96 BPM · heavy swing | Dusty 12-bit sampler swing — dark, crushed, soft edges, vinyl weight. Pictures: Sketchbooks, blueprints, vinyl, DOS, CGA Sound: Soft transients, low cutoffs, crush across the kit, pushed to the scanned side so it reads as recorded. |
| TRAP 130–150 BPM · straight | Long sliding 808, snapped rim, hats fast enough to ratchet. Pictures: Neon, HUDs, targeting, starfields Sound: The longest, deepest kick in the set with the biggest pitch slide; dry; ratchets more than twice as likely. |
| JUNGLE 160–176 BPM · light swing | Chopped breaks — bright, ringing, sampled texture, busy tops. Pictures: Digital rain, corruption, pixels, warps Sound: Brightest kit here, hardest push to the picture side, and the busiest lanes. |
| WAREHOUSE 128–142 BPM · straight | Hard 909 in concrete — driven, dark, relentless, long metal tails. Pictures: Circuits, wireframes, cyber, tunnels Sound: Heavy drive, crisp metal, no snare at all in the beat — the clap is the backbeat. |
| LO-FI TAPE 70–90 BPM · heavy swing | Rolled-off and soft-edged — warm, played rather than programmed. Pictures: Ink, smoke, clouds, marble, sketches Sound: Darkest kit in the set by a distance, lowest transients, longest decays outside Ambient. |
| INDUSTRIAL 118–150 BPM · straight | Metal on metal — maximum drive and crush, ringing tails, nothing clean. Pictures: Circuits, forges, viruses, crashes Sound: The most drive and crush of any style, big pitch drama, long noise and cymbal tails. |
| AMBIENT 60–88 BPM · light swing | Barely a drum kit — long spectral tails, huge wash, transients almost gone. Pictures: Aurora, clouds, smoke, interstellar Sound: Longest decays, biggest reverb, lowest snap and drive; the sparsest beat by far. |
A style says where the dice may land; the chips under it say what the dice may touch at all — scan position, voices, sends, VFX, palette, second image, master, swing, tempo. Turn tempo off and a roll can't yank the BPM out from under a set. Long-press a pad to freeze it and it survives every roll, so a kick you like doesn't have to win a coin flip each time.
A pad with a loaded sample keeps it. The roll shapes the sample instead of mixing it away — pitch, decay, filter, drive and sends all still apply, and BODY stays pointed at whichever side you routed it to.
VFX Chain
MESA's VFX chain, unchanged: film look, bloom, RGB split, datamosh, mask and more, with per-effect wet/dry and parameter sliders. Each effect is baked into what the pads extract — so adding an effect is a sound-design move as much as a visual one. Active effects show as chips on the kit image. Because the moving image is every sound, save before stacking VFX.
Grain, envelope and waveshaping — tanh, S-curve, edge or invert.
A 9-tap Gaussian blur — a low-pass that softens the extracted waveform.
Re-samples each channel at an offset — comb-filter harmonics.
Block displacement — gritty inter-frame smear and texture.
Blend modes — multiply, screen, difference, greyscale.
MIDI
Right-click a control (long-press on iOS), pick MIDI Learn, wiggle the hardware. Bindings persist and are shared by the app and the plug-in. That long-press sits on top of a knob's own drag, so if it keeps firing while you play, MIDI Learn can be switched off entirely in Settings — the menu then never appears, while controller presets and every CC you already learned keep working.
Twenty layouts, so the pads answer to what your hardware actually sends out of the box:
A preset's knobs bind to whichever pad you last hit, so eight hardware knobs cover all sixteen pads — which is how you actually work on a beat.
Play/Stop, REC arm, next / previous pattern, randomize kit, randomize pattern, panic, tempo, swing, master volume, blend, palette, reactivity, the VFX and master colour chain bypasses (map those to two pads and you can take a kit from mangled to clean mid-bar), the XY pad’s two axes and engage, and every knob in the master rack (tape, flutter, lo-fi, shape, chorus, both delay and reverb buses, sidechain release) all take a binding — map them to your controller's transport row and never touch the screen.
Notes vs. knobs. Pad notes in the presets are documented factory defaults; knob CCs vary by firmware, so Learn overrides any of them in one wiggle.
FUJI is an instrument that also emits MIDI, on a port named FUJI Pads, everything on channel 10 (GM drums, note 36 + pad). That name is only ever shown by hosts that list plug-in MIDI ports — AUM and apeMatrix put it in the routing matrix. Logic never shows it: there you pick the track FUJI is on, which is called whatever the track is called (FUJI Drum by default), so don't go hunting a menu for “FUJI Pads”. Pads you play by hand always go out. The piano-keys button on the pattern transport — where the metronome sits in the standalone app — adds the step sequencer's hits to them, so a DAW track can record the pattern as editable MIDI or FUJI can sequence another instrument. It's off by default; routing it back into FUJI would double-trigger. Plug-in only.
The button tells you if anything is listening. Hosts connect the port on their own schedule — Logic only once a track actually asks FUJI for MIDI. Armed with nothing on the other end shows a red slash; it turns amber the moment a host track picks the port up. That's your cue that the route is live, before you commit a take.
People trip over this in AUM especially: wiring FUJI to another synth so you can hear it is not the same as capturing the MIDI. The first needs nothing extra; the second needs a recorder.
Just hear FUJI drive another instrument
No extra plug-in. Point FUJI Pads at any synth in the host's MIDI routing — AUM and apeMatrix have an explicit matrix, Loopy Pro a MIDI channel, Logic a track input. FUJI plays it live, pads and sequencer both.
Actually record the MIDI
Now you need something that captures MIDI. AUM and apeMatrix don't, so send FUJI Pads into a MIDI-recorder AUv3 — MIDI Tape Recorder, Atom 2, Lowfi Dojo Automaton. Drambo 2.20+ and Logic Pro for iPad record plug-in MIDI natively.
A track or a recorder captures what arrives at its input. FUJI's on-screen pads sit downstream of that — they talk straight to the engine inside the plug-in — so nothing records them onto FUJI's own track by itself, in any host. What you do instead is always the same shape: point something else at FUJI's “FUJI Pads” output, and record that. Only the menu names change.
iOS hosts are better at this than desktop ones. AUM and apeMatrix put every plug-in's MIDI output in an explicit routing matrix, so FUJI shows up as a source you can wire anywhere. There's no hidden inspector setting to find.
| Host | How |
|---|---|
| AUM | Open the MIDI routing matrix. FUJI appears as a MIDI source — wire it to whatever you want. AUM doesn't record MIDI itself, so the destination needs to be a MIDI-recorder AUv3 (MIDI Tape Recorder, Atom 2, Lowfi Dojo Automaton) or another instrument you want FUJI to drive. |
| Loopy Pro | Load FUJI as an audio AUv3 first. Then open the mixer, tap +, and choose Add MIDI — that channel captures the AUv3's MIDI output, and you record it into a clip like anything else. |
| Drambo | Records AUv3 MIDI output natively (2.20 and later). Route FUJI's MIDI out to a recorder module. |
| apeMatrix | Same idea as AUM — FUJI is a node with a MIDI output; patch it wherever you like. |
| Logic Pro for iPad | Apple documents “Record MIDI plug-in output” for the iPad version. Follow that; the concept matches the Mac's Internal MIDI In. |
In all of them, turn on the pattern MIDI-out button if you want the sequencer as well as your pad taps. The button's badge is the quickest sanity check that the wire is live: red slash means nothing is reading the port yet, amber means something is.
On iPad the file route works too, with one catch: dragging a numbered cell into another app in Split View or into Files works from the standalone app, but not from FUJI running as a plug-in inside AUM or Logic — a drag can't leave a plug-in's window on any platform. In a host, use the export button and share the .mid from there.
This is the workflow worth learning: build a beat on FUJI’s own sequencer, capture it as a real MIDI region, then hand playback back to FUJI and treat the beat like anything else in the arrangement. Logic supports it properly — Apple calls it Internal MIDI In, documented as capturing “the MIDI output of MIDI effect or software instrument plug-ins.”
Part 1 — get the pattern onto a track
Hearing everything twice? The second track has an instrument loaded, so it is playing your notes alongside FUJI. Remove its instrument or mute the track — you only want it to catch MIDI. FUJI’s own audio is what you should hear while recording.
What lands is a region of channel-10 notes on the GM drum map: note 36 is pad 1 (kick), ascending from there. Notes are short gates, block-accurate and swing-correct; ratchets arrive as repeated notes. Parameter locks do not travel.
Part 2 — hand playback back to FUJI
From here it is an ordinary MIDI region. Quantise it, edit hits in the piano roll, comp several takes, copy it along the timeline, split it into per-drum lanes. Automate FUJI’s knobs on its own track while you are at it — set the track to Touch or Latch, arm it, and a sweep you play on FUJI’s panel writes straight into the lane. Freeze or bounce the FUJI track when the part is done.
When the notes don’t turn up
| Symptom | Cause |
|---|---|
| No Internal MIDI In row in the inspector | The track isn’t a Software Instrument track, or the inspector is collapsed — expand it with the disclosure arrow under the track name. |
| The row is there, but the FUJI track isn’t in the menu | FUJI has to already be instantiated on a track for Logic to offer it as a source. Load it first, then reopen the menu. |
| Armed and recording, region comes back empty | Pattern MIDI-out is still off. Check the piano-keys button: a red slash means armed with nothing reading the port, amber means a host track has it. Logic only wires the port up once a track actually asks FUJI for MIDI, so red until you arm is normal. |
| Only your hand-played pads recorded, not the sequencer | Same cause — pads always go out, the sequencer only with the button on. |
| You picked Instrument Input and got nothing | That taps what goes into the plug-in. FUJI generates its own notes, so you want Instrument Output. |
| Region recorded but plays silently | Working as intended — the catch track has no instrument. Move the region onto the FUJI track. |
| Every hit doubles after moving the region | FUJI’s internal pattern is still playing. Mute it with the grid button next to REC. |
No routing at all? The up-arrow beside the pattern bank exports the current pattern as a .mid. In a plug-in it opens a Save panel — save it, then drag the file from the Finder onto a track. Same result, no inspector, and it works in every DAW including the ones that won’t route AU plug-in MIDI at all.
Live routes plug-in MIDI output the same way in principle — second MIDI track, MIDI From set to the FUJI track, the chooser below it set to the plug-in, Monitor to In, arm and record.
But not from an Audio Unit. Live only exposes plug-in MIDI output for VST. Its own documentation for the feature is titled “Accessing the MIDI output of a VST plug-in”, and the AU path simply doesn't appear in the chooser. FUJI ships as an AUv3 and there's no VST build, so this route is closed in Live — it isn't a setting you've missed.
So in Live, use the file: export the pattern with the up-arrow beside the bank, save the .mid, then drag it from the Finder onto a MIDI track. You get an editable clip with the right tempo, swing and velocities, and no routing at all. You can't drag a bank cell straight into Live's arrange view — FUJI is a plug-in there, and a drag can't leave a plug-in's window — so the file goes via the Finder. Live's Capture MIDI won't help here either: it recovers what you played into Live, not what a plug-in generated.
If you want to finger-drum into Live in real time, play a pad controller into the FUJI track as usual: that arrives at the track's input and records normally, and FUJI answers on the GM drum map from C1 up.
There are two ways to get a pattern out as a Standard MIDI File. The export button beside the bank (the up-arrow) always works: in a DAW plug-in it opens a Save panel — save the .mid, then drag it from Finder onto a track; standalone and on iOS it’s a Save / share sheet. You can also drag a numbered bank cell straight onto a timeline or a Finder window — any slot, without switching to it — but a drag can’t leave a plug-in’s own window, so inside Logic or AUM use the button. Tap still selects the pattern; hold-then-drag reorders the bank. No routing, no armed track, works in every DAW.
Timing is the sequencer's, not an approximation of it: swing pushes odd steps by half the swing amount, ratchets arrive as repeated notes on the eighth-of-a-step grid, and velocities carry through. Tempo and 4/4 ride along as meta events, and the region runs the full pattern length so a sparse pattern still drops in at the right size. Parameter locks don't travel — timing, velocity and which pad do.
You've recorded FUJI's pattern out — as a routed MIDI region or a dragged-in .mid — and now you want FUJI to play it. Move the region onto the FUJI track so it drives the plug-in, then mute FUJI's internal pattern: the grid button on the pattern transport, next to REC. Without that the region and the sequencer both fire and every hit doubles. Muted, FUJI is a plain drum instrument the region drives; the clock and the click keep running, and the FUJI Pads mirror goes quiet with the pads. From there the region is a normal one — quantise it, edit it in the piano roll, comp takes, arrange several along the timeline, then freeze the track. The button is a real AU parameter, so its state is per-project and can itself be automated; it's MIDI-learnable for a live hand-off.
Every knob in the MASTER rack is a real AU parameter — TAPE, FLUTTER, LO-FI, SHAPE, CHORUS, both the delay and reverb buses, the sidechain release, and the COLOUR bypass — as are the Performance FX XY axes and every pad control. Set the FUJI track's automation mode to Touch or Latch, arm it, and a sweep you play on FUJI's own panel writes into the lane and plays back through the same path. No mapping step: the panel is the automation surface.
Playing
| Gesture | Does |
|---|---|
| Pencil beside the pad name | Rename the pad. The name shows on the grid and travels with the kit — useful the moment a sample lands on one and “TOM HI” stops being true. |
| Tap a pad high / low | Harder or softer hit — velocity from where you strike, scaled by the sensitivity slider. |
| Touch the kit image | Play the pad cut from that band. Drag across it to sweep the kit, one hit per band. |
| Z X C V / A S D F / …standalone | Computer-keyboard drumming, laid over the grid, bottom row nearest you. |
| Space · ← → · ↑ ↓standalone | Play/stop · previous / next pattern · previous / next kit. Any attached keyboard, MacBook or Bluetooth. Modifier combos (⌘←, ⌥↓) pass through untouched. |
| Tap ⤢ on the image | Fullscreen visuals. Space and the pad keys keep working there; the close button stays put. |
| Tap a step | Toggle it (the sub-slot under the pointer on a ratcheted step). |
| Drag across steps | Paint on / erase, following the first step touched. |
| Drag a lit step up/down | Velocity. |
| Long-press a step | Step sheet: parameter locks and 2 / 4 / 8 ratchet. |
| Tap REC | Arm live recording (starts the transport). |
| Pattern grid — tap a cell | Jump to that pattern. While playing, the switch waits for the loop to come round so the bank stays in time. |
| Pattern grid — hold, then drag a cell | Reorder the bank live. The set rearranges under your finger; nothing switches what's playing. A quick tap still just jumps. |
| Swipe the pad-overview strip | A shortcut for previous / next pattern, beat-synced — the grid is the main route now. |
| Tap + · ⧉ · DLT | New empty pattern slot · duplicate this one · delete this one (confirms first — it can't be undone). |
Tap ↩ · ⌘Z | Undo the last pattern change — including a whole recorded take. |
| Tap the BPM | Tempo, grid, swing, tap tempo. Drag it to nudge. |
| Tap a kit / shader name | Open the searchable browser. |
Settings
At the very bottom of the controls, under MIX and SIDECHAIN — the one panel about the app rather than the instrument. The pad grid never moves for it.
DUSK is night indigo ground with ivory ink; DAYLIGHT is warm paper with indigo ink, the same palette as this site. Each is previewed in its own colours on its own card, so you can see the choice before the app takes it. Match system appearance follows the device's Light/Dark setting instead — DAYLIGHT by day, DUSK at night, switching when the system does. Picking a theme by hand releases the follow. The choice lives in the shared container, so the app and the plug-in agree. SUMI is a third kind of thing: black ink on washi, and the only theme that changes more than pigment. Its type is a serif (Mincho where the system has it), its panels are cut sheets with squared corners and a shadow rather than drawn boxes, the ground carries a paper grain, and every border and knob ring is drawn as a brush stroke — bowed, slightly overshot, and different on every control, seeded so it stays put instead of crawling. The pad grid trades four accent hues for four densities of ink. One colour survives, the vermillion of a signature seal, and only on REC, CLR, DLT and MIDI Learn, where "armed" or "this destroys something" has to read at a glance. DUSK and DAYLIGHT can follow the system's Light/Dark setting; SUMI is neither, so choosing it releases the follow.
Learn's long-press sits on top of a knob's own drag and a pad's own tap, and someone who never maps a controller only ever meets it by accident. Switch MIDI Learn off and the menu never appears at all — not an empty menu, no menu, since a context menu still swallows the long-press on iOS. Controller presets and every CC you already learned keep working: this gates authoring, not mapping.
Count in, click while recording and the click's level live here. See REC & the pattern bank for what they do.
Under MIDI · Feel rather than here. Pads are velocity-mapped — a hard hit feels harder — and knobs, steps, chips and buttons give a lighter tick. Off in one switch on hardware that has it, absent on hardware that doesn't.
Ableton Linkstandalone
Tap LINK and enable it in Ableton's own settings sheet, and FUJI joins whatever session is on the local network — tempo, beat and phase shared with every other Link app and device. Under Link, FUJI's own clock stands down and the pattern is driven from the session's beat, through exactly the path a DAW uses when FUJI is a plug-in: there is never a second clock to drift against.
Newer than Link itself, and in the same settings sheet: FUJI announces its output as a channel other peers in the session can pull, so the kit can be heard — and recorded — on another device without a cable. The buffer is committed with the same session state and beat position it was rendered against, which is what lets a receiving peer place it correctly in time rather than merely early or late. Nothing is sent until a peer asks for it, so leaving it on costs nothing.
In your DAW
.mid and skips the routing entirely. In a plug-in it opens a Save panel — save the file, then drag it from the Finder onto a track. Dragging a bank cell straight onto the arrange window does not work here: a drag can’t leave a plug-in’s own window, which is exactly why the button exists.AI co-piloting
FUJI can run a local MCP server — the protocol AI coding agents like Claude Code speak — so an agent can write and iterate Metal shaders, see real compile errors and rendered previews, cut the whole kit from a shader, sculpt each pad's voice, program the pattern, and save the result as a kit. It's off by default; turn it on from the sparkles icon in the top bar.
Private by design. The server binds 127.0.0.1 only — never reachable from the network, and only apps on the same Mac can connect.
Register the endpoint with your client once:
Or, for any other MCP client (Cursor, Windsurf, VS Code):
Two things have to both be true: the toggle in the sheet must be on — that's what actually starts the server listening — and claude mcp add is a one-time registration, so it doesn't add tools to a client session that's already open. Restart the client, or start a new session, and it picks up the tools below.
| Tool | What it does |
|---|---|
fuji_catalog | Reference: the pad-parameter map with natural ranges, the Vision enum names, the 26 VFX modifier types, and the exact Metal shader contract. Call this first. |
fuji_state | Full live snapshot — kit, both shader slots, tempo / swing / length, transport, master volume, and a per-pad summary. |
fuji_list_shaders · fuji_get_shader | List and fetch shaders across every pack. |
fuji_create_shader · fuji_update_shader | Write or edit a shader in My Shaders — compiles immediately, returns the real Metal compiler error on failure. |
fuji_load_shader | Push a shader onto slot A or B — the whole kit re-cuts from it. |
fuji_preview_shader | Renders an actual PNG of the shader — see it before it's live. |
fuji_list_kits · fuji_get_kit · fuji_load_kit · fuji_save_kit | Browse, inspect, load and save whole kits. |
fuji_randomize_kit | Roll a complete new kit — new image, VFX, palette, every pad re-voiced by row — same as the kit dice. Applies live; fuji_save_kit keeps it. |
fuji_randomize_pattern | Roll the current pattern — hits, velocities and ratchets, densities weighted by row. |
fuji_set_pad | Set any subset of one pad's voice parameters by name, in natural units. |
fuji_set_pad_scan | Move where a pad reads the image — scan row, time offset, channel, curve. Re-cuts that pad. |
fuji_set_kit | Palette, BLEND, tempo, swing, pattern length — any subset, one call. |
fuji_set_master | The master rack every pad lands in: tape, flutter, lo-fi, shape, chorus, and the delay and reverb buses the pads’ own sends feed. A big send does nothing if the return is down. |
fuji_set_perf_fx | The XY performance pad — arm it, pick one of the six effects, set both axes, and engage it. |
fuji_set_fx_motion | The drawn motion path on that pad: the cells the effect walks in time, one per tempo-division, plus its rate. A shape that plays itself. |
fuji_set_vfx | Set the VFX modifier chain on a shader slot. A sound-design move as much as a visual one: it changes what every pad extracts. |
fuji_set_style | Point the kit dice at a genre before rolling — see Kit styles. |
fuji_load_pad_sample · fuji_set_pad_sample · fuji_clear_pad_sample | Put your own audio on a pad by file path, then shape it — gain, trim, reverse, and which voice side(s) it feeds — without re-reading the file. |
fuji_set_step_detail | What plain on/off can’t reach: a step’s velocity, its 2/4/8 ratchet, and its parameter locks. |
fuji_trigger_pad | Fire one hit — audition a pad while sculpting it. |
fuji_set_steps · fuji_clear_pattern | Write a pad's lane in the current pattern, or clear one lane / every lane. |
fuji_add_patterns | Append as many blank slots to the bank as you ask for in one call (it holds 64) and move to the first new one. |
fuji_copy_pattern | Clone a pattern into a fresh slot and move to the copy — steps, velocities, ratchets and locks all travel. The fast way to build a bank: write one good beat, copy it, edit the copy. |
fuji_select_pattern | Move to a slot — it becomes the one the step tools write to, and the one you hear (beat-synced while playing). |
fuji_projects | List saved projects and open one — the kit and its pattern bank together, under a single name. The whole thing in one call, where the two rows below take half each. |
fuji_list_pattern_banks · fuji_save_pattern_bank · fuji_load_pattern_bank | Save every slot as a named bank, list them, load one back. Worth doing before rewriting patterns you might want again — the working bank is autosaved, but there is only ever one of it. |
fuji_link | Ableton Link — read the session (peers, shared tempo, Link Audio) or join and leave it. While it's on, the session owns tempo and transport. |
fuji_transport | Start or stop the sequencer, and mute the internal pattern. Refused when a DAW or a Link session owns the transport — the error says which, and how to take it back. |
fuji_set_volume | Global output volume, 0–1 — downstream of the whole kit, ahead of the limiter. Untouched by kit / randomize calls. |
fuji_panic | Hard-kill every voice instantly. |
Specs
| Formats | AUv3 plug-in + Standalone app |
| Platforms | iOS · macOS (Mac Catalyst, Optimized for Mac) |
| Engine | Native C++17 DSP, Objective-C++ AU bridge, Swift/Metal UI |
| Pads | 16 · 3 voices each · choke groups |
| Sources | CYCLE wavetable · SCAN one-shot · SPECTRAL resynthesis · BODY crossfade |
| Wavetables | 8-frame · FFT mip-banked · alias-free |
| Visual import | .vkograph · VKO1 Metal shaders · 93-shader starter pack · web editor · full modifier graph · 33 palettes |
| Pattern | Clocked in the render block · up to 64 steps · 8-slot bank · REC with count-in · beat-synced switching · duplicate · undo |
| Step data | Velocity · probability · 8-parameter locks · 2/4/8 ratchet · per-pattern swing |
| Performance FX | XY pad on the master bus · filter · stutter · crush · gate · delay · space · tempo-synced · fully automatable · drawable motion path · fullscreen with the pattern bank |
| Effects | Per-pad drive/crush/shape · master rack (tape, flutter, lo-fi, shape, chorus) · delay & reverb buses with their own returns · saved with the kit |
| VFX chain | filmLook, bloom, rgbSplit, datamosh, mask · per-node wet/dry · baked into the source |
| MIDI | CC learn on every control (switchable off) · 20 controller presets · persistent maps · pattern + live pads out as MIDI (AUv3) |
| Kits | 92 factory kits in 9 folders · every starter-pack shader used |
| Kit styles | 10 genre styles for the dice · role-aware voicing · per-style shader + VFX pools, tempo, swing and a signature beat |
| Sync | Ableton Link (tempo · beat · start/stop) · Link Audio · AUv3 host transport |
| Metronome | Accented downbeat · count-in · click while recordingstandalone |
| Appearance | DUSK / DAYLIGHT / SUMI themes · match system · velocity-mapped haptics |
| Sync | iCloud — kits, custom shaders, pad samples and the pattern bank · app + plug-in · every device on your Apple account · pulls on launch and on foreground · retries while files are still arriving · manual Refresh in every browser · works offline |
| Sharing | .fujikit (with embedded shaders) · .fujipattern |
| MCP Control | Local server · 127.0.0.1:3854 · 40 tools · standalone app, Mac only, off by default |
| AU identity | aumu · Fuji · Tmpr |
Tips