Developer and skinner information - accident12123/eversion GitHub Wiki

I would like to encourage everyone to take their interface ideas and go nuts with Eversion. Eversion is a work in progress and as you need options we look forward to working with you to help you achieve them.

Understanding Eversion

Before diving into making an eskin, it's a good idea to understand the basics behind how Eversion works internally. Unfortunately we're still working out legalities to open source the project but until then, this should help speed up what's happening behind the screen.

Eversion itself is a very simple system that you have almost full control over. Eversion can be thought of a slighltly more intelligent dumb terminal. You setup the parameters of what it should do and Eversion handles the rest.

The "screen"

Eversion design is based on the concept I call a screen. A screen is an interactive layer on the tv screen.

For example, you have the home screen which provides you an interactive menu of choices. If you select one of the indexes, you go into a new screen and the technical memory needs has the old screen "hibernate" until needed again.

If you press menu a new screen is loaded but the old screen only partially hibernates because it is still visible to the use. Internally, the remote control is focused on the new screen that appeared and key commands stop going to the old screen. Even an error message is a screen with 1 button to exit.

Another way to look at it, everytime the user needs to press the back/return key on the remote to step back 1 step, that is a screen. There are some cases where you might want back to drop back several screens and you have that ability. We'll cover that in our more detailed reference sections.

Segments

Segments are the interactive subsection of screen. It could be as simple as an OK button or as complex and 50,000 video titles. Depending on your desired interaction to achieve your vision of the skin you can disable certain features that are in the way for your segment.

Tiles

A segment consists of many tiles. A tile could be a simple selectable text prompt, some artwork like a poster or banner, or a complex/compound collection of both. Anything the user can move a cursor to is a tile.

Data sources

Every segment needs a source of data. It could be hard coded menu options, jukebox data or a combination of both.

Design Basics of an Eskin

An Eversion skin is a series of control files to tell Eversion what to do. To achieve the best speed and flexibility, the skin file format is XML. While we could use another format, this offers us the best speed with flashlite as it's the native format for data read in.

File Layout

Inside the Eversion skin folder is the eskin folder. All files associated with a skin live within their own folder. In addition there are special shared skin to help fill in the common artwork and pieces that might be used by many different eskins.

Folder layout

  • eskins/
    • shared/ (the special shared skin folder)
      • media/ (shared artwork folder)
        • Company/ (the studio artwork pack if installed)
      • code/
    • evstreamed/ (example eskin folder named after the eskin)
      • settings.xml (user supplied eskin settings file)
      • settings-default.xml (default skin settings file)
      • (maxaddress).xml (special per hardware player settings file)
      • media/ (folder for all artwork used by the skin)
        • folders/ (skinner choice for media layout, you can have an little or as many folders as you need)
      • code/ (the eskin control files)

eSkin code files

Everything in your eskin starts with the special load.skin file. This is the master control file used to load you skin, setup global information like how to display an error message, etc etc..

Different display options get their own files. Using our default infowall skin. the infowall view starts with a file called infowall. infowallbanner is it's own file. You can include additional files that have common features. For instance, all of the infowall screens only have 1 tiny piece thats different based on the image choice.

Some parts of your eskin are options (popups, etc), these automatically fill in from the shared eskin. As we come up with code sniplets you can include in your skins, we'll share them in this eskin. Also if there is artwork that everyone could use, we distribute it in here.

Supporting other languages

Anything on the screen that the user can translate or change should be in a prompt. You can use any of the existing prompts or create your own new ones. Part of your skin code will define what the default prompt file is called. This will always be read in to fill in the missing prompts for the user. For the prompts supplied by Eversion, those will always be English as that is my native language.

Creating your skin

All skin files are processed in a top down fashion in the file. Flashlite draws everything on the screen in a bottom up manor. When layering artwork and data on top of each other, you must add the options from the background to the foreground. Also some things are time consuming or not available in flashlite. For example, we can't tell if fanart is missing on the drive so you will want to make sure your background is behind it. It also offers a smoother experience for indexes where there is that moment of nothing in the background.

Hyperscroll and your eskin

