CinefinTV
Android TV Client for Jellyfin
Install / Use
npx skills add rpeters1430/CinefinTVInstalls into whichever agent you are using.
Gemini Rules
Gemini CLI config
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Skill content
View source on GitHubThis file defines the schema for the WATCH vertical in the Engage SDK.
{
"client": "com.google.android.engage.service.AppEngagePublishClient",
"clusterTypes": [
"TYPE_RECOMMENDATION",
"TYPE_FEATURED",
"TYPE_CONTINUATION"
],
"entities": {
"MovieEntity": {
"package": "com.google.android.engage.video.datamodel.MovieEntity",
"fields": {
"entityId": {
"type": "String",
"requirement": "Optional",
"setter": "setEntityId(String)",
"getter": "getEntityId()"
},
"posterImages": {
"type": "List<Image>",
"requirement": "Required",
"adder": "addPosterImage(Image)",
"getter": "getPosterImages()",
"adderAll": "addPosterImages(List<Image>)"
},
"name": {
"type": "String",
"requirement": "Required",
"setter": "setName(String)",
"getter": "getName()"
},
"lastEngagementTimeMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setLastEngagementTimeMillis(long)",
"getter": "getLastEngagementTimeMillis()",
"requiredFor": [
"ContinuationCluster"
]
},
"watchNextType": {
"type": "@WatchNextType int",
"requirement": "Optional",
"setter": "setWatchNextType(@WatchNextType int)",
"getter": "getWatchNextType()",
"requiredFor": [
"ContinuationCluster"
]
},
"lastPlayBackPositionTimeMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setLastPlayBackPositionTimeMillis(long)",
"getter": "getLastPlayBackPositionTimeMillis()",
"requiredFor": [
"ContinuationCluster"
]
},
"availabilityTimeWindows": {
"type": "List<DisplayTimeWindow>",
"requirement": "Optional",
"adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
"getter": "getAvailabilityTimeWindows()"
},
"allAvailabilityTimeWindows": {
"type": "List<List<DisplayTimeWindow>>",
"requirement": "Optional",
"adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
"adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
},
"playBackUri": {
"type": "Uri",
"requirement": "Required",
"setter": "setPlayBackUri(Uri)",
"getter": "getPlayBackUri()"
},
"infoPageUri": {
"type": "Uri",
"requirement": "Optional",
"setter": "setInfoPageUri(Uri)",
"getter": "getInfoPageUri()"
},
"releaseDateEpochMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setReleaseDateEpochMillis(long)",
"getter": "getReleaseDateEpochMillis()"
},
"availability": {
"type": "@ContentAvailability int",
"requirement": "Required",
"setter": "setAvailability(@ContentAvailability int)",
"getter": "getAvailability()"
},
"durationMillis": {
"type": "Long",
"requirement": "Required",
"setter": "setDurationMillis(long)",
"getter": "getDurationMillis()"
},
"genres": {
"type": "List<String>",
"requirement": "Optional",
"adder": "addGenre(String)",
"getter": "getGenres()",
"adderAll": "addGenres(List<String>)"
},
"contentRatings": {
"type": "List<String>",
"requirement": "Required",
"adder": "addContentRating(RatingSystem)",
"getter": "getContentRatings()",
"adderAll": "addContentRatings(List<RatingSystem>)"
},
"contentRatingsLegacies": {
"type": "List<List<String>>",
"requirement": "Required",
"adder": "addContentRatingsLegacy(String)",
"getter": "getContentRatingsLegacy()",
"adderAll": "addContentRatingsLegacy(List<String>)"
},
"downloadedOnDevice": {
"type": "Boolean",
"requirement": "Optional",
"setter": "setDownloadedOnDevice(boolean)",
"getter": "isDownloadedOnDevice()"
},
"price": {
"type": "Price",
"requirement": "Optional",
"setter": "setPrice(Price)",
"getter": "getPrice()"
},
"platformSpecificPlaybackUris": {
"type": "List<PlatformSpecificUri>",
"requirement": "Optional",
"adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
"getter": "getPlatformSpecificPlaybackUris()",
"adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
},
"recommendationReason": {
"type": "@NonNull RecommendationReason",
"requirement": "Optional",
"setter": "setRecommendationReason(@NonNull RecommendationReason)",
"getter": "getRecommendationReason()"
},
"description": {
"type": "@NonNull String",
"requirement": "Optional",
"setter": "setDescription(@NonNull String)",
"getter": "getDescription()"
},
"callToActionText": {
"requirement": "Optional",
"setter": "setCallToActionText(@NonNull String)",
"type": "@NonNull String",
"getter": "getCallToActionText()"
},
"tags": {
"requirement": "Optional",
"adder": "addTag(@NonNull String)",
"type": "List<@NonNull String>",
"adderAll": "addTags(List<String>)",
"getter": "getTags()"
}
}
},
"TvShowEntity": {
"package": "com.google.android.engage.video.datamodel.TvShowEntity",
"fields": {
"entityId": {
"type": "String",
"requirement": "Optional",
"setter": "setEntityId(String)",
"getter": "getEntityId()"
},
"posterImages": {
"type": "List<Image>",
"requirement": "Required",
"adder": "addPosterImage(Image)",
"getter": "getPosterImages()",
"adderAll": "addPosterImages(List<Image>)"
},
"name": {
"type": "String",
"requirement": "Required",
"setter": "setName(String)",
"getter": "getName()"
},
"lastEngagementTimeMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setLastEngagementTimeMillis(long)",
"getter": "getLastEngagementTimeMillis()",
"requiredFor": [
"ContinuationCluster"
]
},
"watchNextType": {
"type": "@WatchNextType int",
"requirement": "Optional",
"setter": "setWatchNextType(@WatchNextType int)",
"getter": "getWatchNextType()",
"requiredFor": [
"ContinuationCluster"
]
},
"lastPlayBackPositionTimeMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setLastPlayBackPositionTimeMillis(long)",
"getter": "getLastPlayBackPositionTimeMillis()",
"requiredFor": [
"ContinuationCluster"
]
},
"availabilityTimeWindows": {
"type": "List<DisplayTimeWindow>",
"requirement": "Optional",
"adder": "addAvailabilityTimeWindow(DisplayTimeWindow)",
"getter": "getAvailabilityTimeWindows()"
},
"allAvailabilityTimeWindows": {
"type": "List<List<DisplayTimeWindow>>",
"requirement": "Optional",
"adder": "addAllAvailabilityTimeWindows(DisplayTimeWindow)",
"adderAll": "addAllAvailabilityTimeWindows(List<DisplayTimeWindow>)"
},
"infoPageUri": {
"type": "Uri",
"requirement": "Required",
"setter": "setInfoPageUri(Uri)",
"getter": "getInfoPageUri()"
},
"playBackUri": {
"type": "Uri",
"requirement": "Optional",
"setter": "setPlayBackUri(Uri)",
"getter": "getPlayBackUri()"
},
"firstEpisodeAirDateEpochMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setFirstEpisodeAirDateEpochMillis(long)",
"getter": "getFirstEpisodeAirDateEpochMillis()"
},
"latestEpisodeAirDateEpochMillis": {
"type": "Long",
"requirement": "Optional",
"setter": "setLatestEpisodeAirDateEpochMillis(long)",
"getter": "getLatestEpisodeAirDateEpochMillis()"
},
"availability": {
"type": "@ContentAvailability int",
"requirement": "Required",
"setter": "setAvailability(@ContentAvailability int)",
"getter": "getAvailability()"
},
"seasonCount": {
"type": "Integer",
"requirement": "Required",
"setter": "setSeasonCount(int)",
"getter": "getSeasonCount()"
},
"genres": {
"type": "List<String>",
"requirement": "Optional",
"adder": "addGenre(String)",
"getter": "getGenres()",
"adderAll": "addGenres(List<String>)"
},
"contentRatings": {
"type": "List<String>",
"requirement": "Required",
"adder": "addContentRating(RatingSystem)",
"getter": "getContentRatings()",
"adderAll": "addContentRatings(List<RatingSystem>)"
},
"contentRatingsLegacies": {
"type": "List<List<String>>",
"requirement": "Required",
"adder": "addContentRatingsLegacy(String)",
"getter": "getContentRatingsLegacy()",
"adderAll": "addContentRatingsLegacy(List<String>)"
},
"price": {
"type": "Price",
"requirement": "Optional",
"setter": "setPrice(Price)",
"getter": "getPrice()"
},
"platformSpecificPlaybackUris": {
"type": "List<PlatformSpecificUri>",
"requirement": "Required",
"adder": "addPlatformSpecificPlaybackUri(PlatformSpecificUri)",
"getter": "getPlatformSpecificPlaybackUris()",
"adderAll": "addPlatformSpecificPlaybackUris(List<PlatformSpecificUri>)"
},
"recommendationReason": {
"type": "@NonNull RecommendationReason",
"requirement": "Optional",
"setter": "setRecommendationReason(@NonNull RecommendationReason)",
"getter": "getRecommendationReason()"
},
"descriptio
Truncated for display — read the full file on GitHub.
Related Skills
career-ops
72.4kOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)
ai-job-search
43.6kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.6kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
guizang-ppt-skill
26.7kAI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts, social covers, and a WebGL/low-power presentation runtime.
Security Score
Audited on Invalid Date
