import type { ContentTagSummary, PaginationMeta } from './api.js';
import type { ContentLicense, ContentPermissions } from './content-license.js';
export declare const ASSET_CATEGORY_VALUES: readonly ["IMAGE", "VIDEO", "AUDIO", "SPRITESHEET", "MODEL_3D", "CUSTOM"];
export type AssetCategory = (typeof ASSET_CATEGORY_VALUES)[number];
export declare const ASSET_BROWSE_KIND_VALUES: readonly ["images", "music", "sfx", "speech", "videos", "3d"];
export type AssetBrowseKind = (typeof ASSET_BROWSE_KIND_VALUES)[number];
export declare const ASSET_FORMAT_VALUES: readonly ["PNG", "JPEG", "WEBP", "GIF", "ASEPRITE", "MP4", "WEBM", "MP3", "WAV", "OGG", "GLTF", "GLB", "PLAYDROP_BOXEL_JSON", "VOX", "CUSTOM"];
export type AssetFormat = (typeof ASSET_FORMAT_VALUES)[number];
export declare const ASSET_VISIBILITY_VALUES: readonly ["PRIVATE", "PUBLIC"];
export type AssetVisibility = (typeof ASSET_VISIBILITY_VALUES)[number];
export declare const ASSET_SOURCE_KIND_VALUES: readonly ["UPLOAD", "AI", "APP_EMBEDDED", "IMPORT"];
export type AssetSourceKind = (typeof ASSET_SOURCE_KIND_VALUES)[number];
export interface OwnedCustomAssetVersionSummary {
    assetRef: string;
    revision: number;
    revisionLabel: string;
    visibility: AssetVisibility;
    license: ContentLicense;
    assetSpecVersionRef: string | null;
    previewUrl: string | null;
    createdAt: string;
    updatedAt: string;
}
export interface OwnedCustomAssetSummary {
    creatorUsername: string;
    assetName: string;
    displayName: string | null;
    description: string | null;
    currentVersion: OwnedCustomAssetVersionSummary | null;
    latestVersion: OwnedCustomAssetVersionSummary | null;
    latestPublicVersion: OwnedCustomAssetVersionSummary | null;
}
export interface ListOwnedCustomAssetsResponse {
    items: OwnedCustomAssetSummary[];
    pagination: PaginationMeta;
}
export interface LoadOwnedCustomAssetResponse {
    asset: OwnedCustomAssetSummary;
    version: OwnedCustomAssetVersionSummary | null;
    primaryText: string;
}
export interface MutateOwnedCustomAssetRequest {
    assetSpecRef: string;
    assetSpecVersionRef: string;
    assetName: string;
    metadata?: {
        displayName?: string | null;
        description?: string | null;
    };
    primaryText: string;
    previewDataUrl: string;
    visibility: AssetVisibility;
}
export interface MutateOwnedCustomAssetResponse {
    asset: OwnedCustomAssetSummary;
    version: OwnedCustomAssetVersionSummary | null;
    primaryText: string;
}
export interface DeleteOwnedCustomAssetResponse {
    success: boolean;
}
export interface AssetSubcategoryDefinition {
    category: AssetCategory;
    subcategory: string;
    formats: AssetFormat[];
    label: string;
}
export declare const PLAYDROP_SPEECH_MAX_WORDS = 40;
export declare const PLAYDROP_SPEECH_VOICE_IDS: readonly ["default_narrator", "warm_storyteller_m", "neutral_guide", "confident_guide_f", "casual_companion_m", "atmospheric_storyteller_f", "energetic_host_m", "bright_creator_f"];
export type PlaydropSpeechVoiceId = (typeof PLAYDROP_SPEECH_VOICE_IDS)[number];
export declare function normalizeSpeechText(input: string): string;
export declare function countSpeechWords(input: string): number;
export declare const ASSET_SUBCATEGORY_DEFINITIONS: AssetSubcategoryDefinition[];
export declare const ASSET_SUBCATEGORY_SLUG_REGEX: RegExp;
export declare const MODEL_3D_ASSET_SUBCATEGORY_VALUES: readonly ["generic", "avatar", "humanoid", "creature", "block"];
export type Model3DAssetSubcategory = (typeof MODEL_3D_ASSET_SUBCATEGORY_VALUES)[number];
export declare function isModel3DAssetSubcategory(category: AssetCategory, subcategory: string): boolean;
export declare function isBoxelAssetFormat(format: AssetFormat): boolean;
export declare function isVoxAssetFormat(format: AssetFormat): boolean;
export declare function getRequiredModel3DFileRoles(format: AssetFormat): readonly string[];
export declare function getBoxelManifestRole(format: AssetFormat): 'primary' | 'boxel' | null;
export declare const ASSET_SUBCATEGORY_DEFINITIONS_BY_KEY: Record<string, AssetSubcategoryDefinition>;
export declare const ASSET_SUBCATEGORIES_BY_CATEGORY: Record<AssetCategory, string[]>;
export type AssetMetadataEmbeddingStatus = 'embedded' | 'unsupported_format' | 'failed';
export interface AssetAudioWaveform {
    durationSeconds: number;
    sampleRateHz: number;
    bins: number[];
}
export interface AssetSongWordTimestamp {
    word: string;
    startMs: number;
    endMs: number;
}
export interface AssetSongSection {
    name?: string;
    durationMs?: number;
    lines: string[];
    styles?: string[];
}
export interface AssetSongLyrics {
    text: string;
    sections?: AssetSongSection[];
    wordTimestamps?: AssetSongWordTimestamp[];
}
export interface AssetSongMetadata {
    genres?: string[];
    languages?: string[];
    styles?: string[];
    isExplicit?: boolean;
    lyrics?: AssetSongLyrics;
}
export interface AssetSpeechWordTimestamp {
    word: string;
    startMs: number;
    endMs: number;
}
export interface AssetSpeechVoiceMetadata {
    provider: 'elevenlabs';
    model: string;
    voiceId: string;
    voiceName?: string | null;
    playdropVoice?: PlaydropSpeechVoiceId | null;
    source: 'default' | 'provider';
}
export interface AssetSpeechMetadata {
    text: string;
    language: 'en';
    durationMs: number | null;
    wordTimestamps: AssetSpeechWordTimestamp[];
    voice: AssetSpeechVoiceMetadata;
}
export interface AssetEmbeddedMetadata {
    modality: 'IMAGE' | 'MUSIC' | 'SFX' | 'SPEECH' | 'VIDEO' | 'MODEL_3D';
    generationId: string;
    creatorUsername: string;
    creatorDisplayName: string;
    displayName: string;
    description: string;
    createdAt: string;
    provider: {
        name: string;
        model: string;
    };
    embeddedInPrimary: boolean;
    embeddingStatus: AssetMetadataEmbeddingStatus;
    durationMs?: number;
    durationSeconds?: number;
    aspectRatio?: string;
    imageSize?: string;
    resolution?: string;
    sourceMode?: string;
    topology?: string;
    targetPolycount?: number;
    shouldRemesh?: boolean;
    shouldTexture?: boolean;
    coverAssetUrl?: string;
    thumbnailUrl?: string;
    audio?: {
        waveform?: AssetAudioWaveform;
    };
    song?: AssetSongMetadata;
    speech?: AssetSpeechMetadata;
    providerMetadataSubset?: Record<string, unknown>;
}
export interface AssetAudioMetadata {
    modality: 'MUSIC' | 'SFX' | 'SPEECH';
    durationSeconds: number;
    audio: {
        waveform: AssetAudioWaveform;
    };
    song?: AssetSongMetadata;
    speech?: AssetSpeechMetadata;
}
export type AssetMetadataPayload = AssetEmbeddedMetadata | AssetAudioMetadata;
export interface AssetFileManifestEntry {
    role: string;
    key: string;
    url?: string;
    contentType?: string | null;
    sizeBytes?: number | null;
    sha256?: string | null;
}
export interface AssetFileManifest {
    files: AssetFileManifestEntry[];
}
export interface AssetGenerationInputAttachmentResponse {
    key: string;
    label: string;
    url: string;
}
export interface AssetGenerationInputParamResponse {
    key: string;
    label: string;
    value: string | number | boolean | null;
}
export interface AssetGenerationInputSummaryResponse {
    modality: string | null;
    prompt: string | null;
    attachments: AssetGenerationInputAttachmentResponse[];
    params: AssetGenerationInputParamResponse[];
}
export interface AssetGenerationReplayAttachmentResponse {
    key: 'image1' | 'image2';
    label: string;
    url: string;
    mimeType?: string | null;
}
export interface AssetGenerationReplayResponse {
    modality: 'IMAGE' | 'MUSIC' | 'SFX' | 'SPEECH' | 'VIDEO' | 'MODEL_3D';
    prompt: string;
    image1?: AssetGenerationReplayAttachmentResponse | null;
    image2?: AssetGenerationReplayAttachmentResponse | null;
    durationMs?: number | null;
    forceInstrumental?: boolean | null;
    durationSeconds?: number | null;
    loop?: boolean | null;
    coverPrompt?: string | null;
    speechVoice?: PlaydropSpeechVoiceId | null;
    speechProviderVoiceId?: string | null;
    aspectRatio?: string | null;
    imageSize?: string | null;
    resolution?: string | null;
    sourceMode?: string | null;
    topology?: string | null;
    targetPolycount?: number | null;
    shouldRemesh?: boolean | null;
    shouldTexture?: boolean | null;
    assetSubcategory?: string | null;
}
export interface AssetVersionResponse {
    id: number;
    revision: number;
    revisionLabel: string;
    subcategory: string | null;
    visibility: AssetVisibility;
    format: AssetFormat;
    storageKey: string;
    fileManifest: AssetFileManifest | Record<string, unknown>;
    assetSpecVersionRef?: string | null;
    primaryRole?: string | null;
    primaryContentType?: string | null;
    primaryExtension?: string | null;
    sourceKind: AssetSourceKind;
    sourceAppVersionId?: number | null;
    sourceGenerationId?: string | null;
    sourcePrompt?: string | null;
    sourceGenerationInput?: AssetGenerationInputSummaryResponse | null;
    sourceGenerationReplay?: AssetGenerationReplayResponse | null;
    shopListed: boolean;
    shopPriceCredits: number;
    license: ContentLicense;
    permissions?: ContentPermissions;
    createdAt: string;
    updatedAt: string;
}
export interface AssetResponse {
    id: number;
    name: string;
    displayName: string;
    description?: string | null;
    category: AssetCategory;
    assetSpecRef?: string | null;
    assetSpecDisplayName?: string | null;
    assetSpecSymbolUrl?: string | null;
    creatorId: number;
    creatorUsername: string;
    createdAt: string;
    updatedAt: string;
    currentVersion?: AssetVersionResponse | null;
    viewerSaved?: boolean;
    viewerLiked?: boolean;
    viewerDisliked?: boolean;
    likeCount?: number;
    viewCount?: number;
    commentCount?: number;
    remixCount?: number;
    packMembershipSummary?: AssetPackMembershipSummary | null;
    tags: ContentTagSummary[];
}
export interface AssetSummaryResponse {
    id: number;
    name: string;
    displayName: string;
    description?: string | null;
    category: AssetCategory;
    assetSpecRef?: string | null;
    assetSpecDisplayName?: string | null;
    assetSpecSymbolUrl?: string | null;
    creatorId: number;
    creatorUsername: string;
    createdAt: string;
    updatedAt: string;
    currentVersion?: AssetVersionResponse | null;
    viewerSaved?: boolean;
    tags: ContentTagSummary[];
}
export interface AssetPackMembershipSummaryItem {
    creatorUsername: string;
    name: string;
    displayName: string | null;
}
export interface AssetPackMembershipSummary {
    count: number;
    packs: AssetPackMembershipSummaryItem[];
}
export interface AssetRef {
    creatorUsername: string;
    name: string;
    revision: number;
}
export interface CreateAssetVersionRequest {
    displayName?: string;
    description?: string;
    category?: AssetCategory;
    subcategory?: string | null;
    visibility?: AssetVisibility;
    license?: ContentLicense;
    format?: AssetFormat;
    assetSpec?: string;
    sourceKind?: AssetSourceKind;
    sourceAppVersionId?: number;
    sourceGenerationId?: string;
    remixRef?: string;
    shopListed?: boolean;
    shopPriceCredits?: number;
}
export interface UpdateAssetRequest {
    name?: string;
    displayName?: string;
    description?: string | null;
}
export interface UpdateAssetVersionRequest {
    visibility?: AssetVisibility;
    license?: ContentLicense;
    setAsCurrent?: boolean;
}
export interface AssetCategoriesResponse {
    categories: AssetSubcategoryDefinition[];
}
export declare const ASSET_LIST_SORT_VALUES: readonly ["recent", "likes", "remixes", "comments"];
export type AssetListSort = (typeof ASSET_LIST_SORT_VALUES)[number];
export interface AssetListResponse {
    assets: AssetResponse[];
    pagination: {
        limit: number;
        offset: number;
        count: number;
        hasMore: boolean;
    };
}
export interface AssetDetailResponse {
    asset: AssetResponse;
}
export interface AssetVersionsListResponse {
    versions: AssetVersionResponse[];
    pagination?: {
        limit: number;
        offset: number;
        count: number;
        hasMore: boolean;
    };
}
export interface CreateAssetVersionResponse {
    asset: AssetResponse;
    version: AssetVersionResponse;
    versionNodeId: string;
    warnings?: Array<{
        code: string;
        message: string;
        successorRef?: string | null;
    }>;
}
export interface UpdateAssetResponse {
    asset: AssetResponse;
}
export interface UpdateAssetVersionResponse {
    version: AssetVersionResponse;
}
export interface DeleteAssetVersionResponse {
    success: boolean;
}
export interface DeleteAssetResponse {
    success: boolean;
}
export interface AssetSourceBundleResponse {
    filename: string;
    sizeBytes: number;
    checksum?: string | null;
}
export declare function isAssetCategory(value: unknown): value is AssetCategory;
export declare function isAssetFormat(value: unknown): value is AssetFormat;
export declare function isAssetVisibility(value: unknown): value is AssetVisibility;
export declare function isAssetSourceKind(value: unknown): value is AssetSourceKind;
export declare function isValidAssetSubcategorySlug(value: unknown): value is string;
export declare function normalizeAssetSubcategory(value: string): string;
export declare function isKnownAssetSubcategory(category: AssetCategory, subcategory: string): boolean;
export declare function getAssetSubcategoryDefinition(category: AssetCategory, subcategory: string): AssetSubcategoryDefinition | null;
//# sourceMappingURL=asset.d.ts.map