@lanlinling/media-providers
v0.0.1
Published
Multi-provider image + video generation adapter registry (Seedream, Qwen Image, Nano Banana, MiniMax, Grok, Seedance, Kling, Veo, Sora) — extracted from OpenMAIC.
Readme
@lanlinling/media-providers
Multi-provider image + video generation adapter registry — Seedream, OpenAI Image, Qwen Image, Nano Banana, MiniMax, Grok, Lemonade, AIHubMix, Seedance, Kling, Veo, Grok Video, HappyHorse. Extracted from OpenMAIC.
aihubmix is a multi-vendor aggregator (one key, many models) — convenient
but a markup over calling any vendor natively. Prefer seedream/nano-banana
etc. when you have direct access; use aihubmix for quick access to a wide
catalog. See TROUBLESHOOTING.md for its protocol
quirks and the price comparison behind the default model choice.
Install
{
"dependencies": {
"@lanlinling/media-providers": "github:bluemomo112/ai-providers#path:packages/media-providers"
}
}# pnpm-workspace.yaml
onlyBuiltDependencies:
- "@lanlinling/media-providers"Does it read API keys from my environment?
No. You always pass apiKey explicitly in the config object — nothing
here reads process.env for credentials.
import 'dotenv/config';
import { generateImage } from '@lanlinling/media-providers';
const result = await generateImage(
{ providerId: 'seedream', apiKey: process.env.ARK_API_KEY! },
{ prompt: 'a cute orange cat sitting on a windowsill, watercolor style' },
);
console.log(result.url); // or result.base64, depending on the providerThis is the exact call this package was smoke-tested with (real Volcengine Ark call — returned a downloadable image URL).
Usage
import {
IMAGE_PROVIDERS,
VIDEO_PROVIDERS,
generateImage,
generateVideo,
normalizeVideoOptions,
testImageConnectivity,
} from '@lanlinling/media-providers';
console.log(Object.keys(IMAGE_PROVIDERS)); // 7 image providers
console.log(Object.keys(VIDEO_PROVIDERS)); // 7 video providers
// Video options (duration/aspectRatio/resolution) vary a lot by provider —
// normalizeVideoOptions() snaps unsupported values to the nearest one this
// provider actually supports, instead of failing the request.
const options = normalizeVideoOptions('seedance', { prompt: 'a dog running on a beach' });
const video = await generateVideo({ providerId: 'seedance', apiKey: '...' }, options);
// Cheap connectivity/auth check before committing to a real (billed) generation
const probe = await testImageConnectivity({ providerId: 'seedream', apiKey: '...' });Common gotchas
- Seedream minimum resolution: needs ≥3,686,400 total pixels
(
aspectRatioToDimensions()/ the default size already satisfy this). ModelNotOpenerrors: the API key is valid, but that specific model hasn't been activated for your account in the provider's console — not a code bug.- ComfyUI is not included — it needs workflow
.jsonfiles served from an app's ownpublic/directory, which this package doesn't ship.
See TROUBLESHOOTING.md for the full list, including how to tell an activation problem apart from an actual bad-credential error.
