Manipulation of RigManager Data Programmatically (BE VERY CAUTIOUS!!)

  • Dear all,


    for those interested in topics around rig management that cannot be handled via RigManager: as already mentioned in other threads all data of the rig manager is stored in relational database files in SQLITE format.


    Rig Manager stores all data in Windows in the user directory "%LOCALAPPDATA%\Kemper Amps\RigManager", in MacOSX I assume it should be in "~/Library/Application\ Support/Kemper Amps/RigManager". In those directories you find the folder hierarchy of your Rig Manager and several db-files in SQLITE format.


    The databases have a very simple table structure:

    • Each "Rigs" table contains a row per rig with its tags and an embedded MIDI file blob that represents the associated profile and the settings.
    • Each "Performances" table contains a row per performance with a single MIDI file blob for the performance and five slot names, five top level amp and cabinet tags and slot enable flags. Note the single MIDI blob per performance: hence the performance stores the settings for all slots in one object; it does not reference any rig.

    The attribute names are straightforward: the English names of the tags are used (like e.g. "Name", "Author", "Amp Name", ...).


    Assuming you have some background in relational database manipulation: if you have a SQLITE editor or a programming language with sqlite support (e.g. python), you can read and also modify the data in the tables.


    E.g. you might standardize the tag settings for rig names, amp models or cabinet names programmatically. I am personally thinking about eliminating duplicate rigs that differ only in tagging, but not in the settings data.

    As always modification is at your own risk:
    modifying data from foreign applications might lead to unforeseen effects and might impair the integrity of application data...

  • Hello Skoczy,



    of course you first must add the spring reverb by yourself:


    INSERT INTO Effects (id, Name, Type)
    VALUES (4711, 'Spring Reverb', 'Reverb')

    But I guess I do not have to tell you, you seem to be SQL-proficient, aren't you?


    Best regards,


    DrTT

  • Hello Allenhuish,


    you wrote:

    Thank you. I was thinking about a few things that I'd like to do with raw access...for example update amp names from their 'pseudo' names in batch.


    Exactly. It is easy to enforce naming conventions via scripts. Because of the limited tag length I am thinking of using manufacturer abbreviations in the amp names as well as the model information.


    Best regards,


    DrTT


  • Hey DrTT


    Yup, all that technical development sh*t was my daily bread ;) But your query will fail because:


    1) there is no table effects
    2) if even there was table effects you miss one very important column File which would contain the actual spring reverb :D

  • Can you give an example?


    So when I rig says 'Mars' update the names to 'Marshall'. I haven't thought about it in detail...as mentioned above, there is a character limit. I've also noticed quite a few JTM45 profiles use different names which makes it difficult when searching through all of the jtm45s. ditto for bassmans (bassmen?) and other popular amps.

  • Hello Skoczy,


    you wrote:

    Quote

    1) there is no table effects


    ;) Really? ;)
    Maybe we should create it...
    CREATE TABLE Effects (id int, Name varchar(50), Type varchar(50), File varchar(255))


    Best regards,


    DrTT


  • I have a little bit of experience with sql. I don't see a table called 'Effects'...I think I know what you are hinting at, but one more clue please.

  • Hello Skoczy,


    sorry, I was just joking, because of your example with "0 rows returned" from
    the effects table.


    As you mentioned there is really no table "Effects"; Rig manager does not look into the
    rig data: it is just one big binary object annotated with human readable tags.
    Only those tags are editable; rig manager has no concept of effects at all...


    Best regards,
    DrTT

  • So when I rig says 'Mars' update the names to 'Marshall'. I haven't thought about it in detail...as mentioned above, there is a character limit. I've also noticed quite a few JTM45 profiles use different names which makes it difficult when searching through all of the jtm45s. ditto for bassmans (bassmen?) and other popular amps.


    For RigExchange if you look for Rigs that have the string "Mars"


    select * from Rigs
    where Name like '%mars%'
    -----------------
    289 rows returned



    For RigExchange if you look for Rigs ~Marshall 800



    select * from Rigs
    where Name like '%mars%800%'
    -----------------
    29 rows returned


    For RigExchange if you look for ~JCM 800


    select * from Rigs
    where Name like '%jcm%800%'
    -----------------
    62 rows returned


    And you may play the whole day ;) Then it's easy to write simple SQL script to update the results that the query returned. But first you need to have a pattern for search and pattern for updating the tags.


  • But what I just found, for the rigs that reside in Kemper. Open SQLite IDE, edit the column Name in SQL DB and commit the changes, Open Rig Manager - the Rig Name is changed, double click the rig in RigManager - it is loaded in Kemper but with the name unchanged.

  • Hello Allenhuish,


    you wrote:

    So when I rig says 'Mars' update the names to 'Marshall'. I haven't thought about it in detail...as mentioned above, there is a character limit. I've also noticed quite a few JTM45 profiles use different names which makes it difficult when searching through all of the jtm45s. ditto for bassmans (bassmen?) and other popular amps.


    My approach here is to set the "Source Amp" to the manufacturer name. As you mentioned there is some heuristics necessary to get this right because there is a lot of creativity outside (e.g. by Andy from TAF). Or do you know what a "Calm Roamed" really is?
    The "Amp Model" also requires some search in the internet, but some automatic rules can be applied. So a 'Mars CM Eight-Hundred' might be an 'Source Amp' Marshall and an 'Amp Model' JCM800.
    Once you have the manufacturer and model filled, I set the "Amp Name" to a three character abbreviation of the manufacturer (via a mapping table) concatenated with the model. This normally fits into the length limited fields quite well.
    So the algorithm is clear, but possibly we need to establish some Kemperite secret code for the manufacturers and amp models. Otherwise it is guesswork.


    Best regards,


    DrTT

  • Hello Allenhuish,


    you wrote:


    So the algorithm is clear, but possibly we need to establish some Kemperite secret code for the manufacturers and amp models. Otherwise it is guesswork.


    As far as I remember there is a large table in the kemper pdf (can't remember which one) which decodes all of the real names for the factory packs. And I think TAF does the same with their paid for packs. So the data is freely available.

  • Hello Allenhuish,



    you wrote:

    Quote

    As far as I remember there is a large table in the kemper pdf (can't remember which one) which decodes all of the real names for the factory packs


    The list of factory names can be found at:
    http://www.kemper-amps.com/api/download/dlid/589
    But this only covers the factory presets; I am also talking about the rig exchange and there you only can use heuristics...


    Best regards,
    DrTT

  • Please don't mess with the database at all. Of course all tags are also part of the blob, and you won't be able to update it. So your data can get out of sync, you might see your edited tags in Rig Manager, but after copying or exporting the Rig from Rig Manager, your changes might be lost. You might also violate the rules of allowed characters and tag length and create crashes in Rig Manager or in the Profiler. There are more potential problems, but I won't go into detail.
    If you miss editing options for the database, keep demanding it in the Feature Requests forum. We read everything you post there.

  • Please don't mess with the database at all. Of course all tags are also part of the blob, and you won't be able to update it. So your data can get out of sync, you might see your edited tags in Rig Manager, but after copying or exporting the Rig from Rig Manager, your changes might be lost. You might also violate the rules of allowed characters and tag length and create crashes in Rig Manager or in the Profiler. There are more potential problems, but I won't go into detail.
    If you miss editing options for the database, keep demanding it in the Feature Requests forum. We read everything you post there.


    So I messed with the tag in the "Name" column of "Rigs" table, but now I see that the tag is also part of the blob.


    Because when I changed the value in the "Name" column of "Rigs" table it is also changed later when I open Rig Manager, but it is not changed when I load this ring into Kemper.