Bot & Automation
AI Creator Studio Telegram
/root/hermes-projects/AI Creator Studio Telegram
packages/core/src/estimator.ts
text
import type { GenerationEstimateInput, ResourceEstimate } from "./types.js";
const modeBaseCost: Record<string, number> = {
text_to_image: 20,
image_to_image: 30,
upscale_image: 18,
remove_background: 8,
replace_background: 16,
style_transfer: 28,
enhance_image: 14,
text_to_video: 100,
image_to_video: 120,
enhance_video: 80,
upscale_video: 90,
frame_interpolation: 75,
motion_enhancement: 85,
};
const qualityMultiplier: Record<string, number> = {
Standard: 1,
High: 1.35,
Ultra: 1.9,
};
const resolutionMultiplier: Record<string, number> = {
HD: 1,
"Full HD": 1.25,
"720p": 1,
"1080p": 1.35,
"2K": 1.75,
"4K": 2.6,
};
const durationMultiplier: Record<string, number> = {
"5s": 1,
"8s": 1.45,
"10s": 1.8,
"15s": 2.55,
"30s": 5,
"60s": 9.5,
};
export function buildResourceEstimate(input: GenerationEstimateInput): ResourceEstimate {
const settings = input.settings ?? {};
const base = modeBaseCost[input.mode] ?? 20;
const quality = qualityMultiplier[String(settings.quality ?? "High")] ?? 1.35;
const resolution = resolutionMultiplier[String(settings.resolution ?? "Full HD")] ?? 1.25;
const duration = input.mode.includes("video")
? durationMultiplier[String(settings.duration ?? "8s")] ?? 1.45
: 1;
const fps = Number(settings.fps ?? 24);
const fpsMultiplier = fps >= 60 ? 1.4 : fps >= 30 ? 1.15 : 1;
const credits = Math.ceil(base * quality * resolution * duration * fpsMultiplier);
const tokens = Math.ceil(input.prompt.length * 3.5 + credits * 12);
const storageBytes = Math.ceil((input.mode.includes("video") ? 18_000_000 : 4_000_000) * duration * resolution);
return {
credits,
tokens,
storageBytes,
etaSecondsMin: input.mode.includes("video") ? 120 : 20,
etaSecondsMax: input.mode.includes("video") ? 420 : 90,
};
}