persona-community-1/pkg/mediagen/provider.go
jordan 4004f88f4a
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
ci/woodpecker/manual/woodpecker Pipeline was successful
Initialize project from skeleton template
2026-02-23 10:20:59 +00:00

106 lines
4.2 KiB
Go

// Package mediagen provides a unified interface for media (image/video) generation
// across multiple providers with fallback and routing capabilities.
package mediagen
import (
"context"
"time"
)
// Provider defines common methods for all media generation providers.
// Implementations must be safe for concurrent use.
type Provider interface {
// Name returns the provider name for logging and metrics.
Name() string
// Health checks if the provider is reachable and operational.
Health(ctx context.Context) error
}
// ImageGenerator defines the interface for image generation providers.
// Implementations must be safe for concurrent use.
type ImageGenerator interface {
Provider
// GenerateImage generates one or more images from a text prompt.
GenerateImage(ctx context.Context, req ImageRequest) (*ImageResponse, error)
}
// VideoGenerator defines the interface for video generation providers.
// Implementations must be safe for concurrent use.
type VideoGenerator interface {
Provider
// GenerateVideo generates a video from a text prompt and optional reference images.
// May block for extended periods (30s-5min) while video renders.
GenerateVideo(ctx context.Context, req VideoRequest) (*VideoResponse, error)
}
// MediaGenerator combines both image and video generation capabilities.
// Use when a provider supports both.
type MediaGenerator interface {
ImageGenerator
VideoGenerator
}
// ImageRequest represents a unified image generation request.
type ImageRequest struct {
Prompt string // Required: text description of desired image
Model string // Optional: model override (provider-specific)
Size string // Optional: size hint ("1K", "2K", "4K")
AspectRatio string // Optional: aspect ratio ("16:9", "1:1", "9:16")
Count int // Optional: number of images (default: 1)
Timeout time.Duration // Optional: request timeout
// Reference image for identity consistency (e.g., maintaining same face/character)
ReferenceImage []byte // Optional: reference image bytes
ReferenceMime string // Optional: MIME type ("image/png", "image/jpeg", "image/webp")
// Determinism controls for reproducible generation
Seed *int32 // Optional: seed for reproducible results (nil = provider chooses random)
}
// ImageResponse represents a unified image generation response.
type ImageResponse struct {
Images []Image // Generated images
Provider string // Name of provider that generated this response
Latency time.Duration // Time taken to generate
Seed *int32 // Seed used for generation (nil if random, echoed back for reproducibility)
}
// Image represents a single generated image.
type Image struct {
Data []byte // Raw image bytes (PNG, JPEG, etc.)
MimeType string // MIME type ("image/png", "image/jpeg")
URL string // Optional: URL if provider returns URL instead of bytes
}
// VideoRequest represents a unified video generation request.
type VideoRequest struct {
Prompt string // Required: text description of desired video
Model string // Optional: model override (provider-specific)
ReferenceImages []Image // Optional: reference images for image-to-video
AspectRatio string // Optional: aspect ratio ("16:9", "9:16")
Duration string // Optional: duration ("5s", "10s")
Count int // Optional: number of videos (default: 1)
Timeout time.Duration // Optional: request timeout
// Determinism controls for reproducible generation
Seed *int32 // Optional: seed for reproducible results (nil = provider chooses random)
}
// VideoResponse represents a unified video generation response.
type VideoResponse struct {
Videos []Video // Generated videos
Provider string // Name of provider that generated this response
Latency time.Duration // Time taken to generate
Seed *int32 // Seed used for generation (nil if random, echoed back for reproducibility)
}
// Video represents a single generated video.
type Video struct {
Data []byte // Raw video bytes (MP4, etc.)
MimeType string // MIME type ("video/mp4")
URL string // Optional: URL if provider returns URL instead of bytes
}