{"id":31696392,"url":"https://github.com/arcosoph/nanowakeword","last_synced_at":"2026-05-17T06:12:14.866Z","repository":{"id":320199347,"uuid":"1069632031","full_name":"arcosoph/nanowakeword","owner":"arcosoph","description":"A lightweight, wake word detection engine. Train custom, high-accuracy models with minimal effort.","archived":false,"fork":false,"pushed_at":"2026-04-08T18:00:58.000Z","size":81226,"stargazers_count":55,"open_issues_count":10,"forks_count":9,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-08T19:26:39.044Z","etag":null,"topics":["classification","classifire","custom","handsfree","hotword","hotword-detection","hotword-detector","keyword-spotter","keyword-spotting","on-device","speech-recognition","traning","trigger-word-detection","voice-activation","voice-assistant","wake-word","wake-word-detection"],"latest_commit_sha":null,"homepage":"https://arcosoph.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arcosoph.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-04T10:12:21.000Z","updated_at":"2026-04-08T18:14:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"eb952083-85b7-4cc9-9efe-eabcf22b304e","html_url":"https://github.com/arcosoph/nanowakeword","commit_stats":null,"previous_names":["arcosoph/nanowakeword"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/arcosoph/nanowakeword","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcosoph%2Fnanowakeword","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcosoph%2Fnanowakeword/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcosoph%2Fnanowakeword/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcosoph%2Fnanowakeword/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arcosoph","download_url":"https://codeload.github.com/arcosoph/nanowakeword/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arcosoph%2Fnanowakeword/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31953567,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["classification","classifire","custom","handsfree","hotword","hotword-detection","hotword-detector","keyword-spotter","keyword-spotting","on-device","speech-recognition","traning","trigger-word-detection","voice-activation","voice-assistant","wake-word","wake-word-detection"],"created_at":"2025-10-08T17:02:52.287Z","updated_at":"2026-05-17T06:12:14.860Z","avatar_url":"https://github.com/arcosoph.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://pub-812e108f164d4805821c37cb3d3810f1.r2.dev/images/common/logo_0.png\" alt=\"Logo\" width=\"290\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb\"\u003e\u003cimg alt=\"Open In Colab\" src=\"https://img.shields.io/badge/Open%20in%20Colab-FFB000?logo=googlecolab\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/rYfShVvacB\"\u003e\u003cimg alt=\"Join the Discord\" src=\"https://img.shields.io/badge/Join%20the%20Discord-5865F2?logo=discord\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/nanowakeword/\"\u003e\u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/nanowakeword.svg?color=6C63FF\u0026logo=pypi\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pypi.org/project/nanowakeword/\"\u003e\u003cimg alt=\"Python\" src=\"https://img.shields.io/pypi/pyversions/nanowakeword.svg?color=3776AB\u0026logo=python\u0026logoColor=white\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://pepy.tech/projects/nanowakeword\"\u003e\u003cimg alt=\"PyPI Downloads\" src=\"https://static.pepy.tech/personalized-badge/nanowakeword?period=total\u0026units=INTERNATIONAL_SYSTEM\u0026left_color=GRAY\u0026right_color=BLACK\u0026left_text=downloads\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/arcosoph/nanowakeword\"\u003e\n      \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/arcosoph/nanowakeword?color=white\u0026logo=apache\u0026logoColor=black\"\u003e\n    \u003c/a\u003e\n  \n\u003c/p\u003e\n\n**Nanowakeword is a next-generation, adaptive framework designed to build high-performance, custom wake word models. More than just a tool, it’s an intelligent engine that train custom models, deploy them anywhere, and integrate them into any project with minimal code. From a Raspberry Pi Zero to a cloud server, from a single device to a distributed edge/cloud system, it handles the full lifecycle.**\n\n**Quick Access**\n- [Features](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#state-of-the-art-features-and-architecture)\n- [Installation](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#installation)\n- [Train Model](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#train-model)\n- [Using model \u0026 Server](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#using-your-trained-model-inference)\n- [Performance](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#performance-and-evaluation)\n- [NOTIS](https://github.com/arcosoph/nanowakeword/blob/main/STATUS.md)\n- [Support](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#community--support)\n- [FAQ](https://github.com/arcosoph/nanowakeword?tab=readme-ov-file#faq)\n\n## **Choose Your Architecture, Build Your Pro Model**\nNanoWakeWord is a versatile framework offering a rich library of neural network architectures. Each is optimized for different scenarios, allowing you to build the perfect model for your specific needs. This Colab notebook lets you experiment with any of them.\n\n| Architecture | Recommended Use Case | Performance Profile | Start Training |\n| :--- | :--- | :--- | :--- |\n| **DNN** | General use on resource-constrained devices (e.g., MCUs). | **Fastest Training, Low Memory** | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=dnn) |\n| **RNN** | Baseline experiments or educational purposes. | Better than DNN | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=rnn) |\n| **CNN** | Short, sharp, and explosive wake words. | Efficient Feature Extraction | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=cnn) |\n| **LSTM** | Noisy environments or complex, multi-syllable phrases. | **Best-in-Class Noise Robustness** | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=lstm) |\n| **GRU** | A faster, lighter alternative to LSTM with similar high performance. | Balanced: Speed \u0026 Robustness | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=gru) |\n| **CRNN** | Challenging audio requiring both feature and context analysis. | Hybrid Power: CNN + RNN | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=crnn) |\n| **TCN** | Modern, high-speed sequential processing. | **Faster than RNN** (Parallel) | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=tcn) |\n| **BcResNet** | Broadcasting-residual network | **Accuracy Potential** | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=bcresnet) |\n| **QuartzNet**| Top accuracy with a small footprint on edge devices. | **Parameter-Efficient \u0026 Accurate** | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=quartznet) |\n| **Transformer**| **Deep Contextual Understanding** via Self-Attention mechanism. | **SOTA Performance \u0026 Flexibility** | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=transformer) |\n| **Conformer** | State-of-the-art hybrid for ultimate real-world performance. | **SOTA: Global + Local Features** | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=conformer) |\n| **E-Branchformer**| Bleeding-edge research for potentially the highest accuracy. | Accuracy Potential | [▶️ **Launch**](https://colab.research.google.com/github/arcosoph/nanowakeword/blob/main/notebooks/Train_Your_First_Wake_Word_Model.ipynb?model_type=e_branchformer) |\n\n---\n\u003e NOTE: Nanowakeword is under active development. For important updates, version-specific notes, and the latest stability status of all features, please refer to our official status document.\n\u003e\n\u003e **[➡️ View Latest Release Notes \u0026 Project Status](https://github.com/arcosoph/nanowakeword/blob/main/STATUS.md)**\n\n\n## State-of-the-Art Features and Architecture\n\nNanowakeword is not merely a tool; it's a holistic, end-to-end ecosystem engineered to democratize the creation of state-of-the-art, custom wake word models. It moves beyond simple scripting by integrating a series of automated, production-grade systems that orchestrate the entire lifecycle-from data analysis and feature engineering to advanced training and deployment-optimized inference.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e1. Builds a tiny student Model\u003c/strong\u003e\u003c/summary\u003e\nBuilt-in knowledge distillation - automatically generates a lightweight gate model from any trained model.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e2. The Production-Grade Data Pipeline: From Raw Audio to Optimized Features\u003c/strong\u003e\u003c/summary\u003e\n\nRecognizing that data is the bedrock of any great model, Nanowakeword automates the entire data engineering lifecycle with a pipeline designed for scale and quality:\n\n*   **Phonetic Adversarial Negative Generation:** This is a key differentiator. The system moves beyond generic noise and random words by performing a phonetic analysis of your wake word. It then synthesizes acoustically confusing counter-examples—phrases that sound similar but are semantically different. This forces the model to learn fine-grained phonetic boundaries, dramatically reducing the false positive rate in real-world use.\n\n*   **Dynamic On-the-Fly Augmentation:** During training, a powerful augmentation engine injects a rich tapestry of real-world acoustic scenarios in real-time. This includes applying background noise at varying SNR levels, convolving clips with room impulse responses (RIR) for realistic reverberation, and applying a suite of other transformations like pitch shifting and filtering.\n\n*   **Seamless Large-Scale Data Handling (`mmap`):** The framework shatters the memory ceiling of conventional training scripts. By utilizing memory-mapped files, it streams features directly from disk, enabling seamless training on datasets that can be hundreds of gigabytes or even terabytes in size, all on standard consumer hardware.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e3. A Modern Training Paradigm: State-of-the-Art Optimization Techniques\u003c/strong\u003e\u003c/summary\u003e\n\nThe training process itself is infused with cutting-edge techniques to ensure the final model is not just accurate, but exceptionally robust and reliable:\n\n*   **Hybrid Loss Architecture:** The model's learning is guided by a sophisticated, dual-objective loss function. \n\n*   **Checkpoint Ensembling / Stochastic Weight Averaging (SWA):** Instead of relying on a single \"best\" checkpoint, the framework identifies and averages the weights of the most stable and high-performing models from the training run. This powerful ensembling technique finds a flatter, more robust minimum in the loss landscape, leading to a final model with provably better generalization to unseen data.\n\n*   **Resilient, Fault-Tolerant Workflow:** Long training sessions are protected. The framework automatically saves the entire training state—model weights, optimizer progress, scheduler state, and even the precise position of the data generator. This allows you to resume an interrupted session from the exact point you left off, ensuring zero progress is lost.\n\n*   **Transparent Live Dashboard:** A clean, dynamic terminal table provides a real-time, transparent view of all effective training parameters as they are being used, offering complete insight into the automated process.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e4. The Deployment-Optimized Inference Engine: High Performance on the Edge\u003c/strong\u003e\u003c/summary\u003e\n\nA model's true value is in its deployment. Nanowakeword's inference engine is designed from the ground up for efficiency, low latency, and the challenges of real-world deployment:\n\n*   **Stateful Streaming Architecture:** It processes continuous audio streams incrementally, maintaining temporal context via hidden states for recurrent models (like LSTMs/GRUs). This is essential for delivering instant, low-latency predictions in real-time applications.\n\n*   **Universal Export:** The final trained model is exported to the industry-standard **ONNX** \u0026 **Pytorch** format. This guarantees maximum hardware acceleration and platform-agnostic deployment across a vast range of environments, from powerful servers to resource-constrained edge devices.\n\n*   **Integrated On-Device Post-Processing Stack:** The engine is a complete, production-ready solution. It incorporates an on-device stack that includes optional **Voice Activity Detection (VAD)** to conserve power, **Noise Reduction** to enhance clarity, and intelligent **Debouncing/Patience Filters**. This stack transforms the raw model output into a reliable, robust trigger, ready for integration out of the box.\n\n\u003c/details\u003e\n\n### A Stable \u0026 Dependency-Free Workflow\n\nThe framework is architected to eliminate the common dependency conflicts that often disrupt machine learning workflows. All required packages are carefully version-managed to guarantee a stable environment from initial setup through to the final training execution.\n\nThis design ensures that users can proceed from installation to model generation without encountering environment-related errors, allowing them to focus entirely on building their wake word model.\n\n\n## Getting Started\n\n### Prerequisites\n\n*   Python 3.9 or higher\n\n### Installation\n\nInstall the latest stable version from PyPI for **inference**:\n```bash\npip install nanowakeword\n```\n\nTo **train your own models**, install the full package with all training dependencies:\n```bash\npip install \"nanowakeword[train]\"\n```\n**Pro-Tip: Bleeding-Edge Updates**  \nWhile the PyPI package offers the latest stable release, you can install the most up-to-the-minute version directly from GitHub to get access to new features and fixes before they are officially released:\n```bash\npip install git+https://github.com/arcosoph/nanowakeword.git\n```\n\n## Train Model\n\nThe primary method for controlling the NanoWakeWord framework is through a `.yaml` file. This file acts as the central hub for your entire project, defining data paths and controlling which pipeline stages are active.\n\n### Simple Example Workflow\n\n1.  **Prepare Your Data Structure:**\n    Organize your raw audio files (`.wav`, `flac` etc.) into their respective subfolders or you can generate synthetic data.\n    ```\n    training_data/\n    ├── positive/         # Your wake word samples (\"hey_nano.wav\")\n    │   ├── sample.wav\n    │   └── user_01.aiff\n    ├── negative/         # Speech/sounds that are NOT the wake word\n    │   ├── adversarial_word.pcm\n    │   └── random_speech.wav\n    ├── noise/            # Background noises (fan, traffic, crowd)\n    │   ├── cafe.wav\n    │   └── office_noise.flac\n    └── rir/              # Room Impulse Response (If you want)\n        ├── small_room.wav\n        └── hall.wav\n    ```\n\n2.  **Define Your Configuration:**\n    Create a `.yaml` file to manage your training pipeline. This approach ensures your experiments are repeatable and well-documented.\n    ```yaml\n    # In your config.yaml\n    # Essential Paths (Required)\n    model_type: dnn # Or other architectures such as `LSTM`, `GRU`, `RNN`, `Transformer` etc..\n    model_name: \"my_wakeword_v1\"\n    output_dir: \"./trained_models\"\n    positive_data_path: \"./training_data/positive\"\n    negative_data_path: \"./training_data/negative\"\n    background_paths:\n    - \"./training_data/noise\"\n    rir_paths:\n    - \"./training_data/rir\"\n    \n    # Enable the stages for a full run\n    generate_clips: true\n    transform_clips: true\n    train_model: true\n\n    # Add more setting (Optional)\n    # For example, to apply a specific set of parameters:\n    n_blocks: 3\n    # ...\n    steps: 20000\n    # ...\n    checkpointing:\n      enabled: true\n      interval_steps: 500\n      limit: 3\n    # Other...\n    ```\n*For a full explanation \u0026 all parameters, please see the [`training_config`](https://github.com/arcosoph/nanowakeword/blob/main/examples/training_config.yaml) or [`CONFIGURATION_GUIDE`](https://arcosoph.com/blog/nanowakeword_config_guide).*\n\n\n3.  **Execute the Pipeline:**\n    Launch the trainer by pointing it to your configuration file. The stages enabled in your config will run automatically.\n    ```bash\n    nanowakeword -c ./path/to/config.yaml\n    ```\n\n## Command-Line Arguments (Overrides)\n\nFor on-the-fly experiments or to temporarily modify your pipeline without editing your configuration file, you can use the following command-line arguments. **Any flag used will take precedence over the corresponding setting in your `config.yaml` file.**\n\n| Argument            | Shorthand                 | Description                                                                                             |\n| ------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------- |\n| `--config`     | `-c`                      | **Required.** Path to the base `.yaml` configuration file.                                              |\n| `--generate_clips`  | `-G`                      | Activates the 'Generation' stage.                                                                       |\n| `--transform_clips` | `-t`                      | Activates the preparatory 'transform' stage (augmentation and feature extraction).                      |\n| `--train`     | `-T`                      | Activates the final 'Training' stage to build the model.                                                |\n| `--distill`         | `-d`                      | Generate a lightweight lite model via knowledge distillation.                                     |\n| `--resume`          | ✗                  | Resumes training from the latest checkpoint in the specified project directory.                         |\n| `--overwrite`       | ✗       | Forces regeneration of feature files. **Use with caution as this deletes existing data.**                 |\n\n## Performance and Evaluation\n\nNanowakeword is engineered to produce state-of-the-art, highly accurate models with exceptional real-world performance. The new dual-loss training architecture, combined with our powerful Intelligent Configuration Engine, ensures models achieve a very low stable loss while maintaining a clear separation between positive and negative predictions. This makes them extremely reliable for always-on, resource-constrained applications.\n\nBelow is a typical training performance graph for a model trained on a standard dataset. This entire process, from hyperparameter selection to training duration, is managed automatically by Nanowakeword's core engine.\n\n### 📈 Training Performance Graph\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://pub-812e108f164d4805821c37cb3d3810f1.r2.dev/images/common/training_performance_graph.png\" width=\"600\"\u003e\n\u003c/p\u003e\n\n### Key Performance Insights:\n\n*   **Stable and Efficient Learning:** The \"Training Loss (Stable/EMA)\" curve demonstrates the model's rapid and stable convergence. The loss consistently decreases and flattens, indicating that the model has effectively learned the underlying patterns of the wake word without overfitting. The raw loss (light blue) shows the natural variance between batches, while the stable loss (dark blue) confirms a solid and reliable learning trend.\n\n*   **Exceptional Confidence and Separation:** The final report card is a testament to the model's quality. With an **Average Stable Loss of just 0.0086**, the model is highly accurate. More importantly, the high margin between the positive and negative confidence scores highlights its decision-making power:\n    *   **Avg. Positive Confidence (Logit): `5.447`** (Extremely confident when the wake word is spoken)\n    *   **Avg. Negative Confidence (Logit): `-5.721`** (Equally confident in rejecting incorrect words and noise)\n    This large separation is crucial for minimizing false activations and ensuring the model responds only when it should.\n\n*   **Extremely Low False Positive Rate:** While real-world performance depends on the environment, our new training methodology, which heavily penalizes misclassifications, produces models with an exceptionally low rate of false activations. A well-trained model often achieves **less than one false positive every 16-28 hours** on average, making it ideal for a seamless user experience.\n\n## Using Your Trained Model (Inference)\n\nYour trained `.onnx` model is ready for action! The easiest and most powerful way to run inference is with our lightweight `NanoInterpreter`. It's designed for high performance and requires minimal code to get started.\n\nHere’s a practical example of how to use it:\n\n```python\nimport pyaudio\nimport numpy as np\nfrom nanowakeword import NanoInterpreter # Import the interpreter from the library\n\n# Load model\ninterpreter = NanoInterpreter.load_model(\n    r\"model/path/your.onnx\" # Your Model Path\n)\n\n# Setup microphone\npa = pyaudio.PyAudio()\n\nstream = pa.open(\n    format=pyaudio.paInt16,\n    channels=1,\n    rate=16000,\n    input=True,\n    frames_per_buffer=1280\n)\n\nprint(\"Listening...\")\n\nwhile True:\n    # Read audio from mic\n    audio_chunk = np.frombuffer(\n        stream.read(1280, exception_on_overflow=False),\n        dtype=np.int16\n    )\n\n    # Run prediction\n    result = interpreter.predict(audio_chunk)\n\n    # Detection\n    if result.score \u003e 0.95:\n        print(\"Detected!\")\n\n        # Optional\n        interpreter.reset()\n```\n\n## Deployment modes at a glance\n\n| Mode | Edge runs | Server runs | Best for |\n|---|---|---|---|\n| Fully local | mel + embedding + model | ✗ | Common use |\n| Local cascade | mel + embedding + gate + verifier | ✗ | Any device with a lite model |\n| Gate + remote verifier | mel + embedding + gate | verifier only | Medium-power edge |\n| Gate + remote full pipeline | gate only | mel + embedding + verifier | Low-power edge (Pi Zero, MCU) |\n| Fully remote | ✗ | mel + embedding + verifier | Ultra-minimal edge |\n\n## Server Command-Line Arguments\n\nAvailable command-line options for configuring, securing, and running the *Nanowakeword* server.\n\n| Argument            | Shorthand                 | Description                                                                                             |\n| ------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------- |\n| `--model` | ✗ | Start RemoteVerifier server |\n| `--pipeline` | ✗ | `verifier_only` or `full` |\n| `--port` | ✗ | Server port (default 8765) |\n| `--info` | ✗ | Inspect a `.onnx` model file |\n| `--api-key` | ✗ | API keys for client authentication (repeat for multiple keys) |\n| `--enable-tokens` | ✗ | Allow clients to exchange API keys for short-lived tokens |\n| `--token-ttl` | ✗ | Token lifetime in seconds (default: 3600) |\n| `--rate-limit` | ✗ | Max requests per IP per window (`0` = disabled) |\n| `--rate-window` | ✗ | Rate limit window in seconds (default: 60) |\n| `--ip-allowlist` | ✗ | Allow only specific IPs/CIDR ranges |\n| `--ssl-certfile` / `--ssl-keyfile` | ✗ | WSS/TLS certificate files |\n| `--ssl-ca-certs` | ✗ | CA bundle for mutual TLS |\n| `--max-connections` | ✗ | Maximum simultaneous clients |\n| `--ban-duration` | ✗ | Ban time after rate limit breach (default: 300) |\n\n\n༼ つ ◕_◕ ༽つ *[Learn more about running models, NanoInterpreter, and Server here](https://github.com/arcosoph/nanowakeword/blob/main/examples/inference_examples.md)*\n\n## 🎙️ Pre-trained Models\n\nTo help you get started quickly, `nanowakeword` comes with a rich collection of pre-trained models. These pre-trained models are ready to use and support a wide variety of wake words, eliminating the need to spend time training your own model from scratch.\n\nBecause our library of models is constantly evolving with new additions and improvements, we maintain a live, up-to-date list directly on our GitHub project page. This ensures you always have access to the latest information.\n\nFor a comprehensive list of all available models and their descriptions, please visit the official model registry:\n\n**[View the Official List of Pre-trained Models (✿◕‿◕✿)](https://huggingface.co/arcosoph/nanowakeword-models#pre-trained-models)**\n\n\n## ⚖️ Our Philosophy\n\nIn a world of complex machine learning tools, Nanowakeword is built on a simple philosophy:\n\n1.  **Simplicity First**: You shouldn't need a Ph.D. in machine learning to train a high-quality wake word model. We believe in abstracting away the complexity.\n2.  **Intelligence over Manual Labor**: The best hyperparameters are data-driven. Our goal is to replace hours of manual tuning with intelligent, automated analysis.\n3.  **Performance on the Edge**: Wake word detection should be fast, efficient, and run anywhere. We focus on creating models that are small and optimized for devices like the Raspberry Pi.\n4.  **Empowerment Through Open Source**: Everyone should have access to powerful voice technology. By being fully open-source, we empower developers and hobbyists to build the next generation of voice-enabled applications.\n\n## FAQ\n\n**1. Which Python version should I use?**\n\n\u003e  You can use **Python 3.8 to 3.13**. This setup has been tested and is fully supported.\n\n**2. What kind of hardware do I need for training?**\n\u003e Training can be performed on any modern device, including standard CPUs, without requiring specialized hardware. While a dedicated `GPU` can accelerate the process, it is not necessary. The training pipeline is optimized to run efficiently even on low-end systems.\n\n**3. How much data do I need to train a good model?**\n\u003e For a good starting point, we recommend at least 10000+ clean data of your wake words from a few different voices. The total duration of negative audio should be at least 3 times longer than positive audio. You can also create synthetic words using Nanowakeword. The more data you have, the better your model will be. Our intelligent engine is designed to work well even with small datasets.\n\n**4. Can I train a model for a language other than English?**\n\u003e Yes! Nanowakeword is language-agnostic. As long as you can provide audio samples for your wake words, you can train a model for any language.\n\n\u003c!-- **5. Which version of Nanowakeword should I use?**\n\u003e Always use the latest version of Nanowakeword. Version v1.3.0 is the minimum supported, but using the latest ensures full compatibility and best performance. --\u003e\n**5. What platforms are supported for running the trained model?**\n\u003e  Inference (running the model) is extremely lightweight and can run smoothly on almost any device, including a Raspberry Pi 3/4, Linux systems, Android devices, and Apple platforms.\n\n**6. Is there an official C# port for nanowakeword?**\n\u003e There are no official ports for C#\n\n## Community \u0026 Support\n\nAssistance for any issue-from data preparation to troubleshooting a stalled training process or an unexpected error-is readily available. The project prioritizes swift and effective solutions to ensure a smooth user experience.\n\nFor support, users can get help through the most convenient channel:\n\n*   **[GitHub Issues](https://github.com/arcosoph/nanowakeword/issues):** For reporting bugs, technical issues, and making feature requests.\n*   **[Discord Server](https://discord.gg/rYfShVvacB):** Ideal for general questions, configuration help, and community discussion.\n*   **[Official Website](https://arcosoph.com):** Provides documentation and includes a [contact](https://arcosoph.com/#contactForm) interface for direct communication.\n\n*All inquiries are reviewed and addressed as promptly as possible.*\n\n## Contributing\n\nContributions are the lifeblood of open source. We welcome contributions of all forms, from bug reports and documentation improvements to new features.\n\nTo get started, please see our **[Contribution Guide](https://github.com/arcosoph/nanowakeword/blob/main/CONTRIBUTING.md)**, which includes information on setting up a development environment, running trsts, and our code of conduct.\n\nVisit our [website](https://arcosoph.com)\n\n## License\n\nThis project is licensed under the Apache 2.0 License - see the [LICENSE](https://github.com/arcosoph/nanowakeword/blob/main/LICENSE) file for details.\n\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp style=\"font-size:18px; font-weight:600;\"\u003e\n    💙 If you find this helpful, please support us at \n    \u003ca href=\"https://arcosoph.com\" style=\"text-decoration:none;\"\u003e\n      \u003cspan style=\"color:#fefefe;\"\u003eA\u003c/span\u003e\n      \u003cspan style=\"color:#2cab4e;\"\u003er\u003c/span\u003e\n      \u003cspan style=\"color:#029adb;\"\u003ec\u003c/span\u003e\n      \u003cspan style=\"color:#821720;\"\u003eo\u003c/span\u003e\n      \u003cspan style=\"color:#f9e91b;\"\u003es\u003c/span\u003e\n      \u003cspan style=\"color:#821720;\"\u003eo\u003c/span\u003e\n      \u003cspan style=\"color:#fefefe;\"\u003ep\u003c/span\u003e\n      \u003cspan style=\"color:#f9e91b;\"\u003eh\u003c/span\u003e\n    \u003c/a\u003e  or give our \n    \u003ca href=\"https://github.com/arcosoph/NanoWakeWord\" style=\"color:#007BFF; font-weight:bold; text-decoration:none;\"\u003e\n      repository\n    \u003c/a\u003e a ⭐\n  \u003c/p\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcosoph%2Fnanowakeword","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farcosoph%2Fnanowakeword","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farcosoph%2Fnanowakeword/lists"}