{"id":18824626,"url":"https://github.com/ematech/soundcraft-show-format","last_synced_at":"2026-06-09T16:04:53.203Z","repository":{"id":32071158,"uuid":"35643040","full_name":"EMATech/soundcraft-show-format","owner":"EMATech","description":"Soundcraft Show format reverse engineering — Tested on SI Compact 16","archived":false,"fork":false,"pushed_at":"2016-01-30T22:36:14.000Z","size":167,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-22T11:34:22.024Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"BrianSidebotham/arm-tutorial-rpi","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EMATech.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-14T23:49:34.000Z","updated_at":"2020-01-11T23:25:02.000Z","dependencies_parsed_at":"2022-07-30T05:37:55.415Z","dependency_job_id":null,"html_url":"https://github.com/EMATech/soundcraft-show-format","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EMATech/soundcraft-show-format","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EMATech%2Fsoundcraft-show-format","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EMATech%2Fsoundcraft-show-format/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EMATech%2Fsoundcraft-show-format/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EMATech%2Fsoundcraft-show-format/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EMATech","download_url":"https://codeload.github.com/EMATech/soundcraft-show-format/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EMATech%2Fsoundcraft-show-format/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34114469,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T00:56:58.027Z","updated_at":"2026-06-09T16:04:53.145Z","avatar_url":"https://github.com/EMATech.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Soundcraft Si show file format\n------------------------------\n\n## Extension\n.SSH\n\nSoundcraft SHow?\n\n## Format\nActual format is XML.\n\nUnfortunately it's full of blobs but don't worry!\n\n## XML Sections\n\n### Device\n\n### NODE\n\n### Show\n- name: (str) This is a cleartext attribute with the show name! Yay :)\n\n### MHxDFile\n- name: (str) Looks like a path and filename.\n    - \"\\._ $SHOWS\\Show_0\\filename.ext\"\n- checksum: (int) Undetermined checksum. (Yet!)\n    - TODO: determine checksum type.\n- datalength: (int) Size of the uncompressed data blob in bytes.\n- content: blob\n\n## Blobs\nAll blobs seem to start with the same header: 'eJz'.\n\nLooks like some kind of data encoding or compression.\n\nBase64? Most likely. The resulting files looks encoded or compressed though…\n\n78 9C header. Doesn't that look like zlib? \\o/\n\n### Recipes\n\n#### Decode \u0026 Extract\n```sh\n\u003c \"XML MHxDFile entity content in a file\" base64 -d | zlib-flate -uncompress \u003e file\n```\n\n#### Compress \u0026 Encode\n```sh\n\u003c file zlib-flate -compress | base64 -w0 \u003e \"XML MHxDFile entity content in a file\"\n```\n\n## Files\n\n### ShowHdr.xml\nThe general show informations as this section is always unique.\n\n#### Show\n- Name: (str) The show name.\n- activeCueList: (int) The cueListId of the currently active cueList.\n    - 1\n- notes: (str) Does not seem to be exposed on the mixing desk!\n    - \"\"\n- deskType: (int) I have to find the other types.\n    - 12 == Si Compact 16\n    - 97 == Si Expression 2\n- versionMajor: (int) The major version number of the firmware.\n    - 3\n- versionMinor: (int) The minor version number of the firmware.\n    - 1\n- build: (int) The build version number of the firmware.\n    - 9\n\n#### Snapshot\n- snapshotId: (int)\n- name: (str) \"Unamed Snapshot 4\" Does not seem to be exposed on the mixing desk!\n- notes: (str) Does not seem to be exposed on the mixing desk!\n    - \"\"\n\n### CueList\n- cueListId: (int)\n    - 1\n- name: (str)\n    - \"Cue List 1\"\n- nextCueId: (int) ID for the next created cue.\n- notes: (str)\n    - \"\"\n\n### Filter\nOptional.\n\nIsolate statuses.\n\n### Scope\nOptional.\n\n- category: (int)\n    - TODO: determine categories\n- mask: (int)\n    - TODO: determine mask relationship\n\n#### Cue\n- cueId: (int) An ID for the cue.\n- snapshotId: (int) Binds the cue to a snapshot.\n- name: (str) The name of the cue.\n- notes: (str) Does not seem to be exposed on the mixing desk!\n    - \"\"\n- midiProgChange: (bool as int) Enables midi program changing on cue recall.\n- midiChannel: (int) The MIDI channel onto which sending the program change.\n- midiProgNumber: (int) The MIDI program change message number.\n- midiRxChannel: (int) The MIDI channel onto which receiving program changes.\n- midiRxProgChange: (int) The MIDI program change message number. Yeah, someone mixed up this setting and the next!\n- midiRxProgNumber: (bool as int) Enables cue recall on MIDI progam change reception. Yeah, someone mixed up this setting and the previous!\n- hiQVenueRecall: (bool as int) Enables recalling HiQnet venue on cue recall.\n- hiQVenueNumber: (int) The HiQnet venue number to recall.\n- cueActive: (bool as int?) Does not seem to be exposed on the mixing desk!\n- cueLocked: (bool as int?) Does not seem to be exposed on the mixing desk!\n- dmxFadeTime: (int) My desk is not equiped with DMX but the performer model has a DMX port.\n- audioRecall: (bool as int?) Certainly for the performer model to allow recalling only audio.\n- dmxRecall: (bool as int?) Certainly for the performer model to allow recalling only DMX.\n\n### IOModules.xml\nLooks like the routing informations for the Show.\n\n#### IOModuleDatabase\n\n#### PhysicalIODeviceManager\n\n#### PhysicalIODevice\n- shortName: (str) The input or output name.\n- description (str) Long description.\n- serialNo: (int)\n    - 39030 on all.\n- versionNo: (int)\n    - 256 on all.\n- position: (int)\n    - 255 for internal.\n    - 0 for external.\n- expansionCardType: (int)\n    - 0 for internal and D21m stagebox.\n    - 2 for MULTI DIGITAL and MADI cards.\n- moduleType: (int)\n    - 1 for internal.\n    - 2 for MULTI DIGITAL and MADI cards.\n    - 3 for D21m stagebox.\n- internalModuleType: (int)\n    - 0 for MULTI DIGITAL and MADI cards and D21m stagebox.\n    - 1 for MIC.\n    - 2 for Line and internal Lexicon return.\n    - 3 for GRAUX output module.\n    - 5 for AES in.\n    - 6 for AES out.\n\n#### InternalAudioDevice\n- shortName: (str)\n    - \"\" on all.\n- description: (str)\n    - \"\" on all.\n- serialNo: (int)\n    - 4660 on all.\n- audioDeviceType: (int)\n    - 1 for all internal.\n    - 5 for my MULTI DIGITAL card.\n\n#### AudioIOModuleRangeManager\n\n#### AudioIOModuleRange\n- logicalStart: (int) The I/O position start.\n- logicalEnd: (int) The I/O position end.\n- IOmoduleType: (int)\n    - 1 for all internal.\n    - 2 for my external MULTI DIGITAL card.\n    - 3 for D21m stagebox cards.\n- logicalIOType: (int)\n    - 1 for MIC inputs.\n    - 2 for Line inputs.\n    - 3 for Internal Lexicon return.\n    - 5 for AES input.\n    - 6 for MIC/Line In from D21m stagebox.\n    - 8 for GRAUX output module.\n    - 13 and 14 for Line/AES Out from D21m stagebox.\n    - 17 for AES output.\n    - 4 for external inputs ?\n    - 12 for external outputs ?\n- discovered: (bool as int?)\n    - 1 for all.\n- inShow: (bool as int?)\n    - 1 for all.\n- eAvailable: (bool as int?) Electrically available?\n    - 1 for physical I/O.\n    - 0 for inexistant I/O (MIC 16 to 63).\n\n#### UnknownExternalAudioDevice\nSame as InternalAudioDevice for my MULTI DIGITAL card.\n\n### \\*.dat files\nLooks like memory dumps. 180kB. Very similar content.\n\nStart with \"Snapshot\" header.\n\n#### SS_xxxxx.dat\nPurpose unknown. Certainly the current state since it's restored on show loading.\n\n#### SS_x.dat\nx = snaphotId from ShowHdr.xml\n\nLooks like the cues. The number of sections match the number of cues of the show.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fematech%2Fsoundcraft-show-format","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fematech%2Fsoundcraft-show-format","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fematech%2Fsoundcraft-show-format/lists"}