query GetSerializedShotPaths($filterInput: FilterInput!) { getShots(filterInput: $filterInput) { id videoId startFrame endFrame serializedShotPaths { b64EncodedBuffer } } } query GetShotAnnotationTypes { getShotAnnotationTypes { id name } } mutation UpdateShotAnnotations( $shotId: Int! $annotations: [UpdateAnnotationInputGQL!]! ) { updateShotAnnotations(shotId: $shotId, annotations: $annotations) { shot { id annotations { shotId type { id name } notes } } error { shotId msg } } } query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) { getShotsWithMetadata(filterInput: $filterInput, limit: $limit) { ids shots { id videoId video { screenshotUri endTime } } } } ## Reserved for playlists (which are created from a filter) query GetShotsWithMetadataFilterResult( $filterInput: FilterInput! $shotsOrdering: GetShotsOrdering $limit: Int $ids: [Int!] ) { getOrderedShots( filterInput: $filterInput shotsOrdering: $shotsOrdering limit: $limit ids: $ids ) { count shots { ...ShotWithAllFeatures } ids } } # TODO: Delete query GetShotsWithMetadata( $filterInput: FilterInput! $shotsPagination: GetShotsPagination $limit: Int $ids: [Int!] ) { getShotsWithMetadata( filterInput: $filterInput shotsPagination: $shotsPagination limit: $limit ids: $ids ) { count shots { ...ShotWithAllFeatures } ids } } query GetShotsByIds($ids: [Int!]!) { getShotsByIds(ids: $ids) { ...ShotWithAllFeatures } } fragment ShotWithAllFeatures on ShotGQL { id videoId startFrame endFrame startTime @client endTime @client user { id } falsePositiveScore createdAt updatedAt cueObjectFeatures { cueObjectDistance cueObjectAngle cueBallSpeed shotDirection spinType } pocketingIntentionFeatures { make targetPocketDistance targetPocketAngle targetPocketAngleDirection marginOfErrorInDegrees intendedPocketType } pocketingIntentionInfo { ballId pocketId pathMetadataIndex } serializedShotPaths { b64EncodedBuffer } annotations { shotId type { id name } notes } }