[Tutorial] Je eigen Build voor Kodi maken / uploaden! (Enige ervaring vereist)!

Spinix

Administrator
Medewerker
Berichten
3.484
Leuk bevonden
1.967
Beste antwoorden
8
#1
own_build_banner.png

Aangezien er best veel vraag is van mensen hoe dat nu in zijn gang gaat om een eigen build te maken voor Kodi dacht ik dat het wel handig was om hiervoor een tutorial te maken. Het is zeker niet moeilijk maar enigszins ervaring met een computer en Kodi kan wel handig zijn.
Een eigen build is leuk omdat je deze bijvoorbeeld met vrienden, familie en kennissen kunt delen maar ook omdat je zo thuis heel simpel op elk apparaat je build kunt installeren. Deze tutorial wordt uitgevoerd op een Windows machine, je kunt je build hierna uiteraard ook installeren op een Android box of Raspberry Pi.

Zorg dat je je Kodi helemaal naar wens hebt ingericht, sluit Kodi daarna netjes af.
Let op: Zorg dat je voordat je je Build gaat zippen eerst alle belangrijke gegevens eruit gehaald hebt! Denk aan je Real-Debrid account of een IPTV abonnement!
  • Druk op de Windows toets + R en typ: %appdata% en druk op "OK"
ob1.png
  • Open de map "Kodi".
ob2.png
  • Selecteer deze 5 mappen en maak er een .ZIP bestand van.
  • Let op: De map "packages" in de map addons kun je verwijderen. Dit verminderd de grootte van je build.
ob3.png
  • Zorg dat je je .ZIP bestand een naam geeft bijvoorbeeld "Mijnbuild".
ob4.png
  • We moeten onze build nu ergens uploaden, dit kun je bij een gratis of betaalde webhosting doen. Ik kies echter voor Dropbox. Maak in je Dropbox account de map "Builds" aan klik binnen deze map op "Upload files". Kies in de pop-up die opent "Choose files". Typ in de file explorer pop-up "%appdata%" en druk op enter. Kies voor de map Kodi en kies de .ZIP van je build die we een paar stappen terug hebben aangemaakt.
  • Google Drive is ook mogelijk, zie deze reactie.

ob5-2.png
  • Wanneer de build is geüpload klik je op "Share".
ob6-2.png
  • Kies "Create a link".
ob7.png
  • Kies "Copy link".
ob8.png
  • Kopieer deze link.
ob9.png
  • Plak deze URL in je browser, je ziet nu dat je browser er een andere link van heeft gemaakt (deze hebben we nodig), kopieer en bewaar deze link. Deze hebben we later in de tutorial weer nodig.
ob10.png
  • Je Build is nu geüpload dus kunnen we verder met de tutorial. We gaan nu een "Build installer" maken zodat je je Build kunt downloaden op andere Kodi devices. Download
    Om deze link te bekijken moet je ingelogd zijn.
    bestand en sla deze op in een lege map. Pak het bestand ("plugin.video.eigenbuild.zip") daarna uit en open de map "plugin.video.eigenbuild".
ob11.png
  • Open het bestand "default.py" in je favoriete tekst editor. Ik heb voor
    Om deze link te bekijken moet je ingelogd zijn.
    gekozen. Bewerk in het bestand de Dropbox URL met je eigen URL die we een paar stappen terug gekopieerd hebben. LET OP: Vervang "?dl=0" naar "?dl=1". Wanneer je dit gedaan hebt kun je eventueel de naam en beschrijving aanpassen en kun je het bestand opslaan.
ob12.png
  • We gaan de map "plugin.video.eigenbuild" nu weer zippen. (Zorg dat je de oude .ZIP eerst verwijderd hebt anders zit je met dubbele namen).
ob13.png
  • Wanneer je deze map gezipt hebt kun je het .ZIP bestand uploaden naar bijvoorbeeld een USB stick en hem op je Android Box of een ander apparaat dat op Kodi draait installeren. Het installeren van deze .ZIP file gaat het zelfde als hoe je normaal een add-on zou installeren. Wanneer je deze .ZIP file hebt geïnstalleerd op je Kodi apparaat kun je hem openen bij Video add-ons en de installer draaien. Je build wordt nu geïnstalleerd! Als je deze .ZIP wizard nu rechtstreeks wilt installeren als bron in Kodi (Zoals:
    Om deze link te bekijken moet je ingelogd zijn.
    ) heb je een webhosting nodig en moet je .htaccess Directory Listing
    Om deze link te bekijken moet je ingelogd zijn.
    .
