remotion-dev/remotion · error · TypeError
noRepeatNgramSize must be a non-negative integer.
Error message
noRepeatNgramSize must be a non-negative integer.
What it means
transcribe() validates the decoding option noRepeatNgramSize: it must be an integer >= 0 (0 disables the constraint). Fractional, negative, or non-number values are rejected with a TypeError during option validation.
Source
Thrown at packages/whisper-webgpu/src/transcribe.ts:105
throw new TypeError('doSample must be a boolean.');
}
if (!Number.isFinite(temperature) || temperature <= 0) {
throw new TypeError('temperature must be a finite number greater than 0.');
}
if (!Number.isInteger(topK) || topK < 0) {
throw new TypeError('topK must be a non-negative integer.');
}
if (!Number.isFinite(repetitionPenalty) || repetitionPenalty <= 0) {
throw new TypeError(
'repetitionPenalty must be a finite number greater than 0.',
);
}
if (!Number.isInteger(noRepeatNgramSize) || noRepeatNgramSize < 0) {
throw new TypeError('noRepeatNgramSize must be a non-negative integer.');
}
if (task !== 'transcribe' && task !== 'translate') {
throw new TypeError('task must be either "transcribe" or "translate".');
}
const {multilingual, supportsTranslation} = getModelInfo(model);
if (task === 'translate' && !supportsTranslation) {
throw new Error(`The model "${model}" does not support translation.`);
}
if (multilingual && (language === undefined || language === 'auto')) {
throw new Error(
`The language option is required for the multilingual model "${model}" because automatic language detection is not supported.`,
);
}
if (View on GitHub (pinned to b2f4e34732)
Solutions
- Pass an integer >= 0 (0 disables n-gram repetition blocking)
- Sanitize with Math.max(0, Math.round(Number(raw)))
- Validate option types when loading from JSON config files
Example fix
// before
await transcribe({noRepeatNgramSize: -1});
// after
await transcribe({noRepeatNgramSize: 0}); // disabled, or e.g. 3 Defensive patterns
Strategy: validation
Validate before calling
if (!Number.isInteger(noRepeatNgramSize) || noRepeatNgramSize < 0) throw new Error('noRepeatNgramSize must be a non-negative integer'); Type guard
const isNonNegInt = (v: unknown): v is number => typeof v === 'number' && Number.isInteger(v) && v >= 0;
Try / catch
try {
await transcribe(options);
} catch (e) {
if (e instanceof TypeError && e.message.includes('noRepeatNgramSize')) {
options.noRepeatNgramSize = 0;
} else throw e;
} Prevention
- Use 0 to disable n-gram blocking, not null or negative values
- Normalize all integer options with Math.round/Math.max at load time
- Type sampling options as integers so TS flags float assignments
When it happens
Trigger: Passing noRepeatNgramSize as a float, negative number, NaN, or string from unconverted config input.
Common situations: Numeric strings from JSON/env config; computing the value dynamically with possible NaN; unclear about 0 being allowed to disable n-gram blocking.
Related errors
- temperature must be a finite number greater than 0.
- topK must be a non-negative integer.
- repetitionPenalty must be a finite number greater than 0.
- Invalid whisper model ${model}. Available: ${models.join(',
- Non-semantic version provided. Only releases of Whisper.cpp
AI-assisted analysis of remotion-dev/remotion@b2f4e34732 (2026-09-09).
Data as JSON: /api/errors/b312be41f57171e6.
Report an issue: GitHub.