shuko-tuto/npc-models
npc-models
The models a game character needs to hear, understand and answer on the player's own machine, one folder per model. Every folder is shipped whole, with the licence of its weights beside the files as <model>.LICENSE, so a folder copied beside a game carries its terms with it. Fetch all of them into a models/ folder with one command, or one folder with --include:
hf download shuko-tuto/npc-models --local-dir models
hf download shuko-tuto/npc-models --local-dir models --include "qwen3_4b_q4/*"How the Whisper graphs were made
The published checkpoints are loaded through the transformers library and lowered with pnnx, one graph per part of the model. The decoder is patched after the lowering: every attention layer gets a key and a value cache in and out, the mask is two-dimensional, and the position embedding is added outside the graph, so a decode loop can feed one token at a time and hand the caches straight back. The vocabulary is written from the checkpoint's tokenizer; the special tokens above it are not in the file and are counted from its length.
How the GigaAM graph was made
The v3_ctc checkpoint is loaded through the gigaam package and the encoder with its CTC head traced as one module, with the attention re-expressed batch first: the package keeps the batch in the second dimension while the rotary embedding is applied, and pnnx lowers that layout to ncnn's rotary layer with the sequence and the heads swapped, silently -- the graph runs and drops the short words. The rotary cos and sin tables are inputs to the graph rather than buffers in it (in1 and in2, base 5000, 48 wide, one row per encoder position), and pnnx is run with a second input shape, so every reshape is dynamic and one graph takes any clip length. Feed it in0 as the log-mel (64 bands, one column per 160-sample frame of a 320-sample window, no centre padding, natural log over a clamp to [1e-9, 1e9], no normalisation) and read out0 as one row of 34 log-probabilities per position, then decode greedily: argmax per row, repeats collapsed, class 33 dropped.
The language models
qwen3_4b_q4/ and gemma4_12b_q4/ are mirrors, not exports: each file is byte for byte the one its publisher serves, kept here so that a folder fetched from this repository has the same shape as every other -- one folder, one model, one licence beside it -- and so that a name written into a game keeps pointing at the same bytes when the upstream repository is reorganised. A folder holds exactly one .gguf file, which is how a loader picks it without being told a file name.
Licences
The Whisper weights are published under two licences that do not agree: the repository that trained them carries MIT, and the model cards of the same checkpoints on this hub are tagged Apache-2.0. Both texts travel in whisper_<size>_ncnn.LICENSE, so a folder handed on carries whichever of the two its reader holds the weights under. The Silero VAD weights are MIT, the text copied out of the wheel they were read from as silero_vad_16k.LICENSE. The GigaAM weights and the package that publishes them are MIT, the text copied out of the package as gigaam_v3_ctc_ncnn.LICENSE. The Qwen3 weights are Apache-2.0, the text copied out of their repository as qwen3_4b_q4.LICENSE. The Gemma 4 weights are tagged Apache-2.0 on both the publisher's card and the quantiser's; neither repository carries the text, so gemma4_12b_q4.LICENSE opens with a note naming both and follows with the licence itself.
