Skip to content

CLI

Two identical console scripts are installed: csv-trans and csv_trans.

csv-trans -f catalog.csv -sl en -tl fr --provider echo --output catalog.fr.csv

Only -f, -sl, and -tl are required. Credentials are never passed as literal arguments — there is no --api-key flag; keys come from the environment.

FlagDescription
-f, --file, --file-pathInput CSV path.
-sl, --source-languageSource language code/name, or auto.
-tl, --target-languageTarget language code/name.
FlagType / defaultDescription
-o, --outputpathOutput CSV path (default translated_<target>_<name>.csv).
-fs, --delimiter, --file-separatorcharOne-character delimiter; auto-detected when omitted.
--columnsnames / #NColumn names or zero-based indexes written as #N. Space-separated.
--translate-headersflagAlso translate the selected columns’ headers.
--encodingstrInput encoding; default is BOM detection / strict UTF-8.
--output-encodingstr (utf-8)Output encoding.
--overwriteflagReplace an existing output.
FlagType / defaultDescription
--providerid (repeatable)Primary provider ID; repeat or comma-separate to append fallbacks. Default google-free.
--fallback-providerid (repeatable)Explicit fallback provider ID.
--modelstrModel for the primary LLM provider.
--base-urlurlBase URL for the primary LLM provider.
--api-key-envnameRead the primary provider’s API key from this env var.
--headerNAME=VALUE (repeatable)Extra HTTP header for the primary provider. Sensitive header names are rejected.
--timeoutfloat (60.0)HTTP timeout in seconds (must be finite and > 0).

--base-url, --model, --api-key-env, and --header apply only to the primary provider; fallbacks use their own provider-specific environment variables.

FlagType / defaultDescription
--privacypublic | restricted | local-only (public)Network boundary.
--allow-providername (repeatable)Provider allowed under restricted.
--approved-local-hosthost (repeatable)Exact non-loopback host approved under local-only.

Under restricted, if you pass --provider explicitly and no --allow-provider, the chain’s providers are allowed automatically.

FlagType / default
--batch-sizeint (20)
--max-charsint (3500)
--min-adaptive-charsint (32)
--max-field-charsint (67108864, 64 MiB)
--max-row-charsint (134217728, 128 MiB)
--max-columnsint (10000)
--max-sample-charsint (16777216, 16 MiB)
--max-pending-charsint (67108864, 64 MiB)
--max-failure-detailsint (10000)
FlagType / defaultDescription
--max-retriesint (2)Transient-error retries per provider.
--malformed-retriesint (1)Corrective retries for invalid model output.
--backoff-basefloat (0.5)Base seconds for exponential backoff.
--max-backofffloat (8.0)Cap on backoff delay.
--allow-empty-translationsflagAccept an empty result for non-empty source text.
FlagType / defaultDescription
--reportpathWrite the structured JSON result here.
--snapshot-directorypathDirectory for the transient plaintext source snapshot (default: beside the input).
--dry-runflagInspect selection without translating or writing a CSV.
--jsonflagPrint the content-free result as JSON to stdout.
--quietflagSuppress the human summary (and the default-provider warning).
--versionflagPrint the version and exit.

--provider (and CSV_TRANS_PROVIDER) accept these aliases, each mapping to a canonical provider ID:

Alias(es)Canonical IDAdapter
google-free, google, free, defaultgoogle-freeGoogle no-key (experimental)
echo, identityechoOffline echo
anthropic, claudeanthropicAnthropic Messages
openaiopenaiOpenAI-compatible (official host default)
openai-compatibleopenai-compatibleOpenAI-compatible (explicit base URL)
locallocalOpenAI-compatible local
qwenqwenOpenAI-compatible
deepseekdeepseekOpenAI-compatible
ollamaollamaOpenAI-compatible local
llama.cppllama.cppOpenAI-compatible local
vllmvllmOpenAI-compatible local
lm-studiolm-studioOpenAI-compatible local
localailocalaiOpenAI-compatible local

