﻿# Output Multimodal Transfer/Decoder

OMTD is a proposed output-side companion library for llama.cpp.

It mirrors MTMD conceptually, but runs in the opposite direction:

```text
MTMD: media input -> embeddings/tokens -> language model
OMTD: language model output -> output companion -> generated media
```

This framework patch adds only the library boundary. Model-specific output
implementations, such as audio, image, or video generators, should be layered on
top in separate patches.

## Intended Frontend Support

The intended frontend path is:

```text
llama-cli
llama-server
llama-tts
    |
    v
  libomtd
    |
    v
concrete output backend
```

Planned frontend responsibilities:

- `llama-cli`: accept `--omtd FILE` for local output generation from a prompt.
- `llama-server`: accept `--omtd FILE` and expose output-generation endpoints.
- `llama-tts`: use OMTD as the shared TTS/audio-output backend path.

This OMTD-only patch does not wire those flags yet. It creates the stable shared
library and API first. The frontend wiring should be a separate patch, followed
by model-specific backend patches.

## Review Path

Recommended patch order:

```text
1. OMTD core library and docs
2. Frontend wiring for llama-cli, llama-server, and llama-tts
3. First concrete OMTD backend
```

This keeps the generic output-runtime boundary reviewable without tying it to a
specific model implementation.

## Responsibilities

OMTD owns:

- A public C API for output companion detection.
- A public C API for structured output generation requests.
- Common status/error reporting for output generation backends.
- Placeholder modality and model-type enums for future backends.

OMTD does not own:

- Input media processing. That remains MTMD.
- `--mmproj` handling.
- A concrete output model in this framework-only patch.
- Application-specific file or HTTP response handling.

## Current API

Detection:

```text
omtd_is_output_companion_gguf(path)
omtd_get_model_type(path)
omtd_get_model_modality(path)
```

Audio generation boundary:

```text
omtd_audio_generate_file(params, error, error_size)
```

The audio generation entry point validates required fields and returns
`OMTD_STATUS_UNSUPPORTED` until a concrete audio backend is added.

## Diagram

```text
llama.cpp frontend
        |
        v
  OMTD public API
        |
        +--> companion detection
        |
        +--> structured output request
        |
        v
 model-specific output backend
   added by later patches
        |
        v
generated media output
```

## Relationship To MTMD

| Area | MTMD | OMTD |
| --- | --- | --- |
| Direction | input -> model | model -> output |
| Media role | user-provided input media | generated output media |
| File role | input projector | output companion |
| API style | tokenize/encode input | generate/decode output |
