remotion-dev/remotion · error · TypeError
repetitionPenalty must be a finite number greater than 0.
Error message
repetitionPenalty must be a finite number greater than 0.
What it means
transcribe() validates the decoding option repetitionPenalty: it must be a finite number greater than 0 (values <= 0 or non-finite are meaningless penalties). A TypeError is thrown during option validation before the model runs.
Source
Thrown at packages/whisper-webgpu/src/transcribe.ts:99
if (typeof forceFullSequences !== 'boolean') {
throw new TypeError('forceFullSequences must be a boolean.');
}
if (typeof doSample !== 'boolean') {
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')) {View on GitHub (pinned to b2f4e34732)
Solutions
- Use repetitionPenalty >= 1.0 (1.0 disables the penalty)
- Parse with Number() and verify Number.isFinite before calling
- If no penalty is desired, pass 1 rather than 0
Example fix
// before
await transcribe({repetitionPenalty: 0});
// after
await transcribe({repetitionPenalty: 1.2}); Defensive patterns
Strategy: validation
Validate before calling
if (!Number.isFinite(repetitionPenalty) || repetitionPenalty <= 0) throw new Error('repetitionPenalty must be a finite number > 0'); Type guard
const isValidPenalty = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v) && v > 0;
Try / catch
try {
await transcribe(options);
} catch (e) {
if (e instanceof TypeError && e.message.includes('repetitionPenalty')) {
options.repetitionPenalty = 1.0; // neutral
} else throw e;
} Prevention
- Remember 1.0 means no penalty — never use 0 to disable it
- Validate ranges centrally when loading decoder settings
- Avoid spreading unvalidated config objects into transcribe options
When it happens
Trigger: Passing repetitionPenalty: 0 (expecting 'no penalty'), a negative value, NaN/Infinity, or an unparsed string.
Common situations: Confusing penalty semantics where 1.0 means neutral; config values stored as strings; uninitialized variables yielding NaN.
Related errors
- temperature must be a finite number greater than 0.
- topK must be a non-negative integer.
- noRepeatNgramSize must be a non-negative integer.
- 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/11d77710d263380e.
Report an issue: GitHub.