"""The query root for this schema""" type Query { # Filters findSavedFilter(id: ID!): SavedFilter findSavedFilters(mode: FilterMode): [SavedFilter!]! findDefaultFilter(mode: FilterMode!): SavedFilter """Find a scene by ID or Checksum""" findScene(id: ID, checksum: String): Scene findSceneByHash(input: SceneHashInput!): Scene """A function which queries Scene objects""" findScenes(scene_filter: SceneFilterType, scene_ids: [Int!], filter: FindFilterType): FindScenesResultType! findScenesByPathRegex(filter: FindFilterType): FindScenesResultType! """ Returns any groups of scenes that are perceptual duplicates within the queried distance """ findDuplicateScenes(distance: Int): [[Scene!]!]! """Return valid stream paths""" sceneStreams(id: ID): [SceneStreamEndpoint!]! parseSceneFilenames(filter: FindFilterType, config: SceneParserInput!): SceneParserResultType! """A function which queries SceneMarker objects""" findSceneMarkers(scene_marker_filter: SceneMarkerFilterType filter: FindFilterType): FindSceneMarkersResultType! findImage(id: ID, checksum: String): Image """A function which queries Scene objects""" findImages(image_filter: ImageFilterType, image_ids: [Int!], filter: FindFilterType): FindImagesResultType! """Find a performer by ID""" findPerformer(id: ID!): Performer """A function which queries Performer objects""" findPerformers(performer_filter: PerformerFilterType, filter: FindFilterType): FindPerformersResultType! """Find a studio by ID""" findStudio(id: ID!): Studio """A function which queries Studio objects""" findStudios(studio_filter: StudioFilterType, filter: FindFilterType): FindStudiosResultType! """Find a movie by ID""" findMovie(id: ID!): Movie """A function which queries Movie objects""" findMovies(movie_filter: MovieFilterType, filter: FindFilterType): FindMoviesResultType! findGallery(id: ID!): Gallery findGalleries(gallery_filter: GalleryFilterType, filter: FindFilterType): FindGalleriesResultType! findTag(id: ID!): Tag findTags(tag_filter: TagFilterType, filter: FindFilterType): FindTagsResultType! """Retrieve random scene markers for the wall""" markerWall(q: String): [SceneMarker!]! """Retrieve random scenes for the wall""" sceneWall(q: String): [Scene!]! """Get marker strings""" markerStrings(q: String, sort: String): [MarkerStringsResultType]! """Get stats""" stats: StatsResultType! """Organize scene markers by tag for a given scene ID""" sceneMarkerTags(scene_id: ID!): [SceneMarkerTag!]! logs: [LogEntry!]! # Scrapers """List available scrapers""" listScrapers(types: [ScrapeContentType!]!): [Scraper!]! listPerformerScrapers: [Scraper!]! @deprecated(reason: "Use listScrapers(types: [PERFORMER])") listSceneScrapers: [Scraper!]! @deprecated(reason: "Use listScrapers(types: [SCENE])") listGalleryScrapers: [Scraper!]! @deprecated(reason: "Use listScrapers(types: [GALLERY])") listMovieScrapers: [Scraper!]! @deprecated(reason: "Use listScrapers(types: [MOVIE])") """Scrape for a single scene""" scrapeSingleScene(source: ScraperSourceInput!, input: ScrapeSingleSceneInput!): [ScrapedScene!]! """Scrape for multiple scenes""" scrapeMultiScenes(source: ScraperSourceInput!, input: ScrapeMultiScenesInput!): [[ScrapedScene!]!]! """Scrape for a single performer""" scrapeSinglePerformer(source: ScraperSourceInput!, input: ScrapeSinglePerformerInput!): [ScrapedPerformer!]! """Scrape for multiple performers""" scrapeMultiPerformers(source: ScraperSourceInput!, input: ScrapeMultiPerformersInput!): [[ScrapedPerformer!]!]! """Scrape for a single gallery""" scrapeSingleGallery(source: ScraperSourceInput!, input: ScrapeSingleGalleryInput!): [ScrapedGallery!]! """Scrape for a single movie""" scrapeSingleMovie(source: ScraperSourceInput!, input: ScrapeSingleMovieInput!): [ScrapedMovie!]! "Scrapes content based on a URL" scrapeURL(url: String!, ty: ScrapeContentType!): ScrapedContent """Scrapes a complete performer record based on a URL""" scrapePerformerURL(url: String!): ScrapedPerformer """Scrapes a complete scene record based on a URL""" scrapeSceneURL(url: String!): ScrapedScene """Scrapes a complete gallery record based on a URL""" scrapeGalleryURL(url: String!): ScrapedGallery """Scrapes a complete movie record based on a URL""" scrapeMovieURL(url: String!): ScrapedMovie """Scrape a list of performers based on name""" scrapePerformerList(scraper_id: ID!, query: String!): [ScrapedPerformer!]! @deprecated(reason: "use scrapeSinglePerformer") """Scrapes a complete performer record based on a scrapePerformerList result""" scrapePerformer(scraper_id: ID!, scraped_performer: ScrapedPerformerInput!): ScrapedPerformer @deprecated(reason: "use scrapeSinglePerformer") """Scrapes a complete scene record based on an existing scene""" scrapeScene(scraper_id: ID!, scene: SceneUpdateInput!): ScrapedScene @deprecated(reason: "use scrapeSingleScene") """Scrapes a complete gallery record based on an existing gallery""" scrapeGallery(scraper_id: ID!, gallery: GalleryUpdateInput!): ScrapedGallery @deprecated(reason: "use scrapeSingleGallery") """Scrape a list of performers from a query""" scrapeFreeonesPerformerList(query: String!): [String!]! @deprecated(reason: "use scrapeSinglePerformer with scraper_id = builtin_freeones") # Plugins """List loaded plugins""" plugins: [Plugin!] """List available plugin operations""" pluginTasks: [PluginTask!] # Config """Returns the current, complete configuration""" configuration: ConfigResult! """Returns an array of paths for the given path""" directory( "The directory path to list" path: String, "Desired collation locale. Determines the order of the directory result. eg. 'en-US', 'pt-BR', ..." locale: String = "en" ): Directory! validateStashBoxCredentials(input: StashBoxInput!): StashBoxValidationResult! # System status systemStatus: SystemStatus! # Job status jobQueue: [Job!] findJob(input: FindJobInput!): Job dlnaStatus: DLNAStatus! # Get everything allPerformers: [Performer!]! allStudios: [Studio!]! allMovies: [Movie!]! allTags: [Tag!]! # Get everything with minimal metadata # Version version: Version! # LatestVersion latestversion: ShortVersion! } type Mutation { setup(input: SetupInput!): Boolean! migrate(input: MigrateInput!): Boolean! sceneCreate(input: SceneCreateInput!): Scene sceneUpdate(input: SceneUpdateInput!): Scene sceneMerge(input: SceneMergeInput!): Scene bulkSceneUpdate(input: BulkSceneUpdateInput!): [Scene!] sceneDestroy(input: SceneDestroyInput!): Boolean! scenesDestroy(input: ScenesDestroyInput!): Boolean! scenesUpdate(input: [SceneUpdateInput!]!): [Scene] """Increments the o-counter for a scene. Returns the new value""" sceneIncrementO(id: ID!): Int! """Decrements the o-counter for a scene. Returns the new value""" sceneDecrementO(id: ID!): Int! """Resets the o-counter for a scene to 0. Returns the new value""" sceneResetO(id: ID!): Int! """Sets the resume time point (if provided) and adds the provided duration to the scene's play duration""" sceneSaveActivity(id: ID!, resume_time: Float, playDuration: Float): Boolean! """Increments the play count for the scene. Returns the new play count value.""" sceneIncrementPlayCount(id: ID!): Int! """Generates screenshot at specified time in seconds. Leave empty to generate default screenshot""" sceneGenerateScreenshot(id: ID!, at: Float): String! sceneMarkerCreate(input: SceneMarkerCreateInput!): SceneMarker sceneMarkerUpdate(input: SceneMarkerUpdateInput!): SceneMarker sceneMarkerDestroy(id: ID!): Boolean! sceneAssignFile(input: AssignSceneFileInput!): Boolean! imageUpdate(input: ImageUpdateInput!): Image bulkImageUpdate(input: BulkImageUpdateInput!): [Image!] imageDestroy(input: ImageDestroyInput!): Boolean! imagesDestroy(input: ImagesDestroyInput!): Boolean! imagesUpdate(input: [ImageUpdateInput!]!): [Image] """Increments the o-counter for an image. Returns the new value""" imageIncrementO(id: ID!): Int! """Decrements the o-counter for an image. Returns the new value""" imageDecrementO(id: ID!): Int! """Resets the o-counter for a image to 0. Returns the new value""" imageResetO(id: ID!): Int! galleryCreate(input: GalleryCreateInput!): Gallery galleryUpdate(input: GalleryUpdateInput!): Gallery bulkGalleryUpdate(input: BulkGalleryUpdateInput!): [Gallery!] galleryDestroy(input: GalleryDestroyInput!): Boolean! galleriesUpdate(input: [GalleryUpdateInput!]!): [Gallery] addGalleryImages(input: GalleryAddInput!): Boolean! removeGalleryImages(input: GalleryRemoveInput!): Boolean! performerCreate(input: PerformerCreateInput!): Performer performerUpdate(input: PerformerUpdateInput!): Performer performerDestroy(input: PerformerDestroyInput!): Boolean! performersDestroy(ids: [ID!]!): Boolean! bulkPerformerUpdate(input: BulkPerformerUpdateInput!): [Performer!] studioCreate(input: StudioCreateInput!): Studio studioUpdate(input: StudioUpdateInput!): Studio studioDestroy(input: StudioDestroyInput!): Boolean! studiosDestroy(ids: [ID!]!): Boolean! movieCreate(input: MovieCreateInput!): Movie movieUpdate(input: MovieUpdateInput!): Movie movieDestroy(input: MovieDestroyInput!): Boolean! moviesDestroy(ids: [ID!]!): Boolean! bulkMovieUpdate(input: BulkMovieUpdateInput!): [Movie!] tagCreate(input: TagCreateInput!): Tag tagUpdate(input: TagUpdateInput!): Tag tagDestroy(input: TagDestroyInput!): Boolean! tagsDestroy(ids: [ID!]!): Boolean! tagsMerge(input: TagsMergeInput!): Tag deleteFiles(ids: [ID!]!): Boolean! # Saved filters saveFilter(input: SaveFilterInput!): SavedFilter! destroySavedFilter(input: DestroyFilterInput!): Boolean! setDefaultFilter(input: SetDefaultFilterInput!): Boolean! """Change general configuration options""" configureGeneral(input: ConfigGeneralInput!): ConfigGeneralResult! configureInterface(input: ConfigInterfaceInput!): ConfigInterfaceResult! configureDLNA(input: ConfigDLNAInput!): ConfigDLNAResult! configureScraping(input: ConfigScrapingInput!): ConfigScrapingResult! configureDefaults(input: ConfigDefaultSettingsInput!): ConfigDefaultSettingsResult! # overwrites the entire UI configuration configureUI(input: Map!): Map! # sets a single UI key value configureUISetting(key: String!, value: Any): Map! """Generate and set (or clear) API key""" generateAPIKey(input: GenerateAPIKeyInput!): String! """Returns a link to download the result""" exportObjects(input: ExportObjectsInput!): String """Performs an incremental import. Returns the job ID""" importObjects(input: ImportObjectsInput!): ID! """Start an full import. Completely wipes the database and imports from the metadata directory. Returns the job ID""" metadataImport: ID! """Start a full export. Outputs to the metadata directory. Returns the job ID""" metadataExport: ID! """Start a scan. Returns the job ID""" metadataScan(input: ScanMetadataInput!): ID! """Start generating content. Returns the job ID""" metadataGenerate(input: GenerateMetadataInput!): ID! """Start auto-tagging. Returns the job ID""" metadataAutoTag(input: AutoTagMetadataInput!): ID! """Clean metadata. Returns the job ID""" metadataClean(input: CleanMetadataInput!): ID! """Identifies scenes using scrapers. Returns the job ID""" metadataIdentify(input: IdentifyMetadataInput!): ID! """Migrate generated files for the current hash naming""" migrateHashNaming: ID! """Anonymise the database in a separate file. Optionally returns a link to download the database file""" anonymiseDatabase(input: AnonymiseDatabaseInput!): String """Reload scrapers""" reloadScrapers: Boolean! """Run plugin task. Returns the job ID""" runPluginTask(plugin_id: ID!, task_name: String!, args: [PluginArgInput!]): ID! reloadPlugins: Boolean! stopJob(job_id: ID!): Boolean! stopAllJobs: Boolean! """Submit fingerprints to stash-box instance""" submitStashBoxFingerprints(input: StashBoxFingerprintSubmissionInput!): Boolean! """Submit scene as draft to stash-box instance""" submitStashBoxSceneDraft(input: StashBoxDraftSubmissionInput!): ID """Submit performer as draft to stash-box instance""" submitStashBoxPerformerDraft(input: StashBoxDraftSubmissionInput!): ID """Backup the database. Optionally returns a link to download the database file""" backupDatabase(input: BackupDatabaseInput!): String """Run batch performer tag task. Returns the job ID.""" stashBoxBatchPerformerTag(input: StashBoxBatchPerformerTagInput!): String! """Enables DLNA for an optional duration. Has no effect if DLNA is enabled by default""" enableDLNA(input: EnableDLNAInput!): Boolean! """Disables DLNA for an optional duration. Has no effect if DLNA is disabled by default""" disableDLNA(input: DisableDLNAInput!): Boolean! """Enables an IP address for DLNA for an optional duration""" addTempDLNAIP(input: AddTempDLNAIPInput!): Boolean! """Removes an IP address from the temporary DLNA whitelist""" removeTempDLNAIP(input: RemoveTempDLNAIPInput!): Boolean! } type Subscription { """Update from the metadata manager""" jobsSubscribe: JobStatusUpdate! loggingSubscribe: [LogEntry!]! scanCompleteSubscribe: Boolean! } schema { query: Query mutation: Mutation subscription: Subscription }