Skip to content

Skin Integration

haywirephoenix edited this page Oct 26, 2026 · 1 revision

This page is for skin authors. Floppy items carry ListItem properties a skin's info dialog can use, so its buttons work for Floppy items as well as library ones. A skin can also tell Floppy what it's playing, so plays started from the skin are tracked and resumed.

ListItem properties

Property On Use
floppy.play_path Movies, episodes Play / Resume button: RunPlugin($INFO[ListItem.Property(floppy.play_path)]). Add &noresume=1 for "play from beginning".
floppy.seasons_path Shows Episodes button: ActivateWindow(Videos,"$INFO[ListItem.Property(floppy.seasons_path)]",return)
floppy.next_play_path Shows with a next episode Play next episode button: RunPlugin($INFO[ListItem.Property(floppy.next_play_path)])
floppy.next_label Shows with a next episode The next episode's code, e.g. S01E04
floppy.status Tracked movies and shows Floppy status: 0 Planning (on the watchlist), 1 In progress, 2 Paused, 3 Completed, 4 Dropped. Empty when Floppy doesn't track the item.
floppy.remove_watchlist_path Tracked movies and shows Remove from watchlist: RunPlugin($INFO[ListItem.Property(floppy.remove_watchlist_path)]). It asks first, and only removes Planning entries.
floppy.episodes_left Tracked shows Released episodes still to watch
floppy.air_datetime Calendar items Air or release date and time
tmdb_id, tmdb_type Items with a TMDb id TMDb id and type (movie or tv; episodes give their show's)
tvshow.tmdb_id Episodes The show's TMDb id
tvshow.tvdb_id Episodes The show's TVDb id, when known
tvshow.imdb_id Episodes The show's IMDb id, when Floppy knows it from show-level data
  • Add a condition such as !String.IsEmpty(ListItem.Property(floppy.play_path)) to the skin's own button actions so they don't also fire for Floppy items.
  • Watchlist buttons: show "Add" when String.IsEmpty(ListItem.Property(floppy.status)) and "Remove" when String.IsEqual(ListItem.Property(floppy.status),0).
  • Season items also set Kodi's standard TotalEpisodes, WatchedEpisodes and UnWatchedEpisodes properties from Floppy.
  • Movies and shows set unique ids tmdb, imdb and tvdb. The default is imdb when known, so ListItem.IMDBNumber is the IMDb id. Episodes keep the show's ids out of their unique ids and use the tvshow.* properties instead.

Telling Floppy what is playing

floppy.play_path goes through Floppy's own play route, which tells the service what's about to play. A skin that plays through its own paths can do the same by setting these Home window properties just before PlayMedia:

Property Value
floppy.play.kind movie or episode (required)
floppy.play.tmdb, floppy.play.imdb, floppy.play.tvdb At least one. Episodes use the show's ids and match on tmdb or tvdb; movies match on tmdb or imdb.
floppy.play.season, floppy.play.episode Required for episodes
floppy.play.title Optional: the show title for episodes, used to find the show by name when there's no TMDb id
floppy.play.resume Optional: leave it unset to look up Floppy's saved position, a number of seconds to use that position, or 0 to start from the beginning

For example, for an episode:

SetProperty(floppy.play.kind,episode,home)
SetProperty(floppy.play.tmdb,$INFO[ListItem.Property(tvshow.tmdb_id)],home)
SetProperty(floppy.play.tvdb,$INFO[ListItem.Property(tvshow.tvdb_id)],home)
SetProperty(floppy.play.season,$INFO[ListItem.Season],home)
SetProperty(floppy.play.episode,$INFO[ListItem.Episode],home)
SetProperty(floppy.play.title,$INFO[ListItem.TVShowTitle],home)
ClearProperty(floppy.play.imdb,home)
ClearProperty(floppy.play.resume,home)
PlayMedia(...)

Set or clear every property each time, so nothing is left over from an earlier item. The service uses them when the next video starts and then clears them. If no video starts within 3 minutes, they're dropped.

Background trailers

While the Home window property ultra.bg.trailer is set, Floppy ignores playback: nothing is tracked, saved or resumed, and a pending floppy.play.* hand-off is kept for the real video. Set it before a background trailer starts and clear it once the trailer has fully stopped.

Kodi itself reloads widgets that have no sort order whenever playback starts or stops, so widgets still reload around trailers unless the skin gives them a sort order.

Clone this wiki locally