An unknown provider ID is a fatal error (exit code 1).

Credentials and per-provider settings are read from the environment; the primary provider’s --model, --base-url, and --api-key-env override them.

VariableMeaning
CSV_TRANS_PROVIDERDefault provider ID or comma-separated chain when --provider is omitted.
CSV_TRANS_OPENAI_API_KEYCredential for the official OpenAI host.
CSV_TRANS_OPENAI_BASE_URLOptional base-URL override for the openai ID.
CSV_TRANS_OPENAI_MODELModel for the openai ID.
CSV_TRANS_OPENAI_CUSTOM_API_KEYCredential when openai points at a non-OpenAI host (optional).
CSV_TRANS_OPENAI_COMPATIBLE_API_KEY / _BASE_URL / _MODELGeneric compatible endpoint (base URL required, key optional).
CSV_TRANS_QWEN_API_KEY / _BASE_URL / _MODELqwen alias.
CSV_TRANS_DEEPSEEK_API_KEY / _BASE_URL / _MODELdeepseek alias.
CSV_TRANS_LOCAL_API_KEY / _BASE_URL / _MODELlocal alias (key optional).
CSV_TRANS_OLLAMA_API_KEY / _BASE_URL / _MODELollama alias (key optional).
CSV_TRANS_LLAMA_CPP_API_KEY / _BASE_URL / _MODELllama.cpp alias (key optional).
CSV_TRANS_VLLM_API_KEY / _BASE_URL / _MODELvllm alias (key optional).
CSV_TRANS_LM_STUDIO_API_KEY / _BASE_URL / _MODELlm-studio alias (key optional).
CSV_TRANS_LOCALAI_API_KEY / _BASE_URL / _MODELlocalai alias (key optional).
CSV_TRANS_ANTHROPIC_API_KEYCredential for the official Anthropic host.
CSV_TRANS_ANTHROPIC_CUSTOM_API_KEYCredential for a non-Anthropic Messages endpoint.
CSV_TRANS_ANTHROPIC_BASE_URLOptional Anthropic-compatible base-URL override.
CSV_TRANS_ANTHROPIC_MODELAnthropic model name.

The generic OPENAI_API_KEY and ANTHROPIC_API_KEY are lower-precedence fallbacks considered only when the resolved destination is the exact official vendor host; the matching CSV_TRANS_* name wins when both are set. They are never forwarded to a generic or custom endpoint.

For any OpenAI-family alias other than openai, a base URL is required (via --base-url on the primary, or the alias’s _BASE_URL variable), and a model is required (via --model or the alias’s _MODEL variable).

CodeMeaning
0Success or dry run.
2Partial output (some cells preserved). argparse also uses 2 for invalid CLI syntax.
1Fatal error (input/config/privacy/write error), an unknown provider, or a cancelled run.

Offline, no key, private mode:

csv-trans -f catalog.csv -sl en -tl fr \
--provider echo --output catalog.fr.csv --privacy local-only --quiet

Official OpenAI, restricted privacy, from the environment:

export CSV_TRANS_OPENAI_API_KEY="sk-..."
export CSV_TRANS_OPENAI_MODEL="gpt-4o-mini"
csv-trans -f catalog.csv -sl en -tl fr --provider openai --privacy restricted

Local Ollama model, local-only:

export CSV_TRANS_OLLAMA_BASE_URL="http://localhost:11434/v1"
export CSV_TRANS_OLLAMA_MODEL="qwen3"
csv-trans -f confidential.csv -sl en -tl ko --provider ollama --privacy local-only

Provider chain (fallback only after bounded recovery and within privacy policy):

csv-trans -f catalog.csv -sl en -tl es \
--provider openai-compatible,google-free --privacy public

Explicit columns, translated headers, JSON output, and a report:

csv-trans -f catalog.csv -sl en -tl de \
--provider echo --columns title description --translate-headers \
--report catalog.report.json --json