# VeeDB Documentation

Welcome to VeeDB’s documentation!

VeeDB is an unofficial asynchronous Python wrapper for the VNDB.org API v2 (Kana). “Vee” represents the v-sign pose and starting letter for VNDB, while “DB” stands for database.

This library provides a convenient way to interact with the VNDB API, allowing you to query visual novel data, manage user lists, and more, all asynchronously with full type safety.

Key Features

  • Asynchronous API: Built with aiohttp for high-performance async operations

  • Type Safety: Full type annotations and dataclass parsing with dacite

  • Filter Validation: Comprehensive filter validation system with schema caching

  • Complete Coverage: Support for all major VNDB API v2 endpoints

  • List Management: Full CRUD operations for user and release lists

  • Authentication: Support for API token authentication

  • Testing Support: Optional sandbox mode for development

Quick Start

import asyncio
from veedb import VNDB, QueryRequest

async def main():
    async with VNDB() as client:
        # Get database stats
        stats = await client.get_stats()
        print(f"Total VNs: {stats.vn}")

        # Query visual novels
        query = QueryRequest(
            filters=["title", "~", "Fate"],
            fields="id, title, rating"
        )
        response = await client.vn.query(query)

        for vn in response.results:
            print(f"{vn.title}: {vn.rating}")

asyncio.run(main())

Indices and tables

class veedb.SchemaCache(cache_dir: str = '.veedb_cache', cache_filename: str = 'schema.json', ttl_hours: float = 24.0, local_schema_path: str | None = None)[source]

Bases: object

Manages the download, caching, and retrieval of the VNDB API schema.

__init__(cache_dir: str = '.veedb_cache', cache_filename: str = 'schema.json', ttl_hours: float = 24.0, local_schema_path: str | None = None)[source]
property cache_dir: Path

Safely get the cache directory Path object.

property cache_file: Path

Safely get the cache file Path object.

property local_schema_path: Path | None

Safely get the local schema path Path object.

is_cached() bool[source]

Check if the schema file exists in the cache or if a local path is provided.

get_cache_age() float[source]

Get the age of the cache file in seconds. Returns 0 if using local_schema_path.

is_cache_expired() bool[source]

Check if the cached schema has expired. Local schema path is never considered expired by this check.

save_schema(schema_data: Dict[str, Any], to_local_path: bool = False)[source]

Save the schema data to the cache file or the specified local_schema_path.

load_schema() Dict[str, Any] | None[source]

Load the schema data from the local_schema_path (if provided) or the cache file.

invalidate_cache()[source]

Remove the cache file. Does not remove user-provided local_schema_path.

async get_schema(client: VNDB, force_download: bool = False) Dict[str, Any][source]

Get the schema. Prioritizes local_schema_path, then cache, then download. If force_download is True, it will download and update the primary schema location.

async update_local_schema_from_api(client: VNDB) Dict[str, Any][source]

Forces a download of the schema and saves it to local_schema_path if configured, else to cache.

Exception Classes

exception veedb.exceptions.VNDBAPIError(message: str, status_code: int = None)[source]

Bases: Exception

Base class for VNDB API errors.

__init__(message: str, status_code: int = None)[source]
exception veedb.exceptions.InvalidRequestError(message: str = 'Invalid request body or query.', status_code: int = 400)[source]

Bases: VNDBAPIError

HTTP 400 - Invalid request body or query.

__init__(message: str = 'Invalid request body or query.', status_code: int = 400)[source]
exception veedb.exceptions.AuthenticationError(message: str = 'Invalid authentication token or token missing for protected endpoint.', status_code: int = 401)[source]

Bases: VNDBAPIError

HTTP 401 - Invalid authentication token.

__init__(message: str = 'Invalid authentication token or token missing for protected endpoint.', status_code: int = 401)[source]
exception veedb.exceptions.NotFoundError(message: str = 'Resource not found or invalid API path.', status_code: int = 404)[source]

Bases: VNDBAPIError

HTTP 404 - Invalid API path or HTTP method, or resource not found.

__init__(message: str = 'Resource not found or invalid API path.', status_code: int = 404)[source]
exception veedb.exceptions.RateLimitError(message: str = 'API request limit reached. Please wait before trying again.', status_code: int = 429)[source]

Bases: VNDBAPIError

HTTP 429 - Throttled.

__init__(message: str = 'API request limit reached. Please wait before trying again.', status_code: int = 429)[source]
exception veedb.exceptions.ServerError(message: str = 'An unexpected server error occurred.', status_code: int = 500)[source]

Bases: VNDBAPIError

HTTP 500, 502, etc. - Server error.

__init__(message: str = 'An unexpected server error occurred.', status_code: int = 500)[source]
exception veedb.exceptions.TooMuchDataSelectedError(message: str = 'Too much data selected. Reduce fields or results per page.', status_code: int = 400)[source]

Bases: InvalidRequestError

Specific error for when the ‘Too much data selected’ message is returned by VNDB.

__init__(message: str = 'Too much data selected. Reduce fields or results per page.', status_code: int = 400)[source]

