Repository: Inochi2D/inochi-session Branch: v0_8 Commit: 249f04772088 Files: 43 Total size: 56.7 KB Directory structure: gitextract_zwm6wzm0/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.yml │ │ ├── config.yml │ │ └── feature_request.yml │ └── workflows/ │ ├── build.yml │ ├── pr-test.yml │ ├── publish-gh.yml │ ├── publish-itch.yml │ ├── release-nightly.yml │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── build-aux/ │ ├── linux/ │ │ ├── inochi-session.appdata.xml │ │ └── inochi-session.desktop │ ├── osx/ │ │ ├── BuildUniversal.sh │ │ ├── Info.plist │ │ ├── gendmg.sh │ │ └── osxbundle.sh │ └── windows/ │ ├── inochi-session.rc │ └── version.h ├── dub.sdl ├── genpot.sh ├── gentl.sh ├── imgui.ini ├── res/ │ ├── licenses/ │ │ ├── LICENSE-FreeType │ │ ├── LICENSE-Lua │ │ ├── LICENSE-Spout2 │ │ └── LICENSE-imgui │ ├── shaders/ │ │ ├── batch.frag │ │ └── batch.vert │ ├── style.css │ └── version.txt ├── source/ │ ├── app.d │ ├── inochi2d/ │ │ └── nio/ │ │ ├── puppet.d │ │ ├── scene.d │ │ └── staging.d │ └── session/ │ ├── package.d │ └── widgets/ │ ├── package.d │ └── scene.d ├── tl/ │ ├── placeholder.txt │ └── template.pot └── vcvars.ps1 ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/FUNDING.yml ================================================ github: [LunaTheFoxgirl] patreon: LunaFoxgirlVT ================================================ FILE: .github/ISSUE_TEMPLATE/bug-report.yml ================================================ name: Bug Report description: Report an issue with Inochi Session title: "[BUG]" labels: ["Bug", "Triage"] body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report! - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the bug report, please make sure you do the following options: - label: I have checked for similar bug reports and could not find any. required: true - label: I have tested and confirmed that this is an issue in an official branded build. required: true - type: textarea id: bug-description attributes: label: Describe the bug description: A clear and concise description of what the bug is, and the behavior you expect instead. If you intend to submit a PR for this issue, tell us in the description. Thanks! placeholder: I am doing ... What I expect is ... What is actually happening is ... validations: required: true - type: textarea id: reproduction attributes: label: Reproduction description: Steps to reproduce the behavior placeholder: | 1. Go to '...' 2. Click on '...' 3. Scroll down to '...' 4. See error validations: required: true - type: dropdown id: sys-arch attributes: label: System Architecture options: - x86_64 - arm64 / aarch64 - type: dropdown id: sys-os attributes: label: Operating System options: - Windows - macOS - Linux - type: input id: version attributes: label: Version description: The version of Inochi Session you are running, or the commit hash if you are running a nightly / main branch build - type: textarea id: logs attributes: label: Logs description: | Optional. If applicable, provide logs using the format below: ````
Click to expand! ``` // paste the log text here ```
```` - type: textarea id: additional-context attributes: label: Additional Context description: | Any other context or screenshots about the issue here. ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Discord Chat url: https://discord.com/invite/abnxwN6r9v about: Ask questions and discuss with other Inochi2D users in real time. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.yml ================================================ name: Feature request description: Suggest an idea for Inochi Session title: "[Feature Request]" labels: ["Enhancement", "Triage"] body: - type: markdown attributes: value: | Thanks for your interest in the project and taking the time to fill out this feature request! - type: checkboxes id: checkboxes attributes: label: Validations description: Before submitting the feature request, please make sure you do the following options: - label: I have checked for similar feature requests and could not find any. required: true - label: I have made sure this is not an already-existing feature. required: true - type: textarea id: feature-description attributes: label: Description description: | Clear and concise description of the problem being solved. Please make the reason and usecases as detailed as possible. If you intend to submit a PR for this issue, tell us in the description. Thanks! placeholder: When using Inochi Session, I would like to be able to [goal / wish] so that [benefit]. validations: required: true - type: textarea id: suggested-solution attributes: label: Suggested solution description: | A possible implementation to solve the problem. validations: required: true - type: textarea id: alternative attributes: label: Alternative solution description: | A different possible solution to solve the problem. - type: textarea id: additional-context attributes: label: Additional Context description: | Any other context or screenshots about the issue here. ================================================ FILE: .github/workflows/build.yml ================================================ name: 'Build Inochi Session' run-name: 'Build Inochi Session (${{ inputs.variant }})...' on: workflow_call: inputs: target_ref: required: false type: string default: '${{ github.ref_name }}' variant: required: true type: string build_type: required: false type: string default: release generate_version: required: false type: boolean default: false fail_fast: required: false type: boolean default: true do_package: required: false type: boolean default: false postfix: required: false type: string default: '' permissions: contents: write jobs: build: runs-on: ${{ matrix.config.os }} strategy: fail-fast: ${{ inputs.fail_fast }} matrix: config: - platform: 'osx' os: 'macos-latest' - platform: 'win32' os: windows-latest - platform: 'linux' os: ubuntu-latest steps: - uses: actions/checkout@v4 with: ref: '${{ inputs.target_ref }}' # Setup D Compiler - uses: dlang-community/setup-dlang@v1.4.0 with: compiler: ldc-latest - name: 'Preparing build... (Ubuntu)' if: ${{ matrix.config.platform == 'linux' }} run: | sudo apt-get update sudo apt-get install libsdl3-dev libfontconfig-dev - name: 'Preparing build... (Windows)' if: ${{ matrix.config.platform == 'win32' }} run: | Remove-Item 'C:/Strawberry' -Recurse - name: 'Update version info' if: 'inputs.generate_version' run: | # Build metadata (like version information and icons) dub build --config=update-version - name: 'Build (OSX Universal)' if: ${{ matrix.config.platform == 'osx' }} id: osx-build run: | dub build --config=meta # First build ARM64 version... echo "Building arm64 binary..." dub build --build=${{ inputs.build_type }} --compiler=ldc2 --config=${{ matrix.config.platform }}-${{ inputs.variant }} --arch=arm64-apple-macos mv "out/Inochi Session.app/Contents/MacOS/inochi-session" "out/Inochi Session.app/Contents/MacOS/inochi-session-arm64" # Then the X86_64 version... echo "Building x86_64 binary..." dub build --build=${{ inputs.build_type }} --compiler=ldc2 --config=${{ matrix.config.platform }}-${{ inputs.variant }} --arch=x86_64-apple-macos mv "out/Inochi Session.app/Contents/MacOS/inochi-session" "out/Inochi Session.app/Contents/MacOS/inochi-session-x86_64" # Glue them together with lipo echo "Gluing them together..." lipo "out/Inochi Session.app/Contents/MacOS/inochi-session-x86_64" "out/Inochi Session.app/Contents/MacOS/inochi-session-arm64" -output "out/Inochi Session.app/Contents/MacOS/inochi-session" -create # Cleanup echo "Cleaning up..." rm "out/Inochi Session.app/Contents/MacOS/inochi-session-x86_64" "out/Inochi Session.app/Contents/MacOS/inochi-session-arm64" # Bundle echo "Bundling up to app" ./build-aux/osx/osxbundle.sh - name: 'Build (Windows)' if: ${{ matrix.config.platform == 'win32' }} id: win32-build shell: powershell run: | .\vcvars.ps1 dub build --config=meta dub build --build=${{ inputs.build_type }} --compiler=ldc2 --config=${{ matrix.config.platform }}-${{ inputs.variant }} - name: 'Build (Linux)' if: ${{ matrix.config.platform == 'linux' }} id: posix-build run: | dub build --config=meta dub build --build=${{ inputs.build_type }} --compiler=ldc2 --config=${{ matrix.config.platform }}-${{ inputs.variant }} # TODO: Add signing workflow. # - name: 'Select latest XCode (OSX)' # if: ${{ startsWith(matrix.config.os, 'macos') }} # uses: BoundfoxStudios/action-xcode-select@v1 # - name: 'Sign and Notarize (OSX)' # if: ${{ startsWith(matrix.config.os, 'macos') }} # uses: BoundfoxStudios/action-xcode-notarize@v1.1 # with: # product-path: 'out/Inochi Session.app' - name: 'Make Artifact (Main)' uses: actions/upload-artifact@v4 with: name: build-${{ matrix.config.platform }}${{ inputs.postfix }} path: | out/* version.txt retention-days: 1 - name: Archive Zip uses: thedoctor0/zip-release@main with: type: 'zip' filename: 'inochi-session-${{ matrix.config.platform }}.zip' directory: 'out/' path: '*' - name: 'Make Artifact (ZIP)' uses: actions/upload-artifact@v4 with: name: build-${{ matrix.config.platform }}-zip${{ inputs.postfix }} path: | out/inochi-session-${{ matrix.config.platform }}.zip version.txt retention-days: 1 package-dmg: if: ${{ inputs.do_package == true }} needs: build runs-on: macos-14 steps: - uses: actions/checkout@v4.1.7 with: sparse-checkout: build-aux - uses: actions/download-artifact@v4 with: name: build-osx${{ inputs.postfix }} - name: 'Install create-dmg...' run: | brew update brew install create-dmg - name: 'Build DMG' run: | ./build-aux/osx/gendmg.sh - name: Make Artifact uses: actions/upload-artifact@v4 with: name: build-osx-dmg${{ inputs.postfix }} path: | out/Install_Inochi_Session.dmg version.txt overwrite: true retention-days: 1 ================================================ FILE: .github/workflows/pr-test.yml ================================================ # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Pull Request Test on: pull_request: branches: [ "main" ] permissions: contents: read jobs: build: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v4.1.7 - uses: dlang-community/setup-dlang@4c99aa991ce7d19dd3064de0a4f2f6b2f152e2d7 with: compiler: ldc-latest - name: "Get build dependencies" run: | sudo apt install libsdl2-dev libfreetype6-dev - name: "Clone dependencies & set versions" run: | git clone https://github.com/Inochi2D/i2d-imgui.git --recurse-submodules git clone https://github.com/Inochi2D/inochi2d.git dub add-local i2d-imgui/ "0.8.0" dub add-local inochi2d/ "0.8.5" - name: 'Build' run: | # Build metadata (like version information and icons) dub build --config=meta # Build the project, with its main file included, without unittests dub build --compiler=ldc2 --build=release --config=linux-full - name: 'Test' run: | dub test --compiler=ldc2 --config=linux-full - name: "Upload Artifacts" if: success() uses: actions/upload-artifact@v3 with: name: inochi-session path: out/inochi-session ================================================ FILE: .github/workflows/publish-gh.yml ================================================ name: 'Publish to GitHub' permissions: contents: write on: workflow_call: inputs: tag: required: false type: string default: ${{ github.ref_name }} name: required: false type: string default: '' generate-notes: required: false type: boolean default: false postfix: required: false type: string default: '' jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v4 with: pattern: '*${{ inputs.postfix }}' merge-multiple: true - name: 'Release to ${{ inputs.tag }}' uses: softprops/action-gh-release@v2 with: name: '${{ inputs.name }}' tag_name: ${{ inputs.tag }} files: | out/inochi-session-linux.zip out/inochi-session-win32.zip out/inochi-session-osx.zip out/Install_Inochi_Session.dmg generate_release_notes: ${{ inputs.generate-notes }} ================================================ FILE: .github/workflows/publish-itch.yml ================================================ name: 'Publish to itch.io' on: workflow_call: inputs: postfix: required: false type: string default: '' jobs: publish: continue-on-error: true name: 'Publish' runs-on: ubuntu-latest strategy: fail-fast: false matrix: config: - name: "Windows (ZIP)" channel: 'windows' artifact: 'build-win32-zip${{ inputs.postfix }}' file: 'inochi-session-win32.zip' - name: "macOS (ZIP)" channel: 'osx' artifact: 'build-osx-zip${{ inputs.postfix }}' file: 'inochi-session-osx.zip' - name: "macOS (DMG)" channel: 'osx-dmg' artifact: 'build-osx-dmg${{ inputs.postfix }}' file: 'Install_Inochi_Session.dmg' - name: "Linux" channel: 'linux' artifact: 'build-linux-zip${{ inputs.postfix }}' file: 'inochi-session-linux.zip' steps: - name: 'Download ${{ matrix.config.artifact }}...' uses: actions/download-artifact@v4 with: name: '${{ matrix.config.artifact }}' - name: 'Publishing ${{ matrix.config.name }} to Itch...' uses: manleydev/butler-publish-itchio-action@master env: BUTLER_CREDENTIALS: ${{ secrets.BUTLER_CREDENTIALS }} CHANNEL: ${{ matrix.config.channel }} ITCH_GAME: inochi-session ITCH_USER: kitsunebi-games VERSION_FILE: version.txt PACKAGE: 'out/${{ matrix.config.file }}' ================================================ FILE: .github/workflows/release-nightly.yml ================================================ # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Build and Release (Nightly) on: schedule: - cron: '0 0 * * *' workflow_dispatch: permissions: contents: write jobs: build: uses: './.github/workflows/build.yml' with: variant: 'nightly' generate_version: true do_package: true fail_fast: false gh-publish: needs: build uses: './.github/workflows/publish-gh.yml' secrets: inherit with: tag: 'nightly' name: 'Nightly' generate-notes: true # Delete artifacts after use. cleanup: if: 'always()' runs-on: ubuntu-latest needs: [gh-publish] steps: - uses: GeekyEggo/delete-artifact@v5 with: name: | * ================================================ FILE: .github/workflows/release.yml ================================================ # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Build and Release on: push: # Push all normally versioned tags tags: - 'v*' permissions: contents: write jobs: # Full Release # This needs "gh-publish-demo" due to the fact that # we need to overwrite the artifacts related. build: if: ${{ ! contains(github.ref_name, 'rc') }} uses: './.github/workflows/build.yml' with: target_ref: '${{ github.ref_name }}' variant: 'full' generate_version: true do_package: true itch-publish: needs: build uses: './.github/workflows/publish-itch.yml' secrets: inherit gh-publish: needs: build uses: './.github/workflows/publish-gh.yml' secrets: inherit # Delete artifacts after use. cleanup: if: 'always()' runs-on: ubuntu-latest needs: [itch-publish, gh-publish] steps: - uses: GeekyEggo/delete-artifact@v5 with: name: | * ================================================ FILE: .gitignore ================================================ .dub docs.json __dummy.html docs/ *.exe *.pdb *.o *.obj *.lst *.res out/ dub.selections.json __dummy_docs/ # Redub Junk .ldc2_cache # Other Junk .DS_Store .vscode/ ================================================ FILE: LICENSE ================================================ BSD 2-Clause License Copyright (c) 2020, Inochi2D Project All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.md ================================================ # Inochi Session ![image](https://user-images.githubusercontent.com/7032834/181119161-f83e8e57-2f9e-409f-90bd-1b1b9c047bcc.png) _[Aka (example model)](https://github.com/Inochi2D/example-models#aka) by [seagetch](https://twitter.com/seagetch)_ *Inochi Session is the official tool for using Inochi2D puppets for VTubing.* This application is currently under heavy development and isn't ready for production just yet. ================================================ FILE: build-aux/linux/inochi-session.appdata.xml ================================================ inochi-session inochi-session.desktop Inochi Session CC0-1.0 BSD-2-Clause Tool for using Inochi2D puppets for streaming.

