<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yobi.be/index.php?action=history&amp;feed=atom&amp;title=Zappiti</id>
	<title>Zappiti - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yobi.be/index.php?action=history&amp;feed=atom&amp;title=Zappiti"/>
	<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Zappiti&amp;action=history"/>
	<updated>2026-05-22T20:03:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Zappiti&amp;diff=7758&amp;oldid=prev</id>
		<title>PhilippeTeuwen: /* Exporting pictures &amp; IMDB IDs */</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Zappiti&amp;diff=7758&amp;oldid=prev"/>
		<updated>2012-12-26T19:53:43Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Exporting pictures &amp;amp; IMDB IDs&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:53, 26 December 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 51:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 51:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To export the DB in an unencrypted SQL dump, press F10.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;To export the DB in an unencrypted SQL dump, press F10.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Exporting pictures &amp;amp; IMDB IDs===&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Exporting pictures &amp;amp; IMDB IDs===&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;After having discovered YAMJ, I decided to move away from Zappiti. Not that Zappiti is bad but having to run it under Windows 7 under VirtualBox and to access remotely all movies in and data out is a real pain.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;After having discovered &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;YAMJ&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;, I decided to move away from Zappiti. Not that Zappiti is bad but having to run it under Windows 7 under VirtualBox and to access remotely all movies in and data out is a real pain.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;In the previous paragraph you saw how to export the encrypted DB into plain SQL.&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;In the previous paragraph you saw how to export the encrypted DB into plain SQL.&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;Here are very ugly notes (when job is to be done only once I tend to write ugly bash/sed/awk oneliners)&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;br&amp;gt;Here are very ugly notes (when job is to be done only once I tend to write ugly bash/sed/awk oneliners)&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-mw_:diff:1.41:old-7757:rev-7758:wikidiff2=table:1.14.1:bc2a06be --&gt;
