Introduction

higurashi, the Tokyo voice-AI startup that used to be called DubGuild, released Haru-4B on November 13. It's a full-duplex spoken dialogue model, which means it listens and speaks at the same time, the way people do on a phone call. It doesn't wait for a voice-activity detector to decide your turn is over. So it can drop in a "mm-hmm", laugh, or stop when you cut in.

The weights are open on Hugging Face at higurashi-ai/Haru-4B under Apache 2.0, and the inference code is on GitHub. The company announced it in a

and an , with a full technical blog (also in Japanese).

It's the latest entry in a busy month for open duplex voice. We've covered Sophon-Realtime v1 and MOSS-Live. Haru stands out for its training scale, its permissive license, and a native Mac app.

What Shipped

  • Model: Haru-4B, a pretrained base model released for research. It's built on the Qwen3.5-4B text backbone (32 layers, hidden size 2560).
  • How duplex works: every 133 ms (7.5 Hz) the model takes one frame of your audio and returns one frame of its own audio plus text. User audio, model audio and model text are summed into one position of the language model instead of being interleaved. higurashi says that cuts context length to a third.
  • No discrete audio tokens: speech is a 64-dimensional continuous latent per frame. A small 4-layer MLP head with MeanFlow produces each latent in one sampling step, so there's no separate audio transformer.
  • Codec: the causal VibeVoice acoustic tokenizer at 24 kHz, 3200 samples per latent.
  • Control: a text character card sets the persona. A 3-second to 3-minute reference clip sets the voice. No voices are bundled, so you bring your own.
  • Languages: English, Spanish, Portuguese, German, French, Chinese, Japanese, Russian and Korean.
  • Three runtimes, one checkpoint:
    • PyTorch, with a web demo (the client is derived from Moshi's).
    • MLX, with a native macOS app.
    • A vLLM-Omni plugin that serves many concurrent conversations over an OpenAI-Realtime-style WebSocket.
  • Bonus release: FastDialogueSidon, the joint separation-and-restoration model higurashi used to split single-channel recordings into two-speaker training streams.

Where to Run It Today

NVIDIA GPU (about 12 GB VRAM), from the repo README:

git clone https://github.com/higurashi-ai/Haru && cd Haru
pip install -e ./haru
python -m haru.server --hf-repo higurashi-ai/Haru-4B

Open http://localhost:8998, pick a character, upload a voice clip and talk. Use wired headphones and a wired mic. higurashi warns that Bluetooth adds 100 ms or more. Add --share (with pip install -e "./haru[share]") to get a public HTTPS link through Gradio's share servers.

Python, frame by frame:

from haru import DuplexSession, HaruModel
from haru.audio import load_audio, prepare_reference

model = HaruModel.from_pretrained("higurashi-ai/Haru-4B")
voice = prepare_reference(load_audio("voice.wav"))
session = DuplexSession(model, system_prompt=card, reference=voice)

frame = session.start()               # model frame 0
while not frame.done:
    frame = session.step(user_audio)  # 3200 samples at 24 kHz in, 3200 out

Build card with render_card from haru.prompt. The README shows the persona, name, relationship and situation fields.

Mac (Apple silicon): cd haru_mlx && pip install -e . && cd swift && ./build_app.sh, then open build/Haru.app. The checkpoint is about 10 GB and downloads on first launch. Build steps are in the Swift app README.

GPU server: install vllm==0.32.0 vllm-omni==0.32.0 and the plugin, then run vllm serve higurashi-ai/Haru-4B --omni --deploy-config "$(python -m haru_vllm.deploy)". The duplex endpoint is ws://localhost:8000/v1/realtime?duplex=1. See vLLM-Omni.

No install: the launch thread lists two Japanese-language phone numbers (one male voice, one female) that you can call to talk to Haru-4B.

Numbers (Self-Reported)

  • ~65 ms end-to-end latency on an M1 Max MacBook with int8 weights and the native Swift app. One model step takes 34.2 ms of that. Frame buffering can add up to 133 ms on top.
  • ~15 ms per step (encode, one LM step, decode) on an NVIDIA B300 through vLLM-Omni.
  • Triton codec kernels: about 0.7 ms instead of 6 ms to encode or decode a frame.
  • 40 million hours of real speech in pretraining, spanning 160+ languages. LLM-written and TTS-generated dialogue were deliberately excluded.
  • 13 million hours of separated full-duplex dialogue, with sessions up to 60 minutes long.
  • Compute: 256 NVIDIA B200 GPUs for about 8 days on Megatron-LM, supported by AWS and Japan's METI/NEDO GENIAC program.
  • Checkpoint: one 10.5 GB bfloat16 safetensors file.

Caveats

  • Base model, not an assistant. higurashi says it holds a natural conversation but isn't a reliable source of facts and doesn't follow instructions the way a chatbot does. The company itself says its 4B response quality is limited.
  • No benchmarks yet. The blog has latency numbers and demo videos, but no turn-taking, quality or WER scores against Moshi, Sophon or MOSS-Live. A technical report and training code are promised "later."
  • Trained on separated speech only. Separation errors can remain, especially in overlapping speech. Fine-tuning on native two-channel recordings is still in progress.
  • Voice cloning: it imitates any reference clip. Only use voices you have the rights to.
  • Fast-moving deps: the vLLM plugin is tested against vLLM/vLLM-Omni 0.32.0 and relies on model-runner hooks that may change.

Conclusion

Haru-4B is one of the most permissive open full-duplex voice models so far. The weights are Apache 2.0, the training corpus is huge (40M hours of real speech), and the same checkpoint runs on a 12 GB GPU, a Mac app, or a vLLM-Omni server. Treat it as a base to fine-tune, not a finished voice assistant. If you're building companions, game NPCs or call-style voice agents and want backchannels and interruptions without a VAD, this is the one to download and test this weekend. Bring your own (licensed) voice clip.

—Anabel ♡