Type Definitions

Common Types

class veedb.apitypes.common.ImageCommon(id: str | None, url: str | None, dims: List[int] | None, sexual: float | None, violence: float | None, votecount: int | None)[source]

Bases: object

id: str | None
url: str | None
dims: List[int] | None
sexual: float | None
violence: float | None
votecount: int | None
__init__(id: str | None, url: str | None, dims: List[int] | None, sexual: float | None, violence: float | None, votecount: int | None) None
class veedb.apitypes.common.Extlink(url: str, label: str, name: str, id: str | int | NoneType = None)[source]

Bases: object

url: str
label: str
name: str
id: str | int | None = None
__init__(url: str, label: str, name: str, id: str | int | None = None) None
class veedb.apitypes.common.QueryRequest(filters: list | str | None = <factory>, fields: str = 'id', sort: str = 'id', reverse: bool = False, results: int = 10, page: int = 1, user: str | None = None, count: bool = False, compact_filters: bool = False, normalized_filters: bool = False)[source]

Bases: object

Common structure for database querying POST requests.

filters: list | str | None
fields: str = 'id'
sort: str = 'id'
reverse: bool = False
results: int = 10
page: int = 1
user: str | None = None
count: bool = False
compact_filters: bool = False
normalized_filters: bool = False
to_dict() dict[source]

Converts to dict, removing None values, for JSON payload.

__init__(filters: list | str | None = <factory>, fields: str = 'id', sort: str = 'id', reverse: bool = False, results: int = 10, page: int = 1, user: str | None = None, count: bool = False, compact_filters: bool = False, normalized_filters: bool = False) None
class veedb.apitypes.common.QueryResponse(results: List[T], more: bool, count: int | None = None, compact_filters: str | None = None, normalized_filters: list | None = None)[source]

Bases: Generic[T]

Common structure for database querying POST responses.

results: List[T]
more: bool
count: int | None = None
compact_filters: str | None = None
normalized_filters: list | None = None
__init__(results: List[T], more: bool, count: int | None = None, compact_filters: str | None = None, normalized_filters: list | None = None) None

Request Types

class veedb.apitypes.requests.UlistUpdatePayload(vote: int | None = None, notes: str | None = None, started: str | None = None, finished: str | None = None, labels: List[int] | None = None, labels_set: List[int] | None = None, labels_unset: List[int] | None = None)[source]

Bases: object

vote: int | None = None
notes: str | None = None
started: str | None = None
finished: str | None = None
labels: List[int] | None = None
labels_set: List[int] | None = None
labels_unset: List[int] | None = None
to_dict() dict[source]

Converts to dict, removing None values, for JSON payload.

__init__(vote: int | None = None, notes: str | None = None, started: str | None = None, finished: str | None = None, labels: List[int] | None = None, labels_set: List[int] | None = None, labels_unset: List[int] | None = None) None
class veedb.apitypes.requests.RlistUpdatePayload(status: Literal[0, 1, 2, 3, 4] | None = None)[source]

Bases: object

status: Literal[0, 1, 2, 3, 4] | None = None
to_dict() dict[source]

Converts to dict, removing None values, for JSON payload.

__init__(status: Literal[0, 1, 2, 3, 4] | None = None) None

Entity Types

Visual Novel Entities

