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

The steps

Controlled route for sensitive material
  • 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

  1. Run the hardware and operating system preflight before installing anything.
  2. Download and test the required software and models before sensitive work.
  3. Disconnect the network and confirm the pipeline still runs with a public sample.
  4. Process a short segment with , then compare transcript, translation, and source audio.
  5. Ask a fluent reviewer to check names, numbers, meaning, omissions, and dialect.

Five checks before you finish

  1. Data: Is the audio in the correct lane, and are device storage and backups approved for it?
  2. Input: Are the source language, microphone, model, and hardware supported and tested?
  3. Output: Are names, numbers, negation, quotations, and key meaning correct?
  4. Human: Has a fluent person reviewed the original audio and the translation?
  5. 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

  1. 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.

  2. 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 wheel

    Check it worked

    The activated environment reports the expected Python and PyTorch versions, and PyTorch reports CPU operation on a non-GPU laptop.

  3. 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.

  4. 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.

  5. 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.py

    Check 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.

  6. 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.py

    Check it worked

    A fluent reviewer records errors in names, numbers, negation, omissions, meaning and unacceptable delay.

  7. 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.py

    Check it worked

    The pipeline starts and completes without a download or network request while all visible network routes are disconnected.

  8. 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

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.

All recipes