As you probably already know, hyperscroll is the primary reason Eversion can get more speed out of lower end hardware. It works by drawing the screen based on how fast the user is navigating around it. This is controlled by the drawlevel in your eskin. It's a simple number range of 1 to 4. 4 being always drawn. This only applies to your segments. The actual artwork and text that appears to make the screen design is not part of hyperscroll.

Hyperscroll levels only impact the additional data that appears as you move between selections in your segment. The actual tiles appearing and drawing are internally handled based on user options for preference. You do have the ability to override that behavior but it's not recommended.

When we design the hyperscroll levels, we look at it by how long the user needs to wait to move again.

  • Fanart and lots of small images are usually grouped into layer 1. These are the most time consuming to load and display. Items like icons for video codecs are an example of lots of small images.
  • Other artwork like posters we usually group in to layer 2. Once you get the artwork that isn't needed to scroll around, you see a nice speed leap.
  • Layer 3 we sometimes add in text information but text is pretty quick (unless you have a lot of it).. this is a good place for text related artwork like stars for a rating.
  • Everything you want to stay on the screen no matter what should be grouped into layer 4. For us this is usually the title of the selection when it's artwork based. Not required but if artwork is missing might be needed to know where they are on the choices.

What levels you use for what is up to you. Every level is not required. You will want to test your eskin with speed early on. If you expect to move around quick and you can't, usually it's because of your choices for what data is on each level.

Special note to popbox owners: The popbox actually runs eversion the fastest of all the syabas players. The other units have more overhead and less memory and it impacts it. Keep in mind that while your flying in your eskin, it may not be the same experience to pch owners.

Hyperscroll and when blocks draw on the screen

Segments have data that load into them. Sometimes it's information that never changes, other times it needs to update every movement. Using the segname and hyper options in some blocks controls when eversion should display things on the screen.

  • SEGNAME only: draw it immediately after the segment loads.
  • SEGNAME and HYPER: draw it everytime you move in the segment but follows the hyper rules listed above
  • SEGNAME and HYPER missing and HYPER only: draw it immediately when the eskin is loaded.

NOTE: remember segname needs to made the name of the segment, this is for the future when you might have different segments changing different data on the screen.

When should I use these settings?

  • If it's artwork to show for your interface that is always needed, don't use segname or hyper
  • If it's information or artwork to load using information from the segment but will never change use only the segname.
  • If it's going to change as you move around the segment, use segname and hyper.

Keep in mind, documented around the wiki you'll find special block names like clock, pagenavfull, cursorloc. what they do and how they display is documented. Most of them under text. If there are new special cases you think we should add, please let us know. These are the only blocks that will always update no matter what. everything else hyper may stop drawing them for a few moments.

CATCH 22

Some things you need to show before the segment even though you think they are in the segment. You may need to use neither segname or hyper for these even though all logic above says you have too. These are related to where yamj saves the data for us to use.

Examples: (these are all detail screens, not indexes)

  • TV SEASON: all the show data is available before the segment launches. Show name, date of first episode (released), overall show plot, you do not use segname or hyper. However the episode plot, first aired, uses segname and hyper
  • Movies: almost everything is not in a segment. In fact you probably won't use a segment on this screen.

Jukebox Artwork

Eversion works within the YAMJ world for artwork, which means YAMJ is handling the resizing of the original and the original isn't available to us. All of the default skin sizes are based on what infowall needed to give the user the best first experience with eversion.

Since Eversion skins are handled by Eversion and we support different settings for different players, it can mean different sized artwork might be needed. At the time we made this, YAMJ didn't support this feature but it was on the roadmap so it might be available in the future. We are also going to support per user settings in the future so it may mean even more artwork sizes.

Flashlite will resize your artwork however it may not look the same on every hardware device Eversion supports. There are differences between chipsets and some don't have the added extras to apply better quality to a resize. Your going to need to test and decide if you want to have a user remake artwork for eskin by adjusting YAMJ settings via skin-user.properties. Also resizing will take a hit on speed.

Our recommendation, If you really need to, provide instructions for changing artwork settings for yamj with your eskin.