class veedb.apitypes.entities.vn.VNTitle(lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'], title: str, latin: str | None = None, official: bool = False, main: bool = False)[source]

Bases: object

lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']
title: str
latin: str | None = None
official: bool = False
main: bool = False
__init__(lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'], title: str, latin: str | None = None, official: bool = False, main: bool = False) None
class veedb.apitypes.entities.vn.VNImageInfo(id: str | None = None, url: str | None = None, dims: List[int] | None = None, sexual: float | None = None, violence: float | None = None, votecount: int | None = None, thumbnail: str | None = None, release: ForwardRef('VNScreenshotRelease') | None = None)[source]

Bases: object

id: str | None = None
url: str | None = None
dims: List[int] | None = None
sexual: float | None = None
violence: float | None = None
votecount: int | None = None
thumbnail: str | None = None
release: VNScreenshotRelease | None = None
__init__(id: str | None = None, url: str | None = None, dims: List[int] | None = None, sexual: float | None = None, violence: float | None = None, votecount: int | None = None, thumbnail: str | None = None, release: VNScreenshotRelease | None = None) None
class veedb.apitypes.entities.vn.VNScreenshotRelease(id: str, title: Optional[str] = None, alttitle: Optional[str] = None, languages: List[veedb.apitypes.entities.release.ReleaseLanguageSpecific] = <factory>, platforms: List[Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']] = <factory>, media: List[veedb.apitypes.entities.release.ReleaseMedia] = <factory>, vns: List[veedb.apitypes.entities.release.ReleaseVNLink] = <factory>, producers: List[veedb.apitypes.entities.release.ReleaseProducerLink] = <factory>, images: List[veedb.apitypes.entities.release.ReleaseImage] = <factory>, released: Optional[str] = None, minage: Optional[int] = None, patch: bool = False, freeware: bool = False, uncensored: Optional[bool] = None, official: bool = False, has_ero: bool = False, resolution: Union[Literal['non-standard'], Tuple[int, int], NoneType] = None, engine: Optional[str] = None, voiced: Optional[Literal[1, 2, 3, 4]] = None, notes: Optional[str] = None, gtin: Optional[str] = None, catalog: Optional[str] = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>)[source]

Bases: Release

__init__(id: str, title: str | None = None, alttitle: str | None = None, languages: List[ReleaseLanguageSpecific] = <factory>, platforms: Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]=<factory>, media: List[ReleaseMedia] = <factory>, vns: List[ReleaseVNLink] = <factory>, producers: List[ReleaseProducerLink] = <factory>, images: List[ReleaseImage] = <factory>, released: str | None = None, minage: int | None = None, patch: bool = False, freeware: bool = False, uncensored: bool | None = None, official: bool = False, has_ero: bool = False, resolution: Tuple[int, int] | None=None, engine: str | None = None, voiced: Literal[1, 2, 3, 4] | None=None, notes: str | None = None, gtin: str | None = None, catalog: str | None = None, extlinks: List[Extlink] = <factory>) None
class veedb.apitypes.entities.vn.VNTagLink(id: str, name: str | None = None, aliases: List[str] = <factory>, description: str | None = None, category: Optional[Literal['cont', 'ero', 'tech']]=None, searchable: bool | None = None, applicable: bool | None = None, vn_count: int | None = None, rating: float = 0.0, spoiler: int = 0, lie: bool = False)[source]

Bases: Tag

rating: float = 0.0
spoiler: int = 0
lie: bool = False
__init__(id: str, name: str | None = None, aliases: List[str] = <factory>, description: str | None = None, category: Literal['cont', 'ero', 'tech'] | None=None, searchable: bool | None = None, applicable: bool | None = None, vn_count: int | None = None, rating: float = 0.0, spoiler: int = 0, lie: bool = False) None
class veedb.apitypes.entities.vn.VNDeveloper(id: str, name: str | None = None, original: str | None = None, aliases: List[str] = <factory>, lang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, type: Optional[Literal['co', 'in', 'ng']]=None, description: str | None = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>)[source]

Bases: Producer

__init__(id: str, name: str | None = None, original: str | None = None, aliases: List[str] = <factory>, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, type: Literal['co', 'in', 'ng'] | None=None, description: str | None = None, extlinks: List[Extlink] = <factory>) None
class veedb.apitypes.entities.vn.VNEdition(eid: int, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None, name: str | None = None, official: bool | None = None)[source]

Bases: object

eid: int
lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None
name: str | None = None
official: bool | None = None
__init__(eid: int, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None, name: str | None = None, official: bool | None = None) None
class veedb.apitypes.entities.vn.VNStaffLink(id: str, aid: int | None = None, ismain: bool | None = None, name: str | None = None, original: str | None = None, lang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, gender: Optional[Literal['m', 'f']]=None, description: str | None = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>, aliases: List[veedb.apitypes.entities.staff.StaffAlias] = <factory>, role: Literal['scenario', 'director', 'chardesign', 'art', 'music', 'songs', 'translator', 'editor', 'qa', 'staff']='', note: str | None = None, eid: int | None = None)[source]

Bases: Staff

role: Literal['scenario', 'director', 'chardesign', 'art', 'music', 'songs', 'translator', 'editor', 'qa', 'staff'] = ''
note: str | None = None
eid: int | None = None
__init__(id: str, aid: int | None = None, ismain: bool | None = None, name: str | None = None, original: str | None = None, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, gender: Literal['m', 'f'] | None=None, description: str | None = None, extlinks: List[Extlink] = <factory>, aliases: List[StaffAlias] = <factory>, role: Literal['scenario', 'director', 'chardesign', 'art', 'music', 'songs', 'translator', 'editor', 'qa', 'staff']='', note: str | None = None, eid: int | None = None) None
class veedb.apitypes.entities.vn.VNVoiceActor(note: str | None = None, staff: ForwardRef('VNVAStaff') | None = None, character: ForwardRef('VNVACharacter') | None = None)[source]

Bases: object

note: str | None = None
staff: VNVAStaff | None = None
character: VNVACharacter | None = None
__init__(note: str | None = None, staff: VNVAStaff | None = None, character: VNVACharacter | None = None) None
class veedb.apitypes.entities.vn.VNVAStaff(id: str, aid: int | None = None, ismain: bool | None = None, name: str | None = None, original: str | None = None, lang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, gender: Optional[Literal['m', 'f']]=None, description: str | None = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>, aliases: List[veedb.apitypes.entities.staff.StaffAlias] = <factory>)[source]

Bases: Staff

__init__(id: str, aid: int | None = None, ismain: bool | None = None, name: str | None = None, original: str | None = None, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, gender: Literal['m', 'f'] | None=None, description: str | None = None, extlinks: List[Extlink] = <factory>, aliases: List[StaffAlias] = <factory>) None
class veedb.apitypes.entities.vn.VNVACharacter(id: str, name: Optional[str] = None, original: Optional[str] = None, aliases: List[str] = <factory>, description: Optional[str] = None, image: Optional[veedb.apitypes.entities.character.CharacterImageInfo] = None, blood_type: Optional[Literal['a', 'b', 'ab', 'o']] = None, height: Optional[int] = None, weight: Optional[int] = None, bust: Optional[int] = None, waist: Optional[int] = None, hips: Optional[int] = None, cup: Optional[str] = None, age: Optional[int] = None, birthday: Optional[Tuple[int, int]] = None, sex: Optional[Tuple[Optional[Literal['m', 'f', 'b', 'n']], Optional[Literal['m', 'f', 'b', 'n']]]] = None, gender: Optional[Tuple[Optional[Literal['m', 'f', 'o', 'a']], Optional[Literal['m', 'f', 'o', 'a']]]] = None, vns: List[veedb.apitypes.entities.character.CharacterVNLink] = <factory>, traits: List[veedb.apitypes.entities.character.CharacterTraitLink] = <factory>)[source]

Bases: Character

__init__(id: str, name: str | None = None, original: str | None = None, aliases: List[str] = <factory>, description: str | None = None, image: CharacterImageInfo | None = None, blood_type: Literal['a', 'b', 'ab', 'o'] | None=None, height: int | None = None, weight: int | None = None, bust: int | None = None, waist: int | None = None, hips: int | None = None, cup: str | None = None, age: int | None = None, birthday: Tuple[int, int] | None=None, sex: Literal['m', 'f', 'b', 'n'] | None, ~typing.Literal['m', 'f', 'b', 'n'] | None] | None=None, gender: Literal['m', 'f', 'o', 'a'] | None, ~typing.Literal['m', 'f', 'o', 'a'] | None] | None=None, vns: List[CharacterVNLink] = <factory>, traits: List[CharacterTraitLink] = <factory>) None
class veedb.apitypes.entities.vn.VN(id: str, title: str | None = None, alttitle: str | None = None, titles: List[veedb.apitypes.entities.vn.VNTitle] = <factory>, aliases: List[str] = <factory>, olang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, devstatus: Optional[Literal[0, 1, 2]]=None, released: str | None = None, languages: List[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=<factory>, platforms: List[Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]=<factory>, image: veedb.apitypes.entities.vn.VNImageInfo | None = None, length: int | None = None, length_minutes: int | None = None, length_votes: int | None = None, description: str | None = None, average: float | None = None, rating: float | None = None, votecount: int | None = None, screenshots: List[veedb.apitypes.entities.vn.VNImageInfo] = <factory>, relations: List[ForwardRef('VNRelation')] = <factory>, tags: List[veedb.apitypes.entities.vn.VNTagLink] = <factory>, developers: List[veedb.apitypes.entities.vn.VNDeveloper] = <factory>, editions: List[veedb.apitypes.entities.vn.VNEdition] = <factory>, staff: List[veedb.apitypes.entities.vn.VNStaffLink] = <factory>, va: List[veedb.apitypes.entities.vn.VNVoiceActor] = <factory>, extlinks: List[veedb.apitypes.common.Extlink] = <factory>)[source]

Bases: object

id: str
title: str | None = None
alttitle: str | None = None
titles: List[VNTitle]
aliases: List[str]
olang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None
devstatus: Literal[0, 1, 2] | None = None
released: str | None = None
languages: List[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]
platforms: List[Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]
image: VNImageInfo | None = None
length: int | None = None
length_minutes: int | None = None
length_votes: int | None = None
description: str | None = None
average: float | None = None
rating: float | None = None
votecount: int | None = None
screenshots: List[VNImageInfo]
relations: List[VNRelation]
tags: List[VNTagLink]
developers: List[VNDeveloper]
editions: List[VNEdition]
staff: List[VNStaffLink]
__init__(id: str, title: str | None = None, alttitle: str | None = None, titles: List[VNTitle] = <factory>, aliases: List[str] = <factory>, olang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, devstatus: Literal[0, 1, 2] | None=None, released: str | None = None, languages: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=<factory>, platforms: Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]=<factory>, image: VNImageInfo | None = None, length: int | None = None, length_minutes: int | None = None, length_votes: int | None = None, description: str | None = None, average: float | None = None, rating: float | None = None, votecount: int | None = None, screenshots: List[VNImageInfo] = <factory>, relations: List[VNRelation] = <factory>, tags: List[VNTagLink] = <factory>, developers: List[VNDeveloper] = <factory>, editions: List[VNEdition] = <factory>, staff: List[VNStaffLink] = <factory>, va: List[VNVoiceActor] = <factory>, extlinks: List[Extlink] = <factory>) None
va: List[VNVoiceActor]
extlinks: List[Extlink]
class veedb.apitypes.entities.vn.VNRelation(id: str, title: str | None = None, alttitle: str | None = None, titles: List[veedb.apitypes.entities.vn.VNTitle] = <factory>, aliases: List[str] = <factory>, olang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, devstatus: Optional[Literal[0, 1, 2]]=None, released: str | None = None, languages: List[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=<factory>, platforms: List[Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]=<factory>, image: veedb.apitypes.entities.vn.VNImageInfo | None = None, length: int | None = None, length_minutes: int | None = None, length_votes: int | None = None, description: str | None = None, average: float | None = None, rating: float | None = None, votecount: int | None = None, screenshots: List[veedb.apitypes.entities.vn.VNImageInfo] = <factory>, relations: List[ForwardRef('VNRelation')] = <factory>, tags: List[veedb.apitypes.entities.vn.VNTagLink] = <factory>, developers: List[veedb.apitypes.entities.vn.VNDeveloper] = <factory>, editions: List[veedb.apitypes.entities.vn.VNEdition] = <factory>, staff: List[veedb.apitypes.entities.vn.VNStaffLink] = <factory>, va: List[veedb.apitypes.entities.vn.VNVoiceActor] = <factory>, extlinks: List[veedb.apitypes.common.Extlink] = <factory>, relation: str = '', relation_official: bool = False)[source]

Bases: VN

__init__(id: str, title: str | None = None, alttitle: str | None = None, titles: List[VNTitle] = <factory>, aliases: List[str] = <factory>, olang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, devstatus: Literal[0, 1, 2] | None=None, released: str | None = None, languages: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=<factory>, platforms: Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]=<factory>, image: VNImageInfo | None = None, length: int | None = None, length_minutes: int | None = None, length_votes: int | None = None, description: str | None = None, average: float | None = None, rating: float | None = None, votecount: int | None = None, screenshots: List[VNImageInfo] = <factory>, relations: List[VNRelation] = <factory>, tags: List[VNTagLink] = <factory>, developers: List[VNDeveloper] = <factory>, editions: List[VNEdition] = <factory>, staff: List[VNStaffLink] = <factory>, va: List[VNVoiceActor] = <factory>, extlinks: List[Extlink] = <factory>, relation: str = '', relation_official: bool = False) None
relation: str = ''
relation_official: bool = False

Character Entities

class veedb.apitypes.entities.character.CharacterImageInfo(id: str | None, url: str | None, dims: List[int] | None, sexual: float | None, violence: float | None, votecount: int | None)[source]

Bases: ImageCommon

__init__(id: str | None, url: str | None, dims: List[int] | None, sexual: float | None, violence: float | None, votecount: int | None) None
class veedb.apitypes.entities.character.CharacterVNLink(id: str, spoiler: int | None = None, role: Literal['main', 'primary', 'side', 'appears'] | None = None, release: dict | None = None, title: str | None = None)[source]

Bases: object

id: str
spoiler: int | None = None
role: Literal['main', 'primary', 'side', 'appears'] | None = None
release: dict | None = None
title: str | None = None
__init__(id: str, spoiler: int | None = None, role: Literal['main', 'primary', 'side', 'appears'] | None = None, release: dict | None = None, title: str | None = None) None
class veedb.apitypes.entities.character.CharacterTraitLink(id: str, spoiler: int | None = None, lie: bool | None = None, name: str | None = None, group_id: str | None = None, group_name: str | None = None)[source]

Bases: object

id: str
spoiler: int | None = None
lie: bool | None = None
name: str | None = None
group_id: str | None = None
group_name: str | None = None
__init__(id: str, spoiler: int | None = None, lie: bool | None = None, name: str | None = None, group_id: str | None = None, group_name: str | None = None) None
class veedb.apitypes.entities.character.Character(id: str, name: Optional[str] = None, original: Optional[str] = None, aliases: List[str] = <factory>, description: Optional[str] = None, image: Optional[veedb.apitypes.entities.character.CharacterImageInfo] = None, blood_type: Optional[Literal['a', 'b', 'ab', 'o']] = None, height: Optional[int] = None, weight: Optional[int] = None, bust: Optional[int] = None, waist: Optional[int] = None, hips: Optional[int] = None, cup: Optional[str] = None, age: Optional[int] = None, birthday: Optional[Tuple[int, int]] = None, sex: Optional[Tuple[Optional[Literal['m', 'f', 'b', 'n']], Optional[Literal['m', 'f', 'b', 'n']]]] = None, gender: Optional[Tuple[Optional[Literal['m', 'f', 'o', 'a']], Optional[Literal['m', 'f', 'o', 'a']]]] = None, vns: List[veedb.apitypes.entities.character.CharacterVNLink] = <factory>, traits: List[veedb.apitypes.entities.character.CharacterTraitLink] = <factory>)[source]

Bases: object

id: str
name: str | None = None
original: str | None = None
aliases: List[str]
description: str | None = None
image: CharacterImageInfo | None = None
blood_type: Literal['a', 'b', 'ab', 'o'] | None = None
height: int | None = None
weight: int | None = None
bust: int | None = None
waist: int | None = None
hips: int | None = None
cup: str | None = None
age: int | None = None
birthday: Tuple[int, int] | None = None
sex: Tuple[Literal['m', 'f', 'b', 'n'] | None, Literal['m', 'f', 'b', 'n'] | None] | None = None
gender: Tuple[Literal['m', 'f', 'o', 'a'] | None, Literal['m', 'f', 'o', 'a'] | None] | None = None
vns: List[CharacterVNLink]
traits: List[CharacterTraitLink]
__init__(id: str, name: str | None = None, original: str | None = None, aliases: List[str] = <factory>, description: str | None = None, image: CharacterImageInfo | None = None, blood_type: Literal['a', 'b', 'ab', 'o'] | None=None, height: int | None = None, weight: int | None = None, bust: int | None = None, waist: int | None = None, hips: int | None = None, cup: str | None = None, age: int | None = None, birthday: Tuple[int, int] | None=None, sex: Literal['m', 'f', 'b', 'n'] | None, ~typing.Literal['m', 'f', 'b', 'n'] | None] | None=None, gender: Literal['m', 'f', 'o', 'a'] | None, ~typing.Literal['m', 'f', 'o', 'a'] | None] | None=None, vns: List[CharacterVNLink] = <factory>, traits: List[CharacterTraitLink] = <factory>) None