ob14.png

Heel veel plezier met je eigen build en hopelijk heb je wat gehad aan deze tutorial. Mocht je nog vragen hebben dan kun je een reactie achter laten in dit topic en probeer ik je te helpen.
 
Laatst bewerkt:

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#2
Zip bestand maken is gelukt maar dan zonder %appdata% te gebruiken.Ik weet ook niet waarom dit moet of is? Draai zelf hierzo met apple en hopelijk is hier op het forum iemand die me dat kan uitleggen;)
 
Laatst bewerkt:

Spinix

Administrator
Medewerker
Berichten
3.484
Leuk bevonden
1.967
Beste antwoorden
8
#3
Zip bestand maken is gelukt maar dan zonder %appdata% te gebruiken.Ik weet ook niet waarom dit moet of is? Draai zelf hierzo met apple en hopelijk is hier op het forum iemand die me dat kan uitleggen;)
Apple bewaard de data van Kodi ergens anders dan Windows doet (Windows is %appdata%) MacOS bewaard het in:
/Users/<your_user_name>/Library/Application Support/Kodi

Dat moet je dan zippen net zoals de tutorial laat zien. Daarna kun je gewoon de rest van de stappen volgen.
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#4
Alvast bedankt voor je reactie maar moet denk ik wat toelichten. De build is gemaakt op een schield en mbv es file explorer heb ik de map kodi copy/paste naar een usb-stick. Deze usb stick zit in de iMac en van de kodi map (5 onderdelen) heb ik een zip-file gemaakt. Kan ik met dit zip bestand de verdere stappen volgen in de tutorial?
 

Spinix

Administrator
Medewerker
Berichten
3.484
Leuk bevonden
1.967
Beste antwoorden
8
#5
Alvast bedankt voor je reactie maar moet denk ik wat toelichten. De build is gemaakt op een schield en mbv es file explorer heb ik de map kodi copy/paste naar een usb-stick. Deze usb stick zit in de iMac en van de kodi map (5 onderdelen) heb ik een zip-file gemaakt. Kan ik met dit zip bestand de verdere stappen volgen in de tutorial?
Dus in de Kodi map heb je deze mappen gezipt: (in 1 zip bestand)
- userdata
- system
- media
- cache
- addons

Die zip upload je vervolgens naar Dropbox en je kunt nu gewoon de rest van de tutorial volgen.
 

A_rjen

Donateur
Berichten
133
Leuk bevonden
85
Beste antwoorden
0
#7
De mappen addons, userdata en media zijn voldoende. Mocht je veel in de cache hebben, kan dit je wat ruimte besparen. Verder moet het goed komen met de gegeven tips;)
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#8
Na heel wat pogingen verder is het me niet gelukt.........Kodi blijft de melding geven: Niet gelukt add-on te installeren van zipbestand vanwege een ongeldige structuur.
Alle stappen in de tutorial gevolgd en soms wat anders geprobeerd maar helaas......
Omdat de structuur ongeldig was nog een laatste poging ondernomen maar nu alle comprimeer stappen uitgevoerd op de shield en de andere stappen op de iMac.Gelukt!!!!
Echter gaat het bij het openen 2e foto fout. De fout melding verwijst voor meer info naar het logbestand. Deze kan ik 123 niet vinden. Keep on going:hamer:
 

Bijlagen

Spinix

Administrator
Medewerker
Berichten
3.484
Leuk bevonden
1.967
Beste antwoorden
8
#9
Na heel wat pogingen verder is het me niet gelukt.........Kodi blijft de melding geven: Niet gelukt add-on te installeren van zipbestand vanwege een ongeldige structuur.
Alle stappen in de tutorial gevolgd en soms wat anders geprobeerd maar helaas......
Omdat de structuur ongeldig was nog een laatste poging ondernomen maar nu alle comprimeer stappen uitgevoerd op de shield en de andere stappen op de iMac.Gelukt!!!!
Echter gaat het bij het openen 2e foto fout. De fout melding verwijst voor meer info naar het logbestand. Deze kan ik 123 niet vinden. Keep on going:hamer:
Als die die fout weergeeft dan heb je waarschijnlijk iets verkeerds aangepast bij default.py. Kun je even jouw default.py plakken op pastebin.com en dan de link hier plaatsen? Dan kijk ik wat er fout gaat.
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#10
FF kijken of het gelukt is.
Om deze link te bekijken moet je ingelogd zijn.


Het enige wat ik hier veranderd heb is de link van dropbox en de 0 in een 1.
 

