<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://kodi.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmarshall</id>
	<title>Official Kodi Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://kodi.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmarshall"/>
	<link rel="alternate" type="text/html" href="https://kodi.wiki/view/Special:Contributions/Jmarshall"/>
	<updated>2026-06-16T20:22:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://kodi.wiki/index.php?title=Addon.xml&amp;diff=74070</id>
		<title>Addon.xml</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Addon.xml&amp;diff=74070"/>
		<updated>2014-04-27T00:34:39Z</updated>

		<summary type="html">&lt;p&gt;Jmarshall: /* How versioning works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]|[[Add-on development]]}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{{frodo updated}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Every skin, script, or plugin in XBMC contains an &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; file which describes the add-on, providing credits, version information and dependencies. Below, we will explain how this file is structured and which elements must be used to create an add-on for XBMC. You can also consult the examples at the end to see how this file is laid out depending on if you are developing a skin or script/plugin.&lt;br /&gt;
&lt;br /&gt;
Every &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; file has the same basic structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;addon id=&amp;quot;your.addon.id&amp;quot; name=&amp;quot;Your Add-on&amp;quot; version=&amp;quot;1.2.3&amp;quot; provider-name=&amp;quot;You&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;requires&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.python&amp;quot; version=&amp;quot;2.1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/requires&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.python.pluginsource&amp;quot; library=&amp;quot;addon.py&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;provides&amp;gt;video&amp;lt;/provides&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.addon.metadata&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Your add-on&#039;s summary&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Your add-on&#039;s description&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
    &amp;lt;language&amp;gt;&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;forum&amp;gt;&amp;lt;/forum&amp;gt;&lt;br /&gt;
    &amp;lt;website&amp;gt;&amp;lt;/website&amp;gt;&lt;br /&gt;
    &amp;lt;email&amp;gt;&amp;lt;/email&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/addon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few important things to note in the above sample:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;&amp;lt;addon&amp;gt;&amp;lt;/code&amp;gt; element must be present, and be the root node. It presents data about the add-on package as a whole.&lt;br /&gt;
* Inside the &amp;lt;code&amp;gt;&amp;lt;addon&amp;gt;&amp;lt;/code&amp;gt; element is a &amp;lt;code&amp;gt;&amp;lt;requires&amp;gt;&amp;lt;/code&amp;gt; element, listing all the dependencies that this add-on needs in order to function.&lt;br /&gt;
* Then there are one or more &amp;lt;code&amp;gt;&amp;lt;extension&amp;gt;&amp;lt;/code&amp;gt; elements, each of which describes a part of XBMC that the add-on extends.&lt;br /&gt;
* Finally, there is a specific &amp;lt;code&amp;gt;&amp;lt;extension&amp;gt;&amp;lt;/code&amp;gt; element that extends &amp;lt;code&amp;gt;&amp;quot;xbmc.addon.metadata&amp;quot;&amp;lt;/code&amp;gt;. This describes the add-on to the user.&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &lt;br /&gt;
== &amp;lt;addon&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;addon&amp;gt;&amp;lt;/code&amp;gt; element has 4 attributes, all required: &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;provider-name&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;addon id=&amp;quot;script.hello.world&amp;quot; name=&amp;quot;Hello World&amp;quot; version=&amp;quot;0.0.1&amp;quot; provider-name=&amp;quot;Dev1, Dev2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== id attribute ===&lt;br /&gt;
&lt;br /&gt;
The id attribute is the unique identifier used for this add-on.  It must be unique, and must use only lowercase characters, periods, underscores, dashes and numbers.  This identifier is also used as the name of the folder that contains the add-on, so for ease of searching, we suggest you use something like &amp;lt;type&amp;gt;.&amp;lt;uniquename&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== version attribute ===&lt;br /&gt;
&lt;br /&gt;
The version attribute is used by XBMC to determine whether updates are available. This should be use a version scheme like &amp;lt;code&amp;gt;x.y.z&amp;lt;/code&amp;gt; (major.minor.patch). For example: &amp;lt;code&amp;gt;version=&amp;quot;0.0.1&amp;quot;&amp;lt;/code&amp;gt;. Generally, you&#039;ll start with a version of &amp;lt;code&amp;gt;0.y.z&amp;lt;/code&amp;gt; for test releases and once you feel it is ready for a full release, you&#039;d bump the version to &amp;lt;code&amp;gt;1.0.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== How versioning works ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.9&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.10&amp;lt;/code&amp;gt;   is newer than &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.3.0&amp;lt;/code&amp;gt;   is newer than &amp;lt;code&amp;gt;2.2.9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~alpha&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~beta&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1~beta&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~alpha&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1~beta3&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~beta2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1~beta10&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{tip|Text should only be added for a beta version. In other cases version number should only contain numbers.}}&lt;br /&gt;
&lt;br /&gt;
=== name attribute ===&lt;br /&gt;
&lt;br /&gt;
The name attribute is the name of the add-on as it appears in the UI.  This should be in English where it makes sense for it to be so, and is not translatable.&lt;br /&gt;
&lt;br /&gt;
=== provider-name attribute ===&lt;br /&gt;
&lt;br /&gt;
The provider-name attribute is used as the author field.  This could be a team of authors or a single author. If the add-on is maintained by multiple people please separate them with a comma (&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;requires&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;requires&amp;gt;&amp;lt;/code&amp;gt; element contains one or more &amp;lt;code&amp;gt;&amp;lt;import&amp;gt;&amp;lt;/code&amp;gt; elements which specify which other add-ons this particular add-on requires, and which version of those add-ons it requires. These add-ons may be part of XBMC itself, or may be parts of other third-party add-ons.&lt;br /&gt;
&lt;br /&gt;
XBMC will only allow the add-on to be run if suitable versions of the (non-optional) add-ons on which this add-on depends are installed. When a user installs your add-on from an online repository via XBMC&#039;s add-on manager, XBMC attempts to resolve these dependencies, and install anything that your add-on relies on first. The dependency must be provided with the minimum version number your script/skin requires.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
Here is a sample &amp;lt;code&amp;gt;&amp;lt;requires&amp;gt;&amp;lt;/code&amp;gt; block that imports two required modules and one optional one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;requires&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;xbmc.python&amp;quot;                 version=&amp;quot;2.1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;script.module.elementtree&amp;quot;   version=&amp;quot;1.2.7&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;script.module.simplejson&amp;quot;    version=&amp;quot;2.0.10&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/requires&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here&#039;s another example, which will only install on OpenELEC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;requires&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;os.openelec.tv&amp;quot; version=&amp;quot;2.0&amp;quot; optional=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/requires&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;import&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;&amp;lt;import&amp;gt;&amp;lt;/code&amp;gt; element describes one dependency for an add-on, with two required attributes: &amp;lt;code&amp;gt;addon&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;. There is also an optional attribute called, fittingly, &amp;lt;code&amp;gt;optional&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If your add-on relies on other third-party add-ons, XBMC will automatically install them as well, provided they are available on an existing add-on repository. If they aren&#039;t available on any existing repository, the user must install the other add-ons themselves. Note that you need to include any Python libraries you need directly in your add-on; these can&#039;t be loaded with an &amp;lt;code&amp;gt;&amp;lt;import&amp;gt;&amp;lt;/code&amp;gt; element, since XBMC wouldn&#039;t know what to do with them.&lt;br /&gt;
&lt;br /&gt;
=== addon attribute ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;addon&amp;lt;/code&amp;gt; attribute specifies the id of the required add-on, e.g. &amp;lt;code&amp;gt;script.module.elementtree&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== version attribute ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; attribute specifies the minimum version of the required add-on to be installed.&lt;br /&gt;
&lt;br /&gt;
==== Dependency versions ====&lt;br /&gt;
&lt;br /&gt;
Each different XBMC version might require you to use a higher version of the &amp;lt;code&amp;gt;xbmc.*&amp;lt;/code&amp;gt; add-on dependencies to control on which version of XBMC the add-on can be installed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Current versions&lt;br /&gt;
! XBMC version !! xbmc.python !! xbmc.gui !! xbmc.json !! xbmc.metadata !! xbmc.addon&lt;br /&gt;
|-&lt;br /&gt;
| Dharma 10.1 &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Deprecated&amp;lt;/font&amp;gt;|| 1.0 || 2.11 || 2.0|| 1.0 || 0.1&lt;br /&gt;
|-&lt;br /&gt;
| Eden 11.0 || 2.0 || 3.0 || 4.0 || 1.0 || 11.0&lt;br /&gt;
|-&lt;br /&gt;
| Frodo 12.0 &amp;amp; 12.1 &amp;amp; 12.2 || 2.1.0 || 4.0.0 || 6.0.0 || 2.1.0 || 12.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Gotham 13.0 || 2.14.0 || 5.0.1 || 6.6.0 || 2.1.0 || 12.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== optional attribute ===&lt;br /&gt;
&lt;br /&gt;
The dependency may be made optional by setting the &amp;lt;code&amp;gt;optional&amp;lt;/code&amp;gt; attribute to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. This will only install the dependency when the add-on actually needs it. Even if this dependency is missing, the add-on can still be installed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;extension&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;extension&amp;gt;&amp;lt;/code&amp;gt; element describes the technical aspects of this add-on. It will have at least a point attribute which will give the part of XBMC that the add-on extends. For instance, the &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; file for the Confluence skin extends the &amp;lt;code&amp;gt;xbmc.gui.skin&amp;lt;/code&amp;gt; part of XBMC. All available extension points are given below.&lt;br /&gt;
&lt;br /&gt;
The various extension points that XBMC provides are given in the list below.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
!Extension point&lt;br /&gt;
!Add-on Category&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Add-ons for XBMC (Development)#addon.xml|xbmc.gui.skin]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Skin&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.gui.webinterface&amp;lt;/code&amp;gt;&lt;br /&gt;
|Web interface&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Add-ons for XBMC (Developement)#Repository Add-on|xbmc.addon.repository]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;None&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[HOW-TO:_Automatically_start_addons_using_services|xbmc.service]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Services&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.albums&amp;lt;/code&amp;gt;&lt;br /&gt;
|Album information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.artists&amp;lt;/code&amp;gt;&lt;br /&gt;
|Artist information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.movies&amp;lt;/code&amp;gt;&lt;br /&gt;
|Movie information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.musicvideos&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music video information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.tvshows&amp;lt;/code&amp;gt;&lt;br /&gt;
|TV information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.library&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;None&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.ui.screensaver&amp;lt;/code&amp;gt;&lt;br /&gt;
|Screensaver&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.player.musicviz&amp;lt;/code&amp;gt;&lt;br /&gt;
|Visualization&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Plugin Sources#What XBMC requires for your add-on|xbmc.python.pluginsource]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music Add-ons (audio) / Picture Add-ons (image) / Program Add-ons (executable) / Video Add-ons (video)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Sources#What XBMC requires for your add-on|xbmc.python.script]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music Add-ons (audio) / Picture Add-ons (image) / Program Add-ons (executable) / Video Add-ons (video)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.python.weather&amp;lt;/code&amp;gt;&lt;br /&gt;
|Weather&lt;br /&gt;
|-{{Gotham row}}&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Subtitles#What XBMC requires for your add-on|xbmc.python.subtitles]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;([[:Category:Gotham feature|Future Gotham removal]])&#039;&#039;&#039; Subtitles&lt;br /&gt;
|-{{Gotham row}}&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.subtitle.module&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;([[:Category:Gotham feature|Future Gotham addition]])&#039;&#039;&#039; Subtitle service module&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Lyrics#What XBMC requires for your add-on|xbmc.python.lyrics]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Lyrics&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Library#What XBMC requires for your add-on|xbmc.python.library]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;None&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.python.module&amp;lt;/code&amp;gt;&lt;br /&gt;
|These don&#039;t show up in the addon browser and are purely as support for other scripts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.addon.video&amp;lt;/code&amp;gt;&lt;br /&gt;
|Video Add-ons (video)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.addon.audio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music Add-ons (audio)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.addon.image&amp;lt;/code&amp;gt;&lt;br /&gt;
|Picture Add-ons (image)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Add-ons that don&#039;t correspond to a specific add-on category can not be installed by users. These are usually supporting or shared add-ons that are installed automatically by the add-ons that require them.&lt;br /&gt;
&lt;br /&gt;
=== xbmc.python.pluginsource ===&lt;br /&gt;
{{See also|Plugin Sources}}&lt;br /&gt;
&lt;br /&gt;
The most common extension point that will be used by plugin addon developers is &amp;lt;code&amp;gt;xbmc.python.pluginsource&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== library attribute ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;extension point=&amp;quot;xbmc.python.pluginsource&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; element has an extra attribute: &amp;lt;code&amp;gt;library&amp;lt;/code&amp;gt;. This is the name of the Python script (startup script) that will be run when the add-on is activated. This file must exist in the root of your add-on directory.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;provides&amp;gt; element ====&lt;br /&gt;
&lt;br /&gt;
The extension has an additional child element named &amp;lt;code&amp;gt;&amp;lt;provides&amp;gt;&amp;lt;/code&amp;gt;, which contains a whitespace separated list of &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;video&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt;, and/or &amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt;. This determines in what area (or context) of the XBMC system your addon will make itself visible in:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
!Provides&lt;br /&gt;
!Appears in&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;&lt;br /&gt;
|Pictures&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;video&amp;lt;/code&amp;gt;&lt;br /&gt;
|Video&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt;&lt;br /&gt;
|Programs&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;(blank)&#039;&#039;&lt;br /&gt;
|Not visible&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;extension point=&amp;quot;xbmc.python.pluginsource&amp;quot; library=&amp;quot;gpodderxbmc.py&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;provides&amp;gt;audio video&amp;lt;/provides&amp;gt;&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xbmc.addon.metadata ===&lt;br /&gt;
&lt;br /&gt;
This special extension point &#039;&#039;must&#039;&#039; be provided by all add-ons, and is the way that your add-on is described to users of the XBMC add-on manager.&lt;br /&gt;
&lt;br /&gt;
==== Required elements ====&lt;br /&gt;
&lt;br /&gt;
There are several elements that this should contain and all are compulsory (except the broken tag). Each of the elements below must always be present in English as a minimum.&lt;br /&gt;
&lt;br /&gt;
Many of these elements can be translated into multiple languages and should be added once for each supported language. See the [[List of language codes (ISO-639:1988)]] for possible language strings. If there&#039;s no &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; attribute for a translatable element, it defaults to English. However, even for English, adding the &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; attribute is recommended.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;summary&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
One or more &amp;lt;code&amp;gt;&amp;lt;summary&amp;gt;&amp;lt;/code&amp;gt; elements provide a short summary of what the add-on does. This should be a single sentence. It may be translated into multiple languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Hello World script provides some basic examples on how to create your first script.&amp;lt;/summary&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;description&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
One or more &amp;lt;code&amp;gt;&amp;lt;description&amp;gt;&amp;lt;/code&amp;gt; elements provide a more detailed summary of what the add-on does. It may be translated into multiple languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Hello World script provides some basic examples on how to create your first script&lt;br /&gt;
 and hopefully will increase the number of XBMC users to start creating their own addons.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;platform&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;platform&amp;gt;&amp;lt;/code&amp;gt; tag specifies which platforms (operating systems, hardware) this add-on runs on. Many add-ons will run on all platforms, so &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; is an option. If the platform tag is missing, we assume the add-on runs on all platforms. A combination of these is also possible. Currently available options are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;linux&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;osx&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;osx64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;osx32&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ios&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;windx&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;wingl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;android&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;language&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;language&amp;gt;&amp;lt;/code&amp;gt; elements indicate the language(s) of the &#039;&#039;content&#039;&#039; provided by your add-on. It applies to plugins, scripts, scrapers etc. This allows browsing the add-on list by language. When there is no specific language provided in your content, leave it blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;language&amp;gt;en de fr&amp;lt;/language&amp;gt;&lt;br /&gt;
    or&lt;br /&gt;
&amp;lt;language&amp;gt;&amp;lt;/language&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;license&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;license&amp;gt;&amp;lt;/code&amp;gt; element indicates what license is used for this add-on.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;license&amp;gt;GNU GENERAL PUBLIC LICENSE. Version 2, June 1991&amp;lt;/license&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;forum&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;forum&amp;gt;&amp;lt;/code&amp;gt; element provides the forum thread URL for this specific add-on. Leave this blank if there is no forum thread.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;forum&amp;gt;http://www.myaddonwebsite.com/forum.php?thread=12345&amp;lt;/forum&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;website&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;website&amp;gt;&amp;lt;/code&amp;gt; element provides the website URL for this specific add-on.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;website&amp;gt;http://www.myaddonwebsite.com/&amp;lt;/website&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element provides the URL for the source code for this specific add-on.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source&amp;gt;http://github.com/someone/myaddon&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;email&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;email&amp;gt;&amp;lt;/code&amp;gt; element provides the email address of the author if he wishes to do so for this specific add-on. Here are two examples of how you can make it look (the second one it harder for spambots to use). This can be left blank if you do not want to make your email address public.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;email&amp;gt;foo@bar.com&amp;lt;/email&amp;gt;&lt;br /&gt;
    or&lt;br /&gt;
&amp;lt;email&amp;gt;foo at bar dot com&amp;lt;/email&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;disclaimer&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
One or more &amp;lt;code&amp;gt;&amp;lt;disclaimer&amp;gt;&amp;lt;/code&amp;gt; elements that indicate what (if any) things the user should know about the add-on. There is no need to have a disclaimer if you don&#039;t want one, though if something requires settings, or only works in a particular country then you may want to state this here. It may be translated into multiple languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;Feel free to use this script. For information visit the wiki.&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;broken&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;broken&amp;gt;&amp;lt;/code&amp;gt; tag will mark the add-on as broken in the XBMC repo and provide the reason why. You don&#039;t need to do a version bump for this to work. However a bump is recommended as you could also add this to the changelog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;broken&amp;gt;deprecated&amp;lt;/broken&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Skin specific elements ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  &#039;&#039;&#039;defaultresolution&#039;&#039;&#039;&lt;br /&gt;
|  Default resolution folder for this skin. This is the base directory that all window xml file requests will fall back to.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;defaultresolutionwide&#039;&#039;&#039;&lt;br /&gt;
|  Default widescreen resolution folder for this skin. This is the directory that all window xml file requests from widescreen resolutions (1080i, 720p, 480p 16x9, NTSC 16x9 and PAL 16x9) will fallback to. If the file isn&#039;t found in this window, then it&#039;ll fall back to the &amp;lt;defaultresolution&amp;gt; folder.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;defaultthemename&#039;&#039;&#039;&lt;br /&gt;
|  Default theme name.  Currently set to: Default.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;effectslowdown&#039;&#039;&#039;&lt;br /&gt;
|  A multiplier that is applied to all &amp;lt;animation&amp;gt; effect lengths in the skin. Useful to slow down all animations globally so that you can better configure timings and see interactions between animating controls.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;debugging&#039;&#039;&#039;&lt;br /&gt;
|  When set to true, it&#039;ll display onscreen debug information (xml filename, mouse position and focused control type and name) in the skin.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;res&#039;&#039;&#039;&lt;br /&gt;
|  Support for arbitrary skin resolutions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== How window xml files are found ===&lt;br /&gt;
&lt;br /&gt;
XBMC can run in many differing resolutions, and a skin should try and cater to all these resolutions. The easiest way is to develop for one specific resolution and make sure that all controls contain &amp;lt;width&amp;gt; and &amp;lt;height&amp;gt; tags. That way, XBMC can scale the controls to the new screen resolution.&lt;br /&gt;
&lt;br /&gt;
However, you may choose to develop alternative window xml files for differing resolutions (such as for HDTV resolutions, or for widescreen versus 4x3 resolutions).&lt;br /&gt;
&lt;br /&gt;
The order that XBMC looks for it&#039;s skin files are as follows:&lt;br /&gt;
&lt;br /&gt;
# It first looks in the current screenmode folder (one of 1080i, 720p, NTSC16x9, NTSC, PAL16x9 or PAL)&lt;br /&gt;
# If the current screenmode is 1080i, it then looks in the 720p folder.&lt;br /&gt;
# If the current screenmode is a widescreen mode (1080i, 720p, NTSC16x9, PAL16x9) then it looks in the &amp;lt;defaultresolutionwide&amp;gt; folder.&lt;br /&gt;
# Finally, it looks in the &amp;lt;defaultresolution&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
This allows you to just put any window files that do not require special treatment for 16x9 resolutions etc. in the &amp;lt;defaultresolution&amp;gt; folder, preventing needless repetition.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== addon.xml for skins ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;addon&lt;br /&gt;
  id=&amp;quot;skin.confluence&amp;quot;&lt;br /&gt;
  version=&amp;quot;2.1.3&amp;quot;&lt;br /&gt;
  name=&amp;quot;Confluence&amp;quot;&lt;br /&gt;
  provider-name=&amp;quot;Jezz_X, Team XBMC&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;requires&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.gui&amp;quot; version=&amp;quot;4.0.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/requires&amp;gt;&lt;br /&gt;
  &amp;lt;extension&lt;br /&gt;
    point=&amp;quot;xbmc.gui.skin&amp;quot;&lt;br /&gt;
    defaultthemename=&amp;quot;textures.xbt&amp;quot;&lt;br /&gt;
    debugging=&amp;quot;false&amp;quot;&lt;br /&gt;
    effectslowdown=&amp;quot;0.75&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;res width=&amp;quot;1280&amp;quot; height=&amp;quot;720&amp;quot; aspect=&amp;quot;16:9&amp;quot; default=&amp;quot;true&amp;quot; folder=&amp;quot;720p&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.addon.metadata&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Confluence skin by Jezz_X. (XBMC&#039;s default skin)&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Confluence is the default skin for XBMC 9.11 and above. It is a combination of concepts from many popular skins, and attempts to embrace and integrate their good ideas into a skin that should be easy for first time XBMC users to understand and use.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;Confluence is the default skin for XBMC, removing it may cause issues&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
    &amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;GNU GENERAL PUBLIC LICENSE. Version 2, June 1991&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;forum&amp;gt;&amp;lt;/forum&amp;gt;&lt;br /&gt;
    &amp;lt;website&amp;gt;&amp;lt;/website&amp;gt;&lt;br /&gt;
    &amp;lt;email&amp;gt;&amp;lt;/email&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/addon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
One thing to note is that &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;all tag names are lower case.&amp;lt;/font&amp;gt; XML tag names are case sensitive!&lt;br /&gt;
&lt;br /&gt;
== addon.xml for scripts/plugins ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;addon&lt;br /&gt;
    id=&amp;quot;script.artwork.downloader&amp;quot;&lt;br /&gt;
    name=&amp;quot;Artwork Downloader&amp;quot;&lt;br /&gt;
    version=&amp;quot;12.0.12&amp;quot;&lt;br /&gt;
    provider-name=&amp;quot;Martijn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;requires&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.python&amp;quot;                 version=&amp;quot;2.1.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.json&amp;quot;                   version=&amp;quot;6.0.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.addon&amp;quot;                  version=&amp;quot;12.0.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;script.module.elementtree&amp;quot;   version=&amp;quot;1.2.7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;script.module.simplejson&amp;quot;    version=&amp;quot;2.0.10&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;script.common.plugin.cache&amp;quot;  version=&amp;quot;1.3.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/requires&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.python.script&amp;quot;         library=&amp;quot;default.py&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;provides&amp;gt;executable&amp;lt;/provides&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.service&amp;quot; library=&amp;quot;service.py&amp;quot; start=&amp;quot;login&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.addon.metadata&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Downloads Artwork for TV shows, Movies and Musicvideos in your library&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Downloads all available artwork for TV shows, Movies and Musicvideos in your library. Check the options for supported artwork[CR]Artwork sources:[CR]www.fanart.tv[CR]www.thetvdb.com[CR]www.themoviedb.org[CR]Remark:[CR]Check your skin to see what type of artwork is supported![CR]Each TV Show/Movie must have its own folder![CR]Skin integration:[CR]See readme file&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;For bugs, requests or general questions visit the Artwork Downloader thread on the XBMC forum.&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
    &amp;lt;language&amp;gt;&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;GNU GENERAL PUBLIC LICENSE. Version 2, June 1991&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;forum&amp;gt;&amp;lt;/forum&amp;gt;&lt;br /&gt;
    &amp;lt;website&amp;gt;&amp;lt;/website&amp;gt;&lt;br /&gt;
    &amp;lt;email&amp;gt;&amp;lt;/email&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/addon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Schema Definition =&lt;br /&gt;
&lt;br /&gt;
The XML schema definition for &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; is located [https://github.com/xbmc/xbmc/blob/master/addons/xbmc.addon/metadata.xsd here].&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on development]]&lt;br /&gt;
[[Category:Skin development]]&lt;/div&gt;</summary>
		<author><name>Jmarshall</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=Addon.xml&amp;diff=74069</id>
		<title>Addon.xml</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Addon.xml&amp;diff=74069"/>
		<updated>2014-04-27T00:33:39Z</updated>

		<summary type="html">&lt;p&gt;Jmarshall: /* How versioning works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]|[[Add-on development]]}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{{frodo updated}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Every skin, script, or plugin in XBMC contains an &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; file which describes the add-on, providing credits, version information and dependencies. Below, we will explain how this file is structured and which elements must be used to create an add-on for XBMC. You can also consult the examples at the end to see how this file is laid out depending on if you are developing a skin or script/plugin.&lt;br /&gt;
&lt;br /&gt;
Every &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; file has the same basic structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;addon id=&amp;quot;your.addon.id&amp;quot; name=&amp;quot;Your Add-on&amp;quot; version=&amp;quot;1.2.3&amp;quot; provider-name=&amp;quot;You&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;requires&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.python&amp;quot; version=&amp;quot;2.1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/requires&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.python.pluginsource&amp;quot; library=&amp;quot;addon.py&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;provides&amp;gt;video&amp;lt;/provides&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.addon.metadata&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Your add-on&#039;s summary&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Your add-on&#039;s description&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
    &amp;lt;language&amp;gt;&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;forum&amp;gt;&amp;lt;/forum&amp;gt;&lt;br /&gt;
    &amp;lt;website&amp;gt;&amp;lt;/website&amp;gt;&lt;br /&gt;
    &amp;lt;email&amp;gt;&amp;lt;/email&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/addon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few important things to note in the above sample:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;code&amp;gt;&amp;lt;addon&amp;gt;&amp;lt;/code&amp;gt; element must be present, and be the root node. It presents data about the add-on package as a whole.&lt;br /&gt;
* Inside the &amp;lt;code&amp;gt;&amp;lt;addon&amp;gt;&amp;lt;/code&amp;gt; element is a &amp;lt;code&amp;gt;&amp;lt;requires&amp;gt;&amp;lt;/code&amp;gt; element, listing all the dependencies that this add-on needs in order to function.&lt;br /&gt;
* Then there are one or more &amp;lt;code&amp;gt;&amp;lt;extension&amp;gt;&amp;lt;/code&amp;gt; elements, each of which describes a part of XBMC that the add-on extends.&lt;br /&gt;
* Finally, there is a specific &amp;lt;code&amp;gt;&amp;lt;extension&amp;gt;&amp;lt;/code&amp;gt; element that extends &amp;lt;code&amp;gt;&amp;quot;xbmc.addon.metadata&amp;quot;&amp;lt;/code&amp;gt;. This describes the add-on to the user.&lt;br /&gt;
&lt;br /&gt;
= Elements =&lt;br /&gt;
 &lt;br /&gt;
== &amp;lt;addon&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;addon&amp;gt;&amp;lt;/code&amp;gt; element has 4 attributes, all required: &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;provider-name&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;addon id=&amp;quot;script.hello.world&amp;quot; name=&amp;quot;Hello World&amp;quot; version=&amp;quot;0.0.1&amp;quot; provider-name=&amp;quot;Dev1, Dev2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== id attribute ===&lt;br /&gt;
&lt;br /&gt;
The id attribute is the unique identifier used for this add-on.  It must be unique, and must use only lowercase characters, periods, underscores, dashes and numbers.  This identifier is also used as the name of the folder that contains the add-on, so for ease of searching, we suggest you use something like &amp;lt;type&amp;gt;.&amp;lt;uniquename&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== version attribute ===&lt;br /&gt;
&lt;br /&gt;
The version attribute is used by XBMC to determine whether updates are available. This should be use a version scheme like &amp;lt;code&amp;gt;x.y.z&amp;lt;/code&amp;gt; (major.minor.patch). For example: &amp;lt;code&amp;gt;version=&amp;quot;0.0.1&amp;quot;&amp;lt;/code&amp;gt;. Generally, you&#039;ll start with a version of &amp;lt;code&amp;gt;0.y.z&amp;lt;/code&amp;gt; for test releases and once you feel it is ready for a full release, you&#039;d bump the version to &amp;lt;code&amp;gt;1.0.0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== How versioning works ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.9&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.10&amp;lt;/code&amp;gt;   is newer than &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.3&amp;lt;/code&amp;gt;   is newer than &amp;lt;code&amp;gt;2.2.9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.3.0&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~alpha&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~beta&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1~beta&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~alpha&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1~beta3&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~beta2&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2.2.1~beta10&amp;lt;/code&amp;gt; is newer than &amp;lt;code&amp;gt;2.2.1~beta1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{tip|Text should only be added for a beta version. In other cases version number should only contain numbers.}}&lt;br /&gt;
&lt;br /&gt;
=== name attribute ===&lt;br /&gt;
&lt;br /&gt;
The name attribute is the name of the add-on as it appears in the UI.  This should be in English where it makes sense for it to be so, and is not translatable.&lt;br /&gt;
&lt;br /&gt;
=== provider-name attribute ===&lt;br /&gt;
&lt;br /&gt;
The provider-name attribute is used as the author field.  This could be a team of authors or a single author. If the add-on is maintained by multiple people please separate them with a comma (&amp;lt;code&amp;gt;,&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;requires&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;requires&amp;gt;&amp;lt;/code&amp;gt; element contains one or more &amp;lt;code&amp;gt;&amp;lt;import&amp;gt;&amp;lt;/code&amp;gt; elements which specify which other add-ons this particular add-on requires, and which version of those add-ons it requires. These add-ons may be part of XBMC itself, or may be parts of other third-party add-ons.&lt;br /&gt;
&lt;br /&gt;
XBMC will only allow the add-on to be run if suitable versions of the (non-optional) add-ons on which this add-on depends are installed. When a user installs your add-on from an online repository via XBMC&#039;s add-on manager, XBMC attempts to resolve these dependencies, and install anything that your add-on relies on first. The dependency must be provided with the minimum version number your script/skin requires.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
Here is a sample &amp;lt;code&amp;gt;&amp;lt;requires&amp;gt;&amp;lt;/code&amp;gt; block that imports two required modules and one optional one:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;requires&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;xbmc.python&amp;quot;                 version=&amp;quot;2.1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;script.module.elementtree&amp;quot;   version=&amp;quot;1.2.7&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;script.module.simplejson&amp;quot;    version=&amp;quot;2.0.10&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/requires&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here&#039;s another example, which will only install on OpenELEC:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;requires&amp;gt;&lt;br /&gt;
  &amp;lt;import addon=&amp;quot;os.openelec.tv&amp;quot; version=&amp;quot;2.0&amp;quot; optional=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/requires&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;import&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;&amp;lt;import&amp;gt;&amp;lt;/code&amp;gt; element describes one dependency for an add-on, with two required attributes: &amp;lt;code&amp;gt;addon&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;. There is also an optional attribute called, fittingly, &amp;lt;code&amp;gt;optional&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If your add-on relies on other third-party add-ons, XBMC will automatically install them as well, provided they are available on an existing add-on repository. If they aren&#039;t available on any existing repository, the user must install the other add-ons themselves. Note that you need to include any Python libraries you need directly in your add-on; these can&#039;t be loaded with an &amp;lt;code&amp;gt;&amp;lt;import&amp;gt;&amp;lt;/code&amp;gt; element, since XBMC wouldn&#039;t know what to do with them.&lt;br /&gt;
&lt;br /&gt;
=== addon attribute ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;addon&amp;lt;/code&amp;gt; attribute specifies the id of the required add-on, e.g. &amp;lt;code&amp;gt;script.module.elementtree&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== version attribute ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; attribute specifies the minimum version of the required add-on to be installed.&lt;br /&gt;
&lt;br /&gt;
==== Dependency versions ====&lt;br /&gt;
&lt;br /&gt;
Each different XBMC version might require you to use a higher version of the &amp;lt;code&amp;gt;xbmc.*&amp;lt;/code&amp;gt; add-on dependencies to control on which version of XBMC the add-on can be installed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Current versions&lt;br /&gt;
! XBMC version !! xbmc.python !! xbmc.gui !! xbmc.json !! xbmc.metadata !! xbmc.addon&lt;br /&gt;
|-&lt;br /&gt;
| Dharma 10.1 &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Deprecated&amp;lt;/font&amp;gt;|| 1.0 || 2.11 || 2.0|| 1.0 || 0.1&lt;br /&gt;
|-&lt;br /&gt;
| Eden 11.0 || 2.0 || 3.0 || 4.0 || 1.0 || 11.0&lt;br /&gt;
|-&lt;br /&gt;
| Frodo 12.0 &amp;amp; 12.1 &amp;amp; 12.2 || 2.1.0 || 4.0.0 || 6.0.0 || 2.1.0 || 12.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Gotham 13.0 || 2.14.0 || 5.0.1 || 6.6.0 || 2.1.0 || 12.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== optional attribute ===&lt;br /&gt;
&lt;br /&gt;
The dependency may be made optional by setting the &amp;lt;code&amp;gt;optional&amp;lt;/code&amp;gt; attribute to &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. This will only install the dependency when the add-on actually needs it. Even if this dependency is missing, the add-on can still be installed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;extension&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;extension&amp;gt;&amp;lt;/code&amp;gt; element describes the technical aspects of this add-on. It will have at least a point attribute which will give the part of XBMC that the add-on extends. For instance, the &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; file for the Confluence skin extends the &amp;lt;code&amp;gt;xbmc.gui.skin&amp;lt;/code&amp;gt; part of XBMC. All available extension points are given below.&lt;br /&gt;
&lt;br /&gt;
The various extension points that XBMC provides are given in the list below.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
!Extension point&lt;br /&gt;
!Add-on Category&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Add-ons for XBMC (Development)#addon.xml|xbmc.gui.skin]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Skin&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.gui.webinterface&amp;lt;/code&amp;gt;&lt;br /&gt;
|Web interface&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Add-ons for XBMC (Developement)#Repository Add-on|xbmc.addon.repository]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;None&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[HOW-TO:_Automatically_start_addons_using_services|xbmc.service]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Services&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.albums&amp;lt;/code&amp;gt;&lt;br /&gt;
|Album information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.artists&amp;lt;/code&amp;gt;&lt;br /&gt;
|Artist information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.movies&amp;lt;/code&amp;gt;&lt;br /&gt;
|Movie information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.musicvideos&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music video information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.tvshows&amp;lt;/code&amp;gt;&lt;br /&gt;
|TV information&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.metadata.scraper.library&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;None&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.ui.screensaver&amp;lt;/code&amp;gt;&lt;br /&gt;
|Screensaver&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.player.musicviz&amp;lt;/code&amp;gt;&lt;br /&gt;
|Visualization&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Plugin Sources#What XBMC requires for your add-on|xbmc.python.pluginsource]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music Add-ons (audio) / Picture Add-ons (image) / Program Add-ons (executable) / Video Add-ons (video)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Sources#What XBMC requires for your add-on|xbmc.python.script]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music Add-ons (audio) / Picture Add-ons (image) / Program Add-ons (executable) / Video Add-ons (video)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.python.weather&amp;lt;/code&amp;gt;&lt;br /&gt;
|Weather&lt;br /&gt;
|-{{Gotham row}}&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Subtitles#What XBMC requires for your add-on|xbmc.python.subtitles]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;([[:Category:Gotham feature|Future Gotham removal]])&#039;&#039;&#039; Subtitles&lt;br /&gt;
|-{{Gotham row}}&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.subtitle.module&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;&#039;([[:Category:Gotham feature|Future Gotham addition]])&#039;&#039;&#039; Subtitle service module&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Lyrics#What XBMC requires for your add-on|xbmc.python.lyrics]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Lyrics&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;[[Script Library#What XBMC requires for your add-on|xbmc.python.library]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|&#039;&#039;None&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.python.module&amp;lt;/code&amp;gt;&lt;br /&gt;
|These don&#039;t show up in the addon browser and are purely as support for other scripts.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.addon.video&amp;lt;/code&amp;gt;&lt;br /&gt;
|Video Add-ons (video)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.addon.audio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music Add-ons (audio)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xbmc.addon.image&amp;lt;/code&amp;gt;&lt;br /&gt;
|Picture Add-ons (image)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Add-ons that don&#039;t correspond to a specific add-on category can not be installed by users. These are usually supporting or shared add-ons that are installed automatically by the add-ons that require them.&lt;br /&gt;
&lt;br /&gt;
=== xbmc.python.pluginsource ===&lt;br /&gt;
{{See also|Plugin Sources}}&lt;br /&gt;
&lt;br /&gt;
The most common extension point that will be used by plugin addon developers is &amp;lt;code&amp;gt;xbmc.python.pluginsource&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== library attribute ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;extension point=&amp;quot;xbmc.python.pluginsource&amp;quot;&amp;gt;&amp;lt;/code&amp;gt; element has an extra attribute: &amp;lt;code&amp;gt;library&amp;lt;/code&amp;gt;. This is the name of the Python script (startup script) that will be run when the add-on is activated. This file must exist in the root of your add-on directory.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;provides&amp;gt; element ====&lt;br /&gt;
&lt;br /&gt;
The extension has an additional child element named &amp;lt;code&amp;gt;&amp;lt;provides&amp;gt;&amp;lt;/code&amp;gt;, which contains a whitespace separated list of &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;video&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt;, and/or &amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt;. This determines in what area (or context) of the XBMC system your addon will make itself visible in:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
!Provides&lt;br /&gt;
!Appears in&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt;&lt;br /&gt;
|Pictures&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;audio&amp;lt;/code&amp;gt;&lt;br /&gt;
|Music&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;video&amp;lt;/code&amp;gt;&lt;br /&gt;
|Video&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;executable&amp;lt;/code&amp;gt;&lt;br /&gt;
|Programs&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;(blank)&#039;&#039;&lt;br /&gt;
|Not visible&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Example ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;extension point=&amp;quot;xbmc.python.pluginsource&amp;quot; library=&amp;quot;gpodderxbmc.py&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;provides&amp;gt;audio video&amp;lt;/provides&amp;gt;&lt;br /&gt;
&amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== xbmc.addon.metadata ===&lt;br /&gt;
&lt;br /&gt;
This special extension point &#039;&#039;must&#039;&#039; be provided by all add-ons, and is the way that your add-on is described to users of the XBMC add-on manager.&lt;br /&gt;
&lt;br /&gt;
==== Required elements ====&lt;br /&gt;
&lt;br /&gt;
There are several elements that this should contain and all are compulsory (except the broken tag). Each of the elements below must always be present in English as a minimum.&lt;br /&gt;
&lt;br /&gt;
Many of these elements can be translated into multiple languages and should be added once for each supported language. See the [[List of language codes (ISO-639:1988)]] for possible language strings. If there&#039;s no &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; attribute for a translatable element, it defaults to English. However, even for English, adding the &amp;lt;code&amp;gt;lang&amp;lt;/code&amp;gt; attribute is recommended.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;summary&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
One or more &amp;lt;code&amp;gt;&amp;lt;summary&amp;gt;&amp;lt;/code&amp;gt; elements provide a short summary of what the add-on does. This should be a single sentence. It may be translated into multiple languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Hello World script provides some basic examples on how to create your first script.&amp;lt;/summary&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;description&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
One or more &amp;lt;code&amp;gt;&amp;lt;description&amp;gt;&amp;lt;/code&amp;gt; elements provide a more detailed summary of what the add-on does. It may be translated into multiple languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Hello World script provides some basic examples on how to create your first script&lt;br /&gt;
 and hopefully will increase the number of XBMC users to start creating their own addons.&amp;lt;/description&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;platform&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;platform&amp;gt;&amp;lt;/code&amp;gt; tag specifies which platforms (operating systems, hardware) this add-on runs on. Many add-ons will run on all platforms, so &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; is an option. If the platform tag is missing, we assume the add-on runs on all platforms. A combination of these is also possible. Currently available options are:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;linux&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;osx&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;osx64&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;osx32&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;ios&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;windx&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;wingl&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;android&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;language&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;language&amp;gt;&amp;lt;/code&amp;gt; elements indicate the language(s) of the &#039;&#039;content&#039;&#039; provided by your add-on. It applies to plugins, scripts, scrapers etc. This allows browsing the add-on list by language. When there is no specific language provided in your content, leave it blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;language&amp;gt;en de fr&amp;lt;/language&amp;gt;&lt;br /&gt;
    or&lt;br /&gt;
&amp;lt;language&amp;gt;&amp;lt;/language&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;license&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;license&amp;gt;&amp;lt;/code&amp;gt; element indicates what license is used for this add-on.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;license&amp;gt;GNU GENERAL PUBLIC LICENSE. Version 2, June 1991&amp;lt;/license&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;forum&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;forum&amp;gt;&amp;lt;/code&amp;gt; element provides the forum thread URL for this specific add-on. Leave this blank if there is no forum thread.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;forum&amp;gt;http://www.myaddonwebsite.com/forum.php?thread=12345&amp;lt;/forum&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;website&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;website&amp;gt;&amp;lt;/code&amp;gt; element provides the website URL for this specific add-on.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;website&amp;gt;http://www.myaddonwebsite.com/&amp;lt;/website&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;source&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element provides the URL for the source code for this specific add-on.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source&amp;gt;http://github.com/someone/myaddon&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;email&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;email&amp;gt;&amp;lt;/code&amp;gt; element provides the email address of the author if he wishes to do so for this specific add-on. Here are two examples of how you can make it look (the second one it harder for spambots to use). This can be left blank if you do not want to make your email address public.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;email&amp;gt;foo@bar.com&amp;lt;/email&amp;gt;&lt;br /&gt;
    or&lt;br /&gt;
&amp;lt;email&amp;gt;foo at bar dot com&amp;lt;/email&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;disclaimer&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
One or more &amp;lt;code&amp;gt;&amp;lt;disclaimer&amp;gt;&amp;lt;/code&amp;gt; elements that indicate what (if any) things the user should know about the add-on. There is no need to have a disclaimer if you don&#039;t want one, though if something requires settings, or only works in a particular country then you may want to state this here. It may be translated into multiple languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;Feel free to use this script. For information visit the wiki.&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;broken&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;&amp;lt;broken&amp;gt;&amp;lt;/code&amp;gt; tag will mark the add-on as broken in the XBMC repo and provide the reason why. You don&#039;t need to do a version bump for this to work. However a bump is recommended as you could also add this to the changelog.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;broken&amp;gt;deprecated&amp;lt;/broken&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Skin specific elements ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  &#039;&#039;&#039;defaultresolution&#039;&#039;&#039;&lt;br /&gt;
|  Default resolution folder for this skin. This is the base directory that all window xml file requests will fall back to.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;defaultresolutionwide&#039;&#039;&#039;&lt;br /&gt;
|  Default widescreen resolution folder for this skin. This is the directory that all window xml file requests from widescreen resolutions (1080i, 720p, 480p 16x9, NTSC 16x9 and PAL 16x9) will fallback to. If the file isn&#039;t found in this window, then it&#039;ll fall back to the &amp;lt;defaultresolution&amp;gt; folder.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;defaultthemename&#039;&#039;&#039;&lt;br /&gt;
|  Default theme name.  Currently set to: Default.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;effectslowdown&#039;&#039;&#039;&lt;br /&gt;
|  A multiplier that is applied to all &amp;lt;animation&amp;gt; effect lengths in the skin. Useful to slow down all animations globally so that you can better configure timings and see interactions between animating controls.&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;debugging&#039;&#039;&#039;&lt;br /&gt;
|  When set to true, it&#039;ll display onscreen debug information (xml filename, mouse position and focused control type and name) in the skin.&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
|  &#039;&#039;&#039;res&#039;&#039;&#039;&lt;br /&gt;
|  Support for arbitrary skin resolutions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== How window xml files are found ===&lt;br /&gt;
&lt;br /&gt;
XBMC can run in many differing resolutions, and a skin should try and cater to all these resolutions. The easiest way is to develop for one specific resolution and make sure that all controls contain &amp;lt;width&amp;gt; and &amp;lt;height&amp;gt; tags. That way, XBMC can scale the controls to the new screen resolution.&lt;br /&gt;
&lt;br /&gt;
However, you may choose to develop alternative window xml files for differing resolutions (such as for HDTV resolutions, or for widescreen versus 4x3 resolutions).&lt;br /&gt;
&lt;br /&gt;
The order that XBMC looks for it&#039;s skin files are as follows:&lt;br /&gt;
&lt;br /&gt;
# It first looks in the current screenmode folder (one of 1080i, 720p, NTSC16x9, NTSC, PAL16x9 or PAL)&lt;br /&gt;
# If the current screenmode is 1080i, it then looks in the 720p folder.&lt;br /&gt;
# If the current screenmode is a widescreen mode (1080i, 720p, NTSC16x9, PAL16x9) then it looks in the &amp;lt;defaultresolutionwide&amp;gt; folder.&lt;br /&gt;
# Finally, it looks in the &amp;lt;defaultresolution&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
This allows you to just put any window files that do not require special treatment for 16x9 resolutions etc. in the &amp;lt;defaultresolution&amp;gt; folder, preventing needless repetition.&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&lt;br /&gt;
== addon.xml for skins ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
﻿&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;addon&lt;br /&gt;
  id=&amp;quot;skin.confluence&amp;quot;&lt;br /&gt;
  version=&amp;quot;2.1.3&amp;quot;&lt;br /&gt;
  name=&amp;quot;Confluence&amp;quot;&lt;br /&gt;
  provider-name=&amp;quot;Jezz_X, Team XBMC&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;requires&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.gui&amp;quot; version=&amp;quot;4.0.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/requires&amp;gt;&lt;br /&gt;
  &amp;lt;extension&lt;br /&gt;
    point=&amp;quot;xbmc.gui.skin&amp;quot;&lt;br /&gt;
    defaultthemename=&amp;quot;textures.xbt&amp;quot;&lt;br /&gt;
    debugging=&amp;quot;false&amp;quot;&lt;br /&gt;
    effectslowdown=&amp;quot;0.75&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;res width=&amp;quot;1280&amp;quot; height=&amp;quot;720&amp;quot; aspect=&amp;quot;16:9&amp;quot; default=&amp;quot;true&amp;quot; folder=&amp;quot;720p&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.addon.metadata&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Confluence skin by Jezz_X. (XBMC&#039;s default skin)&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Confluence is the default skin for XBMC 9.11 and above. It is a combination of concepts from many popular skins, and attempts to embrace and integrate their good ideas into a skin that should be easy for first time XBMC users to understand and use.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;Confluence is the default skin for XBMC, removing it may cause issues&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
    &amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;GNU GENERAL PUBLIC LICENSE. Version 2, June 1991&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;forum&amp;gt;&amp;lt;/forum&amp;gt;&lt;br /&gt;
    &amp;lt;website&amp;gt;&amp;lt;/website&amp;gt;&lt;br /&gt;
    &amp;lt;email&amp;gt;&amp;lt;/email&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/addon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
One thing to note is that &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;all tag names are lower case.&amp;lt;/font&amp;gt; XML tag names are case sensitive!&lt;br /&gt;
&lt;br /&gt;
== addon.xml for scripts/plugins ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;addon&lt;br /&gt;
    id=&amp;quot;script.artwork.downloader&amp;quot;&lt;br /&gt;
    name=&amp;quot;Artwork Downloader&amp;quot;&lt;br /&gt;
    version=&amp;quot;12.0.12&amp;quot;&lt;br /&gt;
    provider-name=&amp;quot;Martijn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;requires&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.python&amp;quot;                 version=&amp;quot;2.1.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.json&amp;quot;                   version=&amp;quot;6.0.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;xbmc.addon&amp;quot;                  version=&amp;quot;12.0.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;script.module.elementtree&amp;quot;   version=&amp;quot;1.2.7&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;script.module.simplejson&amp;quot;    version=&amp;quot;2.0.10&amp;quot; optional=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;import addon=&amp;quot;script.common.plugin.cache&amp;quot;  version=&amp;quot;1.3.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/requires&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.python.script&amp;quot;         library=&amp;quot;default.py&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;provides&amp;gt;executable&amp;lt;/provides&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.service&amp;quot; library=&amp;quot;service.py&amp;quot; start=&amp;quot;login&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;extension point=&amp;quot;xbmc.addon.metadata&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;summary lang=&amp;quot;en&amp;quot;&amp;gt;Downloads Artwork for TV shows, Movies and Musicvideos in your library&amp;lt;/summary&amp;gt;&lt;br /&gt;
    &amp;lt;description lang=&amp;quot;en&amp;quot;&amp;gt;Downloads all available artwork for TV shows, Movies and Musicvideos in your library. Check the options for supported artwork[CR]Artwork sources:[CR]www.fanart.tv[CR]www.thetvdb.com[CR]www.themoviedb.org[CR]Remark:[CR]Check your skin to see what type of artwork is supported![CR]Each TV Show/Movie must have its own folder![CR]Skin integration:[CR]See readme file&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;disclaimer lang=&amp;quot;en&amp;quot;&amp;gt;For bugs, requests or general questions visit the Artwork Downloader thread on the XBMC forum.&amp;lt;/disclaimer&amp;gt;&lt;br /&gt;
    &amp;lt;language&amp;gt;&amp;lt;/language&amp;gt;&lt;br /&gt;
    &amp;lt;platform&amp;gt;all&amp;lt;/platform&amp;gt;&lt;br /&gt;
    &amp;lt;license&amp;gt;GNU GENERAL PUBLIC LICENSE. Version 2, June 1991&amp;lt;/license&amp;gt;&lt;br /&gt;
    &amp;lt;forum&amp;gt;&amp;lt;/forum&amp;gt;&lt;br /&gt;
    &amp;lt;website&amp;gt;&amp;lt;/website&amp;gt;&lt;br /&gt;
    &amp;lt;email&amp;gt;&amp;lt;/email&amp;gt;&lt;br /&gt;
    &amp;lt;source&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
  &amp;lt;/extension&amp;gt;&lt;br /&gt;
&amp;lt;/addon&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Schema Definition =&lt;br /&gt;
&lt;br /&gt;
The XML schema definition for &amp;lt;code&amp;gt;addon.xml&amp;lt;/code&amp;gt; is located [https://github.com/xbmc/xbmc/blob/master/addons/xbmc.addon/metadata.xsd here].&lt;br /&gt;
&lt;br /&gt;
[[Category:Add-on development]]&lt;br /&gt;
[[Category:Skin development]]&lt;/div&gt;</summary>
		<author><name>Jmarshall</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=Artwork/Cache&amp;diff=70735</id>
		<title>Artwork/Cache</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Artwork/Cache&amp;diff=70735"/>
		<updated>2014-03-15T09:25:25Z</updated>

		<summary type="html">&lt;p&gt;Jmarshall: /* The future */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]}}&lt;br /&gt;
