Throughlinepost ← Back to the site

Open-source components: written offer and relinking instructions

Applies to: Throughline 3.0.0 · Last updated: 2026-08-16

Throughline is proprietary software that redistributes open-source components. Some of those are licensed under the GNU Lesser General Public License, which grants you two rights this document exists to make real: the right to the source of those components, and the right to replace them with your own build.

The full component inventory is LICENSE-INVENTORY.md, generated from the build environment rather than maintained by hand. Verbatim licence texts are in licenses/.


1 · Written offer for source code

For three years from the date you received this copy of Throughline, we will supply, to anyone who asks, the complete corresponding source code for the LGPL-licensed components listed in §2, together with the exact scripts and configuration used to build them — for no more than our cost of physically performing the distribution.

Request it from: [email protected] · PO Box 123, Flagstaff, AZ 86002, USA

This offer is valid for the components as shipped in your version. Quote the version string from Throughline → About so the correct archive is sent.

2 · LGPL components in this application

component licence linkage
Qt 6 (via PySide6 / shiboken6) LGPL-3.0 dynamic
FFmpeg — libavcodec, libavformat, libavfilter, libavutil, libswresample, libswscale LGPL-2.1-or-later dynamic
libsndfile LGPL-2.1 dynamic
libsoxr LGPL-2.1 dynamic

FFmpeg is built without --enable-gpl and without --enable-nonfree. No GPL-licensed FFmpeg component — x264, x265, libfdk-aac — is present or callable. Encoding uses Apple VideoToolbox and the LGPL-licensed native encoders. The exact configure line ships in the source archive under §1.

Everything else in the application is under a permissive licence (MIT, BSD, Apache-2.0, ISC, MPL-2.0, PSF) and needs attribution only, which LICENSE-INVENTORY.md provides.

3 · Replacing an LGPL library with your own build

The LGPL guarantees you may modify the covered libraries and relink the application against your version. Being straight about the platform: macOS code signing makes this awkward, and pretending otherwise would make this section useless. Here is a procedure that actually works.

The bundled libraries live in:

Throughline.app/Contents/Frameworks/ffmpeg-bin/     FFmpeg dylibs, libsndfile, libsoxr
    Throughline.app/Contents/Frameworks/PySide6/Qt/lib/ Qt frameworks
    

They are loaded through @loader_path, so a replacement of the same name and soname is picked up with no other change.

  1. Copy the app somewhere writable — do not edit the installed one.

  2. Build your replacement with a compatible ABI and the same install-name. For FFmpeg, start from the configure line in the §1 archive.

  3. Swap the dylib into the directory above, keeping the filename and the symlink chain (libavcodec.62.dylib → libavcodec.62.11.100.dylib).

  4. Re-sign the bundle. This is the step the platform forces on you: a hardened, signed application will refuse a library it did not sign. Sign inside-out with your own identity, or ad-hoc:

    codesign --remove-signature "Throughline.app"
        find "Throughline.app/Contents/Frameworks" -name "*.dylib" \
             -exec codesign -f -s - {} \;
        codesign -f -s - --deep "Throughline.app"
        xattr -dr com.apple.quarantine "Throughline.app"
        

    Ad-hoc signing removes our Developer ID, so Gatekeeper will treat the result as unidentified software — expected, and the price of exercising this right. The application’s own behaviour does not change.

  5. Run it. If it launches and syncs, the relink worked.

We cannot support a modified build, and modifying it does not affect your rights under §1. If step 4 fails on a future macOS release, write to the §1 address and we will publish a corrected procedure — the obligation is to make relinking possible, and that obligation does not lapse because Apple changed something.

4 · Components with a copyleft licence that are NOT redistributed

Listed so the record is complete, and because their absence is deliberate.

component licence why it is absent
PyQt6 GPL-3.0 Excluded from the bundle by throughline.spec and enforced by tests/test_no_pyqt6.py. The application uses LGPL PySide6. PyQt6 exists in the development environment only.
Nuitka AGPL-3.0 A build tool. Its Runtime Library Exception v1.0 — an additional permission under AGPLv3 §7 — expressly allows compiled output (“Target Code”) to be conveyed under terms of our choice. We ship the output, never a modified Nuitka.
PyInstaller GPL-2.0-or-later with the bootloader exception A build tool, whose licence expressly permits building and distributing non-free programs.
psycopg LGPL-3.0 Removed from the bundle 2026-08-16. It arrived as a transitive dependency of a server-side task queue and was never imported by the application.
untrunc, djifix, photorec GPL-2.0 Not bundled. The repair engine can drive them as separate processes if a user installs them, and says plainly in the interface when they are unavailable.

5 · Model attribution

Two shipped models are licensed CC-BY-4.0 and require attribution: NVIDIA’s Parakeet TDT 0.6B v3, and pyannote community-1. Attribution appears in Help → About and is embedded in exported transcripts. Removing it would breach the licence. See AI-TRANSPARENCY.md §4.