OttoAlign2 is a local web application for aligning target-session audio to a reference track in AAF or Pro Tools PTX sessions. The interface, logs, and reports are in French; source-code identifiers are in English.
- Accepts a reference ZIP and a target ZIP, each containing one
.aafor.ptxsession and its siblingAudio Filesdirectory. - Finds the reference clip with the largest timeline overlap for each target clip.
- Uses GCC-PHAT correlation to determine the time correction, with a default search range of +/-150 ms.
- Groups placements that use the same source WAV, selects a robust anchor for the group, and applies a consistent correction to preserve phase coherence.
- Writes
OttoAligned_Result.zipwith the output session, required media, andOttoAlign_Report.txt.
OttoAlign2 is non-destructive: the input archive is never modified.
For every eligible PTX placement, OttoAlign2 renders an independent WAV and
uses pt_api.relink_clip() to retarget only that placement. The source WAV and
the original PTX remain untouched. Clips that cannot be aligned, including
clips with less than 50 ms of overlap, are reported and left unchanged.
PTX relinking depends on the layouts supported by pt_api. The project is
currently tested with the API source at commit
99e9fc6a0d405e675e465db372ce2edd2e31273d (the 1.4.2 relink-edge-case
build). PTX output remains experimental and must be opened and validated in
Pro Tools before use in production. A successful OttoAlign job only confirms
that the application completed; it is not a Pro Tools compatibility guarantee.
The AAF path creates WAVs suffixed _ottoaligned, updates locators in a copy
of the AAF, then runs orchestrator.py to finalize the result. Complex
DAW-specific metadata, effects, clip gain, mute state, and transitions are not
guaranteed to be preserved.
- Python 3.11
- WAV media with matching sample rates between each reference/target pair
- A local checkout of the current
pt_apisource during development
Install the application dependencies:
python -m pip install -r requirements.txt
python -m pip install -e Y:\pt_api
python server.pyOpen http://localhost:8081.
For a portable or deployed installation, install the same pt_api commit
specified in requirements.txt; do not rely on an unrelated globally installed
version.
Each uploaded ZIP must contain exactly one complete session and its adjacent
Audio Files directory. Nesting inside the archive is allowed, but the
session/folder pair must be unambiguous. The HTTP request limit is 2 GB.
The output archive contains:
OttoAligned.ptxorOttoAligned.aafAudio Files/OttoAlign_Report.txt
For PTX, both original and newly rendered WAVs are included because the copied session can reference either set.
- PTX processing supports WAV media only.
- Clips with less than 0.05 seconds of overlap are skipped and reported.
- OttoAlign does not resample; matching sample rates are required.
- Alignment is calculated from channel 1 and the same correction is applied to every channel of that media.
- Boundary samples may be zero-filled when the required correction falls outside the available audio.
- PTX renders a full independent WAV per aligned placement, which can make the result substantially larger.
- Job state is held in Flask process memory; restarting the server clears it.
Copyright (C) 2026 Sebastien Bedard.
OttoAlign2 is licensed under the GNU Affero General Public License v3.0 or later. See the complete license text at https://www.gnu.org/licenses/agpl-3.0.html.