&lt;br /&gt;
{{cleanup}}&lt;br /&gt;
&lt;br /&gt;
XBMC maintains a local texture cache for thumbs and fanart, to allow fast loading of these images so that skins can show off your media in the best way possible.&lt;br /&gt;
&lt;br /&gt;
All textures that XBMC loads, with the exception of textures that are provided directly by the skin, are cached to the userdata/Thumbnails folder.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Art for library items ==&lt;br /&gt;
As of XBMC v12:&lt;br /&gt;
&lt;br /&gt;
The art URL&#039;s associated with library items are stored in the art table inside the video or music databases.  These store the original URL to the art (e.g. from http://themoviedb.org, http://thetvdb.com, or http://theaudiodb.org).  This means that central databases store where the art is obtained from, and multiple clients then just keep a local thumbnail cache as described below.&lt;br /&gt;
&lt;br /&gt;
== The caching procedure ==&lt;br /&gt;
The caching procedure utilizes both copies (possibly scaled down) of the original texture, saved in .jpg or .png format, an (optional) fast loading .dds version of those images, and an SQL database that maintains the local cache.&lt;br /&gt;
&lt;br /&gt;
The cache operates primarily on an &amp;quot;as and when needed&amp;quot; basis.  i.e. textures are cached when they&#039;re first requested to be loaded.  In addition, however, in some places textures may be cached before they&#039;re immediately needed, such as in the scanning routines.  In either case, the main caching procedure starts with an image URL.  We cache as follows:&lt;br /&gt;
&lt;br /&gt;
1.  We generate a CRC (hash) of the URL. (see [[Thumbnails#Sample Code|Code Samples]] on how to calculate CRC values)&amp;lt;br /&amp;gt;&lt;br /&gt;
2.  We cache the image, reducing it in size if required, to a local file with the given CRC.  It&#039;s cached as a PNG or JPG based on whether transparency is required.&amp;lt;br /&amp;gt;&lt;br /&gt;
3.  We generate a hash of the image, based on size and modified date, that we can use to check whether the original image has changed or not.&amp;lt;br /&amp;gt;&lt;br /&gt;
4.  We store these details, along with information on when the image was cached in the SQL database Textures.db.&lt;br /&gt;
&lt;br /&gt;
== Loading textures ==&lt;br /&gt;
&lt;br /&gt;
When loading a texture, XBMC basically just has a URL to the image.  Given a particular URL, we load the texture as follows:&lt;br /&gt;
&lt;br /&gt;
1.  We first check to see whether the image is provided by the skin.  If so, we load it directly.&amp;lt;br /&amp;gt;&lt;br /&gt;
2.  We then check to see whether the URL is from our thumbnail cache.  If it is, we skip to step 5.&amp;lt;br /&amp;gt;&lt;br /&gt;
3.  If not, we look up to see whether this image is in our texture cache by querying the SQL database.  If it is, we swap the URL to the cached version and skip to step 5.&amp;lt;br /&amp;gt;&lt;br /&gt;
4.  If it&#039;s not in the cache, we cache the image as outlined above.&amp;lt;br /&amp;gt;&lt;br /&gt;
5.  We then additionally check if a &amp;quot;fast loading&amp;quot; version (.dds) of the texture exists.  If it does, we swap the URL to the fast loading version.&amp;lt;br /&amp;gt;&lt;br /&gt;
6.  We load the image.&amp;lt;br /&amp;gt;&lt;br /&gt;
7.  We (optionally) generate a &amp;quot;fast loading&amp;quot; version (.dds) of the texture, if it doesn&#039;t already exist.&amp;lt;br /&amp;gt;&lt;br /&gt;
8.  We update the texture database with access times to the texture (allowing us to clear the texture cache out of images that are rarely used).&amp;lt;br /&amp;gt;&lt;br /&gt;
9.  If it&#039;s been at least 24 hours since the texture was last loaded, we check whether or not the cached version needs to be refreshed from the original image.  If so, we cache the image as outlined above.&lt;br /&gt;
&lt;br /&gt;
== DDS artwork ==&lt;br /&gt;
&lt;br /&gt;
XBMC uses the compressed format DXT1 or DXT5 in the form of a .dds file.  These are GPU-friendly compressed formats which allow for very fast loading of textures.  It comes at the disadvantage of a loss in quality - DXT compression can in some cases be very bad quality.  XBMC uses libsquish which is reasonably optimal at compressing the images.  In the future XBMC may use DXT5 in the YCoCg colour space which is the same size as DXT5 (i.e. 8bits/pixel) but is visually close to being lossless.  For now, if XBMC deems the quality isn&#039;t quite good enough to use DXT1 or DXT5, we use ARGB (i.e. 32bits/pixel) which can result in some very large images on disk.  On systems with slow disk access, these may take longer to load than .jpg or .png versions.&lt;br /&gt;
&lt;br /&gt;
The generation of .dds versions of the artwork is automatic if you have set the &amp;lt;useddsfanart&amp;gt; advancedsetting.  DDS versions are generated in step 7 above.  Even if you haven&#039;t set the advanced setting, XBMC will still load .dds versions of the textures if they&#039;re available, so on slower systems you may wish to generate .dds versions offline and place them in the texture cache directly.&lt;br /&gt;
&lt;br /&gt;
== The future ==&lt;br /&gt;
&lt;br /&gt;
The texture cache in the future will be auto-cleaning, i.e. textures that are stale will automatically be cleaned out to save disk space.  Also, the music and video artwork will be moved to the new system.  This will allow the cached versions of these images to be updated whenever the original image changes (eg you replace the fanart with a different version).&lt;br /&gt;
&lt;br /&gt;
In addition, the texture cache will be updated to automatically tell the image control that it needs to refresh itself.  Currently if the texturecache detects that a new version of an image is available (whether it be a .dds version or an updated copy of the original image that has since changed) then all that happens is the new version gets re-cached.  Thus, you only see the new version of an image once you view it a second time after any change (this allows the image to be free&#039;d from memory and reloaded from the freshly updated version).&lt;br /&gt;
&lt;br /&gt;
== How to refresh the cached image of an icon ==&lt;br /&gt;
&lt;br /&gt;
There is an image like &#039;&#039;/home/x/.xbmc/addons/my.lovely.addon/icon.png&#039;&#039; . After changing that file, the old image is still visible in XBMC. To solve this we need to remove the actual thumbnail file from the filesystem and its reference in the DB:&lt;br /&gt;
&lt;br /&gt;
 # Get the thumbnail path to remove the file from the filesystem&lt;br /&gt;
 $ sqlite3 .xbmc/userdata/Database/Textures6.db &amp;quot;SELECT cachedurl FROM texture WHERE url = &#039;/home/x/.xbmc/addons/my.lovely.addon/icon.png&#039;;&amp;quot;&lt;br /&gt;
 6/6a643bff.png&lt;br /&gt;
&lt;br /&gt;
This &#039;&#039;6/6a643bff.png&#039;&#039; is the cached image under &#039;&#039;/home/x/.xbmc/userdata/Thumbnails&#039;&#039;. So: you need to remove from your filesystem &#039;&#039;/home/x/.xbmc/userdata/Thumbnails/6/6a43bff.png&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Remove the image-&amp;gt;cached image link in the DB&lt;br /&gt;
 $ sqlite3 .xbmc/userdata/Database/Textures6.db &amp;quot;DELETE FROM texture WHERE url = &#039;/home/x/.xbmc/addons/my.lovely.addon/icon.png&#039;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Next time XBMC needs the image, it will recreate the thumbnail.&lt;br /&gt;
&lt;br /&gt;
:{{highlight|&#039;&#039;&#039;Remarks:&#039;&#039;&#039;|bordered=yes|color=lime}} &amp;quot;Textures&#039;&#039;&#039;6&#039;&#039;&#039;.db&amp;quot; &#039;&#039;&#039;number/version&#039;&#039;&#039; Increases with newer XBMC versions.&lt;br /&gt;
&lt;br /&gt;
[[Category:Thumbnails]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:XBMC Manual]]&lt;/div&gt;</summary>
		<author><name>Jmarshall</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=Artwork&amp;diff=70734</id>
		<title>Artwork</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Artwork&amp;diff=70734"/>
		<updated>2014-03-15T09:24:27Z</updated>

		<summary type="html">&lt;p&gt;Jmarshall: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{cleanup}}&lt;br /&gt;
An impressive feature of XBMC is its ability to display custom &#039;&#039;&#039;thumbnails&#039;&#039;&#039; (also known as an &amp;quot;icon&amp;quot;) on most items displayed. You can assign thumbnails to folders, programs, music, videos, bookmarks, and of course pictures. You can choose to let XBMC automatically download thumbnails for music-albums and video/movies from the internet or you can create your very own custom thumbnails. You can also download custom thumbnails that others have created.&lt;br /&gt;
&lt;br /&gt;
When talking about movies the terms &amp;quot;Cover Art&amp;quot;, &amp;quot;Posters&amp;quot; (term used on [http://thetvdb.com/ TheTVDB]) and &amp;quot;Folder Image&amp;quot; are all used to refer to the &#039;&#039;&#039;same&#039;&#039;&#039; thing we are talking about here. In the XBMC world Thumbnail is the generic term that encompasses all of those things, so don&#039;t get confused.&lt;br /&gt;
&lt;br /&gt;
{{Note|Despite what the term Thumbnail implies, thumbnails in XBMC are NOT necessarily small images in terms of resolution or size on disk. A Thumbnail in XBMC can be a 800 x 1200 pixel image with a file size of over 300 Kilobytes for example, but typically thumbnails are restricted to smaller sizes than that due to performance concerns.}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Custom Thumbnails ==&lt;br /&gt;
You can easily create your very own user-defined thumbnails on your computer with image tools like Adobe Photoshop, Paint Shop Pro, Paint.NET or even Paint in Windows. &amp;lt;br /&amp;gt; You can alternatively download thumbnails that others have created on the internet.&lt;br /&gt;
Then you simply have to rename those thumbnails and transfer/copy them to the right location and XBMC will display them. Use JPG or PNG (with transparency) image-format, and size of the picture to anything from 128x128 to 256x256 in pixel size, (the larger the image is the better it will look on a good display but at the same time large thumbnails loads slower). On a non-HDTV displays a image that is approx 100x140 is recommended for video/movies thumbnails (which is the size that is most common on [http://www.imdb.com/ IMDb]), and approx 75x75 for music-albums (which is the default size on [http://www.allmusic.com allmusic.com]). For 720p/1080i HDTV displays a size of approx 182x256 for video/movies thumbnails, and approx 200x200 for music-albums (such music-albums can be found on [http://www.allmusic.com allmusic.com]).&lt;br /&gt;
&lt;br /&gt;
==== Thumbnail Cache ====&lt;br /&gt;
:&#039;&#039;see also:&#039;&#039; &#039;&#039;&#039;[[ThumbnailCache]]&#039;&#039;&#039; for a thorough description of the &#039;&#039;&#039;thumbnail cache&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
XBMC will cache all thumbnails to [[userdata]]\Thumbnails\ using the &#039;&#039;&#039;CRC&#039;&#039;&#039; of the path of the file or folder as a filename. That is the first location XBMC will generally look for a thumbnail for a given item.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order for your custom thumbnail to show, you may have to delete the cached thumbnail.&lt;br /&gt;
&lt;br /&gt;
When thumbnails are cached they may be scaled down from the source image. How much they are scaled down depends on a setting that you can control using the  [[Advancedsettings.xml#.3Cthumbsize.3E|&amp;lt;imageres&amp;gt;]] tag in  [[advancedsettings.xml]].&lt;br /&gt;
&lt;br /&gt;
If you are running XBMC on a very high resolution display and you have Movie cover art, for example, that is displayed as a very large image onscreen with the skin and layout that you are using, then you may want to adjust the &amp;lt;imageres&amp;gt; tag to increase the display quality of your thumbnails. &lt;br /&gt;
&lt;br /&gt;
Be aware, however, that increasing the size of cached thumbnails obviously carries an implied disk space usage, and possible XBMC performance penalty, with it.&lt;br /&gt;
&lt;br /&gt;
== Wide banner icons ==&lt;br /&gt;
{|&lt;br /&gt;
[[File:Wideview_tvshows.png|500px|right|Wide view for TV shows|thumb]]&lt;br /&gt;
Some of the most visually appealing forms of thumbnails are [[wide banner icons]]. They are an integral part of the XBMC look and feel and are used for the TV shows [[Video library|library]].&amp;lt;br /&amp;gt;&lt;br /&gt;
With different adjustments to the [[XBMC Skinning Manual|skin]] [[w:XML|XML]] files, you may disable title names or stack one icon on top of another.&amp;lt;br /&amp;gt;&lt;br /&gt;
To show wide banner icons switch to Wide or &#039;Media info 2&#039; view. XBMC will remember what view you have for each folder. Thus you can keep your TV shows in Wide and your Movies in [[FanArt|Fanart]].&lt;br /&gt;
:* [[Wide banner icons#Sources for wide banner icons|Sources for wide banner icons]]&lt;br /&gt;
|}&lt;br /&gt;
{{-}}&lt;br /&gt;
&lt;br /&gt;
== Thumbnails for individual items in a single directory ==&lt;br /&gt;
Name the icon file the same as the file you would like it to display for with a -poster.jpg or -poster.png extension ie: &#039;&#039;Transformers.avi, Transformers-poster.jpg&#039;&#039;. This is particularly useful for using custom thumbnails for movies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename.avi&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename-poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Folder Thumbnails ==&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
If you store each of your media files in separate subfolders to keep things organized, you can also make the folder have a custom thumbnail image. To do this you either need to save your JPG/PNG thumbnail as folder.jpg and place it inside your movie/album folder, or you can save it as &amp;lt;foldername&amp;gt;deprecated and place it at the same level as the folder in the directory tree.&lt;br /&gt;
* Remember, XBMC first checks for &amp;lt;foldername&amp;gt;.jpg before checking for folder.jpg.&lt;br /&gt;
* Some documentation suggests that folder.jpg can be used. In general folder.jpg is superior as it is detected during a scan, i.e. XBMC will correctly use folder.jpg but not folder.jpg.&lt;br /&gt;
* Note that folder.jpg &#039;&#039;&#039;must&#039;&#039;&#039; be named .jpg, even if it is a .png format image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;foldername&#039;&#039;&#039;\&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;foldername.jpg&#039;&#039;&#039;&lt;br /&gt;
or&lt;br /&gt;
 Movies\path\moviename\&#039;&#039;&#039;folder.jpg&#039;&#039;&#039;&lt;br /&gt;
 Music\path\album\&#039;&#039;&#039;folder.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Now your media folder will have a lovely custom thumbnail-image.&lt;br /&gt;
&lt;br /&gt;
You can via [[advancedsettings.xml]] change the default filename of the image that XBMC uses for music folders.  See the [[advancedsettings.xml#&amp;lt;musicthumbs&amp;gt;|&amp;lt;musicthumbs&amp;gt;]] tag. for more information.&lt;br /&gt;
|&lt;br /&gt;
[[File:Files.myvideos.jpg|right|500px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Program Thumbnails ==&lt;br /&gt;
In order to display the image displayed for a game, emulator or application, simply rename the desired image &#039;&#039;&#039;default.jpg&#039;&#039;&#039; and place it in the folder where the corresponding default.XBE is located.&lt;br /&gt;
&lt;br /&gt;
== Music Thumbnails ==&lt;br /&gt;
Music Thumbnails are assigned as part of a multi-tier process. First, the Tag Reader runs and caches any embedded art using the album name and album artist (or song artist, if that is all that is available). If the album name or artist is unavailable, it is cached using the path name of the song. This assumes, of course, that you have tag reading enabled.&amp;lt;br /&amp;gt;&lt;br /&gt;
You can also use &amp;quot;Get Thumb&amp;quot; to download the album thumbnail from [http://www.allmusic.com allmusic.com (AMG)] for a specific album/folder or do a scan of all your music files in all shares.&amp;lt;br /&amp;gt;&lt;br /&gt;
Thumbnails also get downloaded when you rip AudioCD&#039;s to your XBMC device (which is described in the [[Ripping CDs]] section).&amp;lt;br /&amp;gt;&lt;br /&gt;
Recommended is that you store each of your music-albums or artists in a separate subfolder to keep things organized. You can also of course make the folder have a custom thumbnail image.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
[[File:mymusic.jpg|right|500px]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
:{{Note|Running a scan automatically enables &#039;tag reading&#039; so everything can be cached. Once a scan is run, all your files and their associated thumbnails are stored in the database.}}&lt;br /&gt;
:The Album Information dialog (available from the context menu) will allow you to choose between the cover art available for download from [http://www.allmusic.com allmusic.com] and any user-defined thumbnail you may have.&lt;br /&gt;
:Press the &amp;quot;Get Thumb&amp;quot; button to bring up a choice of the local thumbnails you have, the currently assigned thumbnail and the [http://www.allmusic.com allmusic.com] thumbnail.&amp;lt;br /&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;The code which assigns thumbnails to files runs and assigns thumbnails in the following order:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;1) Cached Album Thumbnail&lt;br /&gt;
:This is all the embedded album art read by the tag reader and cached using the album name and album artist.&lt;br /&gt;
;2) Cached filename.jpg&lt;br /&gt;
:This includes an embedded thumbnail cached with the fully qualified name.&lt;br /&gt;
;3) Remote filename.jpg &lt;br /&gt;
:This is a filename.jpg on a remote share/folder which is then cached.&lt;br /&gt;
;4) Cached folder.jpg &lt;br /&gt;
:This is a folder.jpg which is cached based off the folder path.&lt;br /&gt;
;5) Remote folder.jpg &lt;br /&gt;
:This is a folder.jpg on a remote share/folder which is then cached.&lt;br /&gt;
;6) Remote foldername.jpg &lt;br /&gt;
:This is a foldername.jpg on a remote share/folder which is then cached.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In this example audiofilename.mp3 will use audiofilename.jpg as thumbnail:&lt;br /&gt;
 Music\path\&#039;&#039;&#039;audiofilename.mp3&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;audiofilename.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The same goes for playlists, cue-sheets, SHOUTcast, and [[HOW-TO: Play Internet Streams|internet-stream files]], example:&lt;br /&gt;
 Music\path\&#039;&#039;&#039;audioplaylistname.m3u&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;audioplaylistname.jpg&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;cuelistname.cue&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;cuelistname.mp3&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;cuelistname.jpg&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;shoutcastlinkname.pls&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;shoutcastlinkname.jpg&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;audiostreamname.strm&#039;&#039;&#039;&lt;br /&gt;
 Music\path\&#039;&#039;&#039;audiostreamname.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
::Music fanart&lt;br /&gt;
{{see also|FanArt#Music_FanArt_in_XBMC}}&lt;br /&gt;
&lt;br /&gt;
== Video Thumbnails ==&lt;br /&gt;
You can either use your own custom thumbnails or XBMC can retrieve video thumbnails from the internet via [[How To use Scrapers|scrapers]] and cache them locally.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;XBMC applies thumbnails to video files in the following order:&#039;&#039;&#039;&lt;br /&gt;
{|&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
;1) Cached Thumbnail&lt;br /&gt;
Thumbnails are cached to UserData\Thumbnails\Video using the CRC of the path of the file or folder.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
;2) User-Defined Thumbnail&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;For files:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
XBMC looks for &#039;&#039;&#039;&amp;lt;filename&amp;gt;-poster.(jpg/png)&#039;&#039;&#039; in the folder containing the media files and uses that as the thumbnail.&lt;br /&gt;
Note: &amp;lt;filename&amp;gt;.jpg will supersede &#039;&#039;&#039;&amp;lt;filename&amp;gt;-poster.(jpg/png)&#039;&#039;&#039; (result of Eden backward compatibility) &lt;br /&gt;
&lt;br /&gt;
The thumbnail is cached the first time it is read.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{redv|Deprecated:|If movie.jpg is in the same folder it will override any other thumbnail and will be used as the thumbnail for all movie files in that folder.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For folders:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
XBMC checks inside the movie folder for the following files in this order:&amp;lt;br /&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;&amp;lt;filename&amp;gt;-poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;folder.jpg&#039;&#039;&#039;&lt;br /&gt;
{{redv|Deprecated:|XBMC first checks for &amp;lt;foldername&amp;gt;.jpg in the parent folder of the movie folder being processed.&lt;br /&gt;
&lt;br /&gt;
If no &amp;lt;foldername&amp;gt;.jpg exists in the parent folder XBMC then checks inside the movie folder for folder.jpg (by default) or any other thumbnail source file names you&#039;ve specified in the &amp;lt;dvdthumbs&amp;gt; tag in [[AdvancedSettings.xml]].}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For TV series specifically:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{redv|Deprecated:|The thumbnail image can be either a Poster type image OR a Banner type image. A Poster is longer than it is wide in aspect and a Banner is much wider than it is long in aspect.&lt;br /&gt;
&lt;br /&gt;
The same rules apply regarding file naming conventions and by default XBMC will look for folder.jpg for BOTH Posters AND Banners despite the fact that the naming convention might seem &lt;br /&gt;
counter intuitive in the case of Banners.&lt;br /&gt;
&lt;br /&gt;
Note: Deprecated as of Frodo &amp;lt;dvdthumbs&amp;gt; is no longer part of advancedsettings.xml - Again, you can use the &amp;lt;dvdthumbs&amp;gt; element in advancedsettings.xml to override the default thumbnail file name that XBMC looks for to make things more meaningful for TV series. If, for example, you&lt;br /&gt;
prefer to use Banners you would probably want to set the &amp;lt;dvdthumbs&amp;gt; element in advancedsettings.xml to remove folder.jpg from the search filter and add banner.jpg to the search filter as follows:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;dvdthumbs&amp;gt;&lt;br /&gt;
    &amp;lt;remove&amp;gt;folder.jpg|Folder.jpg|folder.JPG|Folder.JPG&amp;lt;/remove&amp;gt;&lt;br /&gt;
    &amp;lt;add&amp;gt;banner.jpg|Banner.jpg|banner.JPG|Banner.JPG|cover.jpg|Cover.jpg|cover.JPG|Cover.JPG&amp;lt;/add&amp;gt;&lt;br /&gt;
  &amp;lt;/dvdthumbs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above example will make XBMC ignore all variants of folder.jpg when searching for thumbnails but recognise multiple variants of banner.jpg and cover.jpg and import those instead.&lt;br /&gt;
}}&lt;br /&gt;
{{note|&amp;lt;code&amp;gt;TV series:&amp;lt;/code&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
There is a special case with TV Series where, if you choose to use Banners as your primary thumbnails, you also need Posters in some areas of the UI depending on which skin you are using.&lt;br /&gt;
&lt;br /&gt;
The Aeon Nox skin, which is extremely popular, has a very nice View mode called BannerPlex for example. If you are using that View as your TV Series View, your primary thumbnails for your TV series will &lt;br /&gt;
be Banners BUT there are still places where you need to supply a Poster, like the &amp;quot;TV show information&amp;quot; screen that is accessible from the context menu for a Series. In that screen you need a Poster image for the big area on the left that takes up a third of the screen. By default the Banner thumbnail that XBMC imported will be stretched vertically to fill that area and it looks horrible.&lt;br /&gt;
&lt;br /&gt;
As of Frodo, XBMC will import Banners and Posters. &lt;br /&gt;
&lt;br /&gt;
{{redv|Deprecated:|Fortunately there is a special exception to this rule for TV Series where XBMC will also recognise and import a file called poster.jpg over and above the default thumbnail image. &lt;br /&gt;
&lt;br /&gt;
For this reason you should NEVER name your primary thumbnail images poster.jpg and you should NEVER modify the &amp;lt;dvdthumbs&amp;gt; element in advancedsettings.xml to make it search for variants of poster.jpg.&lt;br /&gt;
&lt;br /&gt;
Effectively, you should consider the file name poster.jpg to be a reserved file name in XBMC that is used specifically to solve the Banner / Poster combo issue as described further below.}}&lt;br /&gt;
&lt;br /&gt;
Certain skins, like Aeon Nox, typically provide an option in the settings for the View itself that allows you to explicitly stipulate that a poster file should be used for those areas where a Poster type image is applicable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Aeon Nox, the setting is on the slide out menu on the left of the screen when you are viewing your series. If you have the BannerPlex view activated and you slide out that menu, then go to &lt;br /&gt;
&amp;quot;Viewtype settings&amp;quot;, then look under &amp;quot;GENERAL OPTIONS&amp;quot;, you will find an option labelled &amp;quot;Use &#039;poster.jpg&#039; for poster style viewtypes&amp;quot;. If you turn that on, then any poster.jpg that you have in your folders&lt;br /&gt;
when you import your media from disk will be used where a poster type image is appropriate.&lt;br /&gt;
&lt;br /&gt;
{{note|However, that regardless of any settings, poster.jpg will NOT be used as the All Seasons image. For that you MUST provide a season-all.(jpg/png) file. A quick workaround to this problem is to copy an existing poster.jpg file and rename it to season-all.(jpg/png). That will actually work and import fine.}}&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
[[File:Files.videos.thumbnails.WSCR.jpg|right|500px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Examples for User-Defined Video Thumbnails ====&lt;br /&gt;
;Single Video File&lt;br /&gt;
The following example &amp;quot;videofilename.avi&amp;quot; will now use the thumbnail &amp;quot;videofilename-poster.(jpg/png)&amp;quot;.&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;videofilename-poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;videofilename.avi&#039;&#039;&#039;&lt;br /&gt;
Note that &#039;&#039;&#039;videofilename.jpg&#039;&#039;&#039; is old Eden terminology, but WILL supersede &#039;&#039;&#039;videofilename-poster.(jpg/png)&#039;&#039;&#039; which is the standard for Frodo and later versions of XBMC.&lt;br /&gt;
&lt;br /&gt;
;Multi Part (Stacked) Video Files&lt;br /&gt;
This may not be Frodo terminology, but &#039;&#039;&#039;&#039;&#039;should&#039;&#039;&#039;&#039;&#039; still work&lt;br /&gt;
You can either use the filename of the first file in the stack or the name of the stack, so for:&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename-CD1.avi&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename-CD2.avi&#039;&#039;&#039;&lt;br /&gt;
Either of the below would work:&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename-CD1.jpg&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;moviename.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Movies in Folders&lt;br /&gt;
{{redv|Deprecated:|If [[Set Content (Video Library)|content]] has been set to Movies, movie.jpg will override any other thumbs for media in that folder.}}&amp;lt;br /&amp;gt; &lt;br /&gt;
In the following example &amp;quot;videofilename.avi&amp;quot; will now use the thumbnail &amp;quot;poster.(jpg/png)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;videofilename.avi&#039;&#039;&#039;&lt;br /&gt;
Note that movie.jpg will supersede &#039;&#039;&#039;poster.jpg&#039;&#039;&#039; due to Eden backward compatibility&lt;br /&gt;
&lt;br /&gt;
;TV Shows&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 or&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;banner.jpg&#039;&#039;&#039; &lt;br /&gt;
{{redv|Deprecated:|See [[http://wiki.xbmc.org/index.php?title=Userdata/advancedsettings.xml#.3Cdvdthumbs.3E &amp;lt;dvdthumbs&amp;gt;]] in [[http://wiki.xbmc.org/index.php?title=Userdata/advancedsettings.xml advancedsettings.xml]] }}&lt;br /&gt;
&lt;br /&gt;
;TV Show Season Thumbnails&lt;br /&gt;
As of Frodo, XBMC can use either posters OR banners as the Season thumbnail.  In the following example, the thumbnail will be used for the appropriate season in the [[Video Library]] season node. Where xx is 01, 02 etc.&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;seasonxx-poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 or&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;seasonxx-banner.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;TV Show Specials&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;season-specials-poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 or&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;season-specials-banner.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;For the all seasons item:&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;season-all-poster.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
 or&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;season-all-banner.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Fanart&lt;br /&gt;
Movies in Folders:&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;fanart.(jpg/png)&#039;&#039;&#039; &lt;br /&gt;
TV Series:&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;fanart.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
TV Season:&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;seasonxx-fanart.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
TV Season All:&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;season-all-fanart.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
TV Specials:&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;season-specials-fanart.(jpg/png)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;[[Extra fanart|Extra Fanart Page]]&lt;br /&gt;
&lt;br /&gt;
 Movies\path\&#039;&#039;&#039;extrafanart\fanart1.jpg&#039;&#039;&#039;&lt;br /&gt;
 Movies\path\VIDEO_TS\&#039;&#039;&#039;extrafanart\fanart1.jpg&#039;&#039;&#039; *Special case if using DVD Video structure&lt;br /&gt;
 TV\showfolder\&#039;&#039;&#039;extrafanart\fanart1.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The concept of extra fanart exists in XBMC for some skins whereby you can have more than one fanart image for a movie or TV show.&lt;br /&gt;
If you have more than one fanart image any fanart image after the main one (fanart.jpg) must be named using sequential numbering.&lt;br /&gt;
&lt;br /&gt;
e.g. fanart1.jpg, fanart2.jpg and so on.&lt;br /&gt;
&lt;br /&gt;
Extra fanart must be put into a sub-folder of the movie or TV show folder called &#039;&#039;&#039;extrafanart&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For those skins that support extra fanart you must turn on the &amp;quot;Enable Extrafanart&amp;quot; option and then you will see the different fanart images display as a repeating slideshow with a 10 second delay between each image.&lt;br /&gt;
&lt;br /&gt;
;Playlist and [[HOW-TO: Play Internet Streams|internet-stream file]] examples&lt;br /&gt;
 Playlists\path\&#039;&#039;&#039;videoplaylistname.pls&#039;&#039;&#039;&lt;br /&gt;
 Playlists\path\&#039;&#039;&#039;videoplaylistname.jpg&#039;&#039;&#039;&lt;br /&gt;
 Streams\path\&#039;&#039;&#039;videostreamname.strm&#039;&#039;&#039;&lt;br /&gt;
 Streams\path\&#039;&#039;&#039;videostreamname.jpg&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;Actor thumbnails&lt;br /&gt;
You can add actor thumbnails to any movie or TV show by adding an &#039;.actors&#039; folder in the corresponding movie / TV show / Episode directory. You may need to use the command line to create this directory in Windows.&amp;lt;br /&amp;gt;&lt;br /&gt;
The folder can then contain actor images using the following naming convention:&amp;lt;br /&amp;gt;&lt;br /&gt;
 Videos\path\.actors\&#039;&#039;&#039;actor_name.jpg&#039;&#039;&#039; (spaces replaced with underscores)&lt;br /&gt;
 Movies\Movie1\.actors\&#039;&#039;&#039;actor_name.jpg&#039;&#039;&#039; (spaces replaced with underscores)&lt;br /&gt;
 Movies\Movie1\VIDEO_TS\.actors\&#039;&#039;&#039;actor_name.jpg&#039;&#039;&#039; (spaces replaced with underscores) *Special case if using DVD Video structure&lt;br /&gt;
 TV Shows\TV Show 1\.actors\&#039;&#039;&#039;actor_name.jpg&#039;&#039;&#039; (spaces replaced with underscores)&lt;br /&gt;
&lt;br /&gt;
== Picture Thumbnails ==&lt;br /&gt;
&#039;&#039;&#039;XBMC applies thumbnails to picture files in the following order:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
;1) Cached Thumbnail&lt;br /&gt;
:Thumbnails are cached to UserData\Thumbnails\Pictures using the CRC of the path of the file or folder.&lt;br /&gt;
&lt;br /&gt;
;2) Images&lt;br /&gt;
:EXIF thumbnail in JPEG images are then read. If no EXIF thumbnail is available, XBMC will load the image and generate a thumbnail from the image. These are then cached.&lt;br /&gt;
&lt;br /&gt;
;3) Folders &lt;br /&gt;
:&amp;lt;MyHolidayPictures&amp;gt;\folder.jpg is checked first. If that file doesn&#039;t exist, XBMC will generate a thumbnail from up to 4 random images inside that folder.&lt;br /&gt;
&lt;br /&gt;
== Thumbnails for Sources ==&lt;br /&gt;
You can change the thumbnail displayed for a source by editing &#039;&#039;&#039;UserData\sources.xml&#039;&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
{{note|Source thumbnails have to be in a folder on the local XBMC device harddrive!}}&lt;br /&gt;
;Simply modify your source as shown:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
   &amp;lt;name&amp;gt;Music&amp;lt;/name&amp;gt;&lt;br /&gt;
   &amp;lt;path&amp;gt;xbms://192.168.1.100:1400/Music/&amp;lt;/path&amp;gt;&lt;br /&gt;
   &amp;lt;thumbnail&amp;gt;F:\Apps\XBMC\thumbs\shares\thumb.png&amp;lt;/thumbnail&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Auto switch to icon Mode ==&lt;br /&gt;
XBMC tries to automatically switch to &#039;&#039;Large Icon&#039;&#039; [[General Navigation#View|view]] when the &#039;&#039;View Mode&#039;&#039; is set to &#039;&#039;Auto&#039;&#039; in the [[Settings]]. It first checks if the skin has &#039;&#039;Large Icon&#039;&#039; view, failing that switches to &#039;&#039;Icon&#039;&#039; view. If neither is available it goes for &#039;&#039;List View&#039;&#039;.&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The rules are as follows:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== [[Programs Settings#Files|Programs]] ====&lt;br /&gt;
Auto switches to Icon view when 50% of all the items (files and folder) have thumbs.&lt;br /&gt;
&lt;br /&gt;
==== [[Pictures Settings#General|Pictures]] ====&lt;br /&gt;
Auto switches to Thumbs view when the list contains more than 25% files. (In the case of Pictures, all items have thumbs as they are generated upon entering the folder.)&lt;br /&gt;
&lt;br /&gt;
==== [[Videos Settings#General|Videos]] ====&lt;br /&gt;
Auto switches to Thumb view when 50% of all the items (files and folder) have thumbs.&lt;br /&gt;
&lt;br /&gt;
==== [[Music Settings#Files|Music]] ====&lt;br /&gt;
Auto switches to Thumb view when the list contains at least 75% folders and at least 50% of them have thumbs. (Remember that playlist files like m3u, pls, etc, are treated as folders by default)&lt;br /&gt;
&lt;br /&gt;
[[Category:Thumbnails]]&lt;br /&gt;
[[Category:Scraper]]&lt;br /&gt;
[[Category:Video Library]]&lt;br /&gt;
[[Category:Music Library]]&lt;br /&gt;
[[Category:XBMC Manual]]&lt;br /&gt;
{{frodo updated}}&lt;/div&gt;</summary>
		<author><name>Jmarshall</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=Archive:Team_Kodi/Members&amp;diff=64820</id>
		<title>Archive:Team Kodi/Members</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Archive:Team_Kodi/Members&amp;diff=64820"/>
		<updated>2013-10-16T21:30:25Z</updated>

		<summary type="html">&lt;p&gt;Jmarshall: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{mininav|[[Team XBMC]]}}&lt;br /&gt;
{{notice|&#039;&#039;&#039;PLEASE DON&#039;T E-MAIL OR PM ANYONE DIRECTLY ABOUT SUPPORT! INSTEAD USE THE [[XBMC:Community Portal|COMMUNITY FORUM]] OR [[XBMC:Community Portal|IRC-CHANNELS]]!&#039;&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;section begin=intro /&amp;gt;Team XBMC is the formal group of people who develop and maintain [[XBMC]], the [http://xbmc.org XBMC websites], and/or other supporting roles.&amp;lt;section end=intro /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;This list is likely incomplete, so give us a nudge if we forgot you&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
=Active members=&lt;br /&gt;
&lt;br /&gt;
==XBMC Foundation Voting Board Members and Non-Voting Officers==&lt;br /&gt;
{{Main|XBMC Foundation}}&lt;br /&gt;
{{#lst:XBMC Foundation|intro}}&lt;br /&gt;
{{#lst:XBMC Foundation|Foundation members}}&lt;br /&gt;
&lt;br /&gt;
==Project Managers==&lt;br /&gt;
*[[User:Pike|Pike]] - The Bossman&lt;br /&gt;
*[[User:theuni|theuni]] - Business Relation Manager&lt;br /&gt;
*[[User:Natethomas|Natethomas]] - Community Manager&lt;br /&gt;
*[[User:Martijn|Martijn]] - GitHub Project Manager&lt;br /&gt;
&lt;br /&gt;
==Liason==&lt;br /&gt;
*[[User:theuni|theuni]] - All Around PR Stunts&lt;br /&gt;
&lt;br /&gt;
==Developers (General)==&lt;br /&gt;
*abelier - video decoding&lt;br /&gt;
*[[User:alanwww1|alanwww1]] - Translations, Intel related stuff&lt;br /&gt;
*[[User:Alcoheca|Alcoheca]]&lt;br /&gt;
*[[User:AlTheKiller|AlTheKiller]] - Fixer of broken things, build system&lt;br /&gt;
*[[User:amet|amet]]&lt;br /&gt;
*[[User:Anssi|Anssi]]&lt;br /&gt;
*[[User:Arnova|Arnova]] - Curl/webdav filesystem(s), general bug fixes&lt;br /&gt;
*[[User:bobo1on1|bobo1on1]] - Video Playback, General Bugfixes&lt;br /&gt;
*[[User:Chadoe|Chadoe]] - last.fm, general bug fixes&lt;br /&gt;
*[[User:opdenkamp|opdenkamp]] - PVR, EPG&lt;br /&gt;
*[[User:dteirney|dteirney]] - MythTV Integration&lt;br /&gt;
*[[User:elupus|elupus]] - XBMC video player (DVDPlayer) god&lt;br /&gt;
*[[User:firnsy|firnsy]] - Database&lt;br /&gt;
*[[User:Fneufneu|Fneufneu]] - BSD Developer&lt;br /&gt;
*[[User:freezy|freezy]] - Android Remote Developer&lt;br /&gt;
*[[User:garbear|garbear]]&lt;br /&gt;
*[[User:gnif|gnif]] - Audio, Audio Engine&lt;br /&gt;
*[[User:jfcarroll|jfcarroll]] - swig integration, binary addon developer&lt;br /&gt;
*[[User:Jmarshall|Jmarshall]] - Jedi-Master&lt;br /&gt;
*JoeTheFox - iPhone Remote Developer&lt;br /&gt;
*[[User:Malard|Malard]] - Web&lt;br /&gt;
*[[User:Memphiz|Memphiz]] - vfs, zeroconf, AirPlay and general stuff&lt;br /&gt;
*[[User:Montellese|Montellese]] - JSONRPC&lt;br /&gt;
*night199uk - Music library&lt;br /&gt;
*[[User:olympia|olympia]] - scraper developer/repo maintainer&lt;br /&gt;
*[[User:phi2039|phi2039]] - Audio, Assembly, and anything that sounds like it might be challenging...&lt;br /&gt;
*[[User:pieh|pieh]] - General code tinkering&lt;br /&gt;
*[[User:taxigps|taxigps]]&lt;br /&gt;
*[[User:Topfs2|Topfs2]] - JSONRPC, ARM, power, storage, dbus&lt;br /&gt;
*[[User:the_alien|the_alien]] - Android Remote Developer&lt;br /&gt;
*[[User:VDRfan|VDRfan]] - General&lt;br /&gt;
*[[User:Herrnst|Herrnst]] - LCD display coding&lt;br /&gt;
*[[User:Voyager|Voyager]] - hunting bugs in library, dvdplayer etc.&lt;br /&gt;
*[[User:ulion|ulion]]&lt;br /&gt;
&lt;br /&gt;
==Developers (Linux)==&lt;br /&gt;
*[[User:AlTheKiller|AlTheKiller]]&lt;br /&gt;
*[[User:Amejia|Amejia]] - Debian, etc.&lt;br /&gt;
*[[User:Anssi|Anssi]]&lt;br /&gt;
*[[User:Arnova|Arnova]]&lt;br /&gt;
*[[User:bobo1on1|bobo1on1]]&lt;br /&gt;
*[[User:davilla|davilla]]&lt;br /&gt;
*[[User:opdenkamp|opdenkamp]]&lt;br /&gt;
*[[User:Erhnam|Erhnam]] - XBMCFreak creater, Live Distro developer&lt;br /&gt;
*[[User:firnsy|firnsy]]&lt;br /&gt;
*[[User:l.capriotti|l.capriotti]] - LiveUSB Distro&lt;br /&gt;
*[[User:malloc|malloc]]&lt;br /&gt;
*[[User:monkeyman 67156|monkeyman 67156]]&lt;br /&gt;
*[[User:Phaeodaria|Phaeodaria]]&lt;br /&gt;
*[[User:sraue|sraue]] - OpenELEC.tv Developer&lt;br /&gt;
*[[User:Topfs2|Topfs2]]&lt;br /&gt;
*[[User:VDRfan|VDRfan]]&lt;br /&gt;
*[[User:FernetMenta|FernetMenta]] linux, video, windowing, pvr etc developer&lt;br /&gt;
*[[User:wsnipex|wsnipex]] Linux PPA&lt;br /&gt;
*[[User:fritsch|fritsch]] Linux, XVBA, grAEken, helping with Hammer, User Support, OpenELEC&lt;br /&gt;
&lt;br /&gt;
==Developers (Mac and iOS)==&lt;br /&gt;
*[[User:Beenje|Beenje]] - PowerPC (PPC) specialist&lt;br /&gt;
*[[User:davilla|davilla]]&lt;br /&gt;
*[[User:gimli|gimli]]&lt;br /&gt;
*[[User:Jmarshall|Jmarshall]]&lt;br /&gt;
*[[User:Memphiz|Memphiz]] - dark side padawan&lt;br /&gt;
*[[User:ulion|ulion]]&lt;br /&gt;
&lt;br /&gt;
==Developers (Windows)==&lt;br /&gt;
*[[User:a11599|a11599]] - primarily windows video and dxva&lt;br /&gt;
*[[User:blinkseb|blinkseb]]&lt;br /&gt;
*[[User:bobo1on1|bobo1on1]]&lt;br /&gt;
*[[User:Chadoe|Chadoe]]&lt;br /&gt;
*[[User:CrystalP|CrystalP]]&lt;br /&gt;
*[[User:jhsrennie|jhsrennie]]&lt;br /&gt;
*[[User:Jmarshall|Jmarshall]]&lt;br /&gt;
*[[User:tiben20|tiben20]] - butcher by day, coder by night&lt;br /&gt;
*[[User:WiSo|WiSo (aka wsoltys)]]&lt;br /&gt;
*[[User:DDDamian|DDDamian]]&lt;br /&gt;
*[[User:DanielaE|DanielaE]]&lt;br /&gt;
*[[User:Voyager|Voyager]] - general Windows, hunting bugs in library, dvdplayer etc.&lt;br /&gt;
*[[User:Koying|Koying]] Windows, Android, mysql&lt;br /&gt;
&lt;br /&gt;
==Developers (ARM)==&lt;br /&gt;
*[[User:davilla|davilla]]&lt;br /&gt;
*[[User:McGeagh|McGeagh]]&lt;br /&gt;
*[[User:Phaeodaria|Phaeodaria]]&lt;br /&gt;
*[[User:Topfs2|Topfs2]]&lt;br /&gt;
&lt;br /&gt;
==Skinners / Graphic-artists==&lt;br /&gt;
*da-anda - graphics&lt;br /&gt;
*[[User:freezy|freezy]]&lt;br /&gt;
*[[User:Jezz_X|Jezz_X]] - Team skinner &amp;amp; Project Manager of the [http://sourceforge.net/projects/xboxmediacenter XBMC Skinning Project]&lt;br /&gt;
*[[User:ronie|ronie]]&lt;br /&gt;
*[[User:tree_jammer|tree_jammer]] - graphics&lt;br /&gt;
&lt;br /&gt;
==Addon Developers==&lt;br /&gt;
*[[User:Clumsy|Clumsy]]&lt;br /&gt;
*[[User:opdenkamp|opdenkamp]] - PVR, EPG&lt;br /&gt;
*[[User:Jmarshall|Jmarshall]] - on an as-needed basis&lt;br /&gt;
*[[User:Martijn|Martijn]] - python addons&lt;br /&gt;
&lt;br /&gt;
==Q/A Testers==&lt;br /&gt;
*[[User:keith|keith]] - QA for iOS and OSX projects&lt;br /&gt;
*[[User:kricker|kricker]]&lt;br /&gt;
*[[User:alanwww1|alanwww1]] - QA for Intel HW, VAAPI&lt;br /&gt;
*[[User:Gabbott|Gabbott]]&lt;br /&gt;
&lt;br /&gt;
==Website services==&lt;br /&gt;
*[[User:Clumsy|Clumsy]] - Forum Moderator&lt;br /&gt;
*da-anda - Forum administration&lt;br /&gt;
*[[User:DonJ|DonJ]] - Server and Mirror Contact&lt;br /&gt;
*[[User:joebrady|joebrady]] - Forum Moderator&lt;br /&gt;
*[[User:Gamester17|Gamester17]] - Moderates a little bit of everything&lt;br /&gt;
*[[User:Ned Scott|Ned Scott]] - Wiki and forum Moderator&lt;br /&gt;
*[[User:Prae5|Prae5]] - Forum Moderator&lt;br /&gt;
*[[User:Sho|Sho]] - WIKI Structure Guru&lt;br /&gt;
*[[User:Zag|Zag]] - Add-on Frontend, Website, General Community Stuff&lt;br /&gt;
&lt;br /&gt;
==Google Summer of Code 2012==&lt;br /&gt;
:&#039;&#039;See also: http://www.google-melange.com/gsoc/org/google/gsoc2012/xbmc &#039;&#039;&lt;br /&gt;
*Alasdair Campbell (Alcoheca) - Improved UPnP serving and client &lt;br /&gt;
**Joakim Plate (elupus) - Mentor&lt;br /&gt;
*Andres Mejia (amejia) - XBMC Test Suite &lt;br /&gt;
**Bob van Loosen (bobo1on1) - Mentor&lt;br /&gt;
*Montellese - Advanced Library Filtering in XBMC&lt;br /&gt;
**Jonathan Marshall (jmarshall) - Mentor&lt;br /&gt;
*topfs2 - Clean scraping API &lt;br /&gt;
**spiff - Mentor&lt;br /&gt;
*Nathan Betzen (natethomas) - GSoC admin&lt;br /&gt;
&lt;br /&gt;
=Inactive members=&lt;br /&gt;
&lt;br /&gt;
==Project Founders (All Retired)==&lt;br /&gt;
*[[User:Frodo|Frodo]] - now [http://www.team-mediaportal.com MediaPortal] head programmer/founder&lt;br /&gt;
*[[User:RUNTiME|RUNTiME]] - now [http://www.runtime360.com runtime360.com] &amp;amp; [http://www.runtime360.com/projects/transcode-360/ Transcode 360]&lt;br /&gt;
*[[User:d7o3g4q|d7o3g4q (a.k.a. Duo Egaq)]] M.I.A. (Missing In Action)&lt;br /&gt;
&lt;br /&gt;
==Developers (Currently Inactive or Retired)==&lt;br /&gt;
*[[User:MaestroDD|MaestroDD]] - Mac OS X, and Apple TV&lt;br /&gt;
*[[User:wattazoum|wattazoum]] - XBMC for Linux packaging specialist&lt;br /&gt;
*[[User:AreaScout|AreaScout]]&lt;br /&gt;
*[[User:oldnemesis|oldnemesis]]&lt;br /&gt;
*[[User:motd2k|motd2k]]&lt;br /&gt;
*[[User:Rudd|Rudd]]&lt;br /&gt;
*[[User:Alwinus|Alwinus]] - XBMC PVR Frontend Programmer&lt;br /&gt;
*[[User:Kraqh3d|Kraqh3d]]&lt;br /&gt;
*[[User:C-Quel|C-Quel]]&lt;br /&gt;
*[[User:Agathorn|Agathorn]]&lt;br /&gt;
*[[User:Tut-ankh-amon|tut-ankh-amon]]&lt;br /&gt;
*[[User:nad|nad]] - [[WebServerHTTP-API|XBMC HTTP API Mastermind]]&lt;br /&gt;
*[[User:MrC|MrC]] - XBMC Visualisation/Screensaver Mastermind&lt;br /&gt;
*[[User:c0diq|c0diq]] - UPnP (Universial Plug And Play) Mastermind&lt;br /&gt;
*[[User:Yuvalt|Yuvalt]] - XBMC Linux port specialist&lt;br /&gt;
*[[User:Vulkanr|Vulkanr]] - XBMC Linux and Mac port specialist&lt;br /&gt;
*[[User:D4rk|D4rk]] - XBMC Linux and Mac port specialist&lt;br /&gt;
*[[User:Bobbin007|Bobbin007]]&lt;br /&gt;
*[[User:Tslayer|Tslayer]]&lt;br /&gt;
*[[User:GeminiServer|GeminiServer]] - Low-level Hardware Guru&lt;br /&gt;
*[[User:Darkie|Darkie]]&lt;br /&gt;
*[[User:Forza|Forza]] - M.I.A. (Missing In Action)&lt;br /&gt;
*[[User:Butcher|Butcher]]&lt;br /&gt;
*[[User:Ysbox|Ysbox]]&lt;br /&gt;
*[[User:Guybrush|Guybrush]] - M.I.A. (Missing In Action)&lt;br /&gt;
*[[User:Kreet|Kreet]] - M.I.A. (Missing In Action)&lt;br /&gt;
*[[User:monkeyhappy|monkeyhappy]] - M.I.A. (Missing In Action)&lt;br /&gt;
*[[User:elan|elan (a.k.a. leafmuncher)]] - XBMC for Mac port specialist&lt;br /&gt;
*[[User:LiquidIce629|LiquidIce629]] - [[The Web Interface|XBMC Web GUI control-interface]] ([http://www.cliqklabs.com/xbmcwebgui/ Website])&lt;br /&gt;
*[[User:Spiff|Spiff]]&lt;br /&gt;
&lt;br /&gt;
==Skinners / Graphic-artists (Retired)==&lt;br /&gt;
*[[User:CHI3f|CHI3f]] - XML Guru and all round Good Guy&lt;br /&gt;
*[[User:SmokeHead|SmokeHead]] - Photoshop Guru (Missing In Action)&lt;br /&gt;
*[[User:Chokemaniac|ChokeManiac]] - Project Mayhem&lt;br /&gt;
&lt;br /&gt;
==Python Scripters (Retired/Inactive)==&lt;br /&gt;
*[[User:Voinage|Voinage]] - Python Plugin coder&lt;br /&gt;
*[[User:rwparris2|rwparris2]] - Python Plugin coder&lt;br /&gt;
*[[User:Nuka1195|Nuka1195]] - Python Script coder&lt;br /&gt;
&lt;br /&gt;
==Web Services (Retired/Inactive)==&lt;br /&gt;
*[[User:Granqvist|Granqvist]] - Web Developer&lt;br /&gt;
*[[User:blittan|blittan]] - Web and Python Developer&lt;br /&gt;
&lt;br /&gt;
==Testers (Retired/Inactive)==&lt;br /&gt;
*[[User:DDay|DDay]] - [http://forums.xbox-scene.com/index.php?showforum=180 Xbox-Scene.com Forum Mod God]&lt;br /&gt;
*[[User:TeknoJuce|TeknoJuce]] CrAzY Canuck&lt;br /&gt;
*[[User:Modhack|Modhack]] - French Guru [http://manuel.xboxmediacenter.fr .fr manuel]&lt;br /&gt;
*[[User:Donno|Donno]] - 1337 d00d&lt;br /&gt;
*[[User:SandmanCL|SandmanCL]] - Quality Assurance&lt;br /&gt;
*[[User:ShortySco|ShortySco]] - Quality Assurance&lt;br /&gt;
*[[User:Scape|sCAPe]] - Beta-Tester&lt;br /&gt;
&lt;br /&gt;
==#XBMC (FreeNode) IRC Support==&lt;br /&gt;
*[[User:Bizzeh|Bizzeh]] - Mr. Hater (&amp;quot;I want to be in all sections&amp;quot;) ([http://www.bizzeh.com Blog])&lt;br /&gt;
*[[User:Cocoliso|Cocoliso]] - Spanish&lt;br /&gt;
*[[User:DOS4GW|DOS4GW]] - Multi-lingual&lt;br /&gt;
*[[User:Jedi79|Jedi79]]&lt;br /&gt;
*[[User:MattAAron|MattAAron]]&lt;br /&gt;
*[[User:No1CaNTeL|No1CaNTeL]]&lt;br /&gt;
*[[User:xLoial|xLoial]] - Seasoned newbie&lt;br /&gt;
&lt;br /&gt;
==Forum and Online Manual (WIKI) Moderators (Retired/Inactive)==&lt;br /&gt;
*[[User:Dankula|Dankula]] - WIKI Editor&lt;br /&gt;
*[[User:Loto_Bak|Loto_Bak]] - Al&#039;round support man&lt;br /&gt;
*[[User:nimbles|nimbles]]&lt;br /&gt;
*[[User:No_Good|No Good]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Team-XBMC]]&lt;br /&gt;
[[Category:Team XBMC specific notes]]&lt;/div&gt;</summary>
		<author><name>Jmarshall</name></author>
	</entry>
	<entry>
		<id>https://kodi.wiki/index.php?title=Archive:Google_Summer_of_Code/2012&amp;diff=64819</id>
		<title>Archive:Google Summer of Code/2012</title>
		<link rel="alternate" type="text/html" href="https://kodi.wiki/index.php?title=Archive:Google_Summer_of_Code/2012&amp;diff=64819"/>
		<updated>2013-10-16T21:28:35Z</updated>

		<summary type="html">&lt;p&gt;Jmarshall: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{mininav|[[Development]]|[[:Category:Google Summer of Code]]}}&lt;br /&gt;
&lt;br /&gt;
{{outdated|This page describes last years event. For the 2013 Google Summer of Code please go here: [[Google Summer of Code 2013]]}}&lt;br /&gt;
&lt;br /&gt;
{{Top icon|raw={{PlusOne}} }}&lt;br /&gt;
Welcome to the XBMC [http://www.google-melange.com/gsoc/homepage/google/gsoc2012 Google Summer of Code] ideas page. We are pleased to announce that we have been accepted as an official [http://www.google-melange.com/gsoc/org/google/gsoc2012/xbmc GSOC mentor organization this year].&lt;br /&gt;
&lt;br /&gt;
We encourage interested students to review some of the ideas on this page, and then feel free to provide input on any ideas you may have in the [[#Students Project Proposal Ideas|Student Project Proposal area]]. Alternatively, feel free to jump into the &#039;&#039;&#039;[[forumtopic:161|XBMC GSoC subforum]]&#039;&#039;&#039; and chat about any project you’d love to cover.&lt;br /&gt;
&lt;br /&gt;
From March 26th to April 6th, any interested students may apply at the [http://www.google-melange.com/gsoc/homepage/google/gsoc2012 GSOC home page] to work with XBMC. After that, we’ll notify applicants whether we get to work with each other according to the [http://www.google-melange.com/gsoc/events/google/gsoc2012 GSOC schedule].&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| align=left |&lt;br /&gt;
__TOC__&lt;br /&gt;
| align=right |&lt;br /&gt;
{{youtube|wju0RodoETI}}&lt;br /&gt;
|}&lt;br /&gt;
== About Us ==&lt;br /&gt;
As there may be many students who have landed here as a result of GSOC, but are unfamiliar with the project, here are a few resources that may help explain what we are about.&lt;br /&gt;
&lt;br /&gt;
:XBMC is an award-winning free and open source (GPL) software media player and entertainment hub for digital media. Created in 2003 by a group of like minded programmers, XBMC is a non-profit project run and developed by volunteers located around the world. More than 50 software developers have contributed to XBMC, and 100-plus translators have worked to expand its reach, making it available in more than 30 languages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To get an idea of what XBMC is truly capable of, it really must be seen. Check out a few other user-created videos:&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=NcogPuSo-DU XBMC with the default Confluence skin]&amp;lt;br /&amp;gt; &lt;br /&gt;
[http://www.youtube.com/watch?v=4asUCtE0ONU XBMC with Aeon Nox skin]&amp;lt;br /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=4NR57ELY28s XBMC on Raspberry Pi]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
XBMC is written primarily in c++ and runs on a variety of platforms including Windows, Linux, OSX, and iOS. It has been ported to work on several low-power platforms including the BeagleBoard, PandaBoard, AppleTv, AppleTV2, and most recently, the [http://www.raspberrypi.org/archives/571 Raspberry Pi].&lt;br /&gt;
&lt;br /&gt;
XBMC was a mentoring organization in [[Google Summer of Code 2008|2008]], and had team members involved in GSoC for other projects in 2011.&lt;br /&gt;
&lt;br /&gt;
If XBMC is selected as a mentoring organization for 2012, students will need to review the Overview of a good project proposal, follow the outline for proposals when applying, and review the list of project ideas detailed below. Students are welcome to propose ideas outside the list and are encouraged to be as creative as they like.&lt;br /&gt;
&lt;br /&gt;
=== Mentors ===&lt;br /&gt;
This years main mentors are Jonathan Marshall (jmarshall) and spiff, who have both been mentors in previous GSoCs. Backup mentors are Joakim Plate (elupus) and Bob van Loosen (bobo1on1). The GSoC admin is Nathan Betzen (natethomas). Other team members have also volunteered to be available to assist where possible with code and design review.&lt;br /&gt;
&lt;br /&gt;
All mentors and backup mentors are extremely experienced in the XBMC codebase and will thus be able to assist students in getting to know the codebase and in quickly identifying projects that are both achievable for someone unfamiliar with the internal workings of XBMC and desirable to the wider XBMC community.&lt;br /&gt;
&lt;br /&gt;
== Project Proposals ==&lt;br /&gt;
=== Overview ===&lt;br /&gt;
Qualifications for a good Summer of Code proposal:&lt;br /&gt;
* Discrete, well-defined, modular&lt;br /&gt;
* Comprised of a series of measurable sub-goals&lt;br /&gt;
* Based on open specs that are available free of charge&lt;br /&gt;
* Based on complete specs&lt;br /&gt;
An example of a good proposal is the implementation of a new feature or function that is not yet available in XBMC.&lt;br /&gt;
&lt;br /&gt;
An example of a less desirable proposal is one that&#039;s not as measurable, such as refactoring an existing API. Bad proposals tend to be ones that would require touching a lot of core code.&lt;br /&gt;
&lt;br /&gt;
To re-iterate:&lt;br /&gt;
* Localized/isolated code projects = &#039;&#039;good&#039;&#039;&lt;br /&gt;
* Global code refactoring = &#039;&#039;bad&#039;&#039;&lt;br /&gt;
* A project should have a set of subgoals, so even if the end goal turns out to be too big some of the parts will be of benefit.&lt;br /&gt;
* Not too big! This is an important problem when choosing a project, while it is fun to think about solving a grand project its not always realistic. Its better to finish a smaller project than to start a grand one.&lt;br /&gt;
&lt;br /&gt;
=== Outline for proposals ===&lt;br /&gt;
==== Some project title ====&lt;br /&gt;
* &#039;&#039;Summary&#039;&#039;: A somewhat small but explanatory walk through of the project. It should not be overly detailed just enough to understand the problem trying to be fixed and how this project opt to solve it.&lt;br /&gt;
* &#039;&#039;How will I achieve this&#039;&#039;: Explain how the project will be done, what technologies are needed and how to implement them.&lt;br /&gt;
* &#039;&#039;What will the project focus on&#039;&#039;: Explain what the project will focus on, what is the important parts of the project.&lt;br /&gt;
* &#039;&#039;Benefits&#039;&#039;: Who will benefit and why from this project. Think about what a user or developer may need or do to benefit from it. Why does it benefit many users.&lt;br /&gt;
* &#039;&#039;Goals&#039;&#039;: What is the goal of the project, a project may not always solve the problem entirely as it may take to much time. Think hard about what can be accomplished during a summer with your skill and deduct that quite a bit. If the project can&#039;t be done after this perhaps its better to opt for a smaller one or one with subgoals.&lt;br /&gt;
* &#039;&#039;What does it touch in XBMC&#039;&#039;: Think about what parts of the code this may touch, XBMC is a big application and a lot of the code is spread out and very complex. If a project touches to much it may be impossible to complete.&lt;br /&gt;
* &#039;&#039;Requirements&#039;&#039;: What is needed to complete the project, what code language knowledge what hardware etc.&lt;br /&gt;
* &#039;&#039;Possible mentors&#039;&#039;: Place to add possible mentors (Team-XBMC will add this).&lt;br /&gt;
&lt;br /&gt;
== Team-XBMC proposal ideas up for discussion ==&lt;br /&gt;
&lt;br /&gt;
=== Focus on client/server model ===&lt;br /&gt;
For this year&#039;s GSoC, XBMC will be focusing on projects related to making XBMC easier to use in environments where multiple XBMC clients need to interact. With XBMC running on tablets and new embedded devices (iOS, rPi, with other OSes in the works) more and more folk are accessing both local and remote media from multiple machines. It makes sense, therefore to keep information about what content is available and what has been watched in sync across multiple clients. The primary goal of GSoC 2012 is to focus on projects that make this easy for the user to accomplish. Other projects that don&#039;t fit in this category but may still be of interest to students are listed in the last section.&lt;br /&gt;
&lt;br /&gt;
=== Existing ability within XBMC for client/server setups ===&lt;br /&gt;
XBMC contains several features that allow for a client/server setup. These include:&lt;br /&gt;
* A UPnP server and client built-in.&lt;br /&gt;
* The JSON-RPC API for two-way passing of information.&lt;br /&gt;
* The EventClient API for two-way remote control communication.&lt;br /&gt;
* MySQL server support for sharing XBMC&#039;s music and video databases, with path translation services for sharing across different machines.&lt;br /&gt;
While these are each useful, they&#039;re typically either difficult for the user to setup (mysql server) or do not quite contain everything required for true client/server communication (UPnP doesn&#039;t share all metadata, editing isn&#039;t available from the client etc.) With some focused projects in this area, the user experience of XBMC across multiple clients/servers would be dramatically improved.&lt;br /&gt;
&lt;br /&gt;
=== Projects within the client/server area ===&lt;br /&gt;
* &#039;&#039;&#039;Improved UPnP serving and client&#039;&#039;&#039; - XBMC includes a UPnP server and client. Not all of the metadata available within XBMC&#039;s libraries, however, are shared over the UPnP interface. This project would fill the gaps of missing metadata, as well as ensuring that niceties such as resume bookmarks and the like transfer seamlessly from client to client. In addition, the interaction between client and server would be enhanced to allow the client (or server) to update watched status, resume bookmarks and the like as well as allowing on-client editting of metadata which then updates the server (either using UPnP methods or the JSON-RPC interface). Any such improvements would be available transparently to listings other than UPnP (eg addon listings) by setting the appropriate properties.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Clean scraping API with bindings to python&#039;&#039;&#039; - Currently XBMC uses regular expressions to handle the parsing of websites, and the existing scraper API is focused on this end use. Designing and implementing a new scraping API that is language-agnostic will allow alternate bindings to be provided, for example to python. Work would involve identifying the main entry points to scrape (eg CreateNfoURL, CreateSearchURL, GetDetails, GetArtwork etc.) along with any helper functions (callbacks to fetch URLs etc.), implementing a simple example of use of the API (in C/C++), then implementing a wrapper for the existing XML/regexp scrapers, and then adding python bindings with example python scrapers. The intention would be for most of this work to be done outside of the main XBMC codebase, with integration into XBMC being done as a last task.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Improved remote clients for tablet/touch devices&#039;&#039;&#039; - Design and implement a remote client for touch-based devices (Android, iOS) that interact with the main APIs that XBMC provides for client apps (JSON-RPC and UPnP server). This may involve building on the existing Android remote control, and extending the JSON-RPC API and/or UPnP server for any additional requirements.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Better support for multiple profiles within the server APIs&#039;&#039;&#039; - Currently XBMC has a profile system whereby multiple users can interact with the XBMC client and share the same library. These are currently stored outside of the main database, which makes interacting with XBMC using a particular profile troublesome. In particular, watched counts, resume points, ratings etc. are forced to be shared between profiles, and the only filtering of content is done based on which filesystem locations the profile is allowed access to. A better system would involve the profiles being stored inside the main database (or at least a representation of them in the database), allowing content and meta information related to the content (playcounts, resume points, ratings) to be linked to one (or more) of those profiles. In addition, specification of which profile is accessing JSON-RPC/UPnP would then allow those services to offer just the content information that the profile has access to.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Custom library categories&#039;&#039;&#039; - XBMC&#039;s library categories of Movies, TV Shows, MusicVideos are currently fixed. This project would look to extend this to user-specified content categories. One potential extension is adding a content type column to each of the existing content tables, allowing simple queries for subsets of rows. The content type and category would be a source-level attribute, defined when the user first adds a filesystem source (or edits a source) to XBMC (e.g. type is TV Shows, category is Anime). XBMC would then show Anime and TV Shows as general categories (TV Shows being of type TV Shows and empty category). Additional support for further categorisation could be made by the addition of generic key/value tables to allow for extension of information. Without altering the existing tables, this could be done with an (idContent,idType,idKey,strValue) style table, supplemented with an idKey, strKey match. Additional database fetches for this table could then be done off-thread (eg in the thumbloader) for main listings, with joining to the table being done for filtering (smartplaylists).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Extend skinning engine to better support touch interfaces&#039;&#039;&#039; - With tablets and other touch interfaces being used more and more, it makes sense to define UI controls that better interact with these devices. In particular, a drop down list box (combobox) would be an ideal addition that would benefit touch devices (and non-touch devices). In addition, the addition of buttons attached to items in list would be useful to serve as hints for additional menu options available to the user, most of which is currently hidden behind the context menu (not discoverable), or clumsily available via always-popping up menus when the user taps an item. Further, the potential for XBMC scaling panel or list controls using multi-touch zooming would be useful to explore.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Extend skinning engine to better support multiple layouts&#039;&#039;&#039; - Many tablets are 3x2 or 4x3 interfaces, where as televisions are typically 16x9 (or even 21x9). Having the layout/scaling and positioning of the skin being done on a controlgroup basis rather than being defined at the window layer would allow groups to automatically reposition their content to better align with the aspect ratio of the users&#039; device. For example, aligning a group to the center of it&#039;s parent, while ensuring it doesn&#039;t stretch would allow information to remain in the middle of the screen regardless of aspect ratio. Other improvements would be to allow relative control positioning (i.e. control &amp;lt;foo&amp;gt; should be positioned 10 units to the right of control &amp;lt;bar&amp;gt;) which allows the skinner to both more easily prototype and skin as well as making it easier to alter.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Extend skinning engine to allow populating lists/panels with filesystem content&#039;&#039;&#039; - Currently skinners must choose between static content, defined by the skinner, or dynamic content filled by XBMC over which they have no control. This project would look to add a 3rd option, whereby the skinner specifies that they want the list filled with particular content from the filesystem or from XBMC&#039;s libraries. XBMC would then retrieve the listing and any metadata and populate the list (all in the background). In addition, XBMC would then apply it&#039;s default actions for that listing (with interaction to the skin as needed) when the user interacted with that listing (eg playing a music file when the user clicks on it).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Picture Library&#039;&#039;&#039; - Design and implement a database schema suitable for storing and retrieving picture metadata. Fields should consist of the typical fields found in picture files (eg EXIF information) along with an extensible key/value field system to allow tagging/keywords/people etc. Support should include the ability to identify when new pictures have been added to the users&#039; filesystem or when metadata information has been changed for one or more pictures. Design and implement a filter/directory node system so as to allow the user to browse and search this information, allowing smart filtering and smart slideshows to be generated. Lastly, add support for such filters to the picture window.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Other projects of interest ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Games / Program Library&#039;&#039;&#039; - &#039;&#039;Medium Difficulty&#039;&#039; - Add functionality similar to the current video and music library for a games / programs. Add a game / program executable or a folder of roms for emulators. Parse files for tags and other metadata. Store paths and metadata in a database and possibly scrape sites for more information.&lt;br /&gt;
* &#039;&#039;&#039;Automated Test Suite&#039;&#039;&#039; - &#039;&#039;Difficult&#039;&#039; - Devise a mechanism for defining and executing automatic regression tests of XBMC features.&lt;br /&gt;
* &#039;&#039;&#039;Improved Picture Player&#039;&#039;&#039; - &#039;&#039;Medium difficulty&#039;&#039; - Write a new picture/slideshow engine to be more like a normal player (see [[DVDPlayer]] and [[PAPlayer]] as examples). Ideal would be to utilize the existing GUIImage code to handle loading of images, and the animation engine for transistion effects (pan/zoom/rotate, etc.)&lt;br /&gt;
* &#039;&#039;&#039;RSS reader&#039;&#039;&#039; - &#039;&#039;Medium difficulty&#039;&#039; - Create an addon which works much like google reader that supports parsing text, video and pictures, (supporting multiple RSS feeds), and displaying this in the GUI. This should be simple enough, like the RSS readers on mobile devices, but suited for a TV display.&lt;br /&gt;
&lt;br /&gt;
== Students Project Proposal Ideas ==&lt;br /&gt;
Feel free to add of your own ideas for projects here. They can be as big or as small as you feel you can comfortably accomplish between May 21st and August 20th. In the end, it&#039;s better to have a smaller, completed project, rather than a larger, incomplete project.&lt;br /&gt;
=== Input Generalization ===&lt;br /&gt;
Currently in XBMC input is handled very differently depending on the control and each input type is isolated and added as extra and the code have become quite a bit unmaintainable. This leads to a large number of regression bugs and a large number of inconsistencies between the input types. Some bugs are almost unfixable as it is really hard to follow what is going on and even harder to know what is supposed to go on.&lt;br /&gt;
&lt;br /&gt;
As such I propose a clean general input layer where every input type is handled the same way and an input device is made up of a number of smaller, much easier to define, types of input.&lt;br /&gt;
&lt;br /&gt;
The idea is the following: We have many input devices on the system, each input device have an ID which is used when mapping to an action. An ID is for example &amp;quot;wiiremote&amp;quot; or &amp;quot;mceremote&amp;quot;. Of course one could add that an input also have a UUID so multiple input devices of the same ID can exist and can be used in games, but this is another matter and the abstraction soon to be explained should be able to handle that addition.&lt;br /&gt;
Each input device can send Input events to the Input manager, which resides in the core. An input event could for example be that a button is down/up or that a cursor have been moved to a new location. It can also state that an analog location have been moved. Further abstraction would be that an analog location is what a mouse cursor is, however it may make sense to separate those.&lt;br /&gt;
&lt;br /&gt;
As it is currently in code a joystick button is not handled the same as a keyboard button or a remote button, not even a mousebutton. Essentially all button triggers should be processed in the same method and it does not really matter what input device triggered them.&lt;br /&gt;
&lt;br /&gt;
For example a keyboard would be an input device with ID=&amp;quot;keyboard&amp;quot; and could send that button=&amp;quot;A&amp;quot; is down. Another input device could send ID=&amp;quot;WiiRemote&amp;quot; and button=&amp;quot;A&amp;quot; is down. Since ID is not the same these are not considered the same remote and the mapping can be different.&lt;br /&gt;
&lt;br /&gt;
So every input on a system becomes an input device, each device can send input events which consist of the ID of the remote and information about the actual event. This event can reflect a button state change or a cursor change.&lt;br /&gt;
&lt;br /&gt;
XBMC Core will then take the input event and map it depending on the ID and the actual event along with a window to create an action. This almost what is done now but currently the code is not general and not shared among the input types.&lt;br /&gt;
&lt;br /&gt;
When we have a general input layer it would be possible to allow jsonrpc to act as an input but also create input addons.&lt;br /&gt;
&lt;br /&gt;
=== Media Server ===&lt;br /&gt;
* &#039;&#039;Summary&#039;&#039;: It becomes increasingly popular to have more than one instance of XBMC in a household, even more so with the introduction of XBMC on portable devices. This means that sharing the library between XBMC instances becomes much more important to the average user and the current model of doing this via MySQL, while it works, is not user friendly nor future proof. I propose as a project to take core features of XBMCs incredible media management and make them available in a seperate server instance. Note that this does not enforce a client server model and I am not proposing a move to a client server solution, XBMC will and should always have the possibility to run as a stand alone instance fully in charge of its data, this is one of the most important features which most other media centers does not have and it makes XBMC a very user friendly application. What I am proposing is merely the possibility to have XBMC act more like a thin client, i.e. if a server exist on the network its transparently added and feels like it is integrated in client. Instead of doing the sharing over MySQL the data could be shared over uPnP, afterall uPnP is made to share libraries. This would also make other media devices, which is not power by XBMC, able to use said features. The features which makes XBMCs media playback and presentation so great are amongst other things our VFS and scrapers, coincidentilly these parts of XBMC are those which have had quite a bit of feature creep and could use some sanitizing. What I propose is to create small isolated libraries, tested and designed outside of xbmc. The media server would thus be a way to actively test the libraries and hopefully spot problems in the API before they get adopted. When the libraries are considered in a clean state they could be used inside XBMC aswell (not part of this proposal though). The code which is sane in XBMC can obviously be ported over, no need to reinvent the wheel. This does allow for an interesting possibility to clean up our API and make these features available for more than just XBMC with the nice sideeffect of creating a media server!&lt;br /&gt;
* &#039;&#039;What will the project focus on&#039;&#039;: XBMC, while amazing has quite a bit of feature creep and much of the functionality in XBMC is not as isolated as they could be. Since this project will take a lot of the technologies from XBMC it have the chance to create a set of libraries which are clean, reusable, isolated, designed outside of XBMC and used outside of XBMC. Some of the libraries which could be created as a part of this project is a VFS, scanning and scraping, URL and database libraries. When the project is done these libraries can be used in XBMC (or any other project) if wanted. The media server will act as a testbed for the libraries which are created whilst creating something of use for end-users of XBMC.&lt;br /&gt;
* &#039;&#039;Benefits&#039;&#039;: From the users perspective they install the media server on his / her computer or server and the HTPC picks up the server and use it. If a friend pops by with a laptop with the server as soon as it enters the network the HTPC can use the content available on said laptop. Another scenario would be that the user have more than one XBMC installation, perhaps on his portable device or just many HTPC boxes. When adding a movie to the server all of these devices will pick it up and if one device watch the movie it is shared amongst them. The project will create a set of reusable libraries which allows which can be used by XBMC which could lead to a cleaner and more stable core, and a way to test functionality outside of XBMC.&lt;br /&gt;
* &#039;&#039;Goals&#039;&#039;: Create reusable and clean libraries for VFS, database, scanning, scraping and media database.&lt;br /&gt;
* &#039;&#039;What does it touch in XBMC&#039;&#039;: Nothing, it will require pulling technologies from XBMC&lt;br /&gt;
* &#039;&#039;Requirements&#039;&#039;: C/C++ for the libraries to be created but Python for the server.&lt;br /&gt;
* &#039;&#039;Possible mentors&#039;&#039;: jmarshall, spiff&lt;br /&gt;
&lt;br /&gt;
[[Category:Google Summer of Code]]&lt;/div&gt;</summary>
		<author><name>Jmarshall</name></author>
	</entry>
</feed>