Inochi2D is a framework for realtime 2D puppet animation which can be used for VTubing, game development and digital animation.

Inochi Session is a tool that lets you use your Inochi2D models for live streaming.

https://inochi2d.com https://github.com/Inochi2D/inochi-session https://github.com/Inochi2D/inochi-session/issues Title screen https://user-images.githubusercontent.com/7032834/181119161-f83e8e57-2f9e-409f-90bd-1b1b9c047bcc.png Graphics
================================================ FILE: build-aux/linux/inochi-session.desktop ================================================ [Desktop Entry] Name=inochi-session Exec=inochi-session Icon=icon_x256 Type=Application Categories=Utility ================================================ FILE: build-aux/osx/BuildUniversal.sh ================================================ # First build ARM64 version... echo "Building arm64 binary..." dub build --build=release --config=osx-full --arch=arm64-apple-macos mv "out/Inochi Session.app/Contents/MacOS/inochi-session" "out/Inochi Session.app/Contents/MacOS/inochi-session-arm64" # Then the X86_64 version... echo "Building x86_64 binary..." dub build --build=release --config=osx-full --arch=x86_64-apple-macos mv "out/Inochi Session.app/Contents/MacOS/inochi-session" "out/Inochi Session.app/Contents/MacOS/inochi-session-x86_64" # Glue them together with lipo echo "Gluing them together..." lipo "out/Inochi Session.app/Contents/MacOS/inochi-session-x86_64" "out/Inochi Session.app/Contents/MacOS/inochi-session-arm64" -output "out/Inochi Session.app/Contents/MacOS/inochi-session" -create # Print some nice info echo "Done!" lipo -info "out/Inochi Session.app/Contents/MacOS/inochi-session" # Cleanup and bundle echo "Cleaning up..." rm "out/Inochi Session.app/Contents/MacOS/inochi-session-x86_64" "out/Inochi Session.app/Contents/MacOS/inochi-session-arm64" ./osxbundle.sh ================================================ FILE: build-aux/osx/Info.plist ================================================ CFBundleName Inochi Session CFBundleDisplayName Inochi Session CFBundleIdentifier com.inochi2d.inochi-session CFBundleVersion 0.7.4 CFBundlePackageType APPL CFBundleSignature inoc CFBundleExecutable inochi-session CFBundleIconFile InochiSession CFBundleDocumentTypes CFBundleTypeIconFile project.icns CFBundleTypeName Inochi2D Puppet CFBundleTypeRole Editor LSItemContentTypes com.inochi2d.inochi2d.puppet UTExportedTypeDeclarations UTTypeIdentifier com.inochi2d.inochi2d.puppet UTTypeReferenceURL https://github.com/Inochi2D/inochi2d/wiki/INP-Data-Interchange-Format UTTypeDescription Inochi2D Puppet UTTypeIconFile puppet.icns UTTypeConformsTo public.data UTTypeTagSpecification public.filename-extension inp ================================================ FILE: build-aux/osx/gendmg.sh ================================================ DMGTITLE="Install Inochi Session" DMGFILENAME="Install_Inochi_Session.dmg" if [ -d "out/Inochi Session.app" ]; then if [ -f "out/$DMGFILENAME" ]; then echo "Removing prior install dmg..." rm "out/$DMGFILENAME" fi PREVPWD=$PWD cd out/ echo "Building $DMGFILENAME..." # Create Install Volume directory if [ -d "InstallVolume" ]; then echo "Cleaning up old install volume..." rm -r InstallVolume fi mkdir -p InstallVolume cp ../LICENSE LICENSE cp -r "Inochi Session.app" "InstallVolume/Inochi Session.app" # Downloaded artifact removes executable flag. chmod +x "InstallVolume/Inochi Session.app/Contents/MacOS/inochi-session" create-dmg \ --volname "$DMGTITLE" \ --volicon "InochiSession.icns" \ --background "../build-aux/osx/dmgbg.png" \ --window-size 800 600 \ --icon "Inochi Session.app" 200 250 \ --hide-extension "Inochi Session.app" \ --eula "LICENSE" \ --app-drop-link 600 250 \ "$DMGFILENAME" InstallVolume/ echo "Done! Cleaning up temporaries..." rm LICENSE echo "DMG generated as $PWD/$DMGFILENAME" cd $PREVPWD else echo "Could not find Inochi Session for packaging..." fi ================================================ FILE: build-aux/osx/osxbundle.sh ================================================ echo "Creating directory structure..." LASTPWD=$PWD # Handle copying all the dylibs to their respective directories # As well handle creating our directory structure cd out/Inochi\ Session.app/Contents # Remove old files if [ -d "Frameworks" ]; then echo "Removing files from prior bundle..." rm -r Frameworks SharedSupport Resources rm Info.plist fi # Create new directories and move dylibs mkdir -p Frameworks SharedSupport Resources Resources/i18n mv MacOS/libSDL2-2.0.dylib Frameworks/libSDL2.dylib mv -n MacOS/*.dylib Frameworks # Move back to where we were cd $LASTPWD echo "Setting up file structure..." # Copy info plist and icon cp build-aux/osx/Info.plist out/Inochi\ Session.app/Contents/ # Move any translation files in if any. mv -n out/*.mo out/Inochi\ Session.app/Contents/Resources/i18n/ # Copy license info to SharedSupport cp res/licenses/*-LICENSE out/Inochi\ Session.app/Contents/SharedSupport/ cp LICENSE out/Inochi\ Session.app/Contents/SharedSupport/LICENSE # Create icons dir # TODO: check if dir exists, skip this step if it does if [ ! -d "out/InochiCreator.icns" ]; then iconutil -c icns -o out/InochiSession.icns build-aux/osx/Inochi-Session.iconset else echo "Icons already exist, skipping..." fi echo "Applying Icon..." cp out/InochiSession.icns out/Inochi\ Session.app/Contents/Resources/InochiSession.icns echo "Cleaning up..." find out/Inochi\ Session.app/Contents/MacOS -type f ! -name "inochi-session" -delete echo "Done!" ================================================ FILE: build-aux/windows/inochi-session.rc ================================================ #include #include "version.h" IDI_ICON1 ICON "icon.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", VER_COMPANYNAME_STR VALUE "FileDescription", VER_FILEDESCRIPTION_STR VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", VER_INTERNALNAME_STR VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", VER_PRODUCTNAME_STR VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END ================================================ FILE: build-aux/windows/version.h ================================================ #ifndef VERSION_H #define VERSION_H #define VER_FILEVERSION 0,8,1,0 #define VER_FILEVERSION_STR "0.8.1\0" #define VER_PRODUCTVERSION 0,8,1,0 #define VER_PRODUCTVERSION_STR "0.8.1\0" #define VER_COMPANYNAME_STR "Inochi2D Project" #define VER_FILEDESCRIPTION_STR "Inochi Session" #define VER_INTERNALNAME_STR "inochi-session" #define VER_LEGALCOPYRIGHT_STR "Copyright © 2022-2023 Inochi2D Project" #define VER_ORIGINALFILENAME_STR "inochi-session.exe" #define VER_PRODUCTNAME_STR "Inochi Session" #define VER_COMPANYDOMAIN_STR "inochi2d.com" #endif // VERSION_H ================================================ FILE: dub.sdl ================================================ name "inochi-session" description "App that allows you to stream with Inochi2D puppets" authors "Inochi2D Project" copyright "Copyright © 2021, Inochi2D Project" license "BSD 2-clause" dependency "facetrack-d" version="~>0.8.0" dependency "lumars" version="~>1.6.1" dependency "inochi2d" path="../inochi2d" dependency "inui" path="../inui" targetPath "out/" workingDirectory "out/" copyFiles "res/licenses/*" dflags "-mscrtlib=msvcrt" platform="windows-ldc" lflags "-rpath=$$ORIGIN" platform="linux" buildRequirements "allowWarnings" stringImportPaths "res" // Uncomment following lines to enable JINS MEME Logger module. //versions "JML" //subConfiguration "facetrack-d" "jml" // // CONFIGURATIONS // configuration "barebones" { platforms "linux" targetType "executable" } // Official build configurations. // Do not package your compilation of Inochi Creator with these configurations // unless you have prior permission from the Inochi2D project. configuration "linux-full" { platforms "linux" targetType "executable" versions "InBranding" } configuration "osx-full" { platforms "osx" targetType "executable" targetPath "out/Inochi Session.app/Contents/MacOS" versions "InBranding" subConfiguration "i2d-imgui" "dynamic_dynamicCRT" lflags "-rpath" "@executable_path/../Frameworks" "-rpath" "@executable_path/." } configuration "win32-full" { platforms "windows" targetType "executable" versions "InBranding" dependency "bindbc-spout2" version="~>0.1.1" lflags "/SUBSYSTEM:windows" "/ENTRY:mainCRTStartup" platform="window-dmd" sourceFiles "build-aux\\windows\\inochi-session.res" } // Linux nightly build configuration "linux-nightly" { platforms "linux" targetType "executable" subConfiguration "i2d-imgui" "static_dynamicCRT" versions "InNightly" dependency "dportals" version="~>0.1.0" } // macOS nightly build configuration "osx-nightly" { platforms "osx" targetType "executable" targetPath "out/Inochi Session.app/Contents/MacOS" subConfiguration "i2d-imgui" "dynamic_dynamicCRT" dflags "-force-dwarf-frame-section=false" lflags "-rpath" "@executable_path/../Frameworks" "-rpath" "@executable_path/." versions "InNightly" } // Windows nightly build configuration "win32-nightly" { platforms "windows" targetType "executable" versions "InBranding" "InNightly" dependency "bindbc-spout2" version="~>0.1.1" lflags "/SUBSYSTEM:windows" "/ENTRY:mainCRTStartup" platform="window-dmd" sourceFiles "build-aux\\windows\\inochi-session.res" } // Meta configurations configuration "update-version" { targetType "none" preGenerateCommands "dub run gitver -- --prefix INS --file source/session/ver.d --mod session.ver --appname \"Inochi Session\" --itchfile res/version.txt" } configuration "meta" { targetType "none" preGenerateCommands "rc.exe /v build-aux\\windows\\inochi-session.rc" platform="windows" } ================================================ FILE: genpot.sh ================================================ #!/bin/sh find . -iname "*.d" | xargs xgettext --from-code=UTF-8 -o tl/template.pot -c --keyword=_ --keyword=__ ================================================ FILE: gentl.sh ================================================ mkdir -p out/ if [ -n `$(find tl/ -name "*.po" 2>/dev/null)` ] then echo "No translations, skipping..." else for f in tl/*.po; do msgfmt -o "out/$(basename -- "$f" .po).mo" -- "$f" done fi ================================================ FILE: imgui.ini ================================================ [Window][WindowOverViewport_11111111] Pos=0,0 Size=1065,754 Collapsed=0 [Window][Debug##Default] Pos=60,60 Size=400,400 Collapsed=0 [Docking][Data] DockSpace ID=0x08BD597D Window=0x1BBC0F80 Pos=0,0 Size=1065,754 CentralNode=1 Selected=0xA9D0F322 ================================================ FILE: res/licenses/LICENSE-FreeType ================================================ The FreeType Project LICENSE ---------------------------- 2006-Jan-27 Copyright 1996-2002, 2006 by David Turner, Robert Wilhelm, and Werner Lemberg Introduction ============ The FreeType Project is distributed in several archive packages; some of them may contain, in addition to the FreeType font engine, various tools and contributions which rely on, or relate to, the FreeType Project. This license applies to all files found in such packages, and which do not fall under their own explicit license. The license affects thus the FreeType font engine, the test programs, documentation and makefiles, at the very least. This license was inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses, which all encourage inclusion and use of free software in commercial and freeware products alike. As a consequence, its main points are that: o We don't promise that this software works. However, we will be interested in any kind of bug reports. (`as is' distribution) o You can use this software for whatever you want, in parts or full form, without having to pay us. (`royalty-free' usage) o You may not pretend that you wrote this software. If you use it, or only parts of it, in a program, you must acknowledge somewhere in your documentation that you have used the FreeType code. (`credits') We specifically permit and encourage the inclusion of this software, with or without modifications, in commercial products. We disclaim all warranties covering The FreeType Project and assume no liability related to The FreeType Project. Finally, many people asked us for a preferred form for a credit/disclaimer to use in compliance with this license. We thus encourage you to use the following text: """ Portions of this software are copyright © The FreeType Project (www.freetype.org). All rights reserved. """ Please replace with the value from the FreeType version you actually use. Legal Terms =========== 0. Definitions -------------- Throughout this license, the terms `package', `FreeType Project', and `FreeType archive' refer to the set of files originally distributed by the authors (David Turner, Robert Wilhelm, and Werner Lemberg) as the `FreeType Project', be they named as alpha, beta or final release. `You' refers to the licensee, or person using the project, where `using' is a generic term including compiling the project's source code as well as linking it to form a `program' or `executable'. This program is referred to as `a program using the FreeType engine'. This license applies to all files distributed in the original FreeType Project, including all source code, binaries and documentation, unless otherwise stated in the file in its original, unmodified form as distributed in the original archive. If you are unsure whether or not a particular file is covered by this license, you must contact us to verify this. The FreeType Project is copyright (C) 1996-2000 by David Turner, Robert Wilhelm, and Werner Lemberg. All rights reserved except as specified below. 1. No Warranty -------------- THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO USE, OF THE FREETYPE PROJECT. 2. Redistribution ----------------- This license grants a worldwide, royalty-free, perpetual and irrevocable right and license to use, execute, perform, compile, display, copy, create derivative works of, distribute and sublicense the FreeType Project (in both source and object code forms) and derivative works thereof for any purpose; and to authorize others to exercise some or all of the rights granted herein, subject to the following conditions: o Redistribution of source code must retain this license file (`FTL.TXT') unaltered; any additions, deletions or changes to the original files must be clearly indicated in accompanying documentation. The copyright notices of the unaltered, original files must be preserved in all copies of source files. o Redistribution in binary form must provide a disclaimer that states that the software is based in part of the work of the FreeType Team, in the distribution documentation. We also encourage you to put an URL to the FreeType web page in your documentation, though this isn't mandatory. These conditions apply to any software derived from or based on the FreeType Project, not just the unmodified files. If you use our work, you must acknowledge us. However, no fee need be paid to us. 3. Advertising -------------- Neither the FreeType authors and contributors nor you shall use the name of the other for commercial, advertising, or promotional purposes without specific prior written permission. We suggest, but do not require, that you use one or more of the following phrases to refer to this software in your documentation or advertising materials: `FreeType Project', `FreeType Engine', `FreeType library', or `FreeType Distribution'. As you have not signed this license, you are not required to accept it. However, as the FreeType Project is copyrighted material, only this license, or another one contracted with the authors, grants you the right to use, distribute, and modify it. Therefore, by using, distributing, or modifying the FreeType Project, you indicate that you understand and accept all the terms of this license. 4. Contacts ----------- There are two mailing lists related to FreeType: o freetype@nongnu.org Discusses general use and applications of FreeType, as well as future and wanted additions to the library and distribution. If you are looking for support, start in this list if you haven't found anything to help you in the documentation. o freetype-devel@nongnu.org Discusses bugs, as well as engine internals, design issues, specific licenses, porting, etc. Our home page can be found at https://www.freetype.org --- end of FTL.TXT --- ================================================ FILE: res/licenses/LICENSE-Lua ================================================ Copyright © 1994–2021 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: res/licenses/LICENSE-Spout2 ================================================ BSD 2-Clause License Copyright (c) 2020, Lynn Jarvis All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: res/licenses/LICENSE-imgui ================================================ The MIT License (MIT) Copyright (c) 2014-2022 Omar Cornut Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: res/shaders/batch.frag ================================================ #version 330 in vec2 texUVs; in vec4 exColor; layout(location = 0) out vec4 outAlbedo; layout(location = 1) out vec4 outEmission; layout(location = 2) out vec4 outBump; uniform sampler2D tex; void main() { vec2 texSize = vec2(textureSize(tex, 0)); outAlbedo = texture(tex, texUVs/texSize) * exColor; outEmission = texture(tex, texUVs/texSize) * 0.5; outBump = vec4(0.5, 0.5, 1, 1); } ================================================ FILE: res/shaders/batch.vert ================================================ #version 330 uniform mat4 vp; layout(location = 0) in vec2 verts; layout(location = 1) in vec2 uvs; layout(location = 2) in vec4 color; out vec2 texUVs; out vec4 exColor; void main() { gl_Position = vp * vec4(verts.x, verts.y, 0, 1); texUVs = uvs; exColor = color; } ================================================ FILE: res/style.css ================================================ .scene { width: 100%; height: 100%; } ================================================ FILE: res/version.txt ================================================ 0.8.7 ================================================ FILE: source/app.d ================================================ module app; import session; import inui; void main(string[] args) { AppInfo info = { name: "Inochi Session", author: "Inochi2D Project", id: "com.inochi2d.inochi-session", version_: import("version.txt"), }; Application app = new Application(info); app.stylesheet = StyleSheet.parse(import("style.css")); Window window = (new Window(app.appInfo.name, 640, 480)) .resizable(true) .vibrancy(SystemVibrancy.vivid); window.view.addWidget(new Scene()); app.run(window, args); } ================================================ FILE: source/inochi2d/nio/puppet.d ================================================ module inochi2d.nio.puppet; import inochi2d; import niobium; import numem; import nulib.collections; import nulib.math : min, max; /** A niobium renderered puppet. */ class NioPuppet : NuRefCounted { private: @nogc: // Puppet info Puppet puppet_; // Render handles NioDevice device_; NioBuffer vtx_; NioBuffer idx_; NioTexture[] tex_; // Creates the puppet and its associated buffers. void createPuppet(string file) { this.puppet_ = assumeNoThrowNoGC(&ins_puppet_load_pinned, file); this.tex_ = nu_malloca!NioTexture(puppet_.textureCache.cache.length); foreach(i, ref Texture texture; puppet_.textureCache.cache) { tex_[i] = device_.createTexture(NioTextureDescriptor( type: NioTextureType.type2D, format: NioPixelFormat.rgba8UnormSRGB, storage: NioStorageMode.privateStorage, usage: NioTextureUsage.transfer | NioTextureUsage.sampled, width: texture.width, height: texture.height, )).upload(NioRegion3D(0, 0, 0, texture.width, texture.height, 1), 0, 0, texture.pixels, 0); } // NOTE: We create the initial buffers here, // the buffer sizes are not known until an update // has occured, so we do a 0 ms update. assumeNoThrowNoGC(&ins_puppet_update_pinned, puppet_, 0); size_t vtxSize = puppet.drawList.vertices.length * VtxData.sizeof; size_t idxSize = puppet.drawList.indices.length * uint.sizeof; vtx_ = device_.createBuffer(NioBufferDescriptor( storage: NioStorageMode.privateStorage, usage: NioBufferUsage.transfer | NioBufferUsage.vertexBuffer, size: cast(uint)vtxSize )); idx_ = device_.createBuffer(NioBufferDescriptor( storage: NioStorageMode.privateStorage, usage: NioBufferUsage.transfer | NioBufferUsage.indexBuffer, size: cast(uint)idxSize )); } // Resizes the vertex and index buffers. void resizeBuffers() { size_t vtxSize = puppet.drawList.vertices.length * VtxData.sizeof; size_t idxSize = puppet.drawList.indices.length * uint.sizeof; if (vtxSize > vtx_.size) { vtx_.release(); vtx_ = device_.createBuffer(NioBufferDescriptor( storage: NioStorageMode.privateStorage, usage: NioBufferUsage.transfer | NioBufferUsage.vertexBuffer, size: cast(uint)vtxSize )); } if (idxSize > idx_.size) { idx_.release(); idx_ = device_.createBuffer(NioBufferDescriptor( storage: NioStorageMode.privateStorage, usage: NioBufferUsage.transfer | NioBufferUsage.indexBuffer, size: cast(uint)idxSize )); } } public: /** The underlying Inochi2D Puppet */ @property Puppet puppet() => puppet_; /** The loaded textures of the puppet. */ @property NioTexture[] textures() => tex_; /** Vertex data of the puppet. */ @property VtxData[] vertices() => puppet.drawList.vertices; /** The puppet's vertex buffer. */ @property NioBuffer vertexBuffer() => vtx_; /** Index data of the puppet. */ @property uint[] indices() => puppet.drawList.indices; /** The puppet's index buffer. */ @property NioBuffer indexBuffer() => idx_; /** Draw commands of the puppet. */ @property DrawCmd[] commands() => puppet.drawList.commands; /** Total size of the puppet's buffers. */ @property size_t totalBufferSize() => vtx_.size + idx_.size; // Destructor ~this() { assumeNoThrowNoGC(&ins_puppet_unload_pinned, puppet); if (vtx_) vtx_.release(); if (idx_) idx_.release(); foreach(ref NioTexture texture; tex_) texture.release(); nu_freea(tex_); } /** Loads a puppet. */ this(NioDevice device, string file) { this.device_ = device; this.createPuppet(file); } /** Updates the puppet and resizes vertex and index buffers if needed. Params: delta = Time since last frame. */ void update(float delta) { assumeNoThrowNoGC(&ins_puppet_update_pinned, puppet_, delta); this.resizeBuffers(); } } private: extern(C) void ins_puppet_update_pinned(Puppet puppet, float delta) { puppet.update(delta); puppet.draw(delta); } extern(C) Puppet ins_puppet_load_pinned(string file) { import core.memory : GC; auto puppet_ = inLoadPuppet(file); GC.addRoot(cast(void*)puppet_); return puppet_; } extern(C) void ins_puppet_unload_pinned(Puppet puppet) { import core.memory : GC; GC.removeRoot(cast(void*)puppet); } ================================================ FILE: source/inochi2d/nio/scene.d ================================================ module inochi2d.nio.scene; import inochi2d.nio.staging; import inochi2d.nio.puppet; import inochi2d; import niobium; import numem; import nulib.collections; import nulib.math : min, max; /** An Inochi2D Scene hosted by Niobium. */ class NioScene { private: @nogc: NioDevice device_; NioCommandQueue queue_; weak_vector!NioPuppet puppets_; /// Render state NioStagingBuffer staging_; NioTexture maskTarget_; NioTexture[6][] renderTargets_; /// Updates the puppets and their vertex data. void updatePuppets(NioCommandBuffer cmdbuffer, float delta) { // 1. Update the staging buffer's size. size_t totalBufferSize = 0; foreach(ref NioPuppet puppet; puppets_[]) { puppet.update(delta); totalBufferSize += puppet.totalBufferSize; } if (totalBufferSize > staging_.size) staging_.resize(totalBufferSize); // Then fill the staging buffer and enqueue transfer commands. auto cmds = cmdbuffer.beginTransferPass(); cmds.insertBarrier(NioPipelineStage.transfer, NioPipelineStage.all); size_t vtxStart = 0; foreach(i, ref NioPuppet puppet; puppets_[]) { size_t vtxEnd = staging_.upload(vtxStart, cast(void[])puppet.vertices); size_t idxEnd = staging_.upload(vtxEnd, cast(void[])puppet.indices); cmds.copy( NioBufferSrcInfo( buffer: staging_.buffer, offset: cast(uint)vtxStart, length: cast(uint)(vtxEnd-vtxStart) ), NioBufferDstInfo( buffer: puppet.vertexBuffer, offset: 0, ) ); cmds.copy( NioBufferSrcInfo( buffer: staging_.buffer, offset: cast(uint)vtxEnd, length: cast(uint)(idxEnd-vtxEnd) ), NioBufferDstInfo( buffer: puppet.indexBuffer, offset: 0, ) ); vtxStart = idxEnd; } cmds.endEncoding(); } /// Function which draws an individual puppet into the scene. void drawPuppet(NioPuppet puppet) { } public: /** The Niobium device being used to render the scene. */ @property NioDevice device() => device_; /// Destructor ~this() { queue_.release(); staging_.release(); } /// Constructor this(NioDevice device) { this.device_ = device; this.queue_ = device.createQueue(NioCommandQueueDescriptor(32)); this.staging_ = nogc_new!NioStagingBuffer(device_); } /** Updates all of the puppets currently active in this scene, preparing all the puppets for rendering a frame. Params: delta = The time since the last frame. */ void update(float delta) { NioCommandBuffer cmdbuffer = queue_.fetch(); this.updatePuppets(cmdbuffer, delta); foreach(ref NioPuppet puppet; puppets_) { this.drawPuppet(puppet); } queue_.commit(cmdbuffer); cmdbuffer.await(); cmdbuffer.release(); } /** Blits the scene to the given target texture. Notes: This can be called multiple times with minimal overhead, as the internal drawing is done in $(D update). Params: target = The target to render the scene to. */ void blit(NioTexture target) { } } ================================================ FILE: source/inochi2d/nio/staging.d ================================================ module inochi2d.nio.staging; import nulib.collections; import niobium; import numem; /** A managed staging buffer. */ class NioStagingBuffer : NuRefCounted { private: @nogc: NioDevice device_; NioBuffer buffer_; size_t alignment_; /// Creates initial 32 mb buffer. void createBuffer() { buffer_ = device_.createBuffer(NioBufferDescriptor( storage: NioStorageMode.sharedStorage, usage: NioBufferUsage.transfer, size: 33_554_432 )); } public: /** The underlying staging buffer. */ @property NioBuffer buffer() => buffer_; /** Alignment of allocations in the buffer. */ @property size_t alignment() => alignment_; /** Size of the buffer. */ @property size_t size() => buffer_.size(); // Destructor ~this() { buffer_.release(); } /** Creates a new managed staging buffer. Params: device = The device that owns the staging buffer. alignment = The increments that the staging buffer will grow. */ this(NioDevice device, size_t alignment = 33_554_432) { this.device_ = device; this.alignment_ = alignment; this.createBuffer(); } /** Resizes the buffer. Params: newSize = The new size to request from the memory pool. Notes: The size will be aligned to $(D alignment). */ void resize(size_t newSize) { if (newSize > buffer_.size) { buffer_ = device_.createBuffer(NioBufferDescriptor( storage: NioStorageMode.sharedStorage, usage: NioBufferUsage.transfer, size: cast(uint)nu_alignup(newSize, alignment_) )); } } /** Uploads data to the buffer at the given offset. Params: offset = Offset into the staging buffer to upload to. data = The data to upload. Returns: The ending offset of the upload. */ ptrdiff_t upload(size_t offset, void[] data) { if (offset+data.length > this.size) return -1; if (auto mapped = buffer_.map()) { mapped[offset..offset+data.length] = data[0..$]; buffer_.unmap(); } return offset+data.length; } } ================================================ FILE: source/session/package.d ================================================ module session; public import session.widgets; ================================================ FILE: source/session/widgets/package.d ================================================ module session.widgets; public import session.widgets.scene; ================================================ FILE: source/session/widgets/scene.d ================================================ module session.widgets.scene; import inui.widgets; import inui.app; import inochi2d; import std.stdio : writeln; import std.file : exists; import inui.core.msgbox; /** The Inochi2D Scene */ class Scene : View { private: Puppet[] puppets; protected: override void onDocked(View to) { } public: /** Whether the view is "open" and being rendered. */ override @property bool isOpen() => true; this() { super("in_scene", "Scene"); this.styleClass = "scene"; } } ================================================ FILE: tl/placeholder.txt ================================================ This placeholder exists just so that it's present on GitHub ================================================ FILE: tl/template.pot ================================================ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-27 00:24+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: source/session/framesend.d:31 msgid "" "Could not start texture sharing, it will be disabled. Is the library missing?" msgstr "" #: source/session/framesend.d:32 msgid "Frame-sending started successfully!" msgstr "" #: source/session/panels/tracking.d:88 msgid "Reset" msgstr "" #: source/session/panels/tracking.d:92 msgid "Not tracked" msgstr "" #: source/session/panels/tracking.d:107 msgid "X" msgstr "" #: source/session/panels/tracking.d:112 msgid "Y" msgstr "" #: source/session/panels/tracking.d:117 msgid "Z" msgstr "" #: source/session/panels/tracking.d:122 msgid "Roll" msgstr "" #: source/session/panels/tracking.d:127 msgid "Pitch" msgstr "" #: source/session/panels/tracking.d:132 msgid "Yaw" msgstr "" #: source/session/panels/tracking.d:151 msgid "Inverse" msgstr "" #: source/session/panels/tracking.d:153 msgid "Dampen" msgstr "" #: source/session/panels/tracking.d:156 msgid "Tracking In" msgstr "" #: source/session/panels/tracking.d:183 msgid "Tracking Out" msgstr "" #: source/session/panels/tracking.d:198 msgid "Refresh" msgstr "" #: source/session/panels/tracking.d:205 msgid "Save to File" msgstr "" #: source/session/panels/tracking.d:225 msgid "No settings available." msgstr "" #: source/session/panels/tracking.d:230 msgid "No puppet selected" msgstr "" #: source/session/panels/tracking.d:235 msgid "Tracking" msgstr "" #: source/session/tracking/package.d:352 #, c-format msgid "%s (X)" msgstr "" #: source/session/tracking/package.d:355 #, c-format msgid "%s (Y)" msgstr "" #: source/session/tracking/package.d:358 #, c-format msgid "%s (Z)" msgstr "" #: source/session/tracking/package.d:361 #, c-format msgid "%s (Roll)" msgstr "" #: source/session/tracking/package.d:364 #, c-format msgid "%s (Pitch)" msgstr "" #: source/session/tracking/package.d:367 #, c-format msgid "%s (Yaw)" msgstr "" #: source/session/windows/main.d:46 source/session/windows/spaceedit.d:22 #: source/session/windows/spaceedit.d:181 msgid "Error" msgstr "" #: source/session/windows/main.d:75 msgid "File" msgstr "" #: source/session/windows/main.d:77 msgid "Exit" msgstr "" #: source/session/windows/main.d:84 msgid "View" msgstr "" #: source/session/windows/main.d:86 msgid "Panels" msgstr "" #: source/session/windows/main.d:97 msgid "Configuration" msgstr "" #: source/session/windows/main.d:99 source/session/windows/spaceedit.d:213 msgid "Virtual Spaces" msgstr "" #: source/session/windows/main.d:106 msgid "Plugins" msgstr "" #: source/session/windows/main.d:112 msgid "Help" msgstr "" #: source/session/windows/main.d:113 msgid "About" msgstr "" #: source/session/windows/main.d:122 msgid "Double-click to show/hide UI" msgstr "" #: source/session/windows/main.d:126 source/session/windows/main.d:128 msgid "Donate" msgstr "" #: source/session/windows/main.d:164 msgid "Inochi Session" msgstr "" #: source/session/windows/main.d:165 msgid "" "THIS IS BETA SOFTWARE\n" "\n" "This software is incomplete, please lower your expectations." msgstr "" #: source/session/windows/spaceedit.d:55 source/session/windows/spaceedit.d:70 msgid "Delete" msgstr "" #: source/session/windows/spaceedit.d:130 #: source/session/windows/spaceedit.d:195 msgid "" msgstr "" #: source/session/windows/spaceedit.d:138 msgid "No zone selected for editing..." msgstr "" #: source/session/windows/spaceedit.d:141 msgid "Zone Name" msgstr "" #: source/session/windows/spaceedit.d:150 msgid "Unset" msgstr "" #: source/session/windows/spaceedit.d:175 msgid "Save Changes" msgstr "" #: source/session/windows/spaceedit.d:206 msgid "Save" msgstr "" ================================================ FILE: vcvars.ps1 ================================================ function Invoke-VSDevEnvironment { $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" $installationPath = & $vswhere -prerelease -legacy -latest -property installationPath $Command = Join-Path $installationPath "Common7\Tools\vsdevcmd.bat" & "${env:COMSPEC}" /s /c "`"$Command`" -no_logo && set" | Foreach-Object { if ($_ -match '^([^=]+)=(.*)') { [System.Environment]::SetEnvironmentVariable($matches[1], $matches[2]) } } } Invoke-VSDevEnvironment