Nodes/arkennemasis - ChatGPT / Codex / fal AI nodes/arkennemasis fal · ElevenLabs Forced Alignment · $0.22/hour
ComfyUI Node

arkennemasis fal · ElevenLabs Forced Alignment · $0.22/hour

Real word timings for captions, and the $0.22 minimum that bites

By Hishamahmer·Created 3 months ago·Updated 9 days ago· 11
arkennemasis fal · ElevenLabs Forced Alignment · $0.22/hour
  • audio
  • characters
  • loss
  • words
  • info
◄text►
◄max_cost_usd20.0►
◄reuse_identical_runtrue►
◄extra_json►
◄max_concurrent1►

Karaoke-style captions live or die on one thing: knowing when each word is actually spoken. This pack already has a way to estimate that from the script and the clip's duration, and its own documentation is honest that the estimate tracks speech closely while drifting when the model ad-libs. Forced alignment is the other approach entirely - you hand over the audio and the exact transcript, and you get back real times.

If you're burning subtitles that highlight word by word, or cutting a video to a spoken script, this is the node that makes it frame-accurate instead of approximately right. Nothing runs locally; the alignment happens on fal.

How it works

Forced alignment is not transcription. Transcription figures out the words; alignment assumes you already know them and solves for where they sit in the audio. That's why the transcript is a required input and why the result is precise - the model isn't guessing at text, only at timing.

Both files go up to fal's CDN, one billed call comes back, and the response is written into the ledger at output/fal/_requests.jsonl alongside the other outputs. There's no downloaded media file for this node, because the payload is data, not sound.

The inputs

  • audio - the recording to align. The endpoint accepts up to 3 GB and up to ten hours of audio, which tells you the intended use is long-form: interviews, lectures, audiobooks.
  • text - the transcript. Get this right; a transcript that doesn't match the audio is the one thing that breaks alignment, and the tooltip's 3 GB ceiling is not a promise that misaligned text will be forgiven.

That's it. No language code, no speaker settings, no dials.

Outputs, all surfaced as JSON-ish strings:

  • characters - character-level timing.
  • words - word-level timing. This is the one you'll actually use.
  • loss - a float scoring how well the alignment fitted. Useful as a sanity check in a batch: a loss that looks wildly different from the others is your tell that the transcript and audio disagreed.
  • info - request id, cost estimate, fal's full answer.

There's no AUDIO output here, which surprises people. Alignment gives you an index into audio you already have, so wire the original clip to your subtitle or assembly node and the words string to whatever consumes the timings.

Money - read this before a short clip

$0.22 per hour of input audio, rounded upwards to the nearest hour. That's the whole billing rule and it has one sharp edge: a twelve-second soundbite costs the same $0.22 as a fifty-minute podcast. For long-form work it's a rounding error. For a workflow that aligns a clip per scene, it's the most expensive thing you're doing and you should be batching scenes into one alignment pass.

The max_cost_usd cap defaults to $20, which is about 90 hours - it will never trip here. The real guardrail is your own batching.

Install

Manager → search comfyui-arkennemasis, or:

cd ComfyUI/custom_nodes
git clone https://github.com/Hishamahmer/comfyui-arkennemasis

Restart, then FAL_KEY=your-key in the .env next to run_nvidia_gpu.bat (or the one in the ComfyUI folder). No models to download, no Python packages for the fal provider.

Common issues & troubleshooting

The timings are nonsense. Nine times out of ten the transcript and the audio don't match - a different edit, an extra sentence, a summarised version. Give it the exact words as spoken.

loss is much higher than on your other clips. Same cause. Compare across a batch rather than reading a single number in isolation.

You expected an audio file back. This node returns timing data, not media. Wire the original audio onward separately.

A 20-second clip cost $0.22. Rounding up to the nearest hour, exactly as advertised. Batch your short alignments into a single longer request, or accept it.

A 3 GB upload seems stuck. Big files take a while to move, and the node shows status while it works. If ComfyUI dies mid-run, the job continues on fal - grab the request id from output/fal/_requests.jsonl and use fal Recover Result, which costs nothing.

Categoryarkennemasis/fal/Audio/ElevenLabs

Inputs (6)

NameTypeDefaultDescription
audioAUDIOURL of the audio file to align. The file can be up to 3 GB and the audio can be up to 10 hours long.
textSTRINGTranscript to align with the audio
max_cost_usdoptFLOAT20.00–100000Safety cap. If the estimated cost of this run is above this many US dollars the node stops BEFORE sending anything to fal. 0 = no cap.
reuse_identical_runoptBOOLEANtrueIf these exact inputs (the settings AND the same pictures/clips/audio) were already paid for and the files are still in output/fal, return them instead of paying again - also after a ComfyUI restart. Turn off for a fresh take with the same settings.
extra_jsonoptSTRINGAdvanced: a JSON object merged into the request last, for any fal field this node has no box for. Example: {"seed": 7}. Leave empty normally.
max_concurrentoptINT11–32How many paid fal calls may run at the same time in one run, across every fal node. 1 (default) = one after another. This node starts its paid part only while fewer than this many fal calls are running. Once any fal node fails, the ones still waiting are not started, so nothing more is billed.

Outputs (4)

NameTypeDescription
charactersSTRING—
lossFLOAT—
wordsSTRING—
infoSTRINGJSON: request id, cost estimate, saved files and fal's full answer.