&lt;/table&gt;</summary>
		<author><name>PhilippeTeuwen</name></author>
	</entry>
	<entry>
		<id>https://wiki.yobi.be/index.php?title=Zappiti&amp;diff=7757&amp;oldid=prev</id>
		<title>PhilippeTeuwen: Created page with &quot;[http://www.zappiti.com/ Zappiti] is done by HD Land for their Dune HD players. &lt;br&gt;There is an ipad version too, for Android see below for a compatible app. &lt;br&gt;The only bem…&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.yobi.be/index.php?title=Zappiti&amp;diff=7757&amp;oldid=prev"/>
		<updated>2012-12-26T19:53:16Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;[http://www.zappiti.com/ Zappiti] is done by HD Land for their &lt;a href=&quot;/index.php?title=Dune_HD&quot; title=&quot;Dune HD&quot;&gt;Dune HD&lt;/a&gt; players. &amp;lt;br&amp;gt;There is an ipad version too, for Android see below for a compatible app. &amp;lt;br&amp;gt;The only bem…&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[http://www.zappiti.com/ Zappiti] is done by HD Land for their [[Dune HD]] players.&lt;br /&gt;
&amp;lt;br&amp;gt;There is an ipad version too, for Android see below for a compatible app.&lt;br /&gt;
&amp;lt;br&amp;gt;The only bemol is that it&amp;#039;s a Windows-only program (as all the other alternatives I think) so I used it in a Virtualbox with Windows 7.&lt;br /&gt;
&amp;lt;br&amp;gt;I had issues with v2.3.1094.0 so I kept using v2.1.2735.100&lt;br /&gt;
&amp;lt;br&amp;gt;Note that since v2.3.1097 HD Land is restricting its program for French people who didn&amp;#039;t buy their Dune HD via HD Land. For others there is a possibility to get licensing key if they prove they live and bought their product out of France. It was really time to look for alternatives...&lt;br /&gt;
===Config===&lt;br /&gt;
Some notes on my config (just for myself to remember)&lt;br /&gt;
 Dossier de configuration: F:\@zappiti\@db  (F: virtualbox shared /media/MyBook2/@dune)&lt;br /&gt;
 Dossier de partage: F:\@DuneHDD-mirror ou Z:\   (Z: \\dune\DuneHDD)&lt;br /&gt;
 Nouveau dossier films:&lt;br /&gt;
   F:\@DuneHDD-mirror\films               &lt;br /&gt;
   Réécrire en: storage_label://DuneHDD/films&lt;br /&gt;
Zappiti works on a local copy of my movies collection and links are rewritten when exported to the Dune HD as the movies are also present locally on its HDD&lt;br /&gt;
===Exported index===&lt;br /&gt;
The exported index (_Zappiti/ and Zappiti_Resources/) has then to be copied on the Dune HD and the Android tablet for a faster rendering&lt;br /&gt;
&amp;lt;br&amp;gt;Options:&lt;br /&gt;
* [http://scottjohnson.org/wiki/Dune/Installing_rsync Install Rsync] on Dune HD&lt;br /&gt;
Probably the best option. Very easy to install (cf link above) and to use. It&amp;#039;s a patched version that creates modules for each mounted resource&lt;br /&gt;
&amp;lt;br&amp;gt;To get modules names:&lt;br /&gt;
 $ rsync dune::&lt;br /&gt;
 DuneHDD        	Dune storage named DuneHDD&lt;br /&gt;
To push Zappiti data:&lt;br /&gt;
 $ rsync -av --delete ...DuneHDD-mirror/_Zappiti          dune::DuneHDD&lt;br /&gt;
 $ rsync -av --delete ...DuneHDD-mirror/Zappiti_Resources dune::DuneHDD&lt;br /&gt;
&lt;br /&gt;
* via ftp, to be tested with [http://www.manyfish.co.uk/sitecopy/ sitecopy]&lt;br /&gt;
&lt;br /&gt;
Note that if you try to copy Zappiti indexes from a locally attached drive via the Dune interface you can easily reach the maximum of 9999 files in _Zappiti. Better to initiate the copy via a telnet session.&lt;br /&gt;
&lt;br /&gt;
Using rsync to push indexes to the Android tablet (rooted, using SSHDroidPro &amp;amp; rsync binary):&lt;br /&gt;
 $ rsync -av --delete ...DuneHDD-mirror/_Zappiti          root@tablet:/sdcard/Zappiti/&lt;br /&gt;
 $ rsync -av --delete ...DuneHDD-mirror/Zappiti_Resources root@tablet:/sdcard/Zappiti/&lt;br /&gt;
&lt;br /&gt;
===Mangling database===&lt;br /&gt;
If you want to move or rename files or folders, Zappiti wants to scrap them again and disregard the old entries.&lt;br /&gt;
&amp;lt;br&amp;gt;To avoid that, you can edit directly the sqlite database.&lt;br /&gt;
&amp;lt;br&amp;gt;Just a little problem: the database is encrypted by using ASP .NET [http://www.connectionstrings.com/sqlite connectionstrings] (cf possible implementation [Using http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki here]).&lt;br /&gt;
&amp;lt;br&amp;gt;So we&amp;#039;ll follow [ http://www.mpcclub.com/forum/archive/index.php/t-27073.html this howto]:&lt;br /&gt;
&amp;lt;br&amp;gt; Open&lt;br /&gt;
 C:\Program Files (x86)\HDLand\Zappiti\Zappiti.exe.config&lt;br /&gt;
 &amp;lt;connectionStrings&amp;gt;&lt;br /&gt;
    &amp;lt;add name=&amp;quot;Entities&amp;quot; connectionString=&amp;quot;metadata=res://*/Models.Models.csdl|res://*/Models.Models.ssdl|res://*/Models.Models.msl;provider=System.Data.SQLite;provider connection string=&amp;amp;quot;data source=D:\Works\NETil\Works\Companies\HDLand\DuneMediaManager_b1\DuneMediaManager\Data\database.db;password=BLABLA&amp;amp;quot;&amp;quot; providerName=&amp;quot;System.Data.EntityClient&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/connectionStrings&amp;gt;&lt;br /&gt;
Here password is BLABLA.&lt;br /&gt;
&amp;lt;br&amp;gt;Get [http://osenxpsuite.net/download.htm Sqlite2009 Pro Enterprise Manager], again a Windows stuff but no much option to use this .NET encryption (sth with RSA but still using a symmetric password, no idea what this means)&lt;br /&gt;
 - Open database&lt;br /&gt;
 - select RSA &amp;amp; provide password&lt;br /&gt;
Then you can make your SQL queries, e.g.&lt;br /&gt;
 UPDATE &amp;#039;Media&amp;#039; set Path=REPLACE(Path, &amp;#039;F:\&amp;#039;, &amp;#039;F:\@DuneHDD-mirror\&amp;#039;);&lt;br /&gt;
 UPDATE &amp;#039;TVShowFolder&amp;#039; set Folder=REPLACE(Folder, &amp;#039;F:\&amp;#039;, &amp;#039;F:\@DuneHDD-mirror\&amp;#039;)&lt;br /&gt;
To export the DB in an unencrypted SQL dump, press F10.&lt;br /&gt;
===Exporting pictures &amp;amp; IMDB IDs===&lt;br /&gt;
After having discovered YAMJ, I decided to move away from Zappiti. Not that Zappiti is bad but having to run it under Windows 7 under VirtualBox and to access remotely all movies in and data out is a real pain.&lt;br /&gt;
&amp;lt;br&amp;gt;In the previous paragraph you saw how to export the encrypted DB into plain SQL.&lt;br /&gt;
&amp;lt;br&amp;gt;Here are very ugly notes (when job is to be done only once I tend to write ugly bash/sed/awk oneliners)&lt;br /&gt;
&amp;lt;br&amp;gt;To recover matches between movie names and IMDB IDs:&lt;br /&gt;
 cat database-2.1.2735.100.sql |recode latin1..utf8|egrep &amp;#039;(&amp;lt;name&amp;gt;|&amp;lt;imdb_id&amp;gt;)&amp;#039; |sed &amp;#039;s/^.*&amp;lt;name&amp;gt;//;s/&amp;lt;\/name&amp;gt;//&amp;#039;|awk &amp;#039;/^[^[:space:]]/{title=$0}/&amp;lt;imdb_id&amp;gt;/{imdb=$0; print title imdb}&amp;#039;|sort|uniq &amp;gt; imdblist&lt;br /&gt;
To recover anonymized images from Pictures/ (which are all Jpeg BTW)&lt;br /&gt;
&amp;lt;br&amp;gt;Get matches between movie internal ID and fanart ID and cover ID:&lt;br /&gt;
&amp;lt;pre&amp;gt; egrep -i &amp;quot;insert into groupe values&amp;quot; database-2.1.2735.100.sql|recode latin1..utf8 &amp;gt; database-2.1.2735.100.groupe.sql&lt;br /&gt;
 awk -F, &amp;#039;{sub(/INSERT INTO Groupe VALUES\(/,&amp;quot;&amp;quot;,$1); print $1, $4, $5}&amp;#039; database-2.1.2735.100.groupe.sql|sort &amp;gt; database-2.1.2735.100.groupe.small&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get matches between movie internal ID and movie filename (and transcode Windows path to local unix path)&lt;br /&gt;
&amp;lt;pre&amp;gt; egrep -i &amp;quot;insert into media values&amp;quot; database-2.1.2735.100.sql|recode latin1..utf8 &amp;gt; database-2.1.2735.100.media.sql&lt;br /&gt;
 awk -F, &amp;#039;{sub(/INSERT INTO Media VALUES\(/,&amp;quot;&amp;quot;,$1);id=$1;sub(/.*(.)F:\\@DuneHDD-mirror/,&amp;quot;\&amp;quot;&amp;quot;);sub(/. (NULL|[^A-Za-z0-9][A-Z][A-Z]).*/,&amp;quot;\&amp;quot;&amp;quot;);gsub(/\\/,&amp;quot;/&amp;quot;); print id,$1}&amp;#039; database-2.1.2735.100.media.sql |sed &amp;quot;s/&amp;#039;&amp;#039;/&amp;#039;/g&amp;quot;|sort &amp;gt; database-2.1.2735.100.media.small&amp;lt;/pre&amp;gt;&lt;br /&gt;
Join those two based on movie internal ID&lt;br /&gt;
&amp;lt;pre&amp;gt; join database-2.1.2735.100.groupe.small database-2.1.2735.100.media.small &amp;gt; database-2.1.2735.100.small&amp;lt;/pre&amp;gt;&lt;br /&gt;
Let&amp;#039;s see on which entries it could break: &lt;br /&gt;
&amp;lt;pre&amp;gt; egrep -v &amp;quot;.(avi|AVI|Avi|mpg|MPG|Mpg|mkv|MKV|Mkv|iso|ISO|Iso|mp4|MP4)\&amp;quot;$&amp;quot; database-2.1.2735.100.small&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ok we can remove them&lt;br /&gt;
&amp;lt;pre&amp;gt; egrep &amp;quot;.(avi|AVI|Avi|mpg|MPG|Mpg|mkv|MKV|Mkv|iso|ISO|Iso|mp4|MP4)\&amp;quot;$&amp;quot; database-2.1.2735.100.small &amp;gt; database-2.1.2735.100.small2&amp;lt;/pre&amp;gt;&lt;br /&gt;
Recover fanarts&lt;br /&gt;
&amp;lt;pre&amp;gt; grep -v &amp;quot;^[^[:space:]]\+ NULL&amp;quot; database-2.1.2735.100.small2|awk &amp;#039;{id=$2;gsub(/[^[:alnum:]]/,&amp;quot;&amp;quot;,id); $1=&amp;quot;&amp;quot;;$2=&amp;quot;&amp;quot;;$3=&amp;quot;&amp;quot;;sub(/[[:space:]]*&amp;quot;/,&amp;quot;\&amp;quot;.&amp;quot;);sub(/.(avi|AVI|Avi|mpg|MPG|Mpg|mkv|MKV|Mkv|iso|ISO|Iso|mp4|MP4)\&amp;quot;$/,&amp;quot;&amp;quot;);system(&amp;quot;mkdir -p \&amp;quot;$(dirname &amp;quot;$0&amp;quot;\&amp;quot;)\&amp;quot;; cp Pictures/&amp;quot; id &amp;quot; &amp;quot; $0 &amp;quot;.fanart.jpg\&amp;quot;&amp;quot;)}&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Recover covers&lt;br /&gt;
&amp;lt;pre&amp;gt; grep -v &amp;quot;^[^[:space:]]\+ [^[:space:]]\+ NULL&amp;quot; database-2.1.2735.100.small2|awk &amp;#039;{id=$3;gsub(/[^[:alnum:]]/,&amp;quot;&amp;quot;,id); $1=&amp;quot;&amp;quot;;$2=&amp;quot;&amp;quot;;$3=&amp;quot;&amp;quot;;sub(/[[:space:]]*&amp;quot;/,&amp;quot;\&amp;quot;.&amp;quot;);sub(/.(avi|AVI|Avi|mpg|MPG|Mpg|mkv|MKV|Mkv|iso|ISO|Iso|mp4|MP4)\&amp;quot;$/,&amp;quot;&amp;quot;);system(&amp;quot;mkdir -p \&amp;quot;$(dirname &amp;quot;$0&amp;quot;\&amp;quot;)\&amp;quot;; cp Pictures/&amp;quot; id &amp;quot; &amp;quot; $0 &amp;quot;.jpg\&amp;quot;&amp;quot;)}&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Find art not linked to a file (e.g. sets)&lt;br /&gt;
&amp;lt;pre&amp;gt; join -a 1 database-2.1.2735.100.groupe.small database-2.1.2735.100.media.small &amp;gt; database-2.1.2735.100.smallext&lt;br /&gt;
 cat database-2.1.2735.100.small database-2.1.2735.100.smallext |sort|uniq -u &amp;gt; database-2.1.2735.100.groupe.small.uniq&lt;br /&gt;
 mkdir others&lt;br /&gt;
 cat database-2.1.2735.100.groupe.small.uniq |awk &amp;#039;{gsub(/[^[:alnum:]]/,&amp;quot;&amp;quot;,$2);gsub(/[^[:alnum:]]/,&amp;quot;&amp;quot;,$3);if ($2!=&amp;quot;NULL&amp;quot;) print &amp;quot;cp Pictures/&amp;quot;$2&amp;quot; others/&amp;quot;$2&amp;quot;.jpg&amp;quot;;if ($3!=&amp;quot;NULL&amp;quot;) system(&amp;quot;cp Pictures/&amp;quot;$3&amp;quot; others/&amp;quot;$3&amp;quot;.jpg&amp;quot;)}&amp;#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Some fanart were not flagged as such, find covers with wrong ratio:&lt;br /&gt;
&amp;lt;pre&amp;gt; find . -name &amp;quot;*.jpg&amp;quot; -exec jpeginfo -l {} \;|grep -v fanart|awk &amp;#039;{if ($1 &amp;gt; $3) print }&amp;#039;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>PhilippeTeuwen</name></author>
	</entry>
</feed>