{"id":21375740,"url":"https://github.com/ulysseswu/freemote","last_synced_at":"2025-05-16T11:06:06.311Z","repository":{"id":41190292,"uuid":"88234322","full_name":"UlyssesWu/FreeMote","owner":"UlyssesWu","description":"Managed Emote/PSB tool libs.","archived":false,"fork":false,"pushed_at":"2025-04-01T15:18:57.000Z","size":1750,"stargazers_count":380,"open_issues_count":7,"forks_count":25,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-09T10:01:39.270Z","etag":null,"topics":["pimg","psb","scn"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UlyssesWu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"Ulysses","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-04-14T04:57:42.000Z","updated_at":"2025-04-07T16:22:49.000Z","dependencies_parsed_at":"2023-12-09T17:27:19.099Z","dependency_job_id":"19c3fc82-5d2d-468d-87b9-321ed37e2a54","html_url":"https://github.com/UlyssesWu/FreeMote","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UlyssesWu%2FFreeMote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UlyssesWu%2FFreeMote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UlyssesWu%2FFreeMote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UlyssesWu%2FFreeMote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UlyssesWu","download_url":"https://codeload.github.com/UlyssesWu/FreeMote/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518383,"owners_count":22084374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["pimg","psb","scn"],"created_at":"2024-11-22T09:12:38.517Z","updated_at":"2025-05-16T11:06:01.299Z","avatar_url":"https://github.com/UlyssesWu.png","language":"C#","funding_links":["https://ko-fi.com/Ulysses"],"categories":[],"sub_categories":[],"readme":"# FreeMote\r\n[![Build Status](https://github.com/UlyssesWu/FreeMote/actions/workflows/build.yml/badge.svg)](https://github.com/UlyssesWu/FreeMote/actions/workflows/build.yml)\r\n\r\nManaged EMT/PSB tool libs.\r\n\r\n[Download FreeMote Toolkit](https://github.com/UlyssesWu/FreeMote/releases)\r\n\r\nIt's required to attach the text of [FreeMote.LICENSE](https://github.com/UlyssesWu/FreeMote/blob/master/FreeMote/FreeMote.LICENSE.txt) with your release if you're using FreeMote codes or binaries.\r\n\r\n## About PSB\r\nFreeMote is a set of tool/libs for `M2 Packaged Struct Binary` file format. The file header usually starts with `PSB`/`PSZ`/`mdf`, \r\nand the file extensions usually are `.psb|.psz|.mdf|.pimg|.scn|.mmo|.emtbytes|.mtn|.dpak|.psb.m`.\r\n\r\nHowever, there are some other file formats using the same extensions. They are NOT supported:\r\n* `.psb`: PlayStation Binary (PS3) | PhotoShop Big (Photoshop)\r\n* `.mdf`: Mirror Disc File (Alcohol 120%) | Primary Data File (MSSQL)\r\n* `.mtn`: Motion File (Live2D)\r\n\r\nBefore submitting an issue or asking a question, please check your PSB file header with a hex editor.\r\n\r\n## Components\r\n### FreeMote\r\nBasic functions. Decrypt or encrypt EMT PSB files.\r\n### FreeMote [SDK](https://github.com/Project-AZUSA/FreeMote-SDK)\r\nSpecial API libs for EMT engine, which take _pure_ (unencrypted) PSB files as input.\r\n### FreeMote.Psb\r\nParse and generate PSB.\r\n### FreeMote.PsBuild\r\nCompile and decompile PSB files. Convert PSB among different platforms. Recover EMT projects.\r\n### FreeMote.Plugins\r\nExternal/Experimental features. Read [wiki](https://github.com/UlyssesWu/FreeMote/wiki) for usages.\r\n\r\n* Images: TLG encoding/decoding support via [**FreeMote.Tlg** (x64)](https://github.com/UlyssesWu/FreeMote.Tlg).\r\n* Shells: Compression/decompression support, such as [**FreeMote.FastLz** (x64)](https://github.com/UlyssesWu/FreeMote.FastLz).\r\n* Audio: Experimental support for audio used in PSB.\r\n\r\n### FreeMote.Purify (Unreleased)\r\nInfer and calculate the key used by EMT PSB file just from the PSB file (rather than get from engine).\r\n\r\n## Tools\r\nRead [wiki](https://github.com/UlyssesWu/FreeMote/wiki/CommandLine-Usage-for-Tools) for detailed usages.\r\n\r\n### EmtConvert (FreeMote.Tools.EmtConvert)\r\nConvert EMT PSB files.\r\n### PsbDecompile (FreeMote.Tools.PsbDecompile)\r\nDecompile PSB files to json files and resources.\r\n### PsBuild (FreeMote.Tools.PsBuild)\r\nCompile PSB json files and resources to PSB.\r\n### EmtMake (FreeMote.Tools.EmtMake) (Preview)\r\nConvert an EMT PSB to MMO project. **The output file is always licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/). No commercial usage allowed!**\r\n### FreeMote Viewer (FreeMote.Tools.Viewer)\r\nOpen and render EMT _pure_ PSB. This tool is powered by [FreeMote.NET](https://github.com/UlyssesWu/FreeMote.NET#freemoteviewer).\r\n\r\n## Build\r\nThis project requires **VS 2022** and .NET **4.8** to build.\r\n\r\n**FreeMote.Plugins** / **FreeMote.Plugins.x64** require a [MyGet feed](https://www.myget.org/feed/monarchsolutions/package/nuget/FreeMote.Tlg) to get external libs made by us. If you don't need FreeMote Plugins, you can unload Plugins projects and remove them from other projects' reference.\r\n\r\nTo install our own nuget packages, add this feed to your IDE:\r\n\r\n`https://www.myget.org/F/monarchsolutions/api/v3/index.json`\r\n\r\n\r\n## Test\r\nGet PSB samples for test and research from [FreeMote.Samples](https://github.com/Dual-Vector-Foil/FreeMote.Samples).\r\n\r\nThanks for everyone who provided these samples!\r\n\r\n---\r\nby **Ulysses** (wdwxy12345@gmail.com)\r\n\r\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"\u003e\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /\u003e\u003c/a\u003e\u003cbr /\u003eFreeMote is licensed under a \u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"\u003eCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License\u003c/a\u003e (CC BY-NC-SA 4.0).\r\n\r\nSome outputs of FreeMote (mmo/psd etc.) are transformed from FreeMote code and are considered as **Adapted Material**. Therefore they're always licensed under **CC BY-NC-SA 4.0**. [wiki](https://github.com/UlyssesWu/FreeMote/wiki/License)\r\n\r\n[Issue Report](https://github.com/UlyssesWu/FreeMote/issues) · [Pull Request](https://github.com/UlyssesWu/FreeMote/pulls) · [Wiki](https://github.com/UlyssesWu/FreeMote/wiki)\r\n\r\n[![Support Us](https://az743702.vo.msecnd.net/cdn/kofi2.png?v=0 \"Buy Me a Coffee at ko-fi.com\")](https://ko-fi.com/Ulysses)\r\n\r\n## Thanks\r\n\r\n* @9chu for so much help.\r\n* @number201724 for PSB format references. LICENSE: MIT\r\n* @WcLyic for PSB samples and Editor help.\r\n* @nalsas (awatm) for Editor help.\r\n* [MonoGame](https://github.com/MonoGame/MonoGame) for [DxtUtil](https://github.com/UlyssesWu/FreeMote/blob/master/FreeMote/DxtUtil.cs) code. LICENSE: Ms-PL\r\n* Singyuen Yip for [Adler32](https://github.com/UlyssesWu/FreeMote/blob/master/FreeMote/Adler32.cs) code.\r\n* @gdkchan for [DxtCodec](https://github.com/gdkchan/CEGTool/blob/master/CEGTool/DXTCodec.cs) code.\r\n* @mfascia for [TexturePacker](https://github.com/mfascia/TexturePacker) code.\r\n* @morkt for [ImageTLG](https://github.com/morkt/GARbro/blob/master/ArcFormats/KiriKiri/ImageTLG.cs), [ArcPSB](https://github.com/morkt/GARbro/blob/master/ArcFormats/Emote/ArcPSB.cs), [PspDecompression](https://github.com/morkt/GARbro/blob/master/ArcFormats/Will/ArcPulltop.cs), [Bc7Decoder](https://github.com/morkt/GARbro/blob/master/ArcFormats/Unity/Bc7Decoder.cs) code. LICENSE: MIT\r\n* @xdaniel \u0026 @FireyFly for [GetPixelCoordinatesPSP](https://github.com/xdanieldzd/Scarlet/blob/8d9e9cd34f6563da4a0f9b8797c3a1dd35542a4c/Scarlet/Drawing/ImageBinary.cs#L1278) and [PostProcessing](https://github.com/xdanieldzd/GXTConvert/blob/master/GXTConvert/Conversion/PostProcessing.cs) code. LICENSE: MIT\r\n* @Nyerguds for [BitmapHelper](https://stackoverflow.com/a/45100442) code.\r\n* @[HopelessHiro](https://forums.fuwanovel.net/profile/25739-hoplesshiro/), @skilittle as sponsors!\r\n* [vgmstream](https://github.com/vgmstream/vgmstream) and @SilicaAndPina for VAG related code.\r\n* @mafaca for [AstcDecoder](https://github.com/mafaca/UtinyRipper/blob/master/uTinyRipperGUI/ThirdParty/Texture%20converters/AstcDecoder.cs) code. LICENSE: MIT\r\n* @RickStrahl for [ColorConsole](https://gist.github.com/RickStrahl/52c9ee43bd2723bcdf7bf4d24b029768) code.\r\n* @GMMan (Yukai Li) for [information](https://gitlab.com/modmyclassic/sega-mega-drive-mini/marchive-batch-tool) of mzs, PSBv1, trie form etc.\r\n* All nuget references used in this project.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fulysseswu%2Ffreemote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fulysseswu%2Ffreemote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fulysseswu%2Ffreemote/lists"}