Upload Assets

24 June 2020

  • C10 - removed extended image file formats in favor of built-in types.

27 May 2017

  • Release 9.164
    • Added optional mono parameter when uploading scripts.
    • The command returns script compilation errors.
    • The command updates inventory assets such as notecards and scripts if they already exist in the inventory.
    • The command now uses the Corrade permission system notation.

13 July 2016

  • Release 9.105 - the command now returns both the inventory item UUID and the asset UUID of the uploaded item (if any).

10 July 2016

  • Relese 9.104 - added extended formats for the Windows platform.

4 May 2015

  • Release 7.82 - Corrade now supports uploading multiple image formats for the Texture asset type.

14 December 2014

  • Release 7.28 - added.

The upload command can be used upload assets onto the grid.

Command Required Parameters Required Corrade Permissions Example
upload group, password, name, type, data inventory, economy
llInstantMessage(CORRADE,
    wasKeyValueEncode(
        [
            // Create a script called "Good day!"
            // with the content passed to "data"
            // and set permissions to MODIFY COPY.
            "command", "upload",
            "group", wasURLEscape(GROUP),
            "password", wasURLEscape(PASSWORD),
            "name", "Good day!",
            "type", "LSLText",
            "data", wasURLEscape(llStringToBase64("
                default {
                    state_entry() {
                        llOwnerSay(\"Good day!\");
                    }
                }
            ")),
            // "Copy" and "Modify" permissions.
            "permissions", "c--mvt------------c--mv-c--mvt",
            "callback", wasURLEscape(URL)
        ]
    )
);
Optional Parameter Description
description The description of the asset.
permissions The permissions in Corrade permission system notation for the next owner (this option is ignored for Landmarks which always have full permission).
item If an item by name or inventory path (ex: /My Inventory/Notecards/MyNote) is specified, then that item will be updated and no new item created.
mono When uploading a script, if mono is set to True (by default set to True) then Corrade will use the mono compiler instead of LSO.

The possible and currently supported uploadable assets are the following:

Parameter Possible Value Parameter Description Example
type Texture Uploads a texture that is encoded in either JPEG2000 or one of the other supported formats.
llInstantMessage(CORRADE,
    wasKeyValueEncode(
        [
            // Upload a texture and call it Skull
            "command", "upload",
            "group", wasURLEscape(GROUP),
            "password", wasURLEscape(PASSWORD),
            // The name as it will appear in the
            // inventory textures folder.
            "name", "Skull",
            "type", "Texture",
            // The Base64-encoded image binary data.
            // (This is a small skull texture in TGA
            // format that has been encoded to Base64)
            "data", wasURLEscape("
                iVBORw0KGgoAAAANSUhEUgAAAEAAAABAAQAAAACCEkxzAAAAAnRSTlMAAQGU/a4A
                AADySURBVHgBjdK3lQMhGATgQd6jUBltXCJTikq48LJlnxpDZ9tAHWwow4Mb/t3z
                dqIPb5Ga/AGgEARACyqgLXAABOgHrInIrtYQQbGbJo7seewTLKWY4Q3nbGesiZJw
                BeEyEuOJUlA0qN6j/QHH9XsYYkG0iDjI0N8hLBpEwUQfZwMC87ZvgTNbKK9qwEGw
                cc7ajNLv/TZvdeecYL+zbiuwykPg2hU8Ufr+UeWtKt8P7Srv8Di/08c1eBFVOwkO
                VfsgsNdte8M+wNUTIDCxXh06AHnRiQ4TRRxXOpg+kSKR/g3lGwBrQXqFRVHDqVQj
                mN//xjODplxESg0eZQAAAABJRU5ErkJggg==
            "),
            "callback", wasURLEscape(URL)
        ]
    )
);
Sound Uploads a sound in OGG Vorbis format.
Animation Uploads an animation in .animatn format.
Clothing wear Uploads wearables for a certain clothing slot (wear) set to one of the values of the WearableType enumeration.
Bodypart wear Uploads body parts for a certain slot (wear) set to one of the values of the WearableType enumeration.
Landmark Uploads landmarks.
Gesture Uploads gestures.
Notecard Uploads notecards.
LSLText Uploads scripts.

and the data passed to the data parameter is compatible with the data retrieved by the download command.

Supported Texture Image Formats

Grid clients such as Corrade download and upload textures to the grid in the JPEG2000 image format. The JPEG2000 image format is defined with various profiles, such that if the downloaded image is saved to a file and then inspected by the file or exiftool command line utilities, the detected image description should be:

JPEG2000 codestream

which indicates a Profile 0 JPEG2000 which is what the SecondLife grid is using.

The proper file extension for such images is "j2c" which stands for "JPEG2000 codestream". Some tools may not properly implement nor respect the file extension. One tool that manages to correctly convert images to "JPEG2000 codestream" is ImageMagick with the mogrify tool. For instance, supposing that an image x.png exists in the current directroy, then issuing the command:

mogrify -format "J2K" x.png

will result in a new image created x.j2k that, when inspected with the file tool:

file x.j2k

should output:

x.J2K: JPEG 2000 codestream

Other tools, such as ffmpeg will convert an image that when inspected with the file utility will read x.j2k: JPEG 2000 Part 1 (JP2) which will fail to upload with Corrade to SecondLife.

Furthermore, Corrade follows the SecondLife limits on texture uploads without any processing such that the user must ensure that the texture to be uploaded conforms to the specification.

One condition imposed by SecondLife is that the height and width of the image should be a power of 2 otherwise the image will not be uploaded. When uploading with a regular viewer, the viewer disguises a transformation that changes the image such that the width and height are a power of 2. However, when using Corrade, this transformation has to be performed beforehand in order for the upload to succeed.

2021/06/10 07:57

Supported Sound Formats

Corrade uploads OGG Vorbis files with the same specification that is listed on the official wiki. In case the uploaded sound seems distorted please check that all the parameters have been met. Typically, the audio rate is the culprit for most sound distortions and one must make sure that the rate of the file to be uploaded is $44100Hz$.

The following is a referential example used as a control to check whether sound uploads work properly. First, a sound is downloaded off the grid from the inventory at /My Inventory Sounds/lemmeout using the download command:

curl --location --request POST 'http://CORRADE_HTTP_SERVER:CORRADE_HTTP_PORT' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'command=download' \
  --data-urlencode 'group=Wizardry and Steamworks' \
  --data-urlencode 'password=CORRADE_GROUP_PASSWORD' \
  --data-urlencode 'type=Sound' \
  --data-urlencode 'item=/My Inventory/Sounds/lemmeout'

where:

  • CORRADE_HTTP_SERVER the IP or hostname of the computer running Corrade,
  • CORRADE_HTTP_PORT the port that Corrade opens for HTTP commands,
  • CORRADE_GROUP_PASSWORD the group password for the group

resulting in the output:

command=download&time=2025-10-26T18%3A11%3A42.060396Z&data=T2dnUwACAAAAAAAAAACLpXTGAAAAAFB1DdYBHgF2b3JiaXMAAAAAARErAAAAAAAASHEAAAAAAACZAU9nZ1MAAAAAAAAAAAAAi6V0xgEAAAAUVRa2C0D%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2B1A3ZvcmJpcw0AAABMYXZmNTcuNDEuMTAwAQAAAB8AAABlbmNvZGVyPUxhdmM1Ny40OC4xMDEgbGlidm9yYmlzAQV2b3JiaXMSQkNWAQAAAQAMUhQhJRlTSmMIlVJSKQUdY1BbRx1j1DlGIWQQU4hJGaV7TyqVWErIEVJYKUUdU0xTSZVSlilFHWMUU0ghU9YxZaFzFEuGSQklbE2udBZL6JljljFGHWPOWkqdY9YxRR1jUlJJoXMYOmYlZBQ6RsXoYnwwOpWiQii%2Bx95S6S2FiluKvdcaU%2BsthBhLacEIYXPttdXcSmrFGGOMMcbF4lMogtCQVQAAAQAAQAQBQkNWAQAKAADCUAxFUYDQkFUAQAYAgAAURXEUx3EcR5IkywJCQ1YBAEAAAAIAACiO4SiSI0mSZFmWZVmWpnmWqLmqL%2FuuLuuu7eq6DoSGrAQAyAAAGIYhh95JzJBTkEkmKVXMOQih9Q455RRk0lLGmGKMUc6QUwwxBTGG0CmFENROOaUMIghDSJ1kziBLPejgYuc4EBqyIgCIAgAAjEGMIcaQcwxKBiFyjknIIETOOSmdlExKKK20lkkJLZXWIueclE5KJqW0FlLLpJTWQisFAAAEOAAABFgIhYasCACiAAAQg5BSSCnElGJOMYeUUo4px5BSzDnFmHKMMeggVMwxyByESCnFGHNOOeYgZAwq5hyEDDIBAAABDgAAARZCoSErAoA4AQCDJGmapWmiaGmaKHqmqKqiKKqq5Xmm6ZmmqnqiqaqmqrquqaqubHmeaXqmqKqeKaqqqaqua6qq64qqasumq9q26aq27MqybruyrNueqsq2qbqybqqubbuybOuuLNu65Hmq6pmm63qm6bqq69qy6rqy7Zmm64qqK9um68qy68q2rcqyrmum6bqiq9quqbqy7cqubbuyrPum6%2Bq26sq6rsqy7tu2rvuyrQu76Lq2rsqurquyrOuyLeu2bNtCyfNU1TNN1%2FVM03VV17Vt1XVtWzNN1zVdV5ZF1XVl1ZV1XXVlW%2FdM03VNV5Vl01VlWZVl3XZlV5dF17VtVZZ9XXVlX5dt3fdlWdd903V1W5Vl21dlWfdlXfeFWbd93VNVWzddV9dN19V9W9d9YbZt3xddV9dV2daFVZZ139Z9ZZh1nTC6rq6rtuzrqizrvq7rxjDrujCsum38rq0Lw6vrxrHrvq7cvo9q277w6rYxvLpuHLuwG7%2Ft%2B8axqaptm66r66Yr67ps675v67pxjK6r66os%2B7rqyr5v67rw674vDKPr6roqy7qw2rKvy7ouDLuuG8Nq28Lu2rpwzLIuDLfvK8evC0PVtoXh1XWjq9vGbwvD0jd2vgAAgAEHAIAAE8pAoSErAoA4AQAGIQgVYxAqxiCEEFIKIaRUMQYhYw5KxhyUEEpJIZTSKsYgZI5JyByTEEpoqZTQSiilpVBKS6GU1lJqLabUWgyhtBRKaa2U0lpqKbbUUmwVYxAy56RkjkkopbRWSmkpc0xKxqCkDkIqpaTSSkmtZc5JyaCj0jlIqaTSUkmptVBKa6GU1kpKsaXSSm2txRpKaS2k0lpJqbXUUm2ttVojxiBkjEHJnJNSSkmplNJa5pyUDjoqmYOSSimplZJSrJiT0kEoJYOMSkmltZJKK6GU1kpKsYVSWmut1ZhSSzWUklpJqcVQSmuttRpTKzWFUFILpbQWSmmttVZrai22UEJroaQWSyoxtRZjba3FGEppraQSWympxRZbja21WFNLNZaSYmyt1dhKLTnWWmtKLdbSUoyttZhbTLnFWGsNJbQWSmmtlNJaSq3F1lqtoZTWSiqxlZJabK3V2FqMNZTSYikptZBKbK21WFtsNaaWYmyx1VhSizHGWHNLtdWUWouttVhLKzXGGGtuNeVSAADAgAMAQIAJZaDQkJUAQBQAAGAMY4xBaBRyzDkpjVLOOSclcw5CCCllzkEIIaXOOQiltNQ5B6GUlEIpKaUUWyglpdZaLAAAoMABACDABk2JxQEKDVkJAEQBACDGKMUYhMYgpRiD0BijFGMQKqUYcw5CpRRjzkHIGHPOQSkZY85BJyWEEEIppYQQQiillAIAAAocAAACbNCUWByg0JAVAUAUAABgDGIMMYYgdFI6KRGETEonpZESWgspZZZKiiXGzFqJrcTYSAmthdYyayXG0mJGrcRYYioAAOzAAQDswEIoNGQlAJAHAEAYoxRjzjlnEGLMOQghNAgx5hyEECrGnHMOQggVY845ByGEzjnnIIQQQueccxBCCKGDEEIIpZTSQQghhFJK6SCEEEIppXQQQgihlFIKAAAqcAAACLBRZHOCkaBCQ1YCAHkAAIAxSjknJaVGKcYgpBRboxRjEFJqrWIMQkqtxVgxBiGl1mLsIKTUWoy1dhBSai3GWkNKrcVYa84hpdZirDXX1FqMtebce2otxlpzzrkAANwFBwCwAxtFNicYCSo0ZCUAkAcAQCCkFGOMOYeUYowx55xDSjHGmHPOKcYYc8455xRjjDnnnHOMMeecc845xphzzjnnnHPOOeegg5A555xz0EHonHPOOQghdM455xyEEAoAACpwAAAIsFFkc4KRoEJDVgIA4QAAgDGUUkoppZRSSqijlFJKKaWUUgIhpZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoplVJKKaWUUkoppZRSSimlACDfCgcA%2FwcbZ1hJOiscDS40ZCUAEA4AABjDGISMOSclpYYxCKV0TkpJJTWMQSilcxJSSimD0FpqpaTSUkoZhJRiCyGVlFoKpbRWaymptZRSKCnFGktKqaXWMuckpJJaS622mDkHpaTWWmqtxRBCSrG11lJrsXVSUkmttdZabS2klFprLcbWYmwlpZZaa6nF1lpMqbUWW0stxtZiS63F2GKLMcYaCwDgbnAAgEiwcYaVpLPC0eBCQ1YCACEBAAQySjnnnIMQQgghUoox56CDEEIIIURKMeacgxBCCCGEjDHnIIQQQgihlJAx5hyEEEIIIYRSOucghFBKCaWUUkrnHIQQQgillFJKCSGEEEIopZRSSikhhBBKKaWUUkopJYQQQiillFJKKaWEEEIopZRSSimllBBCKKWUUkoppZQSQgihlFJKKaWUUkIIpZRSSimllFJKKCGEUkoppZRSSgkllFJKKaWUUkopIZRSSimllFJKKaUAAIADBwCAACPoJKPKImw04cIDEAAAAAIAAkwAgQGCglEIAoQRCAAAAAAACAD4AABICoCIiGjmDA4QEhQWGBocHiAiJAAAAAAAAAAAAAAAAARPZ2dTAATAJAAAAAAAAIuldMYCAAAALeyHaiZZX1taX19lWVtiZWNbYWFfYmNeX2BkY2VeXFxaWGZra2lkYmNaVKIdZqS6FQjUfrKz9b%2FE9o03G59vtjiRWGNm3uuYjfZuTp5Zfog2E1jrwGamgzyv623HyfNCQPpnS0SEOy2c4myN0lFjF5FvUXJFlkimfdiOwbioR3r930oDnh4ypr5nvgLwo5J69U6fPvt578cy2dHb1f4OozknaccubsHNZZMgRX8xvCU%2FxBz6Lau7etbXF6cwxJtHCikbmcu2zAo5jBjporwqk2XJtHSpvhgyiFhj2YL7t8fo6QSiH72Y2eWkAaKn0j298tY%2BjHdMjVZ98jzc3qz%2B9TM1nxikugsqIz%2Bn96tVGj0dCsKoFNJpenDYvb4IJENPuZcOEditCOWv2q7t7PPGuSXuyTTzur%2FiedgGqvhLlh%2BUPHUoQWoKwFf7lY3qu8Rx8%2FyVqVC4cMSaz0dypn7a6DQ6uGBOoKuD4Qll9WvcMWNR1FWsc0ocGLN7bagZHUPOd%2FJpSeLj4h9Jbjb1uwQmS2VYNXaE7ooLlu%2B%2BZqOzbAAHEwB1Aeylnz58Zd2%2BNcv%2BP7Yfc0w8fdUU5ezVbnV%2FHasYQjX9dIzRshlRL28eGE1Vazpx6PQra0bbqLZJdojz4OxEBiNkUEu%2BFfirwMDo5UEb554Y3XCecS%2FkB8DwPgCoCVAKgLz4GXmahuay1c7Ot3pjXZPrCjJ0CX67rf3XC5RPCN4o1UU7ISnrod%2FByvI0PmAiZ69j1P33Mv6NwKl2YdjfNkBp0y4kvvAjfeESTa%2BhOivJMqasAa1mLgBA7QB1gwMQcByUzivrizp7tsmGJ48WxSDMZce%2Ff75yyWf6NGtxKnqLhC5%2BfPe%2Bnj3POZ4tu%2FWxRrXZ5Tbse%2BTTH4%2BR6XgYK%2FrUj6474HA%2FLDGJKLCH4tMYxZ1H5K4GnqmE16dxrrE60MAAGgfcMzX6Pevg%2F2UuwqPB4qjVY5LfrQtkF1vNNXx5NFWzeFxMIPPW10%2Fmt2amDQAxaqz%2Fjm%2FS3rW3S2sAlSB%2B%2FhvmJmQ%2Bx4tQ5B%2F%2BjgOaqDTv7ASfFaCLUHssAHpWJKLsOtGxeq1m3S%2FHvMRp6xc%2F0lknjNaawMDzSt3AFDAw8eap%2Fr9OAjGU5%2FUtYnRij5Sg2YyE9%2B%2F%2FH8cMJUjsjN1qC6ssCVE4iI8ApmoPpU%2BQlaD%2FEAAPAFfgcAwAwPmoiwKr2%2BlM1sLO01QLIDkdGWhPbCWAGE5Ol0qOi%2BXvNpnh12QEhJ7rEwLByIoz%2F3HPVAEPGWD4MBiAjw%2BL%2BgOda5052bL7KB%2FR9%2BKRxQCi7FUplIA9D7AfjIEZFKA2QANoTY1KpFv6I0PefLu7oFjtRdD289l2Pxxat58teK1izsLq4suZScWDtJxBRgtU05TU%2BTwk8vWUowM8lk8D9mbONwwAebOsBnaXh75xFNpu7OVRA6Jsa609EOA8sUQDwwGA78d1wRXLg%2FlKG3vb9A4Q%2FEOnWmO1FxVYRRW%2F89%2BLm9TUxETZvtjSE0aJbkeq6ei33cfvJ9sHzmaQghQBseuf3%2F2EdE4TJbRLnIY5y533KZIpOrJMxKKtQSoPgD5XHYAKEAJ4JN1ovR8OXatwNtnpgdHEdnCaKNBGCs9fPwCJYbk%2FM8bXMkp1IkUeTI1W0iV5p7cP5fVYetfJXTMoh9Frq%2BeCnnz1JYvXJHdCqfs1swKabXcSPYuGzyE5HiYBX4Die3sN1AX%2FfRM2%2B5M5Ia33O5qEOzc9wKgj1Nl%2FfQQPlsnJCClJ1dWDP%2FXc4NZaJ%2BdSP%2F7%2B4oZrit%2FGPsuRYTY3izFxG31WIUIJlahiufbWCyUenqlp%2FvLgSTTovgrrAAGoG8AzW6lbBZ%2BmsdA4NyEc3V7ox79JIPYIPtozFXYVqN4ssG6rVEvd6AAChubVbjdX8vmXEd%2BRzWho1g6fc2Gs0rAo1xtQ5%2FtHRXF%2Bf3%2Bj65xxAJ6pofIyzlUIwDrgaWADp4CC3vGttm4MxvDKq621s%2BnTguokwcM1qJ3XtwOYgK9NluNfzRF9SwguKuUwBq296FHyv0ntJrwSumovUyEvHR5vFdrtiMw2HE7JkOq0V2Y8mqmU10pzoSctARkFs8HhB8b5q1c6gz73e4M%2B%2BTeGd4c%2Fpe3dSRcAQ9gfDWH9ny%2F%2FbfdSwkhc5I7zsyZwMpVHWbJd9jgCyQzNw6tvnv7%2BDrdY1Hrb6qUKFi%2B8uRYP78hZFwKWbVekl4CtKiQ1MAKgA9MCB28zLmdLrwmdv6kuYZ2nDkx8HSBYIvhNKvXcfBXaygBOgjrre6mjB2Y%2FtQCa6Vycd1MT3796zybvmGmAWq4Ghzpuqc7Mnw4YMX9LvRnFFZisFBWSrn38JVZVzQQiBaACpJm4dP%2F5hi5P3p2afvdtjsu9pGvMmWpZvLQtQ8rOrwdEQbIuFS3Z5mZ72haTKZmyxzL3yBwohzkrOZ%2FZbhZmJa0UwSlVLRz1YdbTFGwgrRJwkq0dVLOwg5ppBbDJV1b9vzRqeGitkzs8jYm9ZN1a7NAcO6HPxyPJj9FgXQa5rzBf84mi72cXHYRlkVfX%2BWWIQgKA9k6na%2Bn95YbnzfG7E0%2Fl0jL8%2BU%2F%2B7tR3AJQckgCWLAYyXPAJqADqAQeg%2F8GBp72kP143OHT6tG5vRA1aXr1r0swMO5r5sJa5Y2SXiNcF8exlJ7k6Y%2FFOz9A79JMCcVdxj6y%2B478Bh99SRgIQKG2kp30f5m0%2B19MtHavSrg6WriTroK4IwKCDc2DCg5je5uWWWXcxZ26tqR%2BJePogKndESQClUAn8pmdd31tX3eRFF08NYvxIMfO30aqBntg8N29s%2FvZVdYhh16ME1MvY6Xf0HCJHQLlfPzyPn7NNBLFqDqYNkmw19eEdAagwBhsT1LMvn6bPz7j52Nf6Sr%2BEvl2V7rjEJ5ItZEArq8eLIfzbZ8r1cK4W7y65s9sn1bVLiyGDkX7%2BPfnnF2kOyNuml7rIvMOtREN7JT4YhCkdFvO4%2B1hGsHQMlqtxIDXvzKACsDGwIabbOXShrxr29%2Bz6ntiEky1Zy%2BhwOrnz6yBtz2QvLiuLn3yR%2Fp0l2z5f4QvhS0ANWaxJCqgT%2BzR61lmBTNOHgPTRl0rWUV5kkZDbPO5gKrUtNvCF0jNyhgSWa5bElJcdAN8GpJ9%2B7efLPrdias94vF0W89K1GMfM3dES0WFHi8nDqQGRJ51x2oeYmFnv5DthcKkMYN44DfCz0eWxs3g75M66GrWMXr9fvhU1P1ZbuJ0ffvPDFOQDlqcrjQMAvjoDwH523y9WF8PZXZ1M96R71d9sd05s56bITsXcRE6jrCyXkoerPB4eHw87mCM%2B%2B9bpcuX0OnxteQW5n78U8M2pV1rcOvZmqxMufrDGzvjPZfhAUDSOYda0zNLKpSDURLWv0fj1PXVCVI%2Fc68NmMz%2FSymfmHN%2FFeOh22fzlkixduW3i%2FTyHKyL4zsi8AIN7UmpeElQjadE6VaTX%2BVIuKNnk%2FFRNeuga6u3c5mExsOumAJKhqGAcKABfrcw%2BOXK0bxw%2B%2FPD7dkynjL9VoLJEkajaNIOpJoqCXonujf2tlpzIHDWuxM%2F0Yf2vTHr6%2BqIwyc4oaCdH8QGZXgdeHEfiF7bk6NbG7cXGBFw3N5KkB2qWl4M4psoVa%2FefPV9VT%2F1Kn3ii7ef%2ForAe9JZs9GZkVkewuWcdu0fu40%2FVSknKjD3ckVz5O9vS0zAve5xdhF3H1%2Fs5O80D2%2BG4jcD98%2Fup3MWrhRiWKzbLJzTOQAgQmUCzSC8awED3d758ZuvUza1007WknS2jz%2FYN%2FW2FEhNaWCpK79vl%2Fz39s6%2FSfp38fX0yjQ4JDy1od0CNL%2BeNs7sISCPu18KiHE%2BFBrIBNTbpjGLx7KfXZEjH0ACaLXdwSwDq6hyD4QFAA6QGeJ04XWwl0pSR10nR1Ky0NUzG0Xz2V%2FNVr%2BSQWOWT36lHrC0GIJaPG4vkiYnz559%2FrqccnH3Zu%2BUfc9kZVkbPfmzaJqa9fBUwjUiLtfb29XBTyFGx7sd5FnUjE6KqlPfDolHfPQCD8YX4B2y4QgEQO3ft1%2BWRbWbOB3v3HSbfaDBSIcwFBCG0MEx86368sj1fnrR%2F8PmXdw8ZnQuNQAlVYSzt4yvLarz1z8ky4qEHTn19maeQsDwa84KxJ%2F64q9LQwvTMBLkDmmlXmR5qJCpRAAMbvSuKKlj9lD3y8Z9qvVdUFvfdzcVaKi2qUmgBzUuaJ7P1%2Fer%2B%2FYnP%2F3xf%2FPrn5%2B9X7NKsJ5WGt0PHmm39fPdkBABWh2io0D18J95yxjkI5uTz5fIwG2omTuyEunYflmc%2FpCZYajdg68XhTPj%2BbPuTy%2F80XZ968rZ2NHn%2Fa1loZKnQsTwZ6uzPwbHUy1f%2B6I%2BZNiKiyMfK2W7kbrQ5WbS3IhMavPDG6XDwdnJd7tJe4debdJ3u4XsCjIqlpp6uo%2FKJfZrntVay8QDBhgFb36A4UBUA%2Bveug%2BvWo0pqtrNr9iZqccxxLCfz6fNy7fr%2Ftr%2Bubrb%2Bm9oM6Ph8vnbYdRtY1ypMq95M8VngdIlGGi63yCTXD6fL2SzD3PZ2%2Bv3wCSJbxC4NmuQVo94qAaAAcQCXFJZOQPHT78NUtz4ju6gYxO65NvW9SlBkKaKcNPtQi0ib1FHDo9%2BXl5c9S63m3Mn6TEnH4kgtWjLc76OeZXKLMugZYWoRELvGQ3VGlRwdy9wxAdF5OyQNnqSbTYHTOdBAQHG9yZTZnZ%2B9etfl6OHfz17vdzYkWXi85PDhbQvnxrDuiVT9V9J6Q1jsmAxS5f5ykkI3Z2TYT%2F6vjfmtFv1sKc5sZPAw3dlDKY9Iq1UL0d8AiqI%2BUlkDNWNlbP66dvPf7CZ7h6cnJ81nwUms0vnNAhemuc%2Fjdl0yk5J8eWnzJGzCnQDgGAAyu6gfcxG25bKWS%2Fv%2BbgdXshPqbyn4hgkkJMC4vWQx&success=True&name=TestUpload

note that the value of the data key that is supposed to contain the file is first Base64 encoded and then application/x-www-form-urlencoded such that to be able to decode this file, one must first form-unescape the string and then decode the Base64 string. Using the Linux command line, this would be:

alias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'

followed by:

echo INPUT | urldecode | base64 -d > sound.ogg

where:

  • INPUT is the entire string value of the data key from the download command return.

The file that was downloaded is the following:

The previous command should create the sound.ogg file that can be queried, say with ffprobe:

Input #0, ogg, from 'sound.ogg':
  Duration: 00:00:00.85, start: 0.000000, bitrate: 59 kb/s
    Stream #0:0: Audio: vorbis, 11025 Hz, mono, fltp, 29 kb/s
    Metadata:
      encoder         : Lavc57.48.101 libvorbis

Now, to perform the converse operation, encode the sound with Base64 and form-escape it in order:

curl --location --request POST 'http://CORRADE_HTTP_SERVER:CORRADE_HTTP_PORT' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'command=upload' \
--data-urlencode 'group=Wizardry and Steamworks' \
--data-urlencode 'password=...' \
--data-urlencode 'name=FILENAME' \
--data-urlencode 'type=Sound' \
--data-urlencode 'data=T2dnUwACAAAAAAAAAACLpXTGAAAAAFB1DdYBHgF2b3JiaXMAAAAAARErAAAAAAAASHEAAAAAAACZ
AU9nZ1MAAAAAAAAAAAAAi6V0xgEAAAAUVRa2C0D///////////+1A3ZvcmJpcw0AAABMYXZmNTcu
NDEuMTAwAQAAAB8AAABlbmNvZGVyPUxhdmM1Ny40OC4xMDEgbGlidm9yYmlzAQV2b3JiaXMSQkNW
AQAAAQAMUhQhJRlTSmMIlVJSKQUdY1BbRx1j1DlGIWQQU4hJGaV7TyqVWErIEVJYKUUdU0xTSZVS
lilFHWMUU0ghU9YxZaFzFEuGSQklbE2udBZL6JljljFGHWPOWkqdY9YxRR1jUlJJoXMYOmYlZBQ6
RsXoYnwwOpWiQii+x95S6S2FiluKvdcaU+sthBhLacEIYXPttdXcSmrFGGOMMcbF4lMogtCQVQAA
AQAAQAQBQkNWAQAKAADCUAxFUYDQkFUAQAYAgAAURXEUx3EcR5IkywJCQ1YBAEAAAAIAACiO4SiS
I0mSZFmWZVmWpnmWqLmqL/uuLuuu7eq6DoSGrAQAyAAAGIYhh95JzJBTkEkmKVXMOQih9Q455RRk
0lLGmGKMUc6QUwwxBTGG0CmFENROOaUMIghDSJ1kziBLPejgYuc4EBqyIgCIAgAAjEGMIcaQcwxK
BiFyjknIIETOOSmdlExKKK20lkkJLZXWIueclE5KJqW0FlLLpJTWQisFAAAEOAAABFgIhYasCACi
AAAQg5BSSCnElGJOMYeUUo4px5BSzDnFmHKMMeggVMwxyByESCnFGHNOOeYgZAwq5hyEDDIBAAAB
DgAAARZCoSErAoA4AQCDJGmapWmiaGmaKHqmqKqiKKqq5Xmm6ZmmqnqiqaqmqrquqaqubHmeaXqm
qKqeKaqqqaqua6qq64qqasumq9q26aq27MqybruyrNueqsq2qbqybqqubbuybOuuLNu65Hmq6pmm
63qm6bqq69qy6rqy7Zmm64qqK9um68qy68q2rcqyrmum6bqiq9quqbqy7cqubbuyrPum6+q26sq6
rsqy7tu2rvuyrQu76Lq2rsqurquyrOuyLeu2bNtCyfNU1TNN1/VM03VV17Vt1XVtWzNN1zVdV5ZF
1XVl1ZV1XXVlW/dM03VNV5Vl01VlWZVl3XZlV5dF17VtVZZ9XXVlX5dt3fdlWdd903V1W5Vl21dl
WfdlXfeFWbd93VNVWzddV9dN19V9W9d9YbZt3xddV9dV2daFVZZ139Z9ZZh1nTC6rq6rtuzrqizr
vq7rxjDrujCsum38rq0Lw6vrxrHrvq7cvo9q277w6rYxvLpuHLuwG7/t+8axqaptm66r66Yr67ps
675v67pxjK6r66os+7rqyr5v67rw674vDKPr6roqy7qw2rKvy7ouDLuuG8Nq28Lu2rpwzLIuDLfv
K8evC0PVtoXh1XWjq9vGbwvD0jd2vgAAgAEHAIAAE8pAoSErAoA4AQAGIQgVYxAqxiCEEFIKIaRU
MQYhYw5KxhyUEEpJIZTSKsYgZI5JyByTEEpoqZTQSiilpVBKS6GU1lJqLabUWgyhtBRKaa2U0lpq
KbbUUmwVYxAy56RkjkkopbRWSmkpc0xKxqCkDkIqpaTSSkmtZc5JyaCj0jlIqaTSUkmptVBKa6GU
1kpKsaXSSm2txRpKaS2k0lpJqbXUUm2ttVojxiBkjEHJnJNSSkmplNJa5pyUDjoqmYOSSimplZJS
rJiT0kEoJYOMSkmltZJKK6GU1kpKsYVSWmut1ZhSSzWUklpJqcVQSmuttRpTKzWFUFILpbQWSmmt
tVZrai22UEJroaQWSyoxtRZjba3FGEppraQSWympxRZbja21WFNLNZaSYmyt1dhKLTnWWmtKLdbS
UoyttZhbTLnFWGsNJbQWSmmtlNJaSq3F1lqtoZTWSiqxlZJabK3V2FqMNZTSYikptZBKbK21WFts
NaaWYmyx1VhSizHGWHNLtdWUWouttVhLKzXGGGtuNeVSAADAgAMAQIAJZaDQkJUAQBQAAGAMY4xB
aBRyzDkpjVLOOSclcw5CCCllzkEIIaXOOQiltNQ5B6GUlEIpKaUUWyglpdZaLAAAoMABACDABk2J
xQEKDVkJAEQBACDGKMUYhMYgpRiD0BijFGMQKqUYcw5CpRRjzkHIGHPOQSkZY85BJyWEEEIppYQQ
QiillAIAAAocAAACbNCUWByg0JAVAUAUAABgDGIMMYYgdFI6KRGETEonpZESWgspZZZKiiXGzFqJ
rcTYSAmthdYyayXG0mJGrcRYYioAAOzAAQDswEIoNGQlAJAHAEAYoxRjzjlnEGLMOQghNAgx5hyE
ECrGnHMOQggVY845ByGEzjnnIIQQQueccxBCCKGDEEIIpZTSQQghhFJK6SCEEEIppXQQQgihlFIK
AAAqcAAACLBRZHOCkaBCQ1YCAHkAAIAxSjknJaVGKcYgpBRboxRjEFJqrWIMQkqtxVgxBiGl1mLs
IKTUWoy1dhBSai3GWkNKrcVYa84hpdZirDXX1FqMtebce2otxlpzzrkAANwFBwCwAxtFNicYCSo0
ZCUAkAcAQCCkFGOMOYeUYowx55xDSjHGmHPOKcYYc8455xRjjDnnnHOMMeecc845xphzzjnnnHPO
Oeegg5A555xz0EHonHPOOQghdM455xyEEAoAACpwAAAIsFFkc4KRoEJDVgIA4QAAgDGUUkoppZRS
SqijlFJKKaWUUgIhpZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWU
UkoplVJKKaWUUkoppZRSSimlACDfCgcA/wcbZ1hJOiscDS40ZCUAEA4AABjDGISMOSclpYYxCKV0
TkpJJTWMQSilcxJSSimD0FpqpaTSUkoZhJRiCyGVlFoKpbRWaymptZRSKCnFGktKqaXWMuckpJJa
S622mDkHpaTWWmqtxRBCSrG11lJrsXVSUkmttdZabS2klFprLcbWYmwlpZZaa6nF1lpMqbUWW0st
xtZiS63F2GKLMcYaCwDgbnAAgEiwcYaVpLPC0eBCQ1YCACEBAAQySjnnnIMQQgghUoox56CDEEII
IURKMeacgxBCCCGEjDHnIIQQQgihlJAx5hyEEEIIIYRSOucghFBKCaWUUkrnHIQQQgillFJKCSGE
EEIopZRSSikhhBBKKaWUUkopJYQQQiillFJKKaWEEEIopZRSSimllBBCKKWUUkoppZQSQgihlFJK
KaWUUkIIpZRSSimllFJKKCGEUkoppZRSSgkllFJKKaWUUkopIZRSSimllFJKKaUAAIADBwCAACPo
JKPKImw04cIDEAAAAAIAAkwAgQGCglEIAoQRCAAAAAAACAD4AABICoCIiGjmDA4QEhQWGBocHiAi
JAAAAAAAAAAAAAAAAARPZ2dTAATAJAAAAAAAAIuldMYCAAAALeyHaiZZX1taX19lWVtiZWNbYWFf
YmNeX2BkY2VeXFxaWGZra2lkYmNaVKIdZqS6FQjUfrKz9b/E9o03G59vtjiRWGNm3uuYjfZuTp5Z
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
bgdXshPqbyn4hgkkJMC4vWQx
'

where:

  • CORRADE_HTTP_SERVER the IP or hostname of the computer running Corrade,
  • CORRADE_HTTP_PORT the port that Corrade opens for HTTP commands,
  • CORRADE_GROUP_PASSWORD the group password for the group,
  • FILENAME the name of the asset that will be created inside Corrade's inventory in-world

Note here that cURL has some nifty command line parameters like --data-urlencode that allow encoding and decode of the Base64 string.

If you wonder why the Base64 string has to be escaped, this is due to key-value pairs being used that will break in case Base64 emits equal signs which is part of its language.

2021/06/10 07:57

Encoding Assets for Upload

For example, to upload a texture, you would have to have an image encoded in one of the supported image formats. For this example, let's assume you have a JPEG2000 image. You would Base64-encode the JPEG2000 code-stream image. After that, you send the upload command to Corrade with the value of the data key set to an URL-encoded string of the Base64-encoded JPEG2000 code-stream image.

In other words:

  • you have an initial JPEG2000 code-stream image file.
  • you encode the image file as a Base64 string.
  • you encode the Base64 string in an URL-encoded string.

The reason for multiple levels of encoding is that Base64 uses the equal sign (=) as a padding element which interferes with key-value data syntax.

Since Base64 encoding may produce large strings, a reliable way to upload assets is to use Corrade's internal HTTP server instead of writing large strings in LSL.

Assets such as clothing, landmarks, gestures, notecards and scripts can be uploaded (created) as the reverse operation of the download command. Each of these assets are Linden-based formats which, some of them, can be reconstructed intuitively in plain-text. For example, scripts as LSLText requires the encoded data to be just a plain-text LSL script. Landmarks, clothing, gestures and notecards also have their own specific Linden-based format. If you are curious to see what that format may be, use the download command on some clothing and then Base64 decode the data returned by Corrade.

Returned Data

Under the assumption that the upload succeeded, Corrade will return a CSV list of item UUID by asset UUID (if any) that can then be used for other commands in order to refer to the asset that has been uploaded. Additionally, if the asset was a script and the script failed to compile, then the command will return the script compilation errors.


secondlife/scripted_agents/corrade/api/commands/upload.txt · Last modified: by 127.0.0.1

Wizardry and Steamworks

© 2025 Wizardry and Steamworks

Access website using Tor Access website using i2p Wizardry and Steamworks PGP Key


For the contact, copyright, license, warranty and privacy terms for the usage of this website please see the contact, license, privacy, copyright.