Translate speech into Arabic or Kurdish on your own laptop, with nothing sent to the internet
An advanced local workflow for draft speech translation, with a hardware preflight and a fluent human reviewer.
- Time needed
- 100 minutes · 8 steps
- What it takes
- Technical: uses the command line
- What it costs
- A free path exists
- Last checked
- 2026-09-01
- Journalist or editor
- Communications and campaigns
- Human rights activist
- Grants and operations
- Translation into and out of local languages
- Transcribing testimonies and interviews
- Protecting sensitive information
These are instructions, not case studies
A recipe tells you what to do. It is not a report of something that already happened somewhere else. Nothing here claims that any organisation did this. It is written for you to do now, and every step tells you how to check it worked.
What you will make
A local draft transcript and translation from live speech, plus the settings and source needed to review it. This is an advanced workshop path. The output supports a fluent interpreter or editor. It does not replace one.
Keep the original audio. Test the workflow with public or synthetic speech before using operational material.
Choose the data lane first
- Public: Public speeches and synthetic recordings can be used for setup and practice.
- Internal: Meetings and unpublished interviews require an approved device, storage location, and review process.
- Identifiable: Testimony, survivor interviews, legal or medical material, and protected voices require a verified offline route. If you cannot prove the route, do not use AI.
Local processing reduces content sent to a hosted service, but it does not make the device, backups, telemetry, or room automatically safe.
Workshop route
- Run the hardware and operating system preflight before installing anything.
- Download and test the required software and models before sensitive work.
- Disconnect the network and confirm the pipeline still runs with a public sample.
- Process a short segment with WhisperWhisper on your own computerControlled route for sensitive materialOpen sourceMITHas a free version: The software and model weights are free. Speed and capacity depend on your computer.View tool, then compare transcript, translation, and source audio.
- Ask a fluent reviewer to check names, numbers, meaning, omissions, and dialect.
Five checks before you finish
- Data: Is the audio in the correct lane, and are device storage and backups approved for it?
- Input: Are the source language, microphone, model, and hardware supported and tested?
- Output: Are names, numbers, negation, quotations, and key meaning correct?
- Human: Has a fluent person reviewed the original audio and the translation?
- Record: Did you retain the source, settings, model and licence details, date, and reviewer?
Stop and change route when
Stop if the hardware preflight fails, the spoken language or dialect is not reliably recognised, or no fluent reviewer is available. Do not use draft output as testimony, a court submission, a medical or legal record, or an official translation.
What happens to your information
Never use this for
Do not use output as testimony, a court or medical record, certified translation or the only record. Respect the NLLB licence and model-card limits.
What leaves your device
Whose law it lands under · The fully offline option
Setup contacts package and model hosts. A run with every network connection physically disabled cannot send audio over the network. Audio buffers, terminal text, swap, backups and the device remain local risks.
Whose law it lands under
Download hosts receive download metadata. The disconnected run does not send speech to a provider, but local storage and workplace rules still apply.
The fully offline option
The route is local only after models and voice detector are on disk and the complete public test works again with Wi-Fi, cable and hotspot disconnected.
What it costs
Paying for this from Iraq
No account or payment is required. Package and model hosts receive download requests during setup. Avoid unaudited mirrors.
The free path
If you pay
The named packages and model run without a usage fee. Setup still requires downloads, disk, a suitable laptop and technical support.
If you pay
USD 0 for the documented route.
Before you start
- A supported managed laptop with at least 8 GB RAM, encryption, microphone access and installation permission.
- Python 3.11 or 3.12 and enough disk and bandwidth for packages and models.
- A public Arabic test script and recording with known text.
- A fluent reviewer for source speech and target language.
Which machines this works on
This route targets Windows x64, Apple Silicon macOS 14 or later and current Ubuntu. The current dependency route does not support Intel Mac. Recheck Python and package support before the workshop and use another approved device when preflight fails.
The steps
Step 1 / 8
Run the go or no-go preflight: operating system, processor, Python, memory, disk, encryption, microphone, sync, backups and installation permission. Stop on Intel Mac or an unsupported dependency combination.
Check it worked
The device and route are recorded as supported, encrypted, non-synchronised and available for a public test.
Step 2 / 8
Create an isolated folder and Python environment. On Linux, install the current CPU-only PyTorch build before the remaining packages to avoid unnecessary accelerator downloads.
Copy this exactly
python -m venv .venv # Windows PowerShell: .\.venv\Scripts\Activate.ps1 # macOS or Linux: source .venv/bin/activate python -m pip install -U pip setuptools wheelCheck it worked
The activated environment reports the expected Python and PyTorch versions, and PyTorch reports CPU operation on a non-GPU laptop.
Step 3 / 8
Install RealtimeSTT with its recommended voice detector, CTranslate2, Transformers, SentencePiece and Protobuf. Use current official installation guidance if a platform dependency is missing.
Copy this exactly
python -m pip install "RealtimeSTT[recommended]" ctranslate2 transformers sentencepiece protobuf python -c "import ctranslate2, transformers, faster_whisper, silero_vad; from RealtimeSTT import AudioToTextRecorder; print('packages ready')"Check it worked
Python imports RealtimeSTT, ctranslate2, transformers, faster_whisper and silero_vad without an error.
Step 4 / 8
Download and convert the NLLB translation model, then download the Whisper small model. Use public setup material only.
Copy this exactly
ct2-transformers-converter --model facebook/nllb-200-distilled-600M --output_dir models/nllb-600m-int8 --quantization int8 --copy_files tokenizer.json tokenizer_config.json special_tokens_map.json sentencepiece.bpe.model python -c "from faster_whisper import WhisperModel; WhisperModel('small', device='cpu', compute_type='int8'); print('Whisper ready')" python -c "import os, silero_vad; p=os.path.join(os.path.dirname(silero_vad.__file__),'data','silero_vad_op18_ifless.onnx'); print('VAD on disk:', os.path.exists(p))"Check it worked
The NLLB folder exists, the Whisper model is cached, and the installed silero_vad package contains its ONNX model file.
Step 5 / 8
Create the live script from the maintained CDR workshop module. For Arabic speech to Sorani text use ar, arb_Arab and ckb_Arab. Keep model loading inside the main process as documented by the module.
Copy this exactly
Use the current script from https://github.com/cdrorgtr/cdr-ai/tree/main/simultane-ceviri and save it as translate_live.py. Then run: python -m py_compile translate_live.pyCheck it worked
The script passes a Python syntax check and shows the intended source and target codes before microphone use.
Note
NLLB is non-commercial and its model card excludes certified, legal and medical translation uses.
Step 6 / 8
Run the pipeline online with the public known-answer sample. Check microphone capture, source transcript, target translation and response delay.
Copy this exactly
python translate_live.pyCheck it worked
A fluent reviewer records errors in names, numbers, negation, omissions, meaning and unacceptable delay.
Step 7 / 8
Stop the program, disconnect Wi-Fi, cable and hotspot, restart the device if practical, and run the same public sample again.
Copy this exactly
python translate_live.pyCheck it worked
The pipeline starts and completes without a download or network request while all visible network routes are disconnected.
Step 8 / 8
Make a go or no-go decision. Require a fluent reviewer during operational use, keep original audio where authorised, and record model, settings, language pair, licence, date and reviewer.
Check it worked
The work log contains a recovery route to an interpreter or manual transcription.
How to know the whole thing worked
The known-answer sample runs while disconnected, a fluent reviewer records language and latency errors, and the team can switch to a human route without losing source audio.
What goes wrong, and what to do about it
- The platform or Python version is unsupported. Use another approved device rather than old dependencies.
- A model or voice detector downloads at runtime. Return to setup and do not use operational audio.
- The input is Sorani speech. Stop because Whisper does not support that recognition path.
- Meaning, names, numbers or latency fail the public test. Use an interpreter or batch human review.
How well it works in your language
Arabic (Modern Standard) · Iraqi Arabic · Kurdish (Sorani)
Arabic (Modern Standard)
Whisper recognises Arabic and NLLB supports relevant Arabic text codes, but output remains a draft requiring fluent review.
Iraqi Arabic
No reliable universal accuracy or latency figure applies to Iraqi speech in this setup. Test actual speakers, microphone and room.
Kurdish (Sorani)
NLLB includes ckb_Arab for Sorani text. Whisper does not list Kurdish speech recognition, so this can translate supported Arabic speech into draft Sorani text but cannot listen to Sorani.
What that rests on
The NLLB model card gives research, licence, domain and certified-translation limits. Whisper source lists Arabic but not Kurdish. Neither proves acceptable quality in your context.
Software named in this recipe
- RealtimeSTT
- faster-whisper
- silero-vad
- CTranslate2
- NLLB-200 distilled 600M
- PyTorch
Sources
- https://github.com/cdrorgtr/cdr-ai/tree/main/simultane-ceviri · Maintained CDR workshop module and live script.
- https://pypi.org/pypi/RealtimeSTT/json · Current RealtimeSTT package metadata and extras.
- https://raw.githubusercontent.com/KoljaB/RealtimeSTT/master/docs/installation.md · RealtimeSTT installation guidance.
- https://raw.githubusercontent.com/KoljaB/RealtimeSTT/master/docs/configuration.md · RealtimeSTT recorder configuration.
- https://download.pytorch.org/whl/cpu/torch/ · Official CPU-only PyTorch wheel index.
- https://opennmt.net/CTranslate2/guides/transformers.html · CTranslate2 conversion and NLLB inference guidance.
- https://huggingface.co/facebook/nllb-200-distilled-600M · NLLB model card, licence, intended use and limitations.
- https://raw.githubusercontent.com/openai/whisper/main/whisper/tokenizer.py · Whisper language table, including Arabic and no Kurdish entry.
- https://huggingface.co/openai/whisper-large-v3 · Whisper model card and limitations.
- https://arxiv.org/abs/2402.08021 · Primary research on harmful Whisper hallucinations.
A CDR original, written for POINT Conference Iraq 7. Checked against vendor pages and package registries in August 2026; the sources are listed on this page.
What we could not verify
This pipeline was not tested here on workshop laptops, microphones, Iraqi speech or target-language reviewers. Package support changes. NLLB is a research model with a non-commercial licence and domain limits. A disconnected test verifies only that run, not the device or room.