Skins


Rainmeter's basic purpose is to run skins. A skin is a movable, dynamic, sometimes-interactive window that appears over the Windows desktop, and usually gathers and displays information of some kind.

Skins come with many different sizes, styles, user interfaces, and levels of complexity. Rainmeter includes utilities for publishing and installing 3rd-party skins. Each skin is generally stored and loaded as an independent, self-contained module.

Files and Folders

All skins are stored in Rainmeter's "Skins" folder. If Rainmeter has been installed normally, the default location of the Skins folder is:

C:\Users\YourName\Documents\Rainmeter\Skins

If Rainmeter is installed as a portable application, the Skins folder is found in the installation folder. The Skins folder can also be changed in Rainmeter's settings.

A skin is stored as a named .ini text file e.g. SkinName.ini in its own named folder within Skins, as in: Rainmeter\Skins\SkinFolder\SkinName.ini.

All of these folder paths may be referenced in a skin as built-in-variables.

Variants

If a single folder contains multiple SkinName1.ini, SkinName2.ini ...etc. files, they are each considered variants of the same skin. Only one variant can be active at a time, and all variants use the same settings. Separate skins not to be treated as variants must be stored in separate folders.

Variants:
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\Clock\12HrClock.ini
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\Clock\24HrClock.ini

Separate skins:
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\12HrClock\Clock.ini
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\24HrClock\Clock.ini

@Resources

Any supporting files used by the skin, such as images, addon executables, sounds, or Lua scripts, should also be stored in the skin folder. Complex skins are recommended to store supporting files in a folder called @Resources inside the root config folder. The @Resources folder is used by Rainmeter to load custom fonts and custom cursors.

Config

Each skin is identified with a certain config name. The config name is based on the path from the main Skins folder to the skin file. For example, if a skin is located at...

C:\Users\YourName\Documents\Rainmeter\Skins\illustro\Clock\Clock.ini

...then the config name would be:

illustro\Clock

Because skins may have any number of variants, many Rainmeter features, especially bangs, refer to a specific skin by its config name, rather than the skin's filename.

Root config

Skins may also be stored in subfolders within the same root config folder. They share the same @Resources folder, and are packaged and installed together. Otherwise, Rainmeter treats each subfolder as a separate config.

For example, the following skins belong to the "illustro" suite:

C:\Users\YourName\Documents\Rainmeter\Skins\illustro\Clock\Clock.ini
C:\Users\YourName\Documents\Rainmeter\Skins\illustro\Network\Network.ini

This means that they are both located in the same root config folder, "illustro," in the main Skins directory.

C:\Users\YourName\Documents\Rainmeter\Skins\illustro\

The root config folder for a skin will ALWAYS be directly under C:\Users\YourName\Documents\Rainmeter\Skins\. No matter how many levels of folders your suite of skins may have, there will always be a single, shared root config folder for that suite of skins, directly under the ..Skins\ folder. This is where the @Resources folder must be.

Each skin has a unique config name:

illustro\Clock
illustro\Network

But since they belong to the same root config, they share the same @Resources folder:

C:\Users\YourName\Documents\Rainmeter\Skins\illustro\@Resources\

A suite is an informal term for skins that are organized together in this manner. Suites are often used by skin authors to make a set of skins that share a common style, or complement each other in some way. If a root config folder contains only one SkinName.ini file, then the config and root config are the same, and the skin can be stored, packaged and installed by itself.

Format

The SkinName.ini file is written as a standard INI file, which uses the following format:

[Section]
Key=Value

Each property of the skin is defined by a section. Each key is an option that modifies that property. The following sections may be used in skins:

  • [Rainmeter]
    Defines options that affect the entire skin.

  • [Variables]
    Defines text strings that can be used throughout the skin.

  • Measures
    Objects that retrieve (or "measure") information of some kind.

  • Meters
    Objects that display information and other visual elements.

  • MeterStyles
    Define options that may be used by several meters.

  • [Metadata]
    Defines the name, version, license, and other non-functional information about the skin.

A skin must have at least one meter. All other properties are optional, and may not even be present, depending on what is needed for the skin. For skins that are publicly distributed, the [Metadata] section is strongly recommended.

There are only a few rules about using the INI format:

  • All section names in a skin must be unique.
  • All option names within a section must be unique.
  • Section and option names should include alphanumeric characters only (no spaces or punctuation).
  • Option values must be kept on a single line.

"Quotes" are not needed around strings used as an option value. Rainmeter will ignore quotes around option values.

Update

When a skin is loaded, it updates on a regular cycle. The length of time between updates is defined by the Update option in the [Rainmeter] section, and defaults to 1 second (or 1000 milliseconds). The update determines when the skin reacts to changes in the values of variables, measures and options.

Individual meters and measures can be made to update more slowly by "skipping" cycles, using the UpdateDivider option. In addition, the !Update bang forces the skin to update immediately, resetting the timed cycle.

Refresh

When a skin refreshes, all values are reset, and the skin starts over as if it had just been loaded for the first time. Refreshing also applies any changes that have been made to the code in SkinName.ini.

A skin can be refreshed from the context menus, or using the !Refresh bang.