Is there a program like ICONMASCHINE?

Quadrofoneix Member Posts: 4 Member

I'm kind of late to the party! I was using ICON MASCHINE to make custom images for my Maschine library, but i can't go past 3 custom images. I love the ease of just uploading an image and everything like that. The problem is it seems as if you can't go pass 4 images in free use mode, but no where to update to the pro version, and it looks like it hasn't been update since 2020. What programs are yall using , if anyone is still adding images to there Maschine?

Thanks for any info.


  • D-One
    D-One Moderator Posts: 2,689 mod

    I am not aware of any other app to do that, kind of strange that no one bothered to make one since it sounds like something rather simple.

    I just do it manually by copying a folder and editing all the pics and text.

  • Quadrofoneix
    Quadrofoneix Member Posts: 4 Member

    @D-One Yes i don't know why anyone hasn't . it's a super eazy program to use withouthaving to do all the copy and paste and getting the size perfect and all that just to fit on the maschine. I'm really suprised that NI hasn't buitl one to be honest! They would be able to make it pop since they use something like that anyway! it would go over like gang busters! So you were saying that you just copy a folder, i'm not too sure how that works. is there a tutorial online that you can point me to?

    Thanks again for all the help


  • Kymeia
    Kymeia Member Posts: 3,469 Expert

    Looks very similar to how we make images for Komplete Kontrol NKS plugins

    If you want to make your own thumbnails they should conform to the following specs

    MST_artwork.png - 134x66 

    MST_plugin.png - 165x100

    VB_artwork.png - 96x47

    OSO_logo.png - 417x65

    VB_logo.png - 279x47

    MST_logo.png - 240x196

    all 72pix dpi

    .meta files and .json files can just be copied from an existing folder and edited in a text editor (use a proper one, not something like Mac Textedit that messes with syntax)

    .meta file syntax looks like this:

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>

    <resource version="">





  • Quadrofoneix
    Quadrofoneix Member Posts: 4 Member

    @Kymeia Thanks, and good looking out.

  • D-One
    D-One Moderator Posts: 2,689 mod

    Just duplicate the folder of something you are already done with iconmaschine and use it as a template of sorts, change the folder name, edit the images and .meta file. All can be done with native OS tools if on mac, except editing the text (for that I use Atom) as Kymeia said.

  • Quadrofoneix
    Quadrofoneix Member Posts: 4 Member

    Cool i'm on a PC, so if i can't edit the text(whihc might be able to do on note pad, not sure) just being able to have the custom images is ggo enough for me.

    thanks again for all the help.

  • D-One
    D-One Moderator Posts: 2,689 mod

    No problem. Without editing the text the images won't work, it holds important info.

    Note Pad might work, no guarantee, if you use it avoid things like the tab key and such, if it does not then there's tons of propper free text editors for windows.

  • PK The DJ
    PK The DJ Member Posts: 821 Guru

    @Quadrofoneix take a look at Notepad++

  • Kymeia
    Kymeia Member Posts: 3,469 Expert

    Notepad should be fine

  • PassThePeas
    PassThePeas Member Posts: 1 Member
    edited October 2023

    For those having Photoshop, here is a script (to be saved as "whatever.jsx") that you can launch with an Action (that you will have to "record"). It will take the current picture loaded and offer cropping tool to the right ratio so you can create the proper art, one after another (sorry for layout below ...) :

    try {
    // create our default params
    MakeArtwork("VB_Artwork", 96.000000, 47.000000);
    MakeArtwork("MST_plugin", 127.000000, 65.000000);
    MakeArtwork("MST_logo", 240.000000, 196.000000);
    MakeArtwork("MST_artwork", 134.000000, 66.000000);
    scriptAlert("Create Maschine Art", "Job Done !", "");
    // Lot's of things can go wrong
    // Give a generic alert and see if they want the details
    catch( e ) {
    if ( DialogModes.NO != app.playbackDisplayDialogs ) {
    alert( e + " : " + e.line );
    // ==================== Functions ====================
    function MakeArtwork(artName, width, height) {
    function cTID(s) { return app.charIDToTypeID(s); };
    function sTID(s) { return app.stringIDToTypeID(s); };
    var basePath = app.activeDocument.path;
    ConstrainedCrop(width, height);
    function SavePNG(basePath) {
    var doc = app.activeDocument;
    var savePNG = new File(basePath + '/' + + '.png');
    var saveOptions = new PNGSaveOptions();
    saveOptions.compression = 0; // compression value: 0-9
    saveOptions.interlaced = false;
    activeDocument.saveAs(savePNG, saveOptions, true, Extension.LOWERCASE);
    function closeWithoutSaving() {
    var idCls = charIDToTypeID( "Cls " );
    var desc = new ActionDescriptor();
    var idSvng = charIDToTypeID( "Svng" );
    var idYsN = charIDToTypeID( "YsN " );
    var idN = charIDToTypeID( "N " );
    desc.putEnumerated( idSvng, idYsN, idN );
    var idDocI = charIDToTypeID( "DocI" );
    desc.putInteger( idDocI, 207 );
    var idforceNotify = stringIDToTypeID( "forceNotify" );
    desc.putBoolean( idforceNotify, true );
    executeAction( idCls, desc, DialogModes.NO );
    function ConstrainedCrop(width, height) {
    function cTID(s) { return app.charIDToTypeID(s); };
    function sTID(s) { return app.stringIDToTypeID(s); };
    var strtRulerUnits = app.preferences.rulerUnits;
    var strtTypeUnits = app.preferences.typeUnits;
    app.preferences.rulerUnits = Units.PIXELS;
    app.preferences.typeUnits = TypeUnits.PIXELS;
    try {
    var desc2 = new ActionDescriptor();
    var desc3 = new ActionDescriptor();
    desc3.putUnitDouble( cTID('Top '), cTID('#Pxl'), 0.000000 );
    desc3.putUnitDouble( cTID('Left'), cTID('#Pxl'), 0.000000 );
    desc3.putUnitDouble( cTID('Btom'), cTID('#Pxl'), height * app.activeDocument.width / width );
    desc3.putUnitDouble( cTID('Rght'), cTID('#Pxl'), app.activeDocument.width );
    desc2.putObject( cTID('T '), cTID('Rctn'), desc3 );
    desc2.putUnitDouble( cTID('Angl'), cTID('#Ang'), 0.000000 );
    desc2.putUnitDouble( cTID('Wdth'), cTID('#Pxl'), width );
    desc2.putUnitDouble( cTID('Hght'), cTID('#Pxl'), height );
    //desc2.putUnitDouble( cTID('Rslt'), cTID('#Rsl'), 300.000000 );
    executeAction( cTID('Crop'), desc2, DialogModes.ALL );
    } catch(e){
    } finally{
    app.preferences.rulerUnits = strtRulerUnits;
    app.preferences.typeUnits = strtTypeUnits;
    function scriptAlert(alertTitle, alertString1, alertString2) {
    var alertWindow = new Window("dialog", undefined, undefined, {resizeable: false});
    alertWindow.text = alertTitle;
    alertWindow.preferredSize.width = 300;
    alertWindow.preferredSize.height = 100;
    alertWindow.orientation = "column";
    alertWindow.alignChildren = ["center", "top"];
    alertWindow.spacing = 25;
    alertWindow.margins = 20;
    var alertText = alertWindow.add("group");
    alertText.orientation = "column";
    alertText.alignChildren = ["left", "center"];
    alertText.spacing = 0;
    alertText.alignment = ["left", "top"];
    alertStringSize1 = alertText.add("statictext", undefined, alertString1, {name: "alertText", multiline: true}); = ScriptUI.newFont ("dialog", "BOLD", 13);
    alertStringSize2 = alertText.add("statictext", undefined, alertString2, {name: "alertText", multiline: true}); = "dialog:13";
    var okButton = alertWindow.add("button", undefined, undefined, {name: "okButton"});
    okButton.text = "OK";
    okButton.alignment = ["left", "top"]; = "dialog:13";;
    function GlobalVariables() {
    // a version for possible expansion issues
    gVersion = 1.1;
    gMaxResize = 300000;
    // remember the dialog modes
    gSaveDialogMode = app.displayDialogs;
    app.displayDialogs = DialogModes.NO;
    gInAlert = false;
    // all the strings that need to be localized
    strTitle = localize( "$$$/JavaScript/FitImage/Title=Fit Image" );
    strConstrainWithin = localize( "$$$/JavaScript/FitImage/ConstrainWithin=Constrain Within" );
    strTextWidth = localize("$$$/JavaScripts/FitImage/Width=&Width:");
    strTextHeight = localize("$$$/JavaScripts/FitImage/Height=&Height:");
    strTextPixels = localize("$$$/JavaScripts/FitImage/Pixels=pixels");
    strButtonOK = localize("$$$/JavaScripts/FitImage/OK=OK");
    strButtonCancel = localize("$$$/JavaScripts/FitImage/Cancel=Cancel");
    strTextSorry = localize("$$$/JavaScripts/FitImage/Sorry=Sorry, Dialog failed");
    strTextInvalidType = localize("$$$/JavaScripts/FitImage/InvalidType=Invalid numeric value");
    strTextInvalidNum = localize("$$$/JavaScripts/FitImage/InvalidNum=A number between 1 and 300000 is required. Closest value inserted.");
    strTextNeedFile = localize("$$$/JavaScripts/FitImage/NeedFile=You must have a file selected before using Fit Image");
    strMessage = localize("$$$/JavaScripts/FitImage/Message=Fit Image action settings");
    strMustUse = localize( "$$$/JavaScripts/ImageProcessor/MustUse=You must use Photoshop CS 2 or later to run this script!" );
    strLimitResize = localize("$$$/JavaScripts/FitImage/Limit=Don^}t Enlarge");
    function CheckVersion() {
    var numberArray = version.split(".");
    if ( numberArray[0] < 9 ) {
    if ( DialogModes.NO != app.playbackDisplayDialogs ) {
    alert( strMustUse );
    throw( strMustUse );
Back To Top