Spinix

Administrator
Medewerker
Berichten
3.484
Leuk bevonden
1.967
Beste antwoorden
8
#11
FF kijken of het gelukt is.
Om deze link te bekijken moet je ingelogd zijn.


Het enige wat ik hier veranderd heb is de link van dropbox en de 0 in een 1.


Dat gele gemarkeerde heb je fout. Dat moet " zijn en niet ”

Hier de verbeterde versie:
Code:
import xbmc, xbmcaddon, xbmcgui, xbmcplugin,os,sys
import shutil
import urllib2,urllib
import re
import extract
import time
import downloader
import plugintools
import zipfile
import ntpath
 
 
USER_AGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3'
base='kodi-forum.nl'
ADDON=xbmcaddon.Addon(id='plugin.video.eigenbuild')
dialog = xbmcgui.Dialog()   
VERSION = "1.0.0"
PATH = "kodi-forum.nl"           
 
  
def CATEGORIES():
    addDir("Mijn eigen build","https://www.dropbox.com/s/anpr6vlk6w7bxen/sliknepflixbuild1.0.zip?dl=1",1,"https://kodi-forum.nl/images/og-logo.png","https://kodi-forum.nl/images/og-logo.png","Mijn eigen build")
    setView('movies', 'MAIN')
      
  
def OPEN_URL(url):
    req = urllib2.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')
    response = urllib2.urlopen(req)
    link=response.read()
    response.close()
    return link
  
  
def wizard(name,url,description):
    path = xbmc.translatePath(os.path.join('special://home/addons','packages'))
    dp = xbmcgui.DialogProgress()
    dp.create("Eigen Build - www.kodi-forum.nl","Downloaden",'', 'Even Geduld A.U.B.')
    lib=os.path.join(path, name+'.zip')
    try:
       os.remove(lib)
    except:
       pass
    downloader.download(url, lib, dp)
    addonfolder = xbmc.translatePath(os.path.join('special://','home'))
    time.sleep(2)
    dp.update(0,"", "Uitpakken")
    print '======================================='
    print addonfolder
    print '======================================='
    extract.all(lib,addonfolder,dp)
    dialog = xbmcgui.Dialog()
    dialog.ok("DOWNLOAD COMPLEET www.kodi-forum.nl", 'Je moet Kodi nu geforceerd sluiten. Klik nu op OK om Kodi nu te sluiten,', 'Sluit Kodi [COLOR=red][B]NIET[/COLOR][/B] in Kodi zelf., Als het om 1 of andere reden niet lukt om kodi af te sluiten haal dan even de stekker uit je device.')
    killxbmc()
      
    
      
