Multimedia Interpolate (lexigram-multimedia-interpolate)
Video frame-rate interpolation for the Lexigram Framework — a local RIFE reference-server backend that doubles or quadruples a clip’s frame rate by synthesizing midpoint frames.
Overview
Section titled “Overview”lexigram-multimedia-interpolate synthesizes intermediate frames between two input frames (or between frames of a video) using a RIFE reference server, and registers a VideoInterpolationService for frame-level video interpolation when a VideoProcessor is available in the container.
Full documentation: docs.lexigram.dev
Install
Section titled “Install”uv add lexigram-multimedia-interpolate# Optional extrasuv add "lexigram-multimedia-interpolate[rife-server]" # RIFE server deps (torch)Quick Start
Section titled “Quick Start”from lexigram import Applicationfrom lexigram.di.module import Module, modulefrom lexigram.multimedia.interpolate import InterpolationModulefrom lexigram.contracts.multimedia.protocols import InterpolationProviderfrom lexigram.contracts.multimedia.types import InterpolationRequest, MediaAsset
@module(imports=[InterpolationModule.configure()])class AppModule(Module): pass
async def main() -> None: async with Application.boot(modules=[AppModule]) as app: interpolate = await app.container.resolve(InterpolationProvider) frame_a = MediaAsset(mime_type="image/png", provider="local", bytes_data=b"<png>") frame_b = MediaAsset(mime_type="image/png", provider="local", bytes_data=b"<png>") result = await interpolate.interpolate( InterpolationRequest(frame_a=frame_a, frame_b=frame_b) ) if result.is_ok(): midframe = result.unwrap() # MediaAsset — synthesized midpoint frame
if __name__ == "__main__": import asyncio
asyncio.run(main())Configuration
Section titled “Configuration”Zero-config usage: Call
InterpolationModule.configure()with no arguments to use therifebackend athttp://localhost:5500.
Option 1 — YAML file
Section titled “Option 1 — YAML file”multimedia: interpolate: backend: "rife"Option 2 — Profiles + Environment Variables
Section titled “Option 2 — Profiles + Environment Variables”export LEX_PROFILE=productionexport LEX_MULTIMEDIA__INTERPOLATE__BACKEND=rifeOption 3 — Python
Section titled “Option 3 — Python”from lexigram.multimedia.interpolate import InterpolationModulefrom lexigram.multimedia.interpolate.config import InterpolationConfig
InterpolationModule.configure( config=InterpolationConfig())Interpolation is frame-pair based —
InterpolationRequest(frame_a=..., frame_b=...). There is no configurable factor;InterpolationConfigonly carriesbackend,rife_base_url, andtimeout.
Config reference
Section titled “Config reference”| Field | Default | Env var | Description |
|---|---|---|---|
backend | "rife" | LEX_MULTIMEDIA__INTERPOLATE__BACKEND | rife |
rife_base_url | "http://localhost:5500" | LEX_MULTIMEDIA__INTERPOLATE__RIFE_BASE_URL | RIFE server URL |
timeout | 15.0 | LEX_MULTIMEDIA__INTERPOLATE__TIMEOUT | Request timeout in seconds |
Module Factory Methods
Section titled “Module Factory Methods”| Method | Description |
|---|---|
InterpolationModule.configure(config) | Configure with explicit interpolation config |
InterpolationModule.stub() | Real module pinned to the default rife backend for tests |
Key Features
Section titled “Key Features”- RIFE backend — state-of-the-art frame interpolation via a local reference server
- Video interpolation —
VideoInterpolationServicefor frame-level video interpolation (whenVideoProcessoris available) - Reference server —
lexigram-interpolate-rife-serveconsole script runs the RIFE model server - Result-based —
interpolate() -> Result[MediaAsset, MultimediaError]; errors are domain values, not exceptions
Testing
Section titled “Testing”from lexigram import Applicationfrom lexigram.multimedia.interpolate import InterpolationModule
async def test_boot(): async with Application.boot(modules=[InterpolationModule.stub()]) as app: assert app.container is not NoneKey Source Files
Section titled “Key Source Files”| File | What it contains |
|---|---|
src/lexigram/multimedia/interpolate/module.py | InterpolationModule.configure() and .stub() |
src/lexigram/multimedia/interpolate/config.py | InterpolationConfig |
src/lexigram/multimedia/interpolate/di/provider.py | InterpolationGenerationProvider — registers InterpolationProvider, wires task handlers |
src/lexigram/multimedia/interpolate/providers/ | Backend implementations (rife) |
src/lexigram/multimedia/interpolate/servers/ | Reference-server entry point (lexigram-interpolate-rife-serve) |
src/lexigram/multimedia/interpolate/video_interpolation_service.py | VideoInterpolationService — frame-level video interpolation |
src/lexigram/multimedia/interpolate/tasks.py | Background interpolation task handlers |