Skip to content
GitHub

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.


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

Terminal window
uv add lexigram-multimedia-interpolate
# Optional extras
uv add "lexigram-multimedia-interpolate[rife-server]" # RIFE server deps (torch)
from lexigram import Application
from lexigram.di.module import Module, module
from lexigram.multimedia.interpolate import InterpolationModule
from lexigram.contracts.multimedia.protocols import InterpolationProvider
from 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())

Zero-config usage: Call InterpolationModule.configure() with no arguments to use the rife backend at http://localhost:5500.

application.yaml
multimedia:
interpolate:
backend: "rife"

Option 2 — Profiles + Environment Variables

Section titled “Option 2 — Profiles + Environment Variables”
Terminal window
export LEX_PROFILE=production
export LEX_MULTIMEDIA__INTERPOLATE__BACKEND=rife
from lexigram.multimedia.interpolate import InterpolationModule
from 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; InterpolationConfig only carries backend, rife_base_url, and timeout.

FieldDefaultEnv varDescription
backend"rife"LEX_MULTIMEDIA__INTERPOLATE__BACKENDrife
rife_base_url"http://localhost:5500"LEX_MULTIMEDIA__INTERPOLATE__RIFE_BASE_URLRIFE server URL
timeout15.0LEX_MULTIMEDIA__INTERPOLATE__TIMEOUTRequest timeout in seconds
MethodDescription
InterpolationModule.configure(config)Configure with explicit interpolation config
InterpolationModule.stub()Real module pinned to the default rife backend for tests
  • RIFE backend — state-of-the-art frame interpolation via a local reference server
  • Video interpolationVideoInterpolationService for frame-level video interpolation (when VideoProcessor is available)
  • Reference serverlexigram-interpolate-rife-serve console script runs the RIFE model server
  • Result-basedinterpolate() -> Result[MediaAsset, MultimediaError]; errors are domain values, not exceptions
from lexigram import Application
from lexigram.multimedia.interpolate import InterpolationModule
async def test_boot():
async with Application.boot(modules=[InterpolationModule.stub()]) as app:
assert app.container is not None
FileWhat it contains
src/lexigram/multimedia/interpolate/module.pyInterpolationModule.configure() and .stub()
src/lexigram/multimedia/interpolate/config.pyInterpolationConfig
src/lexigram/multimedia/interpolate/di/provider.pyInterpolationGenerationProvider — 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.pyVideoInterpolationService — frame-level video interpolation
src/lexigram/multimedia/interpolate/tasks.pyBackground interpolation task handlers