def killxbmc():
    choice = xbmcgui.Dialog().yesno('Kodi geforceerd afsluiten - www.kodi-forum.nl', 'Je staat nu op het punt om Kodi af te sluiten', 'Wil je verder gaan?', nolabel='[COLOR=red][B]NEE[/COLOR][/B]',yeslabel='[COLOR=green][B]JA[/COLOR][/B]')
    if choice == 0:
        return
    elif choice == 1:
        pass
    myplatform = platform()
    print "Platform: " + str(myplatform)
    if myplatform == 'osx': # OSX
        print "############   try osx force close  #################"
        try: os.system('killall -9 XBMC')
        except: pass
        try: os.system('killall -9 Kodi')
        except: pass
        dialog.ok("[COLOR=red][B]WAARSCHUWING  !!![/COLOR][/B]", "Als je deze waarschuwing ziet betekend het dat het geforceerd sluiten is mislukt. Sluit Kodi door de stekker uit je device te halen, [COLOR=lime]NIET[/COLOR] via Kodi zelf.",'')
    elif myplatform == 'linux': #Linux
        print "############   try linux force close  #################"
        try: os.system('killall XBMC')
        except: pass
        try: os.system('killall Kodi')
        except: pass
        try: os.system('killall -9 xbmc.bin')
        except: pass
        try: os.system('killall -9 kodi.bin')
        except: pass
        dialog.ok("[COLOR=red][B]WAARSCHUWING  !!![/COLOR][/B]", "Als je deze waarschuwing ziet betekend het dat het geforceerd sluiten is mislukt. Sluit Kodi door de stekker uit je device te halen, [COLOR=lime]NIET[/COLOR] via Kodi zelf.",'')
    elif myplatform == 'android': # Android 
        print "############   try android force close  #################"
        try: os.system('adb shell am force-stop org.xbmc.kodi')
        except: pass
        try: os.system('adb shell am force-stop org.kodi')
        except: pass
        try: os.system('adb shell am force-stop org.xbmc.xbmc')
        except: pass
        try: os.system('adb shell am force-stop org.xbmc')
        except: pass       
        dialog.ok("[COLOR=red][B]WAARSCHUWING  !!![/COLOR][/B]", "Je gebruikt nu een Android device, Je ", "[COLOR=yellow][B]MOET[/COLOR][/B] Kodi geforceerd sluiten. [COLOR=lime]NIET[/COLOR] via het Kodi menu.","Gebruik Taak Beheer of trek de stekker uit je device.")
    elif myplatform == 'windows': # Windows
        print "############   try windows force close  #################"
        try:
            os.system('@ECHO off')
            os.system('tskill XBMC.exe')
        except: pass
        try:
            os.system('@ECHO off')
            os.system('tskill Kodi.exe')
        except: pass
        try:
            os.system('@ECHO off')
            os.system('TASKKILL /im Kodi.exe /f')
        except: pass
        try:
            os.system('@ECHO off')
            os.system('TASKKILL /im XBMC.exe /f')
        except: pass
        dialog.ok("[COLOR=red][B]WAARSCHUWING  !!![/COLOR][/B]", "Als je deze waarschuwing ziet betekend het dat het geforceerd sluiten is mislukt. Sluit Kodi door de pc opnieuw te starten, [COLOR=lime]NIET[/COLOR] via Kodi zelf.")
    else: #ATV
        print "############   try atv force close  #################"
        try: os.system('killall AppleTV')
        except: pass
        print "############   try raspbmc force close  #################" #OSMC / Raspbmc
        try: os.system('sudo initctl stop kodi')
        except: pass
        try: os.system('sudo initctl stop xbmc')
        except: pass
        dialog.ok("[COLOR=red][B]WAARSCHUWING  !!![/COLOR][/B]", "Als je deze waarschuwing ziet betekend het dat het geforceerd sluiten is mislukt. Je ", "[COLOR=yellow][B]MOET[/COLOR][/B] Kodi geforceerd sluiten. [COLOR=lime]NIET[/COLOR] via het Kodi menu.","Android kan niet gevonden worden, Haal nu de stekker uit je device.")   
 
def platform():
    if xbmc.getCondVisibility('system.platform.android'):
        return 'android'
    elif xbmc.getCondVisibility('system.platform.linux'):
        return 'linux'
    elif xbmc.getCondVisibility('system.platform.windows'):
        return 'windows'
    elif xbmc.getCondVisibility('system.platform.osx'):
        return 'osx'
    elif xbmc.getCondVisibility('system.platform.atv2'):
        return 'atv2'
    elif xbmc.getCondVisibility('system.platform.ios'):
        return 'ios'
 
 
def addDir(name,url,mode,iconimage,fanart,description):
        u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&iconimage="+urllib.quote_plus(iconimage)+"&fanart="+urllib.quote_plus(fanart)+"&description="+urllib.quote_plus(description)
        ok=True
        liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
        liz.setInfo( type="Video", infoLabels={ "Title": name, "Plot": description } )
        liz.setProperty( "Fanart_Image", fanart )
        ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=False)
        return ok
      
      
      
def get_params():
        param=[]
        paramstring=sys.argv[2]
        if len(paramstring)>=2:
                params=sys.argv[2]
                cleanedparams=params.replace('?','')
                if (params[len(params)-1]=='/'):
                        params=params[0:len(params)-2]
                pairsofparams=cleanedparams.split('&')
                param={}
                for i in range(len(pairsofparams)):
                        splitparams={}
                        splitparams=pairsofparams[i].split('=')
                        if (len(splitparams))==2:
                                param[splitparams[0]]=splitparams[1]
                              
        return param
      
                    
params=get_params()
url=None
name=None
mode=None
iconimage=None
fanart=None
description=None
 
 
try:
        url=urllib.unquote_plus(params["url"])
except:
        pass
try:
        name=urllib.unquote_plus(params["name"])
except:
        pass
try:
        iconimage=urllib.unquote_plus(params["iconimage"])
except:
        pass
try:       
        mode=int(params["mode"])
except:
        pass
try:       
        fanart=urllib.unquote_plus(params["fanart"])
except:
        pass
try:       
        description=urllib.unquote_plus(params["description"])
except:
        pass
      
      
