Skip to main content

TTL Barcoder

PyPI

Generate and decode binary barcodes over TTL signals to synchronize multiple data acquisition systems.

→ Full documentation Barcodes encode a timestamp or random value as a sequence of timed HIGH/LOW pulses, transmittable over any digital output.

Quick Start

from ttl_barcoder.core import BarcodeTTL, BarcodeConfig, TTLType, TimestampPrecision

# Timestamp barcode (default) — encodes current time at ms precision
barcoder = BarcodeTTL()
sequence = barcoder.get_sequence()   # [(level: bool, duration_ms: float), ...]

# Random barcode
config = BarcodeConfig(ttl_type=TTLType.random, barcode_bits=32)
barcoder = BarcodeTTL(config)
sequence = barcoder.get_sequence()

Bpod

from ttl_barcoder.core import BarcodeTTL
from ttl_barcoder.hardware.bpod import inject_barcode_states

barcoder = BarcodeTTL()
sequence = barcoder.get_sequence()
inject_barcode_states(sma, sequence, bnc_channel='BNC1', first_state_name='send_sync', last_state_name='next')

Raspberry Pi GPIO

from ttl_barcoder.hardware.pigpio import send_barcode_sequence

send_barcode_sequence(barcoder.get_sequence(), pin=18)

Installation

pip install ttl-barcoder          # core only
pip install ttl-barcoder[bpod]    # + Bpod
pip install ttl-barcoder[pigpio]  # + Raspberry Pi GPIO

Configuration

BarcodeConfig is a Pydantic model — all fields are validated on construction.

from ttl_barcoder.core import BarcodeConfig, TTLType, TimestampPrecision

config = BarcodeConfig(
    ttl_type=TTLType.timestamp,            # or TTLType.random
    barcode_bits=37,                        # 16–64 bits
    timestamp_precision=TimestampPrecision.milliseconds,  # s / ms / us
    bit_duration_ms=35.0,
    init_duration_ms=10.0,
    tolerance=0.25,
)

Presets: default, high_speed, conservative, high_precision, random

from ttl_barcoder.core import get_preset
config = get_preset("conservative")
Preset Bits Precision Bit duration TX duration Coverage
default 37 ms 35 ms 1355 ms 4.4 yr
high_speed 32 ms 25 ms 848 ms 49 days
conservative 37 ms 50 ms 1940 ms 4.4 yr
high_precision 42 us 50 ms 2190 ms 51 days

Architecture

ttl_barcoder/
├── core/
│   ├── config.py        # BarcodeConfig (Pydantic), TTLType, TimestampPrecision
│   ├── generator.py     # TTLGenerator ABC → TimestampGenerator / RandomGenerator
│   ├── encoder.py       # bits → (level, duration_ms) timing sequence
│   ├── decoder.py       # edge timestamps → barcode value
│   └── barcode_ttl.py   # BarcodeTTL — main interface combining the above
└── hardware/
    ├── bpod/            # Bpod StateMachine integration
    └── pigpio/          # Raspberry Pi GPIO via pigpio
  • The generator is selected via a factory (create_generator(config)) based on TTLType.
  • TimestampGenerator quantizes Unix time at the configured precision
  • RandomGenerator draws from a numpy RNG. Both share the same encode_bits / max_value interface on the TTLGenerator base class.

Examples

  • examples/dry_simulation.py — full walkthrough, no hardware needed
  • examples/bpod_loopback.py — Bpod StateMachine with loopback test
  • examples/pigpio_send.py — Raspberry Pi GPIO transmission

Contributing

  1. Fork and create a feature branch
  2. Add tests for new functionality
  3. Run pytest
  4. Submit a pull request

Acknowledgments

  • Based on barcode synchronization from University of Colorado ONE Core
  • Inspired by Open Ephys protocols
  • Built for the neuroscience and scientific DAQ community

License & sources

This software is released under the BSD 3-Clause License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ttl_barcoder-0.5.0.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ttl_barcoder-0.5.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file ttl_barcoder-0.5.0.tar.gz.

File metadata

  • Download URL: ttl_barcoder-0.5.0.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ttl_barcoder-0.5.0.tar.gz
Algorithm Hash digest
SHA256 1c8652d23c4bff516f50105b55966da3a526ec397205405a68046e13890df937
MD5 2293e582474d7aa7fb5331997be8b2fe
BLAKE2b-256 ebfe74dd74788a1e4b93509af85c246f2156a509b846be453a6db082f58190ab

See more details on using hashes here.

File details

Details for the file ttl_barcoder-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: ttl_barcoder-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for ttl_barcoder-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e7a3696639a148a44ee2bc403588b665abd4510e55dddcb90b5d2dac154ba46
MD5 2ca9ada35e71a59a077a39433e095674
BLAKE2b-256 c701b4b453307f664bf805b32b2be29ef550c5be7ebe00a78968935f2042fb30

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page