Producer Entities

class veedb.apitypes.entities.producer.Producer(id: str, name: str | None = None, original: str | None = None, aliases: List[str] = <factory>, lang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, type: Optional[Literal['co', 'in', 'ng']]=None, description: str | None = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>)[source]

Bases: object

id: str
name: str | None = None
original: str | None = None
aliases: List[str]
lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None
type: Literal['co', 'in', 'ng'] | None = None
description: str | None = None
extlinks: List[Extlink]
__init__(id: str, name: str | None = None, original: str | None = None, aliases: List[str] = <factory>, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, type: Literal['co', 'in', 'ng'] | None=None, description: str | None = None, extlinks: List[Extlink] = <factory>) None

Release Entities

class veedb.apitypes.entities.release.ReleaseLanguageSpecific(lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'], title: str | None = None, latin: str | None = None, mtl: bool = False, main: bool = False)[source]

Bases: object

lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']
title: str | None = None
latin: str | None = None
mtl: bool = False
main: bool = False
__init__(lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'], title: str | None = None, latin: str | None = None, mtl: bool = False, main: bool = False) None
class veedb.apitypes.entities.release.ReleaseMedia(medium: str, qty: int | None = None)[source]

Bases: object

medium: str
qty: int | None = None
__init__(medium: str, qty: int | None = None) None
class veedb.apitypes.entities.release.ReleaseVNLink(id: str, rtype: Literal['trial', 'partial', 'complete'] | None = None, title: str | None = None, original_language: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None)[source]

Bases: object

id: str
rtype: Literal['trial', 'partial', 'complete'] | None = None
title: str | None = None
original_language: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None
__init__(id: str, rtype: Literal['trial', 'partial', 'complete'] | None = None, title: str | None = None, original_language: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None) None
class veedb.apitypes.entities.release.ReleaseProducerLink(id: str, developer: bool | None = None, publisher: bool | None = None, name: str | None = None, original_name: str | None = None, type: Literal['co', 'in', 'ng'] | None = None)[source]

Bases: object

id: str
developer: bool | None = None
publisher: bool | None = None
name: str | None = None
original_name: str | None = None
type: Literal['co', 'in', 'ng'] | None = None
__init__(id: str, developer: bool | None = None, publisher: bool | None = None, name: str | None = None, original_name: str | None = None, type: Literal['co', 'in', 'ng'] | None = None) None
class veedb.apitypes.entities.release.ReleaseImage(id: str | None, url: str | None, dims: List[int] | None, sexual: float | None, violence: float | None, votecount: int | None, type: Literal['pkgfront', 'pkgback', 'pkgcontent', 'pkgside', 'pkgmed', 'dig'], vn: str | None = None, languages: List[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']] | None = None, photo: bool = False, thumbnail: str | None = None, thumbnail_dims: Tuple[int, int] | None = None)[source]

Bases: ImageCommon

type: Literal['pkgfront', 'pkgback', 'pkgcontent', 'pkgside', 'pkgmed', 'dig']
vn: str | None = None
languages: List[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']] | None = None
photo: bool = False
thumbnail: str | None = None
thumbnail_dims: Tuple[int, int] | None = None
__init__(id: str | None, url: str | None, dims: List[int] | None, sexual: float | None, violence: float | None, votecount: int | None, type: Literal['pkgfront', 'pkgback', 'pkgcontent', 'pkgside', 'pkgmed', 'dig'], vn: str | None = None, languages: List[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']] | None = None, photo: bool = False, thumbnail: str | None = None, thumbnail_dims: Tuple[int, int] | None = None) None
class veedb.apitypes.entities.release.Release(id: str, title: Optional[str] = None, alttitle: Optional[str] = None, languages: List[veedb.apitypes.entities.release.ReleaseLanguageSpecific] = <factory>, platforms: List[Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']] = <factory>, media: List[veedb.apitypes.entities.release.ReleaseMedia] = <factory>, vns: List[veedb.apitypes.entities.release.ReleaseVNLink] = <factory>, producers: List[veedb.apitypes.entities.release.ReleaseProducerLink] = <factory>, images: List[veedb.apitypes.entities.release.ReleaseImage] = <factory>, released: Optional[str] = None, minage: Optional[int] = None, patch: bool = False, freeware: bool = False, uncensored: Optional[bool] = None, official: bool = False, has_ero: bool = False, resolution: Union[Literal['non-standard'], Tuple[int, int], NoneType] = None, engine: Optional[str] = None, voiced: Optional[Literal[1, 2, 3, 4]] = None, notes: Optional[str] = None, gtin: Optional[str] = None, catalog: Optional[str] = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>)[source]

Bases: object

id: str
title: str | None = None
alttitle: str | None = None
languages: List[ReleaseLanguageSpecific]
platforms: List[Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]
media: List[ReleaseMedia]
vns: List[ReleaseVNLink]
producers: List[ReleaseProducerLink]
images: List[ReleaseImage]
released: str | None = None
minage: int | None = None
patch: bool = False
freeware: bool = False
uncensored: bool | None = None
official: bool = False
has_ero: bool = False
resolution: Literal['non-standard'] | Tuple[int, int] | None = None
engine: str | None = None
voiced: Literal[1, 2, 3, 4] | None = None
notes: str | None = None
gtin: str | None = None
catalog: str | None = None
extlinks: List[Extlink]
__init__(id: str, title: str | None = None, alttitle: str | None = None, languages: List[ReleaseLanguageSpecific] = <factory>, platforms: Literal['win', 'lin', 'mac', 'web', 'tdo', 'ios', 'and', 'bdp', 'dos', 'dvd', 'drc', 'nes', 'sfc', 'fm7', 'fm8', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'swi', 'sw2', 'wii', 'wiu', 'n3d', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'ps5', 'psv', 'smd', 'scd', 'sat', 'vnd', 'x1s', 'x68', 'xb1', 'xb3', 'xbo', 'xxs', 'mob', 'oth']]=<factory>, media: List[ReleaseMedia] = <factory>, vns: List[ReleaseVNLink] = <factory>, producers: List[ReleaseProducerLink] = <factory>, images: List[ReleaseImage] = <factory>, released: str | None = None, minage: int | None = None, patch: bool = False, freeware: bool = False, uncensored: bool | None = None, official: bool = False, has_ero: bool = False, resolution: Tuple[int, int] | None=None, engine: str | None = None, voiced: Literal[1, 2, 3, 4] | None=None, notes: str | None = None, gtin: str | None = None, catalog: str | None = None, extlinks: List[Extlink] = <factory>) None

Staff Entities

class veedb.apitypes.entities.staff.StaffAlias(aid: int, name: str | None = None, ismain: bool | None = None, latin: str | None = None)[source]

Bases: object

aid: int
name: str | None = None
ismain: bool | None = None
latin: str | None = None
__init__(aid: int, name: str | None = None, ismain: bool | None = None, latin: str | None = None) None
class veedb.apitypes.entities.staff.Staff(id: str, aid: int | None = None, ismain: bool | None = None, name: str | None = None, original: str | None = None, lang: Optional[Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi']]=None, gender: Optional[Literal['m', 'f']]=None, description: str | None = None, extlinks: List[veedb.apitypes.common.Extlink] = <factory>, aliases: List[veedb.apitypes.entities.staff.StaffAlias] = <factory>)[source]

Bases: object

id: str
aid: int | None = None
ismain: bool | None = None
name: str | None = None
original: str | None = None
lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None = None
gender: Literal['m', 'f'] | None = None
description: str | None = None
extlinks: List[Extlink]
aliases: List[StaffAlias]
__init__(id: str, aid: int | None = None, ismain: bool | None = None, name: str | None = None, original: str | None = None, lang: Literal['ar', 'eu', 'be', 'bg', 'ca', 'ck', 'zh', 'zh-Hans', 'zh-Hant', 'hr', 'cs', 'da', 'nl', 'en', 'eo', 'fi', 'fr', 'gl', 'de', 'el', 'he', 'hi', 'hu', 'ga', 'id', 'it', 'iu', 'ja', 'kk', 'ko', 'la', 'lv', 'lt', 'mk', 'ms', 'ne', 'no', 'fa', 'pl', 'pt-br', 'pt-pt', 'ro', 'ru', 'gd', 'sr', 'sk', 'sl', 'es', 'sv', 'ta', 'th', 'tr', 'uk', 'ur', 'vi'] | None=None, gender: Literal['m', 'f'] | None=None, description: str | None = None, extlinks: List[Extlink] = <factory>, aliases: List[StaffAlias] = <factory>) None

Tag Entities

class veedb.apitypes.entities.tag.Tag(id: str, name: str | None = None, aliases: List[str] = <factory>, description: str | None = None, category: Optional[Literal['cont', 'ero', 'tech']]=None, searchable: bool | None = None, applicable: bool | None = None, vn_count: int | None = None)[source]

Bases: object

id: str
name: str | None = None
aliases: List[str]
description: str | None = None
category: Literal['cont', 'ero', 'tech'] | None = None
searchable: bool | None = None
applicable: bool | None = None
vn_count: int | None = None
__init__(id: str, name: str | None = None, aliases: List[str] = <factory>, description: str | None = None, category: Literal['cont', 'ero', 'tech'] | None=None, searchable: bool | None = None, applicable: bool | None = None, vn_count: int | None = None) None

Trait Entities

class veedb.apitypes.entities.trait.Trait(id: str, name: str | None = None, aliases: List[str] = <factory>, description: str | None = None, searchable: bool | None = None, applicable: bool | None = None, group_id: str | None = None, group_name: str | None = None, char_count: int | None = None)[source]

Bases: object

id: str
name: str | None = None
aliases: List[str]
description: str | None = None
searchable: bool | None = None
applicable: bool | None = None
group_id: str | None = None
group_name: str | None = None
char_count: int | None = None
__init__(id: str, name: str | None = None, aliases: List[str] = <factory>, description: str | None = None, searchable: bool | None = None, applicable: bool | None = None, group_id: str | None = None, group_name: str | None = None, char_count: int | None = None) None

Quote Entities

class veedb.apitypes.entities.quote.Quote(id: str, quote: str | None = None, score: int | None = None, vn: Dict[str, Any] | None = None, character: Dict[str, Any] | None = None)[source]

Bases: object

id: str
quote: str | None = None
score: int | None = None
vn: Dict[str, Any] | None = None
character: Dict[str, Any] | None = None
__init__(id: str, quote: str | None = None, score: int | None = None, vn: Dict[str, Any] | None = None, character: Dict[str, Any] | None = None) None

User List Entities

class veedb.apitypes.entities.ulist.UlistLabelInfo(id: int, label: str)[source]

Bases: object

id: int
label: str
__init__(id: int, label: str) None
class veedb.apitypes.entities.ulist.UlistReleaseInfo(id: str, list_status: Literal[0, 1, 2, 3, 4] | None = None, title: str | None = None)[source]

Bases: object

id: str
list_status: Literal[0, 1, 2, 3, 4] | None = None
title: str | None = None
__init__(id: str, list_status: Literal[0, 1, 2, 3, 4] | None = None, title: str | None = None) None
class veedb.apitypes.entities.ulist.UlistItem(id: str, added: int | None = None, voted: int | None = None, lastmod: int | None = None, vote: int | None = None, started: str | None = None, finished: str | None = None, notes: str | None = None, labels: List[veedb.apitypes.entities.ulist.UlistLabelInfo] = <factory>, vn: Optional[Dict[str, Any]]=<factory>, releases: List[veedb.apitypes.entities.ulist.UlistReleaseInfo] = <factory>)[source]

Bases: object

id: str
added: int | None = None
voted: int | None = None
lastmod: int | None = None
vote: int | None = None
started: str | None = None
finished: str | None = None
notes: str | None = None
labels: List[UlistLabelInfo]
vn: Dict[str, Any] | None
releases: List[UlistReleaseInfo]
__init__(id: str, added: int | None = None, voted: int | None = None, lastmod: int | None = None, vote: int | None = None, started: str | None = None, finished: str | None = None, notes: str | None = None, labels: List[UlistLabelInfo] = <factory>, vn: Dict[str, ~typing.Any] | None=<factory>, releases: List[UlistReleaseInfo] = <factory>) None
class veedb.apitypes.entities.ulist.UlistLabel(id: int, label: str, private: bool, count: int | None = None)[source]

Bases: object

id: int
label: str
private: bool
count: int | None = None
__init__(id: int, label: str, private: bool, count: int | None = None) None

User Entities

class veedb.apitypes.entities.user.User(id: str, username: str, lengthvotes: int | None = None, lengthvotes_sum: int | None = None)[source]

Bases: object

Represents a user object as returned by the GET /user endpoint.

id: str
username: str
lengthvotes: int | None = None
lengthvotes_sum: int | None = None
__init__(id: str, username: str, lengthvotes: int | None = None, lengthvotes_sum: int | None = None) None
class veedb.apitypes.entities.user.AuthInfo(id: str, username: str, permissions: List[str] = <factory>)[source]

Bases: object

Represents the authentication information as returned by GET /authinfo.

id: str
username: str
permissions: List[str]
__init__(id: str, username: str, permissions: List[str] = <factory>) None
class veedb.apitypes.entities.user.UserStats(chars: int, producers: int, releases: int, staff: int, tags: int, traits: int, vn: int)[source]

Bases: object

Represents the database statistics as returned by GET /stats. Note: The API documentation calls this endpoint GET /stats, and the response fields are direct counts for various entities.

chars: int
producers: int
releases: int
staff: int
tags: int
traits: int
vn: int
__init__(chars: int, producers: int, releases: int, staff: int, tags: int, traits: int, vn: int) None