print str(PATH)+': '+str(VERSION)
print "Mode: "+str(mode)
print "URL: "+str(url)
print "Name: "+str(name)
print "IconImage: "+str(iconimage)
 
 
def setView(content, viewType):
    # set content type so library shows more views and info
    if content:
        xbmcplugin.setContent(int(sys.argv[1]), content)
    if ADDON.getSetting('auto-view')=='true':
        xbmc.executebuiltin("Container.SetViewMode(%s)" % ADDON.getSetting(viewType) )
      
      
if mode==None or url==None or len(url)<1:
        CATEGORIES()
      
elif mode==1:
        wizard(name,url,description)
      
 
      
xbmcplugin.endOfDirectory(int(sys.argv[1]))
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#12
Scherp gezien, straks eens aanpassen. Laat de bevindingen weten.
 
Berichten
550
Leuk bevonden
278
Beste antwoorden
0
#13
verwijder ook even je map Thumbnails in je userdata map dat scheelt ook een hoop ruimte
en verwijder Textures13 in de map userdata-database anders gaat het niet werken
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#14
Bloed....zweet....tranen :hamer:. Maar het is me gelukt en tevens ook nog de mappen verwijderd zoals spooks aangaf. Het default py bestand wat even terug is besproken bevatte een compleet andere build?? Weg ermee...Wil iedereen bedanken voor het meedenken :thanks:,en deze tutorial kan ik nu wel inmiddels dromen dus mag een slotje op:slotje::p:p." Problem solved"
 

LeX

Administrator
Medewerker
Berichten
5.056
Leuk bevonden
3.527
Beste antwoorden
10
#15
Bloed....zweet....tranen :hamer:. Maar het is me gelukt en tevens ook nog de mappen verwijderd zoals spooks aangaf. Het default py bestand wat even terug is besproken bevatte een compleet andere build?? Weg ermee...Wil iedereen bedanken voor het meedenken :thanks:,en deze tutorial kan ik nu wel inmiddels dromen dus mag een slotje op:slotje::p:p." Problem solved"
Mooie kerel ben je ,nu de problemen bij jou zijn opgelost moet deze topic op slot ... en wat moeten die andere leden dan beginnen zonder de deskundige hulp van Spinix ? :p
Verzoek voor sluiting afgewezen ;)
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#16
Idd laat slotje maar achterwege,houd spinix van de straat:lol: . Enigste suggestie die ik nog heb in dit topic,de titel van dit topic zorgt misschien voor wat verwarring . Een build maken wordt hier niet toegelicht ben ik achter gekomen :koffie::koffie:
 
Laatst bewerkt:

LeX

Administrator
Medewerker
Berichten
5.056
Leuk bevonden
3.527
Beste antwoorden
10
#17
Idd laat slotje maar achterwege,houd spinix van de straat:lol: . Enigste suggestie die ik nog heb in dit topic,de titel van dit topic zorgt misschien voor wat verwarring . Een build maken wordt hier niet toegelicht ben ik achter gekomen :koffie::koffie:
Als je suggesties hebt voor een nieuwe topic titel dan laat maar horen .... dat passen wij die toch kosteloos aan :koffie: :koffie::koffie:
 

Slikt

Donateur
Berichten
980
Leuk bevonden
613
Beste antwoorden
0
#18
Je build uploaden en delen of zoiets? dat is wat in deze tutorial wordt beschreven.
 
Berichten
65
Leuk bevonden
52
Beste antwoorden
0
#19
Ik kom er niet helemaal uit. Als ik de 5 mappen wil zippen, laat hij er al 2 weg vanwege dat ze leeg zijn. Hierboven lees ik dat dat opzich niet zo erg is. Alleen vervolgens staat er
  • Open het bestand "default.py" in je favoriete tekst editor. Ik heb voor
    Om deze link te bekijken moet je ingelogd zijn.
    gekozen. Bewerk in het bestand de Dropbox URL met je eigen URL die we een paar stappen terug gekopieerd hebben. LET OP: Vervang "?dl=0" naar "?dl=1". Wanneer je dit gedaan hebt kun je eventueel de naam en beschrijving aanpassen en kun je het bestand opslaan.
Alleen dit bestand zie ik nergens staan, ik heb 3 mappen addons/cache/userdata. Als ik vervolgens ga zoeken op het bestand krijg ik de volgende mappen te zien, alleen ik kom nergens enige info tegen over mijn build naam.

 
Berichten
73
Leuk bevonden
23
Beste antwoorden
0
#20
Een eindje verder staat in het verhaal dat je
Om deze link te bekijken moet je ingelogd zijn.
moet downloaden.
Daar vind je de default.py file
 

Gelijkwaardige Onderwerpen

Bovenaan