├── .editorconfig ├── .github ├── ISSUE_TEMPLATE │ ├── plugin_request.md │ ├── plugin_request_ja.md │ ├── script_request.md │ └── script_request_ja.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── check-update.yml │ ├── codeql-analysis.yml │ ├── dependabot-auto-merge.yml │ └── nodejs.yml ├── .gitignore ├── .husky └── pre-commit ├── .prettierignore ├── .prettierrc ├── .release-it.json ├── CONTRIBUTING.en.md ├── CONTRIBUTING.md ├── LICENSE ├── README.en.md ├── README.md ├── developer-id.md ├── docs ├── empty.zip ├── install-script.html ├── main.css └── package-sets-description.html ├── eslint.config.mjs ├── package.json ├── util ├── .gitignore ├── archive-name-pattern.json ├── check-convert.js ├── check-update.js ├── convert-2-3.js ├── format-json.js ├── generate-releases.js ├── lib │ ├── download.js │ ├── generateHash.js │ └── unzip.js ├── sort.js ├── sri.js └── update-mod.js ├── v1 ├── SPECIFICATION.md ├── data │ ├── core.xml │ ├── mod.xml │ └── packages_list.xml └── schema │ ├── au.xsd │ ├── core.xsd │ ├── mod.xsd │ └── packages_list.xsd ├── v2 ├── SPECIFICATION.md ├── data │ ├── convert.json │ ├── core.xml │ ├── mod.xml │ ├── packages.xml │ └── scripts.json └── schema │ ├── au.xsd │ ├── core.xsd │ ├── mod.xsd │ ├── packages.xsd │ └── scripts.json ├── v3 ├── SPECIFICATION.md ├── convert.json ├── core.json ├── list.json ├── package-sets.json ├── packages.json ├── packages │ └── tim.json └── scripts.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | tab_width= 4 10 | end_of_line = lf 11 | charset = utf-8 12 | trim_trailing_whitespace = true 13 | insert_final_newline = true 14 | 15 | [*.{xml,xsd}] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/plugin_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Plugin request 3 | about: Suggest or provide a plugin information for this project 4 | title: '' 5 | labels: plugin 6 | assignees: '' 7 | --- 8 | 9 | ## Name 10 | 11 | ## Overview 12 | 13 | ## Description 14 | 15 | ## Developer 16 | 17 | ## Homepage URL 18 | 19 | ## Download URL 20 | 21 | ## File Names 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/plugin_request_ja.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: プラグインリクエスト 3 | about: プラグインの情報提供や掲載の提案をします。 4 | title: '' 5 | labels: plugin 6 | assignees: '' 7 | --- 8 | 9 | ## 名前 10 | 11 | ## 概要 12 | 13 | ## 説明 14 | 15 | ## 開発者 16 | 17 | ## 紹介ページURL 18 | 19 | ## ダウンロードページURL 20 | 21 | ## ファイル名 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/script_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Script request 3 | about: Suggest or provide a script information for this project 4 | title: '' 5 | labels: script 6 | assignees: '' 7 | --- 8 | 9 | ## Name 10 | 11 | ## Overview 12 | 13 | ## Description 14 | 15 | ## Developer 16 | 17 | ## Homepage URL 18 | 19 | ## Download URL 20 | 21 | ## File Names 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/script_request_ja.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: スクリプトリクエスト 3 | about: スクリプトの情報提供や掲載の提案をします。 4 | title: '' 5 | labels: script 6 | assignees: '' 7 | --- 8 | 9 | ## 名前 10 | 11 | ## 概要 12 | 13 | ## 説明 14 | 15 | ## 開発者 16 | 17 | ## 紹介ページURL 18 | 19 | ## ダウンロードページURL 20 | 21 | ## ファイル名 22 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Description 4 | 5 | 6 | ## Related Issue 7 | 8 | 9 | 10 | 11 | 12 | ## How Has This Been Tested? 13 | 14 | 15 | 16 | 17 | ## Checklist: 18 | 19 | 20 | - [ ] Updated the modification date in `mod.xml`. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: 'npm' # See documentation for possible values 9 | directory: '/' # Location of package manifests 10 | schedule: 11 | interval: 'daily' 12 | groups: 13 | eslint: 14 | patterns: 15 | - '@eslint/*' 16 | - 'eslint*' 17 | 18 | - package-ecosystem: 'github-actions' 19 | directory: '/' 20 | schedule: 21 | interval: 'daily' 22 | -------------------------------------------------------------------------------- /.github/workflows/check-update.yml: -------------------------------------------------------------------------------- 1 | name: Check Update 2 | 3 | on: 4 | schedule: 5 | - cron: '43 20 * * *' 6 | workflow_dispatch: 7 | 8 | jobs: 9 | check: 10 | name: Check Update 11 | runs-on: windows-latest 12 | env: 13 | TZ: 'Asia/Tokyo' 14 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: actions/setup-node@v4 18 | with: 19 | node-version: 'lts/*' 20 | cache: yarn 21 | - run: yarn install --frozen-lockfile 22 | - run: yarn run check-update 23 | - name: Create Pull Request 24 | uses: peter-evans/create-pull-request@v7 25 | with: 26 | commit-message: Update packages data 27 | branch: create-pull-request/check-update 28 | delete-branch: true 29 | title: '[Update] Update packages data' 30 | body: | 31 | Update some packages data 32 | labels: enhancement 33 | assignees: hal-shu-sato 34 | reviewers: hal-shu-sato 35 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: 'CodeQL' 13 | 14 | on: 15 | push: 16 | branches: [main] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [main] 20 | schedule: 21 | - cron: '43 19 * * 5' 22 | workflow_dispatch: 23 | 24 | jobs: 25 | analyze: 26 | name: Analyze 27 | runs-on: ubuntu-latest 28 | permissions: 29 | actions: read 30 | contents: read 31 | security-events: write 32 | 33 | strategy: 34 | fail-fast: false 35 | matrix: 36 | language: ['javascript'] 37 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 38 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 39 | 40 | steps: 41 | - name: Checkout repository 42 | uses: actions/checkout@v4 43 | 44 | # Initializes the CodeQL tools for scanning. 45 | - name: Initialize CodeQL 46 | uses: github/codeql-action/init@v3 47 | with: 48 | languages: ${{ matrix.language }} 49 | # If you wish to specify custom queries, you can do so here or in a config file. 50 | # By default, queries listed here will override any specified in a config file. 51 | # Prefix the list here with "+" to use these queries and those in the config file. 52 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 53 | 54 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 55 | # If this step fails, then you should remove it and run the build manually (see below) 56 | - name: Autobuild 57 | uses: github/codeql-action/autobuild@v3 58 | 59 | # ℹ️ Command-line programs to run using the OS shell. 60 | # 📚 https://git.io/JvXDl 61 | 62 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 63 | # and modify them (or add more) to build your code if your project 64 | # uses a compiled language 65 | 66 | #- run: | 67 | # make bootstrap 68 | # make release 69 | 70 | - name: Perform CodeQL Analysis 71 | uses: github/codeql-action/analyze@v3 72 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: Dependabot auto-merge 2 | on: 3 | pull_request_review: 4 | types: 5 | - submitted 6 | 7 | permissions: 8 | contents: write 9 | pull-requests: write 10 | 11 | jobs: 12 | dependabot: 13 | name: Dependabot auto-merge 14 | if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' && github.event.review.state == 'approved' }} 15 | uses: hal-shu-sato/actions/.github/workflows/dependabot-auto-merge.yml@main 16 | with: 17 | pr_url: ${{ github.event.pull_request.html_url }} 18 | login: ${{ github.event.review.user.login }} 19 | secrets: 20 | token: ${{ secrets.GITHUB_TOKEN }} 21 | -------------------------------------------------------------------------------- /.github/workflows/nodejs.yml: -------------------------------------------------------------------------------- 1 | name: Node CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | workflow_dispatch: 9 | 10 | jobs: 11 | lint: 12 | name: Lint 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v4 16 | - uses: actions/setup-node@v4 17 | with: 18 | node-version: 'lts/*' 19 | cache: yarn 20 | - run: yarn install 21 | - run: yarn run lint 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | .env.production 76 | 77 | # parcel-bundler cache (https://parceljs.org/) 78 | .cache 79 | .parcel-cache 80 | 81 | # Next.js build output 82 | .next 83 | out 84 | 85 | # Nuxt.js build / generate output 86 | .nuxt 87 | dist 88 | 89 | # Gatsby files 90 | .cache/ 91 | # Comment in the public line in if your project uses Gatsby and not Next.js 92 | # https://nextjs.org/blog/next-9-1#public-directory-support 93 | # public 94 | 95 | # vuepress build output 96 | .vuepress/dist 97 | 98 | # Serverless directories 99 | .serverless/ 100 | 101 | # FuseBox cache 102 | .fusebox/ 103 | 104 | # DynamoDB Local files 105 | .dynamodb/ 106 | 107 | # TernJS port file 108 | .tern-port 109 | 110 | # Stores VSCode versions used for testing VSCode extensions 111 | .vscode-test 112 | 113 | # yarn v2 114 | .yarn/cache 115 | .yarn/unplugged 116 | .yarn/build-state.yml 117 | .yarn/install-state.gz 118 | .pnp.* 119 | 120 | .vscode/ 121 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | yarn lint-staged 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .github/*.md 2 | .github/**/*.md 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "plugins": ["prettier-plugin-packagejson"], 4 | "overrides": [ 5 | { 6 | "files": ["*.xsd"], 7 | "options": { 8 | "plugins": ["@prettier/plugin-xml"], 9 | "xmlWhitespaceSensitivity": "ignore" 10 | } 11 | }, 12 | { 13 | "files": ["*.json"], 14 | "options": { 15 | "singleQuote": false 16 | } 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "git": { 3 | "requireCleanWorkingDir": false, 4 | "requireUpstream": false, 5 | "commit": false, 6 | "tagAnnotation": "v${version}", 7 | "push": false 8 | }, 9 | "npm": false 10 | } 11 | -------------------------------------------------------------------------------- /CONTRIBUTING.en.md: -------------------------------------------------------------------------------- 1 | # Contribution 2 | 3 | [日本語](./CONTRIBUTING.md) 4 | 5 | Thank you for your interest in contributing to the data for AviUtl Package Manager! 6 | 7 | Here is a guide on how to contribute. 8 | 9 | ## Language Used 10 | 11 | This data has been created using JSON. 12 | 13 | The languages used are: 14 | 15 | - JSON 16 | 17 | ## Issues 18 | 19 | A template is provided for the following issues. You can use either English or Japanese. 20 | 21 | - Plugin request [English](https://github.com/team-apm/apm-data/issues/new?labels=plugin&template=plugin_request.md) [日本語](https://github.com/team-apm/apm-data/issues/new?labels=plugin&template=plugin_request_ja.md) 22 | - Script Request [English](https://github.com/team-apm/apm-data/issues/new?labels=script&template=script_request.md) [日本語](https://github.com/team-apm/apm-data/issues/new?labels=script&template=script_request_ja.md) 23 | 24 | Other Issues are also welcome. 25 | 26 | ## Pull Requests 27 | 28 | Pull Requests are also welcome. 29 | 30 | We accept the following types of pull requests. You don't need to make an Issue for basic Pull Requests. 31 | 32 | If you have a question about a new feature, improvement, or fix, or if the impact of a major new feature or change is significant, please make an Issue to discuss it. 33 | 34 | - Adding a new plugin/script 35 | - Changing the data format 36 | 37 | When the pull request is merged, your contribution will be added to the [Contributors list](https://github.com/team-apm/apm/graphs/contributors) and the code content will be [CC BY-NC -SA 4.0](./LICENSE). 38 | 39 | ## Confirmation of Modifications 40 | 41 | Try installing and uninstalling the added package by specifying the `v3` directory as the destination to get the data or the JSON file you edited as the destination to get the additional data from the `設定` tab of [AviUtl Package Manager](https://github.com/team-apm/apm). 42 | 43 | ## Directory Structure 44 | 45 | Place data JSON under `v3`. 46 | 47 | ```text 48 | └── v3 49 | ├── packages 50 | │ ├── xxxx.json 51 | │ └── yyyy.json 52 | ├── convert.json 53 | ├── core.json 54 | ├── list.json 55 | ├── package-sets.json 56 | ├── packages.json 57 | └── scripts.json 58 | ``` 59 | 60 | ## Commit Message Convention 61 | 62 | Currently, we don't have a clear specification because we don't output the update history, but you can follow Angular's Commit Message Format. 63 | 64 | - [conventional-changelog/packages/conventional-changelog-angular/README.md](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/README.md) 65 | 66 | ## Data Writing Style/Rules 67 | 68 | First, check the [SPECIFICATION](./v3/SPECIFICATION.md). 69 | 70 | Other things that are conventionally done are noted. 71 | 72 | - Packages are sorted alphabetically by ID. 73 | - For placement in the AviUtl folder, for plugins, we follow the developer's specifications in the README, etc. For scripts, place them in a separate folder for each author in the `script` folder. 74 | - If you specify GitHub Releases as `downloadURLs`, specify that the latest version (`releases/latest`) should be displayed. 75 | - For packages from developers with a large number of packages, separate the list. 76 | - The file to be the `target` of `integrity` is a file that is not to be edited. Files that are supposed to be edited, such as configuration files, are not specified. 77 | 78 | ### Linting 79 | 80 | We are using [ESLint](https://eslint.org/) for linting, and the settings are based on the [Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html). The contents are as follows. 81 | 82 | - ECMAScript 2020 can be used. 83 | - Basically, use `const` / `let` to declare variables. 84 | - Use `import` / `export` regarding modules. 85 | 86 | ### Formatting 87 | 88 | We are using [Prettier](https://prettier.io/) as the formatter, which is automatically executed at commit time. 89 | 90 | The settings to be applied are those written in [.editorconfig](./.editorconfig). 91 | 92 | ### For Users of Visual Studio Code 93 | 94 | To use the above features on the editor, we recommend installing the following extensions: 95 | 96 | - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) 97 | - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) 98 | - [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) 99 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution 2 | 3 | [English](./CONTRIBUTING.en.md) 4 | 5 | AviUtl Package Managerデータへのコントリビュートに興味を持っていただきありがとうございます!! 6 | 7 | コントリビュートの仕方についてガイドします。 8 | 9 | ## 使用言語 10 | 11 | このデータは、JSON形式で提供されています。 12 | 13 | 使用言語: 14 | 15 | - JSON 16 | 17 | ## Issues 18 | 19 | 以下のIssueは、テンプレートを用意しています。日本語でも英語でも構いません。 20 | 21 | - プラグインリクエスト (Plugin request) [日本語](https://github.com/team-apm/apm-data/issues/new?labels=plugin&template=plugin_request_ja.md) [English](https://github.com/team-apm/apm-data/issues/new?labels=plugin&template=plugin_request.md) 22 | - スクリプトリクエスト (Script request) [日本語](https://github.com/team-apm/apm-data/issues/new?labels=script&template=script_request_ja.md) [English](https://github.com/team-apm/apm-data/issues/new?labels=script&template=script_request.md) 23 | 24 | その他のIssueも大歓迎です。 25 | 26 | ## Pull Requests 27 | 28 | Pull Requestも大歓迎です。 29 | 30 | 以下のようなPull Requestを受け付けています。基本的なPull Requestは、Issueを立てなくても問題ありません。 31 | 32 | 新機能や改善、修正について、疑問がある場合や、大きな新機能や変更の影響が大きい場合は、一度Issueを立てて相談してください。 33 | 34 | - パッケージデータの追加 35 | - データ形式の変更 36 | 37 | Pull Requestがマージされた時点で、あなたの貢献が[Contributorsリスト](https://github.com/team-apm/apm-data/graphs/contributors)に追加され、コードの内容には[CC BY-NC-SA 4.0](./LICENSE)が適用されます。 38 | 39 | 40 | 41 | ## 修正の確認 42 | 43 | [AviUtl Package Manager](https://github.com/team-apm/apm)の`設定`タブから、データ取得先に`v3`フォルダを指定するか、追加データ取得先に編集したJSONファイルを指定して、追加したパッケージのインストールとアンインストールを試してください。 44 | 45 | ## ディレクトリ構造 46 | 47 | `v3`下にデータJSONを配置します。 48 | 49 | ```text 50 | └── v3 51 | ├── packages 52 | │ ├── xxxx.json 53 | │ └── yyyy.json 54 | ├── convert.json 55 | ├── core.json 56 | ├── list.json 57 | ├── package-sets.json 58 | ├── packages.json 59 | └── scripts.json 60 | ``` 61 | 62 | ## コミットメッセージ規約 63 | 64 | 現状、更新履歴を出力することが無いので明確に規定していませんが、AngularのCommit Message Formatに従うとよいでしょう。 65 | 66 | - [conventional-changelog/packages/conventional-changelog-angular/README.md](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/README.md) 67 | 68 | ## データの書き方・ルール 69 | 70 | まずは、[仕様書](./v3/SPECIFICATION.md)を確認します。 71 | 72 | その他、慣例的に行っていることを記します。 73 | 74 | - パッケージは、IDでアルファベット順にソートします。 75 | - AviUtlフォルダ内の配置は、プラグインの場合、README等に記載の開発者の指定に従います。スクリプトの場合、`script`フォルダ内で作者ごとにフォルダを分けて配置します。 76 | - `downloadURLs`として、GitHubのReleasesを指定する場合、`releases/latest`の最新バージョンを表示するように指定します。 77 | - パッケージ数が多い開発者のパッケージは、リストを切り分けます。 78 | - `integrity`の`target`とするファイルは、編集しないファイルを指定します。設定ファイルなどの編集を前提としたファイルは指定しません。 79 | 80 | ### リント 81 | 82 | リントに[ESLint](https://eslint.org/)を使用しており、[Google JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html)をベースに設定しています。内容は以下の通りです。 83 | 84 | - ECMAScript 2020を使用できます。 85 | - 変数の宣言には、基本的に`const` / `let`を使用します。 86 | - モジュールに関してには、`import` / `export`を使用します。 87 | 88 | ### フォーマット 89 | 90 | フォーマッターとして、[Prettier](https://prettier.io/)を使用しており、コミット時に自動実行されます。 91 | 92 | 適用される設定は、[.editorconfig](./.editorconfig)に書かれた内容です。 93 | 94 | ### Visual Studio Codeを利用している方へ 95 | 96 | 以上の機能をエディタ上で使うために、以下の拡張機能をインストールすることをおすすめします。 97 | 98 | - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) 99 | - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) 100 | - [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) 101 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-NonCommercial-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International 58 | Public License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-NonCommercial-ShareAlike 4.0 International Public License 63 | ("Public License"). To the extent this Public License may be 64 | interpreted as a contract, You are granted the Licensed Rights in 65 | consideration of Your acceptance of these terms and conditions, and the 66 | Licensor grants You such rights in consideration of benefits the 67 | Licensor receives from making the Licensed Material available under 68 | these terms and conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-NC-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution, NonCommercial, and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. NonCommercial means not primarily intended for or directed towards 126 | commercial advantage or monetary compensation. For purposes of 127 | this Public License, the exchange of the Licensed Material for 128 | other material subject to Copyright and Similar Rights by digital 129 | file-sharing or similar means is NonCommercial provided there is 130 | no payment of monetary compensation in connection with the 131 | exchange. 132 | 133 | l. Share means to provide material to the public by any means or 134 | process that requires permission under the Licensed Rights, such 135 | as reproduction, public display, public performance, distribution, 136 | dissemination, communication, or importation, and to make material 137 | available to the public including in ways that members of the 138 | public may access the material from a place and at a time 139 | individually chosen by them. 140 | 141 | m. Sui Generis Database Rights means rights other than copyright 142 | resulting from Directive 96/9/EC of the European Parliament and of 143 | the Council of 11 March 1996 on the legal protection of databases, 144 | as amended and/or succeeded, as well as other essentially 145 | equivalent rights anywhere in the world. 146 | 147 | n. You means the individual or entity exercising the Licensed Rights 148 | under this Public License. Your has a corresponding meaning. 149 | 150 | 151 | Section 2 -- Scope. 152 | 153 | a. License grant. 154 | 155 | 1. Subject to the terms and conditions of this Public License, 156 | the Licensor hereby grants You a worldwide, royalty-free, 157 | non-sublicensable, non-exclusive, irrevocable license to 158 | exercise the Licensed Rights in the Licensed Material to: 159 | 160 | a. reproduce and Share the Licensed Material, in whole or 161 | in part, for NonCommercial purposes only; and 162 | 163 | b. produce, reproduce, and Share Adapted Material for 164 | NonCommercial purposes only. 165 | 166 | 2. Exceptions and Limitations. For the avoidance of doubt, where 167 | Exceptions and Limitations apply to Your use, this Public 168 | License does not apply, and You do not need to comply with 169 | its terms and conditions. 170 | 171 | 3. Term. The term of this Public License is specified in Section 172 | 6(a). 173 | 174 | 4. Media and formats; technical modifications allowed. The 175 | Licensor authorizes You to exercise the Licensed Rights in 176 | all media and formats whether now known or hereafter created, 177 | and to make technical modifications necessary to do so. The 178 | Licensor waives and/or agrees not to assert any right or 179 | authority to forbid You from making technical modifications 180 | necessary to exercise the Licensed Rights, including 181 | technical modifications necessary to circumvent Effective 182 | Technological Measures. For purposes of this Public License, 183 | simply making modifications authorized by this Section 2(a) 184 | (4) never produces Adapted Material. 185 | 186 | 5. Downstream recipients. 187 | 188 | a. Offer from the Licensor -- Licensed Material. Every 189 | recipient of the Licensed Material automatically 190 | receives an offer from the Licensor to exercise the 191 | Licensed Rights under the terms and conditions of this 192 | Public License. 193 | 194 | b. Additional offer from the Licensor -- Adapted Material. 195 | Every recipient of Adapted Material from You 196 | automatically receives an offer from the Licensor to 197 | exercise the Licensed Rights in the Adapted Material 198 | under the conditions of the Adapter's License You apply. 199 | 200 | c. No downstream restrictions. You may not offer or impose 201 | any additional or different terms or conditions on, or 202 | apply any Effective Technological Measures to, the 203 | Licensed Material if doing so restricts exercise of the 204 | Licensed Rights by any recipient of the Licensed 205 | Material. 206 | 207 | 6. No endorsement. Nothing in this Public License constitutes or 208 | may be construed as permission to assert or imply that You 209 | are, or that Your use of the Licensed Material is, connected 210 | with, or sponsored, endorsed, or granted official status by, 211 | the Licensor or others designated to receive attribution as 212 | provided in Section 3(a)(1)(A)(i). 213 | 214 | b. Other rights. 215 | 216 | 1. Moral rights, such as the right of integrity, are not 217 | licensed under this Public License, nor are publicity, 218 | privacy, and/or other similar personality rights; however, to 219 | the extent possible, the Licensor waives and/or agrees not to 220 | assert any such rights held by the Licensor to the limited 221 | extent necessary to allow You to exercise the Licensed 222 | Rights, but not otherwise. 223 | 224 | 2. Patent and trademark rights are not licensed under this 225 | Public License. 226 | 227 | 3. To the extent possible, the Licensor waives any right to 228 | collect royalties from You for the exercise of the Licensed 229 | Rights, whether directly or through a collecting society 230 | under any voluntary or waivable statutory or compulsory 231 | licensing scheme. In all other cases the Licensor expressly 232 | reserves any right to collect such royalties, including when 233 | the Licensed Material is used other than for NonCommercial 234 | purposes. 235 | 236 | 237 | Section 3 -- License Conditions. 238 | 239 | Your exercise of the Licensed Rights is expressly made subject to the 240 | following conditions. 241 | 242 | a. Attribution. 243 | 244 | 1. If You Share the Licensed Material (including in modified 245 | form), You must: 246 | 247 | a. retain the following if it is supplied by the Licensor 248 | with the Licensed Material: 249 | 250 | i. identification of the creator(s) of the Licensed 251 | Material and any others designated to receive 252 | attribution, in any reasonable manner requested by 253 | the Licensor (including by pseudonym if 254 | designated); 255 | 256 | ii. a copyright notice; 257 | 258 | iii. a notice that refers to this Public License; 259 | 260 | iv. a notice that refers to the disclaimer of 261 | warranties; 262 | 263 | v. a URI or hyperlink to the Licensed Material to the 264 | extent reasonably practicable; 265 | 266 | b. indicate if You modified the Licensed Material and 267 | retain an indication of any previous modifications; and 268 | 269 | c. indicate the Licensed Material is licensed under this 270 | Public License, and include the text of, or the URI or 271 | hyperlink to, this Public License. 272 | 273 | 2. You may satisfy the conditions in Section 3(a)(1) in any 274 | reasonable manner based on the medium, means, and context in 275 | which You Share the Licensed Material. For example, it may be 276 | reasonable to satisfy the conditions by providing a URI or 277 | hyperlink to a resource that includes the required 278 | information. 279 | 3. If requested by the Licensor, You must remove any of the 280 | information required by Section 3(a)(1)(A) to the extent 281 | reasonably practicable. 282 | 283 | b. ShareAlike. 284 | 285 | In addition to the conditions in Section 3(a), if You Share 286 | Adapted Material You produce, the following conditions also apply. 287 | 288 | 1. The Adapter's License You apply must be a Creative Commons 289 | license with the same License Elements, this version or 290 | later, or a BY-NC-SA Compatible License. 291 | 292 | 2. You must include the text of, or the URI or hyperlink to, the 293 | Adapter's License You apply. You may satisfy this condition 294 | in any reasonable manner based on the medium, means, and 295 | context in which You Share Adapted Material. 296 | 297 | 3. You may not offer or impose any additional or different terms 298 | or conditions on, or apply any Effective Technological 299 | Measures to, Adapted Material that restrict exercise of the 300 | rights granted under the Adapter's License You apply. 301 | 302 | 303 | Section 4 -- Sui Generis Database Rights. 304 | 305 | Where the Licensed Rights include Sui Generis Database Rights that 306 | apply to Your use of the Licensed Material: 307 | 308 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 309 | to extract, reuse, reproduce, and Share all or a substantial 310 | portion of the contents of the database for NonCommercial purposes 311 | only; 312 | 313 | b. if You include all or a substantial portion of the database 314 | contents in a database in which You have Sui Generis Database 315 | Rights, then the database in which You have Sui Generis Database 316 | Rights (but not its individual contents) is Adapted Material, 317 | including for purposes of Section 3(b); and 318 | 319 | c. You must comply with the conditions in Section 3(a) if You Share 320 | all or a substantial portion of the contents of the database. 321 | 322 | For the avoidance of doubt, this Section 4 supplements and does not 323 | replace Your obligations under this Public License where the Licensed 324 | Rights include other Copyright and Similar Rights. 325 | 326 | 327 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 328 | 329 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 330 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 331 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 332 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 333 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 334 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 335 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 336 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 337 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 338 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 339 | 340 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 341 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 342 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 343 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 344 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 345 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 346 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 347 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 348 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 349 | 350 | c. The disclaimer of warranties and limitation of liability provided 351 | above shall be interpreted in a manner that, to the extent 352 | possible, most closely approximates an absolute disclaimer and 353 | waiver of all liability. 354 | 355 | 356 | Section 6 -- Term and Termination. 357 | 358 | a. This Public License applies for the term of the Copyright and 359 | Similar Rights licensed here. However, if You fail to comply with 360 | this Public License, then Your rights under this Public License 361 | terminate automatically. 362 | 363 | b. Where Your right to use the Licensed Material has terminated under 364 | Section 6(a), it reinstates: 365 | 366 | 1. automatically as of the date the violation is cured, provided 367 | it is cured within 30 days of Your discovery of the 368 | violation; or 369 | 370 | 2. upon express reinstatement by the Licensor. 371 | 372 | For the avoidance of doubt, this Section 6(b) does not affect any 373 | right the Licensor may have to seek remedies for Your violations 374 | of this Public License. 375 | 376 | c. For the avoidance of doubt, the Licensor may also offer the 377 | Licensed Material under separate terms or conditions or stop 378 | distributing the Licensed Material at any time; however, doing so 379 | will not terminate this Public License. 380 | 381 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 382 | License. 383 | 384 | 385 | Section 7 -- Other Terms and Conditions. 386 | 387 | a. The Licensor shall not be bound by any additional or different 388 | terms or conditions communicated by You unless expressly agreed. 389 | 390 | b. Any arrangements, understandings, or agreements regarding the 391 | Licensed Material not stated herein are separate from and 392 | independent of the terms and conditions of this Public License. 393 | 394 | 395 | Section 8 -- Interpretation. 396 | 397 | a. For the avoidance of doubt, this Public License does not, and 398 | shall not be interpreted to, reduce, limit, restrict, or impose 399 | conditions on any use of the Licensed Material that could lawfully 400 | be made without permission under this Public License. 401 | 402 | b. To the extent possible, if any provision of this Public License is 403 | deemed unenforceable, it shall be automatically reformed to the 404 | minimum extent necessary to make it enforceable. If the provision 405 | cannot be reformed, it shall be severed from this Public License 406 | without affecting the enforceability of the remaining terms and 407 | conditions. 408 | 409 | c. No term or condition of this Public License will be waived and no 410 | failure to comply consented to unless expressly agreed to by the 411 | Licensor. 412 | 413 | d. Nothing in this Public License constitutes or may be interpreted 414 | as a limitation upon, or waiver of, any privileges and immunities 415 | that apply to the Licensor or You, including from the legal 416 | processes of any jurisdiction or authority. 417 | 418 | ======================================================================= 419 | 420 | Creative Commons is not a party to its public 421 | licenses. Notwithstanding, Creative Commons may elect to apply one of 422 | its public licenses to material it publishes and in those instances 423 | will be considered the “Licensor.” The text of the Creative Commons 424 | public licenses is dedicated to the public domain under the CC0 Public 425 | Domain Dedication. Except for the limited purpose of indicating that 426 | material is shared under a Creative Commons public license or as 427 | otherwise permitted by the Creative Commons policies published at 428 | creativecommons.org/policies, Creative Commons does not authorize the 429 | use of the trademark "Creative Commons" or any other trademark or logo 430 | of Creative Commons without its prior written consent including, 431 | without limitation, in connection with any unauthorized modifications 432 | to any of its public licenses or any other arrangements, 433 | understandings, or agreements concerning use of licensed material. For 434 | the avoidance of doubt, this paragraph does not form part of the 435 | public licenses. 436 | 437 | Creative Commons may be contacted at creativecommons.org. 438 | 439 | -------------------------------------------------------------------------------- /README.en.md: -------------------------------------------------------------------------------- 1 | # apm-data 2 | 3 | [![Node CI](https://github.com/team-apm/apm-data/actions/workflows/nodejs.yml/badge.svg)](https://github.com/team-apm/apm-data/actions/workflows/nodejs.yml) 4 | [![jsDelivr](https://data.jsdelivr.com/v1/package/gh/team-apm/apm-data/badge?style=rounded)](https://www.jsdelivr.com/package/gh/team-apm/apm-data) 5 | 6 | Data repository for [AviUtl Package Manager](https://github.com/team-apm/apm) 7 | 8 | ## Data Structure 9 | 10 | See the specification document for each version. 11 | 12 | - [v1](./v1/SPECIFICATION.md) 13 | - [v2](./v2/SPECIFICATION.md) 14 | - [v3](./v3/SPECIFICATION.md) 15 | 16 | ## Developer ID 17 | 18 | The developer ID assigned by Team apm can be found in [developer-id.md](./developer-id.md) (Japanese). 19 | 20 | ## Contribution 21 | 22 | See [CONTRIBUTING.en.md](./CONTRIBUTING.en.md). 23 | 24 | ## License 25 | 26 | [CC BY-NC-SA 4.0](./LICENSE) 27 | 28 | [![Creative Commons License](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png) 29 | ](https://creativecommons.org/licenses/by-nc-sa/4.0/) 30 | 31 | This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/) 32 | 33 | ## Contributor 34 | 35 | [@hal-shu-sato](https://github.com/hal-shu-sato) 36 | [@mitosagi](https://github.com/mitosagi) 37 | [@yumetodo](https://github.com/yumetodo) 38 | [@karoterra](https://github.com/karoterra) 39 | [@glyzinieh](https://github.com/glyzinieh) 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # apm-data 2 | 3 | [![Node CI](https://github.com/team-apm/apm-data/actions/workflows/nodejs.yml/badge.svg)](https://github.com/team-apm/apm-data/actions/workflows/nodejs.yml) 4 | [![jsDelivr](https://data.jsdelivr.com/v1/package/gh/team-apm/apm-data/badge?style=rounded)](https://www.jsdelivr.com/package/gh/team-apm/apm-data) 5 | 6 | [AviUtl Package Manager](https://github.com/team-apm/apm)のデータリポジトリ 7 | 8 | ## データ構造 9 | 10 | 各バージョンの仕様書をご覧ください。 11 | 12 | - [v1](./v1/SPECIFICATION.md) 13 | - [v2](./v2/SPECIFICATION.md) 14 | - [v3](./v3/SPECIFICATION.md) 15 | 16 | ## 開発者ID 17 | 18 | Team apmが付与した開発者IDは、[developer-id.md](./developer-id.md)をご覧ください。 19 | 20 | ## コントリビューション 21 | 22 | [CONTRIBUTING.md](./CONTRIBUTING.md)をご覧ください。 23 | 24 | ## ライセンス 25 | 26 | [CC BY-NC-SA 4.0](./LICENSE) 27 | 28 | [![Creative Commons License](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png) 29 | ](https://creativecommons.org/licenses/by-nc-sa/4.0/) 30 | 31 | この作品は、[クリエイティブ・コモンズ 表示 - 非営利 - 継承 4.0 国際 ライセンス](https://creativecommons.org/licenses/by-nc-sa/4.0/)の下に提供されています。 32 | 33 | ## コントリビューター 34 | 35 | [@hal-shu-sato](https://github.com/hal-shu-sato) 36 | [@mitosagi](https://github.com/mitosagi) 37 | [@yumetodo](https://github.com/yumetodo) 38 | [@karoterra](https://github.com/karoterra) 39 | [@pklion](https://github.com/pklion) 40 | **arataku** 41 | [@shumm7](https://github.com/shumm7) 42 | [@glyzinieh](https://github.com/glyzinieh) 43 | **JI** 44 | [@infoengine1337](https://github.com/infoengine1337) 45 | **sakana** 46 | **匿名だれか** 47 | **みまらか** 48 | [@staka625](https://github.com/staka625) 49 | **mill-yama** 50 | **ひがめし** 51 | **ziaenso** 52 | **sh0u** 53 | **SAS新聞** 54 | **手力男命** 55 | [@mikan-megane](https://github.com/mikan-megane) 56 | **ixas** 57 | -------------------------------------------------------------------------------- /developer-id.md: -------------------------------------------------------------------------------- 1 | # 開発者ID一覧 2 | 3 | AviUtl Package Manager用のパッケージデータは、パッケージIDを共有することによって、データ取得先を変えても互換性を保つことができます。 4 | 5 | apm-dataでは、`<開発者ID>/<ファイル名など>`によって、IDを定めます。この開発者IDは、Team apmが付与しています。 6 | 7 | 以下は、その一覧です。IDのアルファベット順で並んでいます。 8 | 9 | 目次 10 | 11 | - [開発者ID一覧](#開発者id一覧) 12 | - [しし/りっちゃん `AiosCiao`](#ししりっちゃん-aiosciao) 13 | - [amate `amate`](#amate-amate) 14 | - [Aodaruma `aodaruma`](#aodaruma-aodaruma) 15 | - [aoytsk `aoytsk`](#aoytsk-aoytsk) 16 | - [yu_noimage\_ `auls`](#yu_noimage_-auls) 17 | - [AviUtl実験室 `AviUtlLab`](#aviutl実験室-aviutllab) 18 | - [微熱 `binetsu`](#微熱-binetsu) 19 | - [ePi `ePi`](#epi-epi) 20 | - [gometh `gometh`](#gometh-gometh) 21 | - [禿げガル `hage`](#禿げガル-hage) 22 | - [蛇色 `hebiiro`](#蛇色-hebiiro) 23 | - [白水 `hksy`](#白水-hksy) 24 | - [HolyWu `HolyWu`](#holywu-holywu) 25 | - [jigno `jigno`](#jigno-jigno) 26 | - [kaisatsu `kaisatsu`](#kaisatsu-kaisatsu) 27 | - [ウサギ/カメ `kame`](#ウサギカメ-kame) 28 | - [karoterra `karoterra`](#karoterra-karoterra) 29 | - [khsk `khsk`](#khsk-khsk) 30 | - [蝙蝠の目 `kumrnm`](#蝙蝠の目-kumrnm) 31 | - [Maverick Tse `MaverickTse`](#maverick-tse-mavericktse) 32 | - [morgue `morgue`](#morgue-morgue) 33 | - [Mr-Ojii `MrOjii`](#mr-ojii-mrojii) 34 | - [mtripg6666tdr `mtripg6666tdr`](#mtripg6666tdr-mtripg6666tdr) 35 | - [謎の生物 `nazono`](#謎の生物-nazono) 36 | - [Nure `nure500`](#nure-nure500) 37 | - [oov `oov`](#oov-oov) 38 | - [ぽっぷん `pop4bit`](#ぽっぷん-pop4bit) 39 | - [Respectrum93 `respectrum93`](#respectrum93-respectrum93) 40 | - [rigaya `rigaya`](#rigaya-rigaya) 41 | - [rikky `rikky`](#rikky-rikky) 42 | - [さつき `satsuki`](#さつき-satsuki) 43 | - [星野なたね `SEED264`](#星野なたね-seed264) 44 | - [パッケージセット用 `sets`](#パッケージセット用-sets) 45 | - [しゅう `shummg`](#しゅう-shummg) 46 | - [鈴音 `suzune`](#鈴音-suzune) 47 | - [テツ `tetu`](#テツ-tetu) 48 | - [てつ(XIAO) `tetsuXIAO`](#てつxiao-tetsuxiao) 49 | - [はち `tihagura`](#はち-tihagura) 50 | - [ティム `tim`](#ティム-tim) 51 | - [うえぽん `uepon`](#うえぽん-uepon) 52 | - [UndoFish `UndoFish`](#undofish-undofish) 53 | - [VFR maniac `VFRmaniac`](#vfr-maniac-vfrmaniac) 54 | - [W.Dee `WDee`](#wdee-wdee) 55 | - [柳 `yanagi`](#柳-yanagi) 56 | - [野生の木屋P `yaseiNoMokuyaP`](#野生の木屋p-yaseinomokuyap) 57 | - [yumetodo `yumetodo`](#yumetodo-yumetodo) 58 | - [編集者向け情報](#編集者向け情報) 59 | - [関連サイトの掲載順](#関連サイトの掲載順) 60 | 61 | ## しし/りっちゃん `AiosCiao` 62 | 63 | - GitHub: 64 | - ニコニコ: 65 | 66 | ## amate `amate` 67 | 68 | - GitHub: 69 | - ニコニコ: 70 | - Twitter: 71 | 72 | ## Aodaruma `aodaruma` 73 | 74 | - サイト: 75 | - GitHub: 76 | - ニコニコ: 77 | - YouTube: 78 | - Twitter: 79 | 80 | ## aoytsk `aoytsk` 81 | 82 | - サイト: 83 | - Twitter: 84 | 85 | ## yu_noimage\_ `auls` 86 | 87 | - サイト: 88 | - Twitter: 89 | 90 | ## AviUtl実験室 `AviUtlLab` 91 | 92 | - サイト: 93 | 94 | ## 微熱 `binetsu` 95 | 96 | - ニコニコ: 97 | 98 | ## ePi `ePi` 99 | 100 | - Scrapbox: 101 | - ニコニコ: 102 | - YouTube: 103 | - Twitter: 104 | - Misskey.io: 105 | 106 | ## gometh `gometh` 107 | 108 | - ニコニコ: 109 | 110 | ## 禿げガル `hage` 111 | 112 | - ニコニコ: 113 | 114 | ## 蛇色 `hebiiro` 115 | 116 | - サイト: 117 | - GitHub: 118 | - ニコニコ: 119 | - YouTube: 120 | - Twitter: 121 | 122 | ## 白水 `hksy` 123 | 124 | プラグイン・スクリプトを公開停止。 125 | 126 | - 有志によるミラー: 127 | 128 | ## HolyWu `HolyWu` 129 | 130 | - GitHub: 131 | 132 | ## jigno `jigno` 133 | 134 | - サイト: 135 | - YouTube: 136 | - Twitter: 137 | 138 | ## kaisatsu `kaisatsu` 139 | 140 | - ニコニコ: 141 | - Twitter: 142 | 143 | ## ウサギ/カメ `kame` 144 | 145 | - サイト: 146 | - ニコニコ: 147 | 148 | ## karoterra `karoterra` 149 | 150 | - GitHub: 151 | - ニコニコ: 152 | - Twitter: 153 | 154 | ## khsk `khsk` 155 | 156 | - GitHub: 157 | - Qiita: 158 | 159 | ## 蝙蝠の目 `kumrnm` 160 | 161 | - GitHub: 162 | - ニコニコ: 163 | - Twitter: 164 | 165 | ## Maverick Tse `MaverickTse` 166 | 167 | - サイト: 168 | - ニコニコ: 169 | - Twitter: 170 | 171 | ## morgue `morgue` 172 | 173 | - サイト: 174 | 175 | ## Mr-Ojii `MrOjii` 176 | 177 | - GitHub: 178 | - Scrapbox: 179 | - ニコニコ: 180 | - YouTube: 181 | - Twitter: 182 | - Misskey.io: 183 | 184 | ## mtripg6666tdr `mtripg6666tdr` 185 | 186 | - サイト: 187 | - GitHub: 188 | - YouTube: 189 | 190 | ## 謎の生物 `nazono` 191 | 192 | - GitHub: 193 | - ニコニコ: 194 | - YouTube: 195 | - Twitter: 196 | 197 | ## Nure `nure500` 198 | 199 | - Twitter: 200 | 201 | ## oov `oov` 202 | 203 | - サイト: 204 | - GitHub: 205 | - ニコニコ: 206 | - Twitter: 207 | 208 | ## ぽっぷん `pop4bit` 209 | 210 | - サイト: 211 | - Twitter: 212 | 213 | ## Respectrum93 `respectrum93` 214 | 215 | - ニコニコ: 216 | - Twitter: 217 | 218 | ## rigaya `rigaya` 219 | 220 | - サイト: 221 | - GitHub: 222 | - Twitter: 223 | 224 | ## rikky `rikky` 225 | 226 | - サイト: 227 | - ニコニコ: 228 | - Twitter: 229 | 230 | ## さつき `satsuki` 231 | 232 | - ニコニコ: 233 | - Twitter: 234 | 235 | ## 星野なたね `SEED264` 236 | 237 | - GitHub: 238 | - Twitter: 239 | 240 | ## パッケージセット用 `sets` 241 | 242 | パッケージセットのために、Team apmが予約しています。 243 | 244 | ## しゅう `shummg` 245 | 246 | - サイト: 247 | - GitHub: 248 | - YouTube: 249 | 250 | ## 鈴音 `suzune` 251 | 252 | - GitHub: 253 | - ニコニコ: 254 | - Twitter: 255 | 256 | ## テツ `tetu` 257 | 258 | - サイト: 259 | - ニコニコ: 260 | 261 | ## てつ(XIAO) `tetsuXIAO` 262 | 263 | - ニコニコ: 264 | - YouTube: 265 | - Twitter: 266 | 267 | ## はち `tihagura` 268 | 269 | - ニコニコ: 270 | - Twitter: 271 | 272 | ## ティム `tim` 273 | 274 | - サイト: 275 | - ニコニコ: 276 | - YouTube: 277 | - Twitter: 278 | 279 | ## うえぽん `uepon` 280 | 281 | - サイト: 282 | - ブログ: 283 | 284 | ## UndoFish `UndoFish` 285 | 286 | - ニコニコ: 287 | - Twitter: 288 | 289 | ## VFR maniac `VFRmaniac` 290 | 291 | mukenというハンドルネームも使う。 292 | 293 | - サイト: 294 | - GitHub: 295 | - Twitter: 296 | 297 | ## W.Dee `WDee` 298 | 299 | - サイト: 300 | - GitHub: 301 | 302 | ## 柳 `yanagi` 303 | 304 | - サイト: 305 | - ニコニコ: 306 | - Twitter: 307 | 308 | ## 野生の木屋P `yaseiNoMokuyaP` 309 | 310 | - ニコニコ: 311 | 312 | ## yumetodo `yumetodo` 313 | 314 | - サイト: 315 | - GitHub: 316 | - Qiita: 317 | - ニコニコ: 318 | - YouTube: 319 | - Twitter: 320 | - misskey.dev: 321 | 322 | ## 編集者向け情報 323 | 324 | VS Codeを利用している方は、[Markdown All in One](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)で目次が自動更新されます。 325 | 326 | ### 関連サイトの掲載順 327 | 328 | - サイト 329 | - GitHub 330 | - Scrapbox 331 | - Qiita 332 | - ニコニコ 333 | - YouTube 334 | - Twitter 335 | - MastodonやMisskeyなど 336 | -------------------------------------------------------------------------------- /docs/empty.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-apm/apm-data/7125dc0ae3b7f9f6fab5a5a26d8d1a0d0c2b58f2/docs/empty.zip -------------------------------------------------------------------------------- /docs/install-script.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | AviUtl Package Manager 16 | 17 | 18 |
19 |

スクリプトのインストール

20 |
21 |

作者別

22 | 41 |
42 | 43 |
44 |

その他のスクリプト

45 | 50 |
51 |
52 | 53 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /docs/main.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | :root { 4 | --font-family-sans-serif: 5 | 'Helvetica Neue', 'Helvetica', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 6 | 'Arial', 'Meiryo', sans-serif; 7 | --font-family-serif: 8 | 'Times New Roman', 'YuMincho', 'Hiragino Mincho ProN', 'Yu Mincho', 9 | 'MS PMincho', serif; 10 | --bs-border-radius: 0.2rem; 11 | } 12 | body { 13 | font-family: 14 | 'Helvetica Neue', 'Helvetica', 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 15 | 'Arial', 'Meiryo', sans-serif; 16 | } 17 | .btn-primary { 18 | --bs-btn-disabled-bg: #0b5ed7; 19 | --bs-btn-disabled-border-color: #0a58ca; 20 | --bs-btn-bg: #0b5ed7; 21 | --bs-btn-border-color: #0a58ca; 22 | --bs-btn-hover-bg: #0a58ca; 23 | --bs-btn-hover-border-color: #0a53be; 24 | } 25 | -------------------------------------------------------------------------------- /docs/package-sets-description.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | パッケージセットのインストール 16 | 17 | 18 |
19 |
20 |

21 | 下の「続ける」ボタンを押すと、必要なパッケージの一覧が説明欄の右側に表示されます。表示されたそれぞれの名前をクリックすることで対応するパッケージをAviUtlに追加できます。 22 |

23 |
24 | 続ける 27 |
28 | 29 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import pluginJs from '@eslint/js'; 2 | import eslintConfigPrettier from 'eslint-config-prettier'; 3 | import globals from 'globals'; 4 | 5 | export default [ 6 | { 7 | ignores: ['node_modules/**/*'], 8 | }, 9 | pluginJs.configs.recommended, 10 | { 11 | languageOptions: { 12 | globals: { 13 | ...globals.node, 14 | }, 15 | ecmaVersion: 2020, 16 | }, 17 | rules: { 18 | 'prefer-arrow-callback': 'error', 19 | }, 20 | }, 21 | eslintConfigPrettier, 22 | ]; 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "apm-data", 3 | "version": "1.0.0", 4 | "private": true, 5 | "repository": "https://github.com/hal-shu-sato/apm-data.git", 6 | "license": "CC BY-NC-SA 4.0", 7 | "author": "ato lash ", 8 | "type": "module", 9 | "scripts": { 10 | "check-convert": "node util/check-convert.js", 11 | "check-update": "node util/check-update.js", 12 | "convert-2-3": "run-p convert-2-3:*", 13 | "convert-2-3:core": "node util/convert-2-3.js --core", 14 | "convert-2-3:mod": "node util/convert-2-3.js --mod", 15 | "convert-2-3:packages": "node util/convert-2-3.js --packages", 16 | "fix": "run-s fix:prettier fix:eslint", 17 | "fix:eslint": "eslint --fix .", 18 | "fix:prettier": "prettier --write .", 19 | "format": "node util/format-json.js", 20 | "generate-releases": "node util/generate-releases.js", 21 | "lint": "run-s lint:prettier lint:eslint lint:jsonschema", 22 | "lint:eslint": "eslint --fix-dry-run .", 23 | "lint:jsonschema": "ajv -s node_modules/apm-schema/v3/schema/core.json -d v3/core.json && ajv -s node_modules/apm-schema/v3/schema/packages.json -d v3/packages.json && ajv -s node_modules/apm-schema/v3/schema/scripts.json -d v3/scripts.json && ajv -c ajv-formats -s node_modules/apm-schema/v3/schema/list.json -d v3/list.json && ajv -s node_modules/apm-schema/v3/schema/convert.json -d v3/convert.json", 24 | "lint:prettier": "prettier --check .", 25 | "mod-convert": "node util/update-mod.js --convert", 26 | "mod-core": "node util/update-mod.js --core", 27 | "mod-packages": "node util/update-mod.js --packages", 28 | "mod-scripts": "node util/update-mod.js --scripts", 29 | "prepare": "husky", 30 | "release": "release-it", 31 | "sri": "node util/sri.js" 32 | }, 33 | "lint-staged": { 34 | "*.js": [ 35 | "prettier --write", 36 | "eslint --fix" 37 | ], 38 | "*.{json,html,css,md,xml,xsd}": "prettier --write" 39 | }, 40 | "devDependencies": { 41 | "@eslint/js": "^9.28.0", 42 | "@octokit/rest": "^22.0.0", 43 | "@prettier/plugin-xml": "^3.4.1", 44 | "7zip-bin": "^5.2.0", 45 | "ajv-cli": "^5.0.0", 46 | "ajv-formats": "^3.0.1", 47 | "apm-schema": "team-apm/apm-schema#v3.3.0", 48 | "chalk": "^5.4.1", 49 | "clipboardy": "^4.0.0", 50 | "compare-versions": "^6.1.1", 51 | "eslint": "^9.28.0", 52 | "eslint-config-prettier": "^10.1.5", 53 | "fast-xml-parser": "^5.2.4", 54 | "fs-extra": "^11.3.0", 55 | "globals": "^16.2.0", 56 | "husky": "^9.1.7", 57 | "lint-staged": "^16.1.0", 58 | "node-7z": "^3.0.0", 59 | "npm-run-all2": "^8.0.4", 60 | "prettier": "^3.5.3", 61 | "prettier-plugin-packagejson": "^2.5.15", 62 | "release-it": "^19.0.3", 63 | "ssri": "^12.0.0" 64 | }, 65 | "packageManager": "yarn@1.22.22" 66 | } 67 | -------------------------------------------------------------------------------- /util/.gitignore: -------------------------------------------------------------------------------- 1 | temp 2 | -------------------------------------------------------------------------------- /util/archive-name-pattern.json: -------------------------------------------------------------------------------- 1 | { 2 | "amate/InputPipePlugin": "InputPipePlugin_[0-9\\.]+", 3 | "amate/MFVideoReader": "MFVideoReader_[0-9\\.]+", 4 | "amate/PropertyWindowFixerPlugin": "PropertyWindowFixerPlugin_[0-9\\.]+", 5 | "ePi/patch": "patch_r[0-9]+", 6 | "hebiiro/adjust": "AdjustLastFrame[0-9\\.]+", 7 | "hebiiro/DarkenWindow": "DarkenWindow[0-9\\.]+", 8 | "hebiiro/DragFilter": "DragFilter[0-9\\.]+", 9 | "hebiiro/OptimizeEditBox": "OptimizeEditBox[0-9\\.]+", 10 | "#hebiiro/SelectAliasFolder": "SelectAliasFolder[0-9\\.]+", 11 | "hebiiro/SelectFavoriteFont": "SelectFavoriteFont[0-9\\.]+", 12 | "hebiiro/ShowWaveform": "ShowWaveform[0-9\\.]+", 13 | "hebiiro/SplitWindow": "SplitWindow[0-9\\.]+", 14 | "#hebiiro/SwitchSettings": "SwitchSettings[0-9\\.]+", 15 | "hebiiro/UniteWindow": "UniteWindow[0-9\\.]+", 16 | "karoterra/aviutlWaveformPreview": "aviutl_WaveformPreview_v[0-9\\.]+", 17 | "karoterra/bend": "aviutl-Bend_v[0-9\\.]+", 18 | "karoterra/DynamicPolygon": "aviutl-DynamicPolygon_v[0-9\\.]+", 19 | "karoterra/OilPainting": "aviutl-OilPainting_v[0-9\\.]+", 20 | "karoterra/MarkdownEX": "aviutl-markdownex-v[0-9\\.]+", 21 | "karoterra/ShowLimit": "aviutl_ShowLimit_v[0-9\\.]+", 22 | "khsk/LocalFontPlugin": "localfont", 23 | "mtripg6666tdr/aviutlrpc": "aviutl_rpc_v[0-9\\.]+", 24 | "oov/aviutlBrowser": "aviutl_browser_v[0-9\\.]+", 25 | "oov/aviutlBrowserMinecraftSkin": "aviutl_browser_minecraft_skin_[0-9\\.]+", 26 | "oov/GCMZDrops": "gcmzdrops_v[0-9\\.]+(beta[0-9]+)?", 27 | "oov/bridge": "aviutl_bridge_v[0-9\\.]+", 28 | "oov/prima": "aviutl_prima_v[0-9\\.]+", 29 | "oov/PSDToolKit": "psdtoolkit_v[0-9\\.]+(beta[0-9]+)?", 30 | "oov/RelMovieHandle": "relmoviehandle_v[0-9\\.]+", 31 | "oov/textassist": "aviutl_textassist_v[0-9\\.]+", 32 | "rigaya/ffmpegOut": "ffmpegOut_[0-9\\.]+", 33 | "rigaya/NVEnc": "Aviutl_NVEnc_[0-9\\.]+", 34 | "rigaya/QSVEnc": "Aviutl_QSVEnc_[0-9\\.]+", 35 | "rigaya/pmdMt": "pmd_mt_\\+[0-9]+", 36 | "rigaya/svtAV1guiEx": "svtAV1guiEx_[0-9\\.]+", 37 | "rigaya/VCEEnc": "Aviutl_VCEEnc_[0-9\\.]+", 38 | "rigaya/x264guiEx": "x264guiEx_[0-9\\.]+", 39 | "rigaya/x265guiEx": "x265guiEx_[0-9\\.]+", 40 | "shummg/dotdrawer": "dotdrawer-[0-9\\.]+", 41 | "shummg/shuGame": "shu_game-[0-9\\.]+", 42 | "shummg/textmodule": "textmodule-[0-9\\.]+", 43 | "yumetodo/SigContrastFastAviUtl": "SigColorFastAviUtl", 44 | "suzune/bakusoku": "v[0-9\\.]+", 45 | "suzune/WideDialog": "v[0-9\\.]+" 46 | } 47 | -------------------------------------------------------------------------------- /util/check-convert.js: -------------------------------------------------------------------------------- 1 | // > yarn check-convert convertJson/dir/ old/packages.json new/packages.json 2 | 3 | import chalk from 'chalk'; 4 | import fs from 'fs-extra'; 5 | import { join } from 'path'; 6 | const { readJson } = fs; 7 | const { cyan, cyanBright, green, redBright, red } = chalk; 8 | 9 | async function check(args) { 10 | const [convertJson, oldJsonObj, newJsonObj] = await Promise.all([ 11 | readJson(join(args[0], 'convert.json'), 'utf-8'), 12 | readJson(args[1], 'utf-8'), 13 | readJson(args[2], 'utf-8'), 14 | ]); 15 | 16 | let checkNumber = 0; 17 | let correctNumber = 0; 18 | for (const [oldId, newId] of Object.entries(convertJson)) { 19 | checkNumber++; 20 | const existsInOld = oldJsonObj.packages.some((value) => value.id === oldId); 21 | const existsInNew = newJsonObj.packages.some((value) => value.id === newId); 22 | console.log( 23 | cyan(oldId), 24 | cyanBright(newId), 25 | existsInOld ? green('Old ID OK!') : red('Old ID Error'), 26 | existsInNew ? green('New ID OK!') : redBright('New ID Error'), 27 | ); 28 | if (existsInOld && existsInNew) correctNumber++; 29 | } 30 | 31 | if (checkNumber === correctNumber) { 32 | console.log(green('It looks correct!')); 33 | } else { 34 | console.error(red(`Error! Problems: ${checkNumber - correctNumber}`)); 35 | } 36 | } 37 | 38 | const args = process.argv.slice(2); 39 | 40 | if (args.length >= 3) { 41 | check(args); 42 | } else { 43 | console.error(red('Arguments are missing!')); 44 | } 45 | -------------------------------------------------------------------------------- /util/check-update.js: -------------------------------------------------------------------------------- 1 | // > yarn run check-update 2 | 3 | import { Octokit } from '@octokit/rest'; 4 | import chalk from 'chalk'; 5 | import { execSync } from 'child_process'; 6 | import fs from 'fs-extra'; 7 | import { basename, dirname, extname, join, resolve } from 'path'; 8 | import { format } from 'prettier'; 9 | import download from './lib/download.js'; 10 | import generateHash from './lib/generateHash.js'; 11 | import unzip from './lib/unzip.js'; 12 | const { readJson, readJsonSync, remove, writeFile } = fs; 13 | const { whiteBright, green, yellow, cyanBright, red } = chalk; 14 | 15 | // Options 16 | const exclude = ['oov/PSDToolKit']; // IDs that won't be checked 17 | const listJsonPath = 'v3/list.json'; 18 | 19 | const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN }); 20 | const archiveNamePattern = readJsonSync('util/archive-name-pattern.json'); 21 | 22 | async function checkPackageUpdate(packageItem) { 23 | const result = { 24 | updateAvailable: false, 25 | message: [], 26 | }; 27 | 28 | const id = packageItem.id; 29 | const downloadURL = new URL(packageItem.downloadURLs[0]); 30 | const currentVersion = packageItem.latestVersion; 31 | 32 | const dirs = downloadURL.pathname.split('/'); 33 | dirs.shift(); 34 | 35 | if ( 36 | exclude.includes(id) || 37 | downloadURL.hostname !== 'github.com' || 38 | dirs[2] !== 'releases' 39 | ) 40 | return result; 41 | 42 | try { 43 | const res = await octokit.rest.repos.getLatestRelease({ 44 | owner: dirs[0], 45 | repo: dirs[1], 46 | }); 47 | 48 | let latestTag = res.data.tag_name; 49 | 50 | // only for hebiiro's packages 51 | if (dirs[0] === 'hebiiro') { 52 | const versionArray = latestTag 53 | .split('.') 54 | .filter((value) => /[0-9]+/.test(value)); 55 | if (versionArray.length >= 1) { 56 | latestTag = versionArray.join('.'); 57 | } else { 58 | throw new Error('A version-like string is not found.'); 59 | } 60 | } 61 | 62 | if (id === 'MrOjii/LSMASHWorks' && packageItem.directURL) { 63 | const newDownloadUrl = res.data.assets.find((asset) => 64 | asset.name.includes('Mr-Ojii_Mr-Ojii'), 65 | ).browser_download_url; 66 | if (newDownloadUrl && packageItem.directURL !== newDownloadUrl) { 67 | packageItem.directURL = newDownloadUrl; 68 | result.updateAvailable = true; 69 | result.message.push( 70 | whiteBright(id) + ' ' + cyanBright('The directURL has been updated.'), 71 | ); 72 | return result; 73 | } else return result; 74 | } 75 | 76 | if (currentVersion === '最新') { 77 | return result; 78 | } 79 | 80 | if (latestTag === currentVersion) { 81 | result.message.push(whiteBright(id) + ' ' + green(currentVersion)); 82 | return result; 83 | } 84 | 85 | packageItem.latestVersion = latestTag; 86 | 87 | result.updateAvailable = true; 88 | result.message.push( 89 | whiteBright(id) + 90 | ' ' + 91 | yellow(currentVersion) + 92 | ' ' + 93 | cyanBright(latestTag), 94 | ); 95 | 96 | // Create integrity 97 | const oldReleaseObj = packageItem?.releases?.[0]; 98 | if (oldReleaseObj) { 99 | if (oldReleaseObj.version === latestTag) 100 | throw new Error('The release data of the same version exist.'); 101 | 102 | const assets = res.data.assets.filter( 103 | (asset) => extname(asset.name) === '.zip', 104 | ); 105 | let archiveData = { 106 | name: dirs[0] + '-' + dirs[1] + '-' + latestTag + '.zip', 107 | browser_download_url: `https://github.com/${dirs[0]}/${dirs[1]}/archive/refs/tags/${res.data.tag_name}.zip`, 108 | }; 109 | if (assets.length === 1) { 110 | archiveData = assets[0]; 111 | } else if (assets.length >= 2) { 112 | const temp = assets.find((value) => { 113 | const matchPattern = new RegExp( 114 | '^' + archiveNamePattern[id] + '\\.zip$', 115 | ); 116 | return matchPattern.test(value.name); 117 | }); 118 | if (temp) { 119 | archiveData = temp; 120 | } else { 121 | result.message.push( 122 | red( 123 | 'No assets are found.\n ID: ' + 124 | id + 125 | '\n Pattern: ' + 126 | archiveNamePattern[id], 127 | ), 128 | ); 129 | return result; 130 | } 131 | } else { 132 | result.message.push( 133 | yellow( 134 | 'There seem to be no assets. So use an archive file of the source code.', 135 | ), 136 | ); 137 | } 138 | 139 | const url = archiveData.browser_download_url; 140 | 141 | const archivePath = resolve('util/temp/archive', archiveData.name); 142 | await download(url, archivePath); 143 | const unzippedPath = resolve( 144 | 'util/temp', 145 | basename(archivePath, extname(archivePath)), 146 | ); 147 | await unzip(archivePath, unzippedPath); 148 | 149 | const archiveHash = await generateHash(archivePath); 150 | 151 | const oldIntegrityFileArray = oldReleaseObj?.integrity?.file; 152 | const newIntegrityFileArray = []; 153 | if (oldIntegrityFileArray) { 154 | const filesArray = packageItem.files; 155 | for (const integrityFileData of oldIntegrityFileArray) { 156 | const targetFilename = integrityFileData.target; 157 | const targetFileArchivePath = 158 | filesArray.find((value) => value.filename === targetFilename) 159 | ?.archivePath ?? ''; 160 | const targetPath = resolve( 161 | unzippedPath, 162 | targetFileArchivePath, 163 | basename(targetFilename), 164 | ); 165 | 166 | const fileHash = await generateHash(targetPath); 167 | newIntegrityFileArray.push({ 168 | target: targetFilename, 169 | hash: fileHash, 170 | }); 171 | } 172 | } 173 | 174 | packageItem.releases.unshift({ 175 | version: latestTag, 176 | integrity: { archive: archiveHash, file: newIntegrityFileArray }, 177 | }); 178 | } 179 | } catch (e) { 180 | if (e.status === 404) { 181 | result.message.push( 182 | whiteBright(id) + ' ' + currentVersion + ' ' + red('Not Found'), 183 | ); 184 | } else { 185 | result.message.push(red(e.message)); 186 | } 187 | } 188 | 189 | return result; 190 | } 191 | 192 | async function check() { 193 | const listObj = await readJson(listJsonPath); 194 | 195 | for (const jsonInfo of listObj.packages) { 196 | const packagesJsonPath = join(dirname(listJsonPath), jsonInfo.path); 197 | const packagesObj = await readJson(packagesJsonPath, 'utf-8'); 198 | 199 | const promisesInWaiting = []; 200 | for (const p of packagesObj.packages) { 201 | promisesInWaiting.push(checkPackageUpdate(p)); 202 | } 203 | 204 | const result = await Promise.all(promisesInWaiting); 205 | result 206 | .filter((updateResult) => updateResult.message.length >= 1) 207 | .forEach((updateResult) => console.log(updateResult.message.join('\n'))); 208 | 209 | const updateAvailableNum = result.filter( 210 | (updateResult) => updateResult.updateAvailable, 211 | ).length; 212 | 213 | if (updateAvailableNum >= 1) { 214 | await writeFile( 215 | packagesJsonPath, 216 | await format(JSON.stringify(packagesObj), { parser: 'json' }), 217 | 'utf-8', 218 | ); 219 | 220 | console.log(green('Updated ' + basename(jsonInfo.path) + '.')); 221 | try { 222 | remove('util/temp'); 223 | } catch (e) { 224 | console.error(e); 225 | } 226 | } 227 | 228 | try { 229 | // Throws an error if changes in the file 230 | execSync('git diff --exit-code -- ' + packagesJsonPath); 231 | console.log('No updates available in ' + basename(jsonInfo.path) + '.'); 232 | } catch { 233 | const padNumber = (number) => number.toString().padStart(2, '0'); 234 | const toISODate = (date) => 235 | date.getFullYear() + 236 | '-' + 237 | padNumber(date.getMonth() + 1) + 238 | '-' + 239 | padNumber(date.getDate()) + 240 | 'T' + 241 | padNumber(date.getHours()) + 242 | ':' + 243 | padNumber(date.getMinutes()) + 244 | ':00+09:00'; 245 | 246 | const now = new Date(); 247 | jsonInfo.modified = toISODate(now); 248 | } 249 | } 250 | 251 | await writeFile( 252 | listJsonPath, 253 | await format(JSON.stringify(listObj), { parser: 'json', printWidth: 60 }), 254 | 'utf-8', 255 | ); 256 | console.log(green('Updated list.json.')); 257 | 258 | console.log('Check complete.'); 259 | } 260 | 261 | check(); 262 | -------------------------------------------------------------------------------- /util/convert-2-3.js: -------------------------------------------------------------------------------- 1 | // > yarn run convert-2-3 2 | 3 | import chalk from 'chalk'; 4 | import { compareVersions } from 'compare-versions'; 5 | import { XMLParser, XMLValidator } from 'fast-xml-parser'; 6 | import fs from 'fs-extra'; 7 | import { extname, resolve } from 'path'; 8 | import { format } from 'prettier'; 9 | import { sortCore, sortPackages } from './sort.js'; 10 | const { existsSync, readFile, writeFile, readJSON } = fs; 11 | const { greenBright, red } = chalk; 12 | 13 | function compareVersion(firstVersion, secondVersion) { 14 | if (firstVersion === secondVersion) return 0; 15 | const isDate1 = firstVersion.match(/^\d{4}\/\d{2}\/\d{2}$/); 16 | const isDate2 = secondVersion.match(/^\d{4}\/\d{2}\/\d{2}$/); 17 | if (isDate1 !== isDate2) return 0; 18 | if (isDate1 && isDate2) { 19 | return compareVersions( 20 | firstVersion.replaceAll('/', '.'), 21 | secondVersion.replaceAll('/', '.'), 22 | ); // 2022/02/02 -> 2022.02.02 23 | } 24 | 25 | const toSemver = (v) => 26 | v 27 | .toLowerCase() 28 | .replaceAll(' ', '') 29 | .replaceAll('/', '.') // 2022/02/02 -> 2022.02.02 30 | .replaceAll(/[^\x20-\x7F]/g, 'z') // v2仮修正-> v2zzz 31 | .replaceAll('ver.', '') 32 | .replaceAll('ver', '') 33 | .replaceAll(/^[vr+]/g, '') // v3 -> 3 and r11 -> 11 and +60 -> 60 34 | .replaceAll(/[_+,][vr]?/g, '.') // 1_2.0 -> 1.2.0 and 1.0+3 -> 1.0.3 and 1,v3 -> 1.3 35 | .replaceAll('(', '-') 36 | .replaceAll(')', '') // 1.0(test) -> 1.0-test 37 | .replaceAll(/\d[a-z]/g, (m) => m[0] + '-' + m[1]) // 1.0beta -> 1.0-beta 38 | .replaceAll(/[a-z]\d/g, (m) => m[0] + '.' + m[1]) // rc2 -> rc.2 39 | .replaceAll(/^\d+\.\d+-/g, (m) => m.slice(0, -1) + '.0-') // 1.0-beta -> 1.0.0-beta 40 | .replaceAll(/^\d+-/g, (m) => m.slice(0, -1) + '.0.0-'); // 1-beta -> 1.0.0-beta 41 | 42 | try { 43 | return compareVersions(toSemver(firstVersion), toSemver(secondVersion)); 44 | } catch { 45 | return 0; 46 | } 47 | } 48 | 49 | function replacer(key, value) { 50 | if ( 51 | [ 52 | 'archivePath', 53 | 'isUninstallOnly', 54 | 'isInstallOnly', 55 | 'isDirectory', 56 | 'isObsolete', 57 | ].includes(key) && 58 | !value 59 | ) { 60 | return undefined; 61 | } 62 | 63 | return value; 64 | } 65 | 66 | const parser = new XMLParser({ 67 | attributeNamePrefix: '$', 68 | textNodeName: '_', 69 | ignoreAttributes: false, 70 | parseTagValue: false, 71 | parseAttributeValue: false, 72 | trimValues: true, 73 | isArray: () => true, 74 | }); 75 | 76 | const defaultKeys = [ 77 | 'id', 78 | 'name', 79 | 'overview', 80 | 'description', 81 | 'developer', 82 | 'originalDeveloper', 83 | 'dependencies', 84 | 'pageURL', 85 | 'downloadURL', 86 | 'downloadMirrorURL', 87 | 'directURL', 88 | 'latestVersion', 89 | 'detailURL', 90 | 'files', 91 | 'installer', 92 | 'installArg', 93 | 'releases', 94 | ]; 95 | 96 | const typeForExtention = { 97 | '.auf': 'filter', 98 | '.aui': 'input', 99 | '.auo': 'output', 100 | '.auc': 'color', 101 | '.aul': 'language', 102 | '.anm': 'animation', 103 | '.obj': 'object', 104 | '.cam': 'camera', 105 | '.tra': 'track', 106 | '.scn': 'scene', 107 | }; 108 | 109 | /** 110 | * @param {object} parsedData - A object parsed from XML. 111 | * @return {Array} An array of files. 112 | */ 113 | function parseFiles(parsedData) { 114 | const files = []; 115 | for (const file of parsedData.files[0].file) { 116 | const tmpFile = { 117 | filename: null, 118 | isOptional: false, 119 | isInstallOnly: false, 120 | isDirectory: false, 121 | isObsolete: false, 122 | archivePath: null, 123 | }; 124 | if (typeof file === 'string') { 125 | tmpFile.filename = file; 126 | } else if (typeof file === 'object') { 127 | tmpFile.filename = file._; 128 | if (file.$optional) tmpFile.isOptional = Boolean(file.$optional[0]); 129 | if (file.$installOnly) 130 | tmpFile.isInstallOnly = Boolean(file.$installOnly[0]); 131 | if (file.$directory) tmpFile.isDirectory = Boolean(file.$directory[0]); 132 | if (file.$obsolete) tmpFile.isObsolete = Boolean(file.$obsolete[0]); 133 | if (file.$archivePath) tmpFile.archivePath = file.$archivePath[0]; 134 | } else { 135 | continue; 136 | } 137 | files.push(tmpFile); 138 | } 139 | return files; 140 | } 141 | 142 | class CoreInfo { 143 | /** 144 | * Returns the core program's information. 145 | * 146 | * @param {object} parsedCore - An object parsed from XML. 147 | */ 148 | constructor(parsedCore) { 149 | if (parsedCore.files) { 150 | this.files = parseFiles(parsedCore); 151 | } 152 | if (parsedCore.latestVersion) { 153 | if (typeof parsedCore.latestVersion[0] === 'string') 154 | this.latestVersion = parsedCore.latestVersion[0]; 155 | } 156 | if (parsedCore.releases) { 157 | this.releases = {}; 158 | for (const release of parsedCore.releases[0].release) { 159 | this.releases[release.$version[0]] = { 160 | url: release.url[0], 161 | archiveIntegrity: release?.archiveIntegrity?.[0], 162 | integrities: release?.integrities 163 | ? release.integrities[0].integrity.map((integrity) => { 164 | return { 165 | target: integrity.$target[0], 166 | targetIntegrity: integrity._, 167 | }; 168 | }) 169 | : [], 170 | }; 171 | } 172 | } 173 | } 174 | } 175 | 176 | /** 177 | * 178 | */ 179 | class PackageInfo { 180 | /** 181 | * Returns the package's information. 182 | * 183 | * @param {object} parsedPackage - An object parsed from XML. 184 | */ 185 | constructor(parsedPackage) { 186 | for (const key of defaultKeys) { 187 | if (parsedPackage[key]) { 188 | if (key === 'files') { 189 | this.files = parseFiles(parsedPackage); 190 | } else if (key === 'latestVersion') { 191 | const tmpObj = parsedPackage[key][0]; 192 | if (typeof tmpObj === 'string') { 193 | this[key] = tmpObj; 194 | } else if (typeof tmpObj === 'object') { 195 | this[key] = tmpObj._; 196 | if (tmpObj.$continuous) 197 | this.isContinuous = Boolean(tmpObj.$continuous[0]); 198 | } 199 | } else if (key === 'releases') { 200 | this.releases = {}; 201 | for (const release of parsedPackage[key][0].release) { 202 | this.releases[release.$version[0]] = { 203 | archiveIntegrity: release?.archiveIntegrity?.[0], 204 | integrities: release?.integrities 205 | ? release.integrities[0].integrity.map((integrity) => { 206 | return { 207 | target: integrity.$target[0], 208 | targetIntegrity: integrity._, 209 | }; 210 | }) 211 | : [], 212 | }; 213 | } 214 | } else { 215 | this[key] = parsedPackage[key][0]; 216 | } 217 | } 218 | } 219 | const types = this.files.flatMap((f) => { 220 | const extention = extname(f.filename); 221 | if (extention in typeForExtention) { 222 | return [typeForExtention[extention]]; 223 | } else { 224 | return []; 225 | } 226 | }); 227 | this.type = [...new Set(types)]; 228 | } 229 | } 230 | 231 | const prettierOptions = { 232 | parser: 'json', 233 | singleQuote: false, 234 | }; 235 | 236 | function successLog(v2ListPath, v3ListPath) { 237 | console.log(greenBright('Converted ' + v2ListPath + ' to ' + v3ListPath)); 238 | } 239 | 240 | async function convertCore(v2ListPath, v3ListPath) { 241 | if (!existsSync(v2ListPath)) 242 | throw new Error( 243 | 'The version file does not exist. ' + v2ListPath + ' ' + v3ListPath, 244 | ); 245 | 246 | const xmlData = await readFile(v2ListPath, 'utf-8'); 247 | const valid = XMLValidator.validate(xmlData); 248 | if (valid !== true) throw valid; 249 | 250 | const coreInfo = parser.parse(xmlData); 251 | if (!coreInfo.core) throw new Error('The list is invalid.'); 252 | 253 | const v2Data = {}; 254 | for (const program of ['aviutl', 'exedit']) { 255 | v2Data[program] = new CoreInfo(coreInfo.core[0][program][0]); 256 | } 257 | 258 | try { 259 | let newV3Data = { 260 | version: 3, 261 | ...JSON.parse( 262 | JSON.stringify(v2Data).replaceAll('isOptional', 'isUninstallOnly'), 263 | ), 264 | }; 265 | for (const program of [newV3Data.aviutl, newV3Data.exedit]) { 266 | if (program.releases) { 267 | program.releases = Object.entries(program.releases).map(([k, v]) => { 268 | return { ...v, version: k }; 269 | }); 270 | program.releases = program.releases 271 | .sort((r1, r2) => compareVersion(r1.version, r2.version)) 272 | .reverse(); 273 | for (const release of program.releases) { 274 | if (release.integrities) { 275 | release.integrity = { file: release.integrities }; 276 | delete release.integrities; 277 | for (const file of release.integrity.file) { 278 | file.hash = file.targetIntegrity; 279 | delete file.targetIntegrity; 280 | } 281 | } 282 | if (release.archiveIntegrity) { 283 | release.integrity.archive = release.archiveIntegrity; 284 | delete release.archiveIntegrity; 285 | } 286 | } 287 | } 288 | } 289 | 290 | newV3Data = JSON.parse(JSON.stringify(newV3Data, replacer)); 291 | newV3Data = sortCore(newV3Data); 292 | 293 | await writeFile( 294 | v3ListPath, 295 | await format(JSON.stringify(newV3Data), prettierOptions), 296 | ); 297 | 298 | successLog(v2ListPath, v3ListPath); 299 | } catch (e) { 300 | console.error(red(e), v2ListPath, v3ListPath); 301 | } 302 | } 303 | 304 | async function convertPackages(v2ListPath, v3ListPath) { 305 | if (!existsSync(v2ListPath)) 306 | throw new Error( 307 | 'The version file does not exist. ' + v2ListPath + ' ' + v3ListPath, 308 | ); 309 | 310 | const xmlData = await readFile(v2ListPath, 'utf-8'); 311 | const valid = XMLValidator.validate(xmlData); 312 | if (valid !== true) throw valid; 313 | 314 | const packagesInfo = parser.parse(xmlData); 315 | if (!packagesInfo.packages) throw new Error('The list is invalid.'); 316 | 317 | const v2Data = {}; 318 | for (const packageItem of packagesInfo.packages[0].package) { 319 | v2Data[packageItem.id[0]] = new PackageInfo(packageItem); 320 | } 321 | 322 | try { 323 | let newV3Packages = JSON.parse( 324 | JSON.stringify(Object.values(v2Data)).replaceAll( 325 | 'isOptional', 326 | 'isUninstallOnly', 327 | ), 328 | ); 329 | 330 | newV3Packages = newV3Packages.map((p) => { 331 | if (p?.dependencies?.dependency) 332 | p.dependencies = p.dependencies.dependency; 333 | if (p?.releases) 334 | p.releases = Object.entries(p.releases).map(([k, v]) => { 335 | return { ...v, version: k }; 336 | }); 337 | delete p.type; 338 | return p; 339 | }); 340 | 341 | newV3Packages = newV3Packages.map((p) => { 342 | if (p.releases) { 343 | p.releases = p.releases 344 | .sort((r1, r2) => compareVersion(r1.version, r2.version)) 345 | .reverse(); 346 | for (const release of p.releases) { 347 | if (release.integrities) { 348 | release.integrity = { file: release.integrities }; 349 | delete release.integrities; 350 | for (const file of release.integrity.file) { 351 | file.hash = file.targetIntegrity; 352 | delete file.targetIntegrity; 353 | } 354 | } 355 | if (release.archiveIntegrity) { 356 | release.integrity.archive = release.archiveIntegrity; 357 | delete release.archiveIntegrity; 358 | } 359 | } 360 | } 361 | 362 | p.downloadURLs = [p.downloadURL]; 363 | delete p.downloadURL; 364 | if (p.downloadMirrorURL) { 365 | p.downloadURLs.push(p.downloadMirrorURL); 366 | delete p.downloadMirrorURL; 367 | } 368 | 369 | return p; 370 | }); 371 | 372 | let newV3Data = { version: 3, packages: newV3Packages }; 373 | 374 | newV3Data = JSON.parse(JSON.stringify(newV3Data, replacer)); 375 | 376 | // For work in progress 377 | for (const packageItem of newV3Data.packages) { 378 | if (packageItem.pageURL.startsWith('https://www.nicovideo.jp/watch/')) 379 | packageItem.nicommons = RegExp(/(sm|im|nc)[0-9]+/).exec( 380 | packageItem.pageURL, 381 | )[0]; 382 | } 383 | if (existsSync(v3ListPath)) { 384 | const oldV3data = await readJSON(v3ListPath); 385 | for (const newPackageItem of newV3Data.packages) { 386 | const oldPackageItem = oldV3data.packages.find( 387 | (p) => p.id === newPackageItem.id, 388 | ); 389 | 390 | if (oldPackageItem && 'nicommons' in oldPackageItem) 391 | newPackageItem.nicommons = oldPackageItem.nicommons; 392 | } 393 | } 394 | 395 | newV3Data = sortPackages(newV3Data); 396 | 397 | await writeFile( 398 | v3ListPath, 399 | await format(JSON.stringify(newV3Data), prettierOptions), 400 | ); 401 | 402 | successLog(v2ListPath, v3ListPath); 403 | } catch (e) { 404 | console.error(red(e), v2ListPath, v3ListPath); 405 | } 406 | } 407 | 408 | function updateModifiedDate(targetData, newDate) { 409 | const oldModDate = new Date(targetData.modified); 410 | const newModDate = new Date(newDate); 411 | if (newModDate.getTime() > oldModDate.getTime()) 412 | targetData.modified = newDate; 413 | } 414 | 415 | async function convertMod(v2ListPath, v3ListPath) { 416 | if (!existsSync(v2ListPath)) 417 | throw new Error( 418 | 'The version file does not exist. ' + v2ListPath + ' ' + v3ListPath, 419 | ); 420 | 421 | const xmlData = await readFile(v2ListPath, 'utf-8'); 422 | const valid = XMLValidator.validate(xmlData); 423 | if (valid !== true) throw valid; 424 | 425 | const modInfo = parser.parse(xmlData); 426 | if (!modInfo.mod) throw new Error('The list is invalid.'); 427 | 428 | const v2Data = {}; 429 | for (const filename of ['core', 'convert', 'packages', 'scripts']) { 430 | v2Data[filename] = modInfo.mod[0][filename][0]; 431 | } 432 | 433 | try { 434 | const v3Data = await readJSON(v3ListPath); 435 | 436 | ['core', 'convert'].forEach((filename) => 437 | updateModifiedDate(v3Data[filename], v2Data[filename]), 438 | ); 439 | ['packages', 'scripts'].forEach((filename) => 440 | updateModifiedDate( 441 | v3Data[filename].find((value) => value.path === filename + '.json'), 442 | v2Data[filename], 443 | ), 444 | ); 445 | 446 | const options = { ...prettierOptions, printWidth: 60 }; 447 | await writeFile(v3ListPath, await format(JSON.stringify(v3Data), options)); 448 | 449 | successLog(v2ListPath, v3ListPath); 450 | } catch (e) { 451 | console.error(red(e), v2ListPath, v3ListPath); 452 | } 453 | } 454 | 455 | const args = process.argv.slice(2); 456 | 457 | if (args[0] === '--core') { 458 | const input = resolve('v2/data/core.xml'); 459 | const output = resolve('v3/core.json'); 460 | convertCore(input, output); 461 | } else if (args[0] === '--packages') { 462 | const input = resolve('v2/data/packages.xml'); 463 | const output = resolve('v3/packages.json'); 464 | convertPackages(input, output); 465 | } else if (args[0] === '--mod') { 466 | const input = resolve('v2/data/mod.xml'); 467 | const output = resolve('v3/list.json'); 468 | convertMod(input, output); 469 | } else { 470 | console.error(red('There is no args.')); 471 | } 472 | -------------------------------------------------------------------------------- /util/format-json.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs-extra'; 2 | import { dirname, join, relative } from 'path'; 3 | import { format as prettierFormat } from 'prettier'; 4 | import { sortCore, sortPackages } from './sort.js'; 5 | const { existsSync, readJson, writeFile } = fs; 6 | 7 | function findListJson(path) { 8 | const dirpath = dirname(path); 9 | const listJsonPath = join(dirpath, 'list.json'); 10 | if (existsSync(listJsonPath)) { 11 | return listJsonPath; 12 | } else { 13 | return findListJson(dirpath); 14 | } 15 | } 16 | 17 | async function format(args) { 18 | const targetPath = args[0]; 19 | const listJsonPath = findListJson(targetPath); 20 | if (!existsSync(targetPath) || !existsSync(listJsonPath)) { 21 | console.error('Some files are not found.'); 22 | return; 23 | } 24 | const [object, listJsonObject] = await Promise.all([ 25 | readJson(targetPath), 26 | readJson(listJsonPath), 27 | ]); 28 | const relPath = relative(dirname(listJsonPath), targetPath).replaceAll( 29 | '\\', 30 | '/', 31 | ); 32 | 33 | const options = { 34 | parser: 'json', 35 | singleQuote: false, 36 | }; 37 | if (listJsonObject.core.path === relPath) { 38 | await writeFile( 39 | targetPath, 40 | await prettierFormat(JSON.stringify(sortCore(object)), options), 41 | ); 42 | } else if (listJsonObject.packages.some((value) => value.path === relPath)) { 43 | const packagesObject = sortPackages(object); 44 | packagesObject.packages.sort((a, b) => { 45 | const idA = a.id.toUpperCase(); 46 | const idB = b.id.toUpperCase(); 47 | if (idA < idB) { 48 | return -1; 49 | } 50 | if (idA > idB) { 51 | return 1; 52 | } 53 | return 0; 54 | }); 55 | await writeFile( 56 | targetPath, 57 | await prettierFormat(JSON.stringify(packagesObject), options), 58 | ); 59 | } else { 60 | console.log('Nothing done.'); 61 | } 62 | } 63 | 64 | const args = process.argv.slice(2); 65 | 66 | format(args); 67 | -------------------------------------------------------------------------------- /util/generate-releases.js: -------------------------------------------------------------------------------- 1 | // > yarn run generate-releases 2 | 3 | import { Octokit } from '@octokit/rest'; 4 | import chalk from 'chalk'; 5 | import { compareVersions } from 'compare-versions'; 6 | import fs from 'fs-extra'; 7 | import { basename, dirname, extname, resolve } from 'path'; 8 | import { format } from 'prettier'; 9 | import download from './lib/download.js'; 10 | import generateHash from './lib/generateHash.js'; 11 | import unzip from './lib/unzip.js'; 12 | const { readJson, readJsonSync, remove, writeFile } = fs; 13 | const { whiteBright, green, red, cyanBright } = chalk; 14 | 15 | // Options 16 | const exclude = ['suzune/bakusoku', 'suzune/WideDialog']; 17 | const packagesJsonPath = 'v3/packages.json'; 18 | const listJsonPath = 'v3/list.json'; 19 | 20 | function compareVersion(firstVersion, secondVersion) { 21 | if (firstVersion === secondVersion) return 0; 22 | const isDate1 = firstVersion.match(/^\d{4}\/\d{2}\/\d{2}$/); 23 | const isDate2 = secondVersion.match(/^\d{4}\/\d{2}\/\d{2}$/); 24 | if (isDate1 !== isDate2) return 0; 25 | if (isDate1 && isDate2) { 26 | return compareVersions( 27 | firstVersion.replaceAll('/', '.'), 28 | secondVersion.replaceAll('/', '.'), 29 | ); // 2022/02/02 -> 2022.02.02 30 | } 31 | 32 | const toSemver = (v) => 33 | v 34 | .toLowerCase() 35 | .replaceAll(' ', '') 36 | .replaceAll('/', '.') // 2022/02/02 -> 2022.02.02 37 | .replaceAll(/[^\x20-\x7F]/g, 'z') // v2仮修正-> v2zzz 38 | .replaceAll('ver.', '') 39 | .replaceAll('ver', '') 40 | .replaceAll(/^[vr+]/g, '') // v3 -> 3 and r11 -> 11 and +60 -> 60 41 | .replaceAll(/[_+,][vr]?/g, '.') // 1_2.0 -> 1.2.0 and 1.0+3 -> 1.0.3 and 1,v3 -> 1.3 42 | .replaceAll('(', '-') 43 | .replaceAll(')', '') // 1.0(test) -> 1.0-test 44 | .replaceAll(/\d[a-z]/g, (m) => m[0] + '-' + m[1]) // 1.0beta -> 1.0-beta 45 | .replaceAll(/[a-z]\d/g, (m) => m[0] + '.' + m[1]) // rc2 -> rc.2 46 | .replaceAll(/^\d+\.\d+-/g, (m) => m.slice(0, -1) + '.0-') // 1.0-beta -> 1.0.0-beta 47 | .replaceAll(/^\d+-/g, (m) => m.slice(0, -1) + '.0.0-'); // 1-beta -> 1.0.0-beta 48 | 49 | try { 50 | return compareVersions(toSemver(firstVersion), toSemver(secondVersion)); 51 | } catch { 52 | return 0; 53 | } 54 | } 55 | 56 | const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN }); 57 | const archiveNamePattern = readJsonSync('util/archive-name-pattern.json'); 58 | 59 | async function generateReleases(args) { 60 | const id = args[0]; 61 | if (!(id in archiveNamePattern)) { 62 | console.error(red('The archive-name pattern does not exist.')); 63 | return; 64 | } 65 | 66 | const packagesObj = await readJson(packagesJsonPath, 'utf-8'); 67 | const packageItem = packagesObj.packages.find((p) => p.id === id); 68 | 69 | const downloadURL = new URL(packageItem.downloadURLs[0]); 70 | const currentVersion = packageItem.latestVersion; 71 | 72 | const dirs = downloadURL.pathname.split('/'); 73 | dirs.shift(); 74 | 75 | if ( 76 | downloadURL.hostname !== 'github.com' || 77 | dirs[2] !== 'releases' || 78 | currentVersion === '最新' 79 | ) { 80 | console.error(red('The package is not on GitHub.')); 81 | return; 82 | } 83 | 84 | let releasesAvailable = false; 85 | try { 86 | const res = await octokit.rest.repos.listReleases({ 87 | owner: dirs[0], 88 | repo: dirs[1], 89 | per_page: 100, 90 | }); 91 | 92 | const generateRelease = async (release) => { 93 | const result = { 94 | newReleaseObj: undefined, 95 | message: [], 96 | }; 97 | try { 98 | let tag = release.tag_name; 99 | 100 | // only for hebiiro's packages 101 | if (dirs[0] === 'hebiiro') { 102 | const versionArray = tag 103 | .split('.') 104 | .filter((value) => /[0-9]+/.test(value)); 105 | if (versionArray.length >= 1) { 106 | tag = versionArray.join('.'); 107 | } else { 108 | throw new Error('A version-like string is not found.'); 109 | } 110 | } 111 | 112 | result.message.push(whiteBright(`[${tag}]`)); 113 | 114 | // Create integrity 115 | const oldReleaseObj = packageItem?.releases?.[0]; 116 | if (!oldReleaseObj) { 117 | throw new Error('The old release data does not exist.'); 118 | } 119 | if (packageItem?.releases.some((p) => p.version === tag)) 120 | throw new Error('The release data of the same version exist.'); 121 | 122 | const assets = release.assets.filter( 123 | (asset) => extname(asset.name) === '.zip', 124 | ); 125 | let archiveData = {}; 126 | if (assets.length === 1) { 127 | archiveData = assets[0]; 128 | } else if (assets.length >= 2) { 129 | const temp = assets.find((value) => { 130 | const matchPattern = new RegExp( 131 | '^' + archiveNamePattern[id] + '\\.zip$', 132 | ); 133 | return matchPattern.test(value.name); 134 | }); 135 | if (temp) { 136 | archiveData = temp; 137 | } else { 138 | throw new Error( 139 | 'No assets are found.\n ID: ' + 140 | id + 141 | '\n Pattern: ' + 142 | archiveNamePattern[id], 143 | ); 144 | } 145 | } else { 146 | throw new Error( 147 | 'There seem to be no assets. An archive file of the source code is not supported.', 148 | ); 149 | } 150 | 151 | const url = archiveData.browser_download_url; 152 | 153 | const archivePath = resolve( 154 | 'util/temp', 155 | id, 156 | tag, 157 | '.archive', 158 | archiveData.name, 159 | ); 160 | await download(url, archivePath); 161 | const unzippedPath = resolve(dirname(archivePath), '../'); 162 | await unzip(archivePath, unzippedPath); 163 | 164 | const archiveHash = await generateHash(archivePath); 165 | 166 | const oldIntegrityFileArray = oldReleaseObj?.integrity?.file; 167 | const newIntegrityFileArray = []; 168 | if (oldIntegrityFileArray) { 169 | const filesArray = packageItem.files; 170 | for (const integrityFileData of oldIntegrityFileArray) { 171 | const targetFilename = integrityFileData.target; 172 | const targetFileArchivePath = 173 | filesArray.find((value) => value.filename === targetFilename) 174 | ?.archivePath ?? ''; 175 | const targetPath = resolve( 176 | unzippedPath, 177 | targetFileArchivePath, 178 | basename(targetFilename), 179 | ); 180 | 181 | const fileHash = await generateHash(targetPath); 182 | newIntegrityFileArray.push({ 183 | target: targetFilename, 184 | hash: fileHash, 185 | }); 186 | } 187 | } 188 | 189 | result.newReleaseObj = { 190 | version: tag, 191 | integrity: { archive: archiveHash, file: newIntegrityFileArray }, 192 | }; 193 | result.message.push(green('Successful.')); 194 | } catch (e) { 195 | result.message.push(red(e.message)); 196 | } 197 | 198 | return result; 199 | }; 200 | 201 | const promisesInWaiting = res.data.map((release) => 202 | generateRelease(release), 203 | ); 204 | const result = await Promise.all(promisesInWaiting); 205 | 206 | result.forEach(({ message, newReleaseObj }) => { 207 | console.log(message.join('\n')); 208 | if (newReleaseObj) { 209 | packageItem.releases.unshift(newReleaseObj); 210 | releasesAvailable = true; 211 | } 212 | }); 213 | if (packageItem.releases) 214 | packageItem.releases = packageItem.releases.sort((r1, r2) => 215 | compareVersion(r1.version, r2.version), 216 | ); 217 | } catch (e) { 218 | if (e.status === 404) { 219 | console.log(whiteBright(id) + ' ' + red('Not Found')); 220 | } else { 221 | console.error(red(e.message)); 222 | } 223 | } 224 | 225 | if (releasesAvailable) { 226 | await writeFile( 227 | packagesJsonPath, 228 | await format(JSON.stringify(packagesObj), { parser: 'json' }), 229 | 'utf-8', 230 | ); 231 | 232 | console.log(green('Updated ' + basename(packagesJsonPath))); 233 | 234 | const listObj = await readJson(listJsonPath, 'utf-8'); 235 | 236 | const padNumber = (number) => number.toString().padStart(2, '0'); 237 | const toISODate = (date) => 238 | date.getFullYear() + 239 | '-' + 240 | padNumber(date.getMonth() + 1) + 241 | '-' + 242 | padNumber(date.getDate()) + 243 | 'T' + 244 | padNumber(date.getHours()) + 245 | ':' + 246 | padNumber(date.getMinutes()) + 247 | ':00+09:00'; 248 | 249 | const now = new Date(); 250 | listObj.packages.find( 251 | (value) => value.path === basename(packagesJsonPath), 252 | ).modified = toISODate(now); 253 | 254 | await writeFile( 255 | listJsonPath, 256 | await format(JSON.stringify(listObj), { parser: 'json', printWidth: 60 }), 257 | 'utf-8', 258 | ); 259 | 260 | console.log(green('Updated ' + basename(listJsonPath))); 261 | } 262 | 263 | try { 264 | await remove('util/temp'); 265 | } catch (e) { 266 | console.error(e); 267 | } 268 | 269 | console.log('Generate complete.'); 270 | } 271 | 272 | const args = process.argv.slice(2); 273 | 274 | if (args.length >= 1) { 275 | if (args[0] === '--all') { 276 | const generateAll = async () => { 277 | for (const id of Object.keys(archiveNamePattern)) { 278 | if (!id.startsWith('#') && !exclude.includes(id)) { 279 | console.log(cyanBright(id)); 280 | await generateReleases([id]).catch((e) => console.error(e)); 281 | } 282 | } 283 | }; 284 | generateAll(); 285 | } else { 286 | generateReleases(args); 287 | } 288 | } else { 289 | console.error('A ID is required.'); 290 | } 291 | -------------------------------------------------------------------------------- /util/lib/download.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs-extra'; 2 | import https from 'https'; 3 | import { dirname } from 'path'; 4 | const { createWriteStream, ensureDir } = fs; 5 | 6 | export default async function download(url, archivePath) { 7 | return new Promise((resolve, reject) => { 8 | https.get(url, async (res) => { 9 | if (res.statusCode === 200) { 10 | await ensureDir(dirname(archivePath)); 11 | const outArchive = createWriteStream(archivePath, 'binary'); 12 | 13 | res 14 | .pipe(outArchive) 15 | .on('close', () => { 16 | outArchive.close(resolve); 17 | }) 18 | .on('error', reject); 19 | } else if (res.statusCode === 302) { 20 | await download(res.headers.location, archivePath); 21 | resolve(); 22 | } 23 | }); 24 | }); 25 | } 26 | -------------------------------------------------------------------------------- /util/lib/generateHash.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs-extra'; 2 | import { fromStream } from 'ssri'; 3 | const { createReadStream } = fs; 4 | 5 | export default async function generateHash(path) { 6 | const readStream = createReadStream(path); 7 | const str = await fromStream(readStream, { 8 | algorithms: ['sha384'], 9 | }); 10 | readStream.destroy(); 11 | return str.toString(); 12 | } 13 | -------------------------------------------------------------------------------- /util/lib/unzip.js: -------------------------------------------------------------------------------- 1 | import { path7za } from '7zip-bin'; 2 | import Seven from 'node-7z'; 3 | const { extractFull } = Seven; 4 | 5 | export default async function unzip(zipPath, outputPath) { 6 | const zipStream = extractFull(zipPath, outputPath, { 7 | $bin: path7za, 8 | overwrite: 'a', 9 | }); 10 | 11 | return new Promise((resolve) => { 12 | zipStream.once('end', () => { 13 | resolve(); 14 | }); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /util/sort.js: -------------------------------------------------------------------------------- 1 | // Order definition 2 | const fileOrder = [ 3 | 'filename', 4 | 'archivePath', 5 | 'isDirectory', 6 | 'isInstallOnly', 7 | 'isUninstallOnly', 8 | 'isObsolete', 9 | ]; 10 | const releaseOrder = ['version', 'integrity']; 11 | const integrityOrder = ['archive', 'file']; 12 | const integrityFileOrder = ['target', 'hash']; 13 | 14 | const coreOrder = ['version', 'aviutl', 'exedit']; 15 | const programOrder = ['files', 'latestVersion', 'releases']; 16 | 17 | const packagesOrder = ['version', 'packages']; 18 | const packageOrder = [ 19 | 'id', 20 | 'name', 21 | 'overview', 22 | 'description', 23 | 'developer', 24 | 'originalDeveloper', 25 | 'dependencies', 26 | 'conflicts', 27 | 'provides', 28 | 'pageURL', 29 | 'downloadURLs', 30 | 'directURL', 31 | 'latestVersion', 32 | 'isContinuous', 33 | 'installer', 34 | 'installArg', 35 | 'nicommons', 36 | 'isHidden', 37 | 'files', 38 | 'releases', 39 | ]; 40 | 41 | // Sort function 42 | function sort(object, order) { 43 | const result = {}; 44 | for (const key of order) { 45 | if (key in object) result[key] = object[key]; 46 | } 47 | return result; 48 | } 49 | function sortArray(array, order) { 50 | const result = []; 51 | for (const object of array) { 52 | result.push(sort(object, order)); 53 | } 54 | return result; 55 | } 56 | 57 | export function sortCore(object) { 58 | for (const program of ['aviutl', 'exedit']) { 59 | for (const release of object[program].releases) { 60 | release.integrity.file = sortArray( 61 | release.integrity.file, 62 | integrityFileOrder, 63 | ); 64 | release.integrity = sort(release.integrity, integrityOrder); 65 | } 66 | 67 | object[program].files = sortArray(object[program].files, fileOrder); 68 | object[program].releases = sortArray(object[program].releases, [ 69 | 'url', 70 | ...releaseOrder, 71 | ]); 72 | 73 | object[program] = sort(object[program], programOrder); 74 | } 75 | return sort(object, coreOrder); 76 | } 77 | 78 | export function sortPackages(object) { 79 | for (const packageItem of object.packages) { 80 | if ('releases' in packageItem) { 81 | for (const release of packageItem.releases) { 82 | release.integrity.file = sortArray( 83 | release.integrity.file, 84 | integrityFileOrder, 85 | ); 86 | release.integrity = sort(release.integrity, integrityOrder); 87 | } 88 | 89 | packageItem.releases = sortArray(packageItem.releases, releaseOrder); 90 | } 91 | 92 | packageItem.files = sortArray(packageItem.files, fileOrder); 93 | } 94 | 95 | object.packages = sortArray(object.packages, packageOrder); 96 | 97 | return sort(object, packagesOrder); 98 | } 99 | -------------------------------------------------------------------------------- /util/sri.js: -------------------------------------------------------------------------------- 1 | // > yarn sri "C:\path\to\some.file" 2 | 3 | import chalk from 'chalk'; 4 | import clipboardy from 'clipboardy'; 5 | import generateHash from './lib/generateHash.js'; 6 | const { yellowBright, green } = chalk; 7 | const { write } = clipboardy; 8 | 9 | async function generate(args) { 10 | const str = await generateHash(args[0]); 11 | console.log(yellowBright(str)); 12 | write(str); 13 | console.log(green('This hash has been copied in the clipboard!')); 14 | } 15 | 16 | const args = process.argv.slice(2); 17 | 18 | if (args.length >= 1) { 19 | generate(args); 20 | } else { 21 | console.error('A path is required.'); 22 | } 23 | -------------------------------------------------------------------------------- /util/update-mod.js: -------------------------------------------------------------------------------- 1 | // > yarn run mod-core 2 | // > yarn run mod-packages 3 | // > yarn run mod-convert 4 | 5 | import chalk from 'chalk'; 6 | import fs from 'fs-extra'; 7 | import { basename } from 'path'; 8 | import { format } from 'prettier'; 9 | const { readJson, writeFile } = fs; 10 | const { green, red } = chalk; 11 | 12 | // options 13 | const listJsonPath = 'v3/list.json'; 14 | 15 | async function update(args) { 16 | const newDate = new Date(); 17 | newDate.setSeconds(0, 0); 18 | 19 | const listObj = await readJson(listJsonPath, 'utf-8'); 20 | 21 | let targetObj; 22 | if (args[0] === '--core') { 23 | targetObj = listObj.core; 24 | } else if (args[0] === '--packages') { 25 | targetObj = listObj.packages[0]; 26 | } else if (args[0] === '--convert') { 27 | targetObj = listObj.convert; 28 | } else if (args[0] === '--scripts') { 29 | targetObj = listObj.scripts[0]; 30 | } 31 | 32 | const oldDate = new Date(targetObj.modified); 33 | if (newDate.getTime() > oldDate.getTime()) { 34 | const padNumber = (number) => number.toString().padStart(2, '0'); 35 | const toISODate = (date) => 36 | date.getFullYear() + 37 | '-' + 38 | padNumber(date.getMonth() + 1) + 39 | '-' + 40 | padNumber(date.getDate()) + 41 | 'T' + 42 | padNumber(date.getHours()) + 43 | ':' + 44 | padNumber(date.getMinutes()) + 45 | ':00+09:00'; 46 | targetObj.modified = toISODate(newDate); 47 | 48 | await writeFile( 49 | listJsonPath, 50 | await format(JSON.stringify(listObj), { parser: 'json', printWidth: 60 }), 51 | 'utf-8', 52 | ); 53 | 54 | console.log(green('Updated ' + basename(listJsonPath))); 55 | } 56 | 57 | console.log('Update complete.'); 58 | } 59 | 60 | const args = process.argv.slice(2); 61 | 62 | if (args.length >= 1) { 63 | update(args); 64 | } else { 65 | console.error(red('Arguments are missing!')); 66 | } 67 | -------------------------------------------------------------------------------- /v1/SPECIFICATION.md: -------------------------------------------------------------------------------- 1 | # apm-data v1 仕様書 2 | 3 | 説明にはXPathを使用しています。 4 | 5 | - **太字の要素**: 必須要素 6 | - _斜体の要素_: 任意要素 7 | 8 | ## [mod.xml](./data/mod.xml) 9 | 10 | リストの更新日時ファイル 11 | 12 | - **/mod/@version**: データバージョン(固定値: 1) 13 | - **/mod/core**: core.xmlの更新日時 14 | - **/mod/packages_list**: packages_list.xmlの更新日時 15 | 16 | ## [core.xml](./data/core.xml) 17 | 18 | AviUtlと拡張編集Pluginのデータファイル 19 | 20 | - **/core/@version**: データバージョン(固定値: 1) 21 | - **/core/${program}/files/file**: プログラムで使用されるファイルのファイル名 22 | - _/core/${program}/files/file/@optional_: インストール時に必要ないかどうか(デフォルト: false) 23 | - _/core/${program}/files/file/@directory_: ディレクトリかどうか(デフォルト: false) 24 | - _/core/${program}/files/file/@archivePath_: ファイルのアーカイブ内相対パス(デフォルト: null) 25 | - **/core/${program}/latestVersion**: プログラムの最新バージョン 26 | - **/core/${program}/releases**: プログラムのリリース 27 | - _/core/${program}/releases/@prefix_: `fileURL`のプレフィックス 28 | - **/core/${program}/releases/fileURL**: リリースされたアーカイブのURL 29 | - **/core/${program}/releases/fileURL/@version**: そのリリースのバージョン 30 | 31 | ## [packages_list.xml](./data/packages_list.xml) 32 | 33 | プラグインとスクリプトのデータファイル 34 | 35 | - **/packages/@version**: データバージョン(固定値: 1) 36 | - **/packages/package/id**: パッケージのID(重複しない半角英数字。パッケージを表すファイル名を使用し、それが無ければ、アーカイブのファイル名を使用します。一語しかないなど、重複の可能性があれば、開発者名を前に付けます。) 37 | - **/packages/package/name**: パッケージの名前(25字以内) 38 | - **/packages/package/overview**: パッケージの概要(35字以内) 39 | - **/packages/package/description**: パッケージの説明 40 | - **/packages/package/developer**: パッケージの開発者 41 | - _/packages/package/originalDeveloper_: 派生元パッケージの開発者 42 | - _/packages/package/dependencies/dependency_: 依存パッケージのID 43 | - **/packages/package/pageURL**: パッケージの紹介ページURL 44 | - **/packages/package/downloadURL**: パッケージのダウンロードページURL 45 | - _/packages/package/downloadMirrorURL_: パッケージのミラーダウンロードページURL 46 | - _/packages/package/directURL_: 一括インストール機能に使用されるURL 47 | - **/packages/package/latestVersion**: パッケージの最新バージョン 48 | - _/packages/package/latestVersion/@continuous_: 最新バージョンに追従するかどうか(デフォルト:false) 49 | - _/packages/package/installer_: インストーラーファイル名 50 | - _/packages/package/installerArg_: インストーラーに渡される引数(`$instpath`は、インストール先フォルダに置き換えられます。) 51 | - **/packages/package/files/file**: パッケージで使用されるファイルのファイル名 52 | - _/packages/package/files/file/@optional_: インストール時に必要ないかどうか(デフォルト: false) 53 | - _/packages/package/files/file/@directory_: ディレクトリかどうか(デフォルト: false) 54 | - _/packages/package/files/file/@archivePath_: ファイルのアーカイブ内相対パス(デフォルト: null) 55 | -------------------------------------------------------------------------------- /v1/data/core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | aviutl.exe 7 | aviutl.txt 8 | aviutl.aup 9 | aviutl.ini 10 | aviutl.key 11 | aviutl.sav 12 | 13 | 1.10 14 | 15 | aviutl110.zip 16 | aviutl100.zip 17 | 18 | 19 | 20 | 21 | exedit.anm 22 | exedit.auf 23 | exedit.aui 24 | exedit.auo 25 | exedit.cam 26 | exedit.ini 27 | exedit.obj 28 | exedit.scn 29 | exedit.tra 30 | exedit.txt 31 | lua.txt 32 | lua51.dll 33 | lua51jit.dll 34 | 35 | 0.92 36 | 37 | exedit93rc1.zip 38 | exedit92.zip 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /v1/data/mod.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2021-12-11T12:55:00+09:00 5 | 2021-12-11T20:10:00+09:00 6 | 7 | -------------------------------------------------------------------------------- /v1/schema/au.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 37 | 43 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /v1/schema/core.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /v1/schema/mod.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /v1/schema/packages_list.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 49 | 50 | 55 | 56 | 57 | 58 | 59 | 60 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 77 | 78 | 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /v2/SPECIFICATION.md: -------------------------------------------------------------------------------- 1 | # apm-data v2 仕様書 2 | 3 | 説明にはXPathを使用しています。 4 | 5 | - **太字の要素**: 必須要素 6 | - _斜体の要素_: 任意要素 7 | 8 | ## [mod.xml](./data/mod.xml) 9 | 10 | リストの更新日時ファイル 11 | 12 | - **/mod/@version**: データバージョン(固定値: 2) 13 | - **/mod/core**: core.xmlの更新日時 14 | - **/mod/packages_list**: packages_list.xmlの更新日時 15 | - **/mod/convert**: convert.jsonの更新日時 16 | - **/mod/packages_list**: scripts.jsonの更新日時 17 | 18 | ## [core.xml](./data/core.xml) 19 | 20 | AviUtlと拡張編集Pluginのデータファイル 21 | 22 | - **/core/@version**: データバージョン(固定値: 2) 23 | - **/core/{program}/latestVersion**: プログラムの最新バージョン 24 | - **/core/{program}/files/file**: プログラムで使用されるファイルのファイル名 25 | - _/core/{program}/files/file/@optional_: インストール時に必要ないかどうか(デフォルト: false) 26 | - _/core/{program}/files/file/@installOnly_: アンインストール不可のファイルかどうか(デフォルト: false) 27 | - _/core/{program}/files/file/@directory_: ディレクトリかどうか(デフォルト: false) 28 | - _/core/{program}/files/file/@archivePath_: ファイルのアーカイブ内相対パス(デフォルト: null) 29 | - _/core/{program}/files/file/@obsolete_: 最新バージョンに存在しないかどうか(デフォルト: false) 30 | - **/core/{program}/releases/release**: プログラムのリリース 31 | - **/core/{program}/releases/release/@version**: そのリリースのバージョン 32 | - **/core/{program}/releases/release/url**: リリースされたアーカイブのURL 33 | - _/core/{program}/releases/release/files/file_: そのバージョンにのみ含まれるファイル(**/core/{program}/files/file**を参照) 34 | - _/core/{program}/releases/release/archiveIntegrity_: アーカイブのハッシュ 35 | - _/core/{program}/releases/release/integrities/integrity_: ファイルのハッシュ 36 | - _/core/{program}/releases/release/integrities/integrity/@target_: 対象のファイル名 37 | 38 | ## [packages.xml](./data/packages.xml) 39 | 40 | プラグインとスクリプトのデータファイル 41 | 42 | - **/packages/@version**: データバージョン(固定値: 2) 43 | - **/packages/package/id**: パッケージのID(重複しない半角英数字。パッケージを表すファイル名を使用し、それが無ければ、アーカイブのファイル名を使用します。一語しかないなど、重複の可能性があれば、開発者名を前に付けます。) 44 | - **/packages/package/name**: パッケージの名前(25字以内) 45 | - **/packages/package/overview**: パッケージの概要(35字以内) 46 | - **/packages/package/description**: パッケージの説明 47 | - **/packages/package/developer**: パッケージの開発者 48 | - _/packages/package/originalDeveloper_: 派生元パッケージの開発者 49 | - _/packages/package/dependencies/dependency_: 依存パッケージのID 50 | - **/packages/package/pageURL**: パッケージの紹介ページURL 51 | - **/packages/package/downloadURL**: パッケージのダウンロードページURL 52 | - _/packages/package/downloadMirrorURL_: パッケージのミラーダウンロードページURL 53 | - _/packages/package/directURL_: 一括インストール機能に使用されるURL 54 | - **/packages/package/latestVersion**: パッケージの最新バージョン 55 | - _/packages/package/latestVersion/@continuous_: 最新バージョンに追従するかどうか(デフォルト:false) 56 | - _/packages/package/installer_: インストーラーファイル名 57 | - _/packages/package/installerArg_: インストーラーに渡される引数(`$instpath`は、インストール先フォルダに置き換えられます。) 58 | - **/packages/package/files/file**: パッケージで使用されるファイルのファイル名 59 | - _/packages/package/files/file/@optional_: インストール時に必要ないかどうか(デフォルト: false) 60 | - _/packages/package/files/file/@installOnly_: アンインストール不可のファイルかどうか(デフォルト: false) 61 | - _/packages/package/files/file/@directory_: ディレクトリかどうか(デフォルト: false) 62 | - _/packages/package/files/file/@archivePath_: ファイルのアーカイブ内相対パス(デフォルト: null) 63 | - _/packages/package/files/file/@obsolete_: 最新バージョンに存在しないかどうか(デフォルト: false) 64 | - _/packages/package/releases/release_: パッケージのリリース 65 | - **/packages/package/releases/release/@version**: そのリリースのバージョン 66 | - _/packages/package/releases/release/archiveIntegrity_: アーカイブのハッシュ 67 | - _/packages/package/releases/release/integrities/integrity_: ファイルのハッシュ 68 | - _/packages/package/releases/release/integrities/integrity/@target_: 対象のファイル名 69 | 70 | ## [scripts.json](./data/scripts.json) 71 | 72 | スクリプト配布サイトのデータファイル 73 | 74 | - **webpage**: スクリプト配布サイトの一覧(Object[]) 75 | - **webpage\[number\].url**: スクリプト配布サイトのURL(String) 76 | - **webpage\[number\].developer**: スクリプト配布サイトのURL(String) 77 | - **webpage\[number\].description**: スクリプト配布サイトの説明(String) 78 | - **scripts**: スクリプトの判別に関する配列(後ろの情報が優先されます)(Object[]) 79 | - **scripts\[number\].match**: ダウンロードファイルのURLとの一致パターン(String) 80 | - `packages.xml`に未登録の場合 81 | - **scripts\[number\].folder**: ファイルを配置するフォルダ名(`script`フォルダ下)(String) 82 | - **scripts\[number\].developer**: スクリプトの開発者(String) 83 | - **scripts\[number\].dependencies**: 依存パッケージのIDの配列(String[]) 84 | - `packages.xml`に登録済みの場合 85 | - **scripts\[number\].redirect**: リダイレクトするパッケージのID(String) 86 | 87 | ## [convert.json](./data/convert.json) 88 | 89 | ID変換の対応のファイル 90 | 91 | - 変換前のIDをkey、変換後のIDをvalueとする。 92 | 93 | IDの誤字や仕様変更への対応を想定しています。 94 | 95 | 変換を削除することは、基本的に禁止です。 96 | レビュー時・マージ時には十分注意してください。 97 | -------------------------------------------------------------------------------- /v2/data/convert.json: -------------------------------------------------------------------------------- 1 | { 2 | "InputPipePlugin": "amate/InputPipePlugin", 3 | "MFVideoReader": "amate/MFVideoReader", 4 | "PropertyWindowFixerPlugin": "amate/PropertyWindowFixerPlugin", 5 | "adjustaudio": "aoytsk/adjustaudio", 6 | "aoytskdummy": "aoytsk/dummy", 7 | "aoytskmisc": "aoytsk/misc", 8 | "aoytskrec": "aoytsk/rec", 9 | "aoytskrecovery": "aoytsk/recovery", 10 | "autoloader": "aoytsk/autoloader", 11 | "cmpwnd": "aoytsk/cmpwnd", 12 | "dbgwnd": "aoytsk/dbgwnd", 13 | "easymp4": "aoytsk/easymp4", 14 | "exeditbutton": "aoytsk/exeditbutton", 15 | "extext": "aoytsk/extext", 16 | "extoolbar": "aoytsk/extoolbar", 17 | "inputprofile": "aoytsk/inputprofile", 18 | "jumpbarx": "aoytsk/jumpbarx", 19 | "jumpdlg": "aoytsk/jumpdlg", 20 | "jumpdlg32": "aoytsk/jumpdlg32", 21 | "pluginlist": "aoytsk/pluginlist", 22 | "quickopen": "aoytsk/quickopen", 23 | "seekbarx": "aoytsk/seekbarx", 24 | "statbarx": "aoytsk/statbarx", 25 | "trayiconx": "aoytsk/trayiconx", 26 | "wndman": "aoytsk/wndman", 27 | "aulsAddshorcut": "auls/addshortcut", 28 | "aulsAliaslist": "auls/aliaslist", 29 | "aulsConfirmclose": "auls/confirmclose", 30 | "aulsoutputpng": "auls/outputpng", 31 | "aulsRendermask": "auls/rendermask", 32 | "aulsTransparence": "auls/transparence", 33 | "framesound": "auls/framesound", 34 | "AviUtlLabanimate": "AviUtlLab/animate", 35 | "AviUtlLabchapter": "AviUtlLab/chapter", 36 | "AviUtlLabcroma": "AviUtlLab/croma", 37 | "cmdex": "AviUtlLab/cmdex", 38 | "dsinput": "AviUtlLab/dsinput", 39 | "itvfr": "AviUtlLab/itvfr", 40 | "itvfrdeint": "AviUtlLab/itvfrdeint", 41 | "vfrout": "AviUtlLab/vfrout", 42 | "wmvoutvfr": "AviUtlLab/wmvoutvfr", 43 | "x264out": "AviUtlLab/x264out", 44 | "ePiAulsMemref": "ePi/aulsMemref", 45 | "HolyWuLSMASHWorks": "HolyWu/LSMASHWorks", 46 | "aviutlWaveformPreview": "karoterra/aviutlWaveformPreview", 47 | "MarkdownEX": "karoterra/MarkdownEX", 48 | "MrOjiiLSMASHWorks": "MrOjii/LSMASHWorks", 49 | "aviutlBrowser": "oov/aviutlBrowser", 50 | "aviutlBrowserMinecraftSkin": "oov/aviutlBrowserMinecraftSkin", 51 | "CacheText": "oov/CacheText", 52 | "GcmzDrops": "oov/GCMZDrops", 53 | "oovBridge": "oov/bridge", 54 | "oovloudness": "oov/loudness", 55 | "oovPrima": "oov/prima", 56 | "PSDToolKit": "oov/PSDToolKit", 57 | "RelMovieHandle": "oov/RelMovieHandle", 58 | "textassist": "oov/textassist", 59 | "ZRamPreview": "oov/ZRamPreview", 60 | "AviutlColor": "rigaya/AviutlColor", 61 | "bandingMTSIMD": "rigaya/bandingMTSIMD", 62 | "delogoSIMD": "rigaya/delogoSIMD", 63 | "ffmpegOut": "rigaya/ffmpegOut", 64 | "NVEnc": "rigaya/NVEnc", 65 | "QSVEnc": "rigaya/QSVEnc", 66 | "rigayaAfs": "rigaya/afs", 67 | "rigayaEdgelevelMT": "rigaya/edgelevelMT", 68 | "rigayaPmdMt": "rigaya/pmdMt", 69 | "svtAV1guiEx": "rigaya/svtAV1guiEx", 70 | "VCEEnc": "rigaya/VCEEnc", 71 | "x264guiEx": "rigaya/x264guiEx", 72 | "x265guiEx": "rigaya/x265guiEx", 73 | "fanClipping": "rikky/fanClipping", 74 | "rikkyModuleMemory": "rikky/rikkyModuleMemory", 75 | "rikkyModule2": "rikky/rikkyModule2", 76 | "rikkyRoll": "rikky/roll", 77 | "rikkeySeparate1": "rikky/separate1", 78 | "rikkeySeparate2": "rikky/separate2", 79 | "EasingTra2020": "UndoFish/easingTra2020", 80 | "VFRmaniacLSMASHWorks": "VFRmaniac/LSMASHWorks", 81 | "SigContrastFastAviUtl": "yumetodo/SigContrastFastAviUtl", 82 | "Satsuki": "satsuki/satsuki", 83 | "VSThost4aviutl": "AiosCiao/VSThost4aviutl", 84 | "LSMASHWorks": "pop4bit/LSMASHWorks" 85 | } 86 | -------------------------------------------------------------------------------- /v2/data/core.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1.10 6 | 7 | 8 | aviutl.exe 9 | aviutl.txt 10 | aviutl.aup 11 | aviutl.ini 12 | aviutl.key 13 | aviutl.sav 14 | 15 | 16 | 17 | 18 | http://spring-fragrance.mints.ne.jp/aviutl/aviutl110.zip 19 | sha384-YJcXuvmKzJ3nUsGPHaylBdFI9Q4AxAwSDUqpDyZ2wLzYQaU/OE1abw8tMpLf4Jwq 21 | 22 | sha384-BsJg59A0t7oHOZp54iljF4nB2V6tYzHiPhYW/h16Oz3qE7qhFFXx6AvhdajnwKfD 25 | 26 | 27 | 28 | 29 | http://spring-fragrance.mints.ne.jp/aviutl/aviutl100.zip 30 | sha384-pDm14wvnIx2y4nfsuVJx15k9jTLHGrmTB24m97P5VafHbIXAeFsMRieAfCfASMfi 32 | 33 | sha384-TrRFAxOVGtJIhyWV20dXHEOmss96xEHYHaNE4/+t3kvxUGF3IjOP55AnznoNzMom 36 | 37 | 38 | 39 | 40 | 41 | 42 | 0.92 43 | 44 | 45 | exedit.anm 46 | exedit.auf 47 | exedit.aui 48 | exedit.auo 49 | exedit.cam 50 | exedit.ini 51 | exedit.obj 52 | exedit.scn 53 | exedit.tra 54 | exedit.txt 55 | lua.txt 56 | lua51.dll 57 | lua51jit.dll 58 | 59 | 60 | 61 | 62 | http://spring-fragrance.mints.ne.jp/aviutl/exedit93rc1.zip 63 | sha384-tTGQHYA16JBSXELzf7w0PAavkkoOjZFC6cWJzG3l2EssP5jeZO+Ou0xndh/vOolW 65 | 66 | sha384-Zbt+Oc8pG3dGXmPqr3c767Y5/3/FaSVngmipn0v1KyXRW8dWVZuOZ2WTrP09YRDZ 69 | 70 | 71 | 72 | 73 | http://spring-fragrance.mints.ne.jp/aviutl/exedit92.zip 74 | sha384-1+quM7LqkkFzFKjDoipezYsRsAqKXZC+OM1uPNJpzT58pMYFKnlGrniYxe8amgZK 76 | 77 | sha384-aW5769CsMnmDGnZzNzqP4KFvM2npA8gfopzwB//TBbwYfoLZtGvoP/oXZctVEZxp 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /v2/data/mod.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2022-04-04T18:12:00+09:00 5 | 2022-08-22T05:49:00+09:00 6 | 2021-12-11T16:03:00+09:00 7 | 2022-07-01T22:16:00+09:00 8 | 9 | -------------------------------------------------------------------------------- /v2/data/scripts.json: -------------------------------------------------------------------------------- 1 | { 2 | "webpage": [ 3 | { 4 | "url": "https://hazumurhythm.com/wev/amazon/?filter=all&search=Aodaruma&search_price=&sort=viewh&page=1", 5 | "developer": "Aodaruma", 6 | "description": "スクリプトの例: 3DObject, CameraDisplays, ClipFigures, CycleAffect, DelayBuffer, FlatShadow, ImageLoader, LoopTextures, MaskingSlider, Modulator, OriginalToon, ParallelCamera, Partition&Flex, PixelSort, Repeater, RepeatingClip, RikkyReflection, SphereMaterialTest, Trackers, UVmapping(beta), VariableTrack, WipeClipping, kerning, light&shadow, キャッシュ保存RM, グラデーションマップ(Re), 対角線クリッピング, 平行四辺形, 抜き出し縁取り, 段付き円形, 簡易Glitch++(派生)" 7 | }, 8 | { 9 | "url": "http://auls.client.jp/", 10 | "developer": "yu_noimage_", 11 | "description": "スクリプトの例: アニメーション効果, トラックバー, Zバッファ, 指定レイヤー以外を半透明化" 12 | }, 13 | { 14 | "url": "https://drive.google.com/drive/folders/1axN8BDCSGY3w1YaeUgZ4TjlU7MzwRoGI", 15 | "developer": "gometh", 16 | "description": "スクリプトの例: @グラフ描画.anm, @パチ文字.anm, カード並べ.zip, クソデカレベルアップくん.exa, クリッピングして登場.anm, テキストSE.anm, ドカベン.anm, ハーフトーン(g).anm, ひらがな小さ.anm, ベベルとエンボス(g).anm, 円状音声波形.anm, 角丸四角形.obj, 角丸正多角形.obj, 任意軸回転.anm, 非弾性衝突.tra, 麻雀牌スクリプト.zip, 満ち欠け円.obj, 漫画化v3.zip" 17 | }, 18 | { 19 | "url": "https://twitter.com/i/moments/950334056461344768", 20 | "developer": "kaisatsu", 21 | "description": "スクリプトの例: @バック.tra, スケールワイプ.anm, なめらか縁取り.anm, バウンド.tra, 減衰振動.tra, 減衰振動(微分).tra, 光彩.anm, 光彩内側(仮).anm" 22 | }, 23 | { 24 | "url": "https://github.com/karoterra/aviutl-scripts", 25 | "developer": "karoterra", 26 | "description": "スクリプトの例: @サムネチェック.obj, @ヨッシーアイランド.obj, Karoterra.lua, タイル素材切り出し.anm" 27 | }, 28 | { 29 | "url": "http://niconicotetu.web.fc2.com/download_page.html", 30 | "developer": "テツ", 31 | "description": "スクリプトの例: 特製パーティクル, 縞図形, 順番に出現, ニュースプリント, フェード+α, スポットライト, ドット化, テキストに枠, 雨3D, トーナメント, 3D音声波形(tetsu), Z軸ループ, シャッター, 粒子化, 転がる多角形, 格子線, 正多面体(正十二面体を除く), Trackingライン, 立方体を並べる, 球上パーティクル, 波(3D)化, 波(3D), ハチの巣, ターゲット, 時計, 円形に並んだオブジェクト, 魚眼レンズ, なめくじ, 軌跡配置, 回転ブラー(っぽいもの), 渦, ノイズマスク, ターゲット(カメラ効果), 跳ね返るボール, ランダム配置, お絵かきマスク, (3D)ブラインド, 巻く(裏面あり), 巻く(裏面なし)" 32 | }, 33 | { 34 | "url": "https://tim3.web.fc2.com/sidx.htm", 35 | "developer": "ティム", 36 | "description": "スクリプトの例: ライン抽出T, ひび割れガラスT, 罫線T, 低解像度T, 注ぎT, ジグザグ塗りT, バーコードT, 色調調整セットver6, カメレオン効果, ブロマガ, 縁取りT, ブロックラスターT, ぷよぷよT, 網点分解T, 集中線T, マルチラインT, リール回転T, 風揺れT, ストロークT, twitchっぽいものT, ライントーン&ハーフトーン, ラフエッジ, 透明度指定, モーションタイル, ベジエ曲線による軌道調整, フィルターセット, 透明塗り, 簡易モーフィング, 色抽出, 燃焼, ワイヤー3D, TrackingラインEasy, オーラ放出, シーンチェンジセット, スターバースト, 砕け散るパズル, ニコ動(V1), スカイドーム, 虹色グラデーション, 色収差, ニコ動, 領域枠, ニコ動(V1), 二十六面体, 標準エフェクトのみ使った簡単な作成例, 放射分布 変色パーティクル, 曲面変形, な~さりい☆らいむ風TA, 輝度ワイプ, グリッドワイプ, ツイスター, 3D音声波形, 色付きエッジ抽出, つまむ, インク(+ひょうたん), ニコ動, スプリット, 蜂の巣モザイク, 正多面体, カスタムフレア, ニコ動, 回転ブラー, ニコ動(V1), ランダムブラー, フィルム焦げ, ゆらめき, 斜めブラインド(改), 極座標変換+ぼかしミラー, 小物(カメラデータコピー等), 稲妻, 砕けたガラス, MMDカメラデータ読込, オートターゲット, ライトバースト, バニシングポイント2, ニコ動(V1), バニシングポイント, ニコ動(V1), 任意多角形カット, 簡易リピーター, ニコ動(V1), 時系列音声波形, 任意多角形カスタムオブジェクト, 泡, 輪郭追跡, ニコ動(V1), 一時保存読込, 多色グラデーション, 砕け散る球, グループ補助, エンボスタイル, 砕け散る(改), 簡易ワープ(改), 簡易ワープ, 簡易モーションパス(パス数無制限版), 簡易モーションパス, 歯車変形, 直方体展開, ルービックキューブ配置, ニコ動, はためき, レンズフレア, 多角錐変形, ニコ動(V1)" 37 | }, 38 | { 39 | "url": "https://www.dropbox.com/sh/u73uud29hcxlply/AABH9ZhzL1P1kX-bWrL4asdDa", 40 | "developer": "Respectrum93", 41 | "description": "スクリプトの例: @線を描画.anm, Bezier移動.anm, CircleSlicer.anm, DelayDraw2.anm, DisplacementMap-B.anm, GEN-VTX.zip, GetColor-V2r.zip, MultiSlicer_P.anm, OBJ Reader.zip, old_script_etc.zip, マルチベジェ軌道.zip, レイヤーに線を描画.anm, 音声データlink.tra, 音声データ取得.obj, 旗.zip" 42 | }, 43 | { 44 | "url": "http://hazumurhythm.com/wev/amazon/?filter=editor&search=rikky&sort=viewh&page=1", 45 | "developer": "rikky", 46 | "description": "スクリプトの例: 扇クリッピングR, パーティクル(R), 立体化(R), タイピング, パーツ分割, ティムさん風, カラーパレット, カメラ手ぶれ(R), ロール巻取(ページめくり), 色ずれ(R), シャッフルレター, パペットピンツール, アウトライン, グループアニメーションGA, 多角形モザイクマスク, 書道(R), パララックス視差効果, 拡張イージング, 合作テキストアニメーション, ライン*(R), スライドカット, 音声読み上げ, ミックスレター, MIDI譜表示, パーティクル(R)カスタムオブジェクト, 合成モード拡張, 脅迫文と夜露死苦(当て漢字)テキスト, 内側シャドー, 乙女ゲームの破滅フラグしかない悪役令嬢に転生してしまったED風, ボーン制御, ポリゴン表示(R), ハンディカム, お絵かき, グラデーション(R), ランダムフォント, カケアミ, 日周運動, 崩れ落ちる, シームレス, シーンチェンジセット, トランプ, シーンチェンジアニメ, モザイク(R), ガラス球, お絵かきイージング, スライドパズル, 簡易変形(r), スロット, どうぶつの森風セリフ枠, ドミノ, 透明度縁取りや画像合成プラスなど, AA(アスキーアート)化, MMDクレジット, 中二病戀エンディング風ライト(遠近照明), 設定内パラメーター, ランダム動画, カラフルブロックノイズ, 簡易部分フィルター, TAつるし紐, カスタムフレア(カメラ対応), 全方位ミラー, パズル風ランダム, 芒星(魔法陣), 少々ぼかし, ランダム単色化" 47 | }, 48 | { 49 | "url": "https://bowlroll.net/file/3777", 50 | "developer": "さつき", 51 | "description": "スクリプトの例: AviUtlスクリプト一式" 52 | }, 53 | { 54 | "url": "https://shummg.work/downloads/", 55 | "developer": "しゅう", 56 | "description": "スクリプトの例: @Square-Advanced, @DisplaySizeオセロ, @球座標回転, @任意関数図形, @媒介変数図形, @年月日カウンター, @等間隔に配置, @カメラ座標, @座標制御, @RadialPosition, @SphericalRadialPosition, @十字, @角丸十字, @放射線, PercentageClipping, @QR, @角丸吹き出し, @カラオケテキスト, @心電図, @カラーバー, @Winアイコン, @TA交互移動, オセロ, マインスイーパ, 明度着色, 一括画像編集, @ZoomLine, @ScreenCapture, @テキスト遷移, @モザイクとノイズ, @MathTrack, @BufferMask, トリミングS, WaveRing" 57 | }, 58 | { 59 | "url": "https://www.nicovideo.jp/user/26576669/mylist/37628454", 60 | "developer": "UndoFish", 61 | "description": "スクリプトの例: トラックバー対応イージングスクリプト 2020版, イージング対応動画オブジェクト, 可変移動量指定, 動画ループ, カウントアップテキストもどき, 移動軌跡マスク, 最終フレームを描画, EXO作成_顔追跡入り, EXO生成スクリプト(輪郭Trackingラインなど), 曲げスクリプト, クレヨン, 文字用 輪郭追跡, 9grid(四辺の枠を保って拡大), Eなし位置固定_拡大クリッピング" 62 | }, 63 | { 64 | "url": "https://www.nicovideo.jp/series/138505", 65 | "developer": "ウサギ", 66 | "description": "スクリプトの例: カバー付ワイプ, 展開for出力プラグイン, シャッフルレター, 角付き丸吹き出し, 簡易水玉, 丸付折線テキスト, カバー画像付ワイプ" 67 | } 68 | ], 69 | "scripts": [ 70 | { 71 | "match": ["https://github.com/Aodaruma/Aodaruma-AviUtl-Script/releases*"], 72 | "folder": "aodaruma", 73 | "developer": "Aodaruma", 74 | "dependencies": ["rikky/rikkyModuleMemory|rikky/rikkyModule2"] 75 | }, 76 | { 77 | "match": [ 78 | "https://github.com/Aodaruma/Aodaruma-AviUtl-Script/releases*/3DObject.zip*" 79 | ], 80 | "folder": "aodaruma", 81 | "developer": "Aodaruma", 82 | "dependencies": [ 83 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 84 | "respectrum93/oldScripts" 85 | ] 86 | }, 87 | { 88 | "match": ["http://auls.client.jp/*"], 89 | "folder": "auls", 90 | "developer": "yu_noimage_", 91 | "dependencies": [] 92 | }, 93 | { 94 | "match": ["http://auls.client.jp/script/auls_zbuffer.zip*"], 95 | "folder": "auls", 96 | "developer": "yu_noimage_", 97 | "dependencies": ["ePi/aulsMemref"] 98 | }, 99 | { 100 | "match": [ 101 | "https://drive.google.com/drive/folders/1axN8BDCSGY3w1YaeUgZ4TjlU7MzwRoGI*" 102 | ], 103 | "folder": "gometh", 104 | "developer": "gometh", 105 | "dependencies": [ 106 | "ePi/LuaJIT", 107 | "rikky/rikkyModuleMemory|rikky/rikkyModule2" 108 | ] 109 | }, 110 | { 111 | "match": ["*麻雀牌スクリプト*.zip*"], 112 | "folder": "麻雀牌", 113 | "developer": "gometh", 114 | "dependencies": ["rikky/rikkyModuleMemory|rikky/rikkyModule2"] 115 | }, 116 | { 117 | "match": ["https://twitter.com/i/moments/950334056461344768*"], 118 | "folder": "kaisatsu", 119 | "developer": "kaisatsu", 120 | "dependencies": [] 121 | }, 122 | { 123 | "match": ["https://github.com/karoterra/aviutl-scripts*"], 124 | "folder": "karoterra", 125 | "developer": "karoterra", 126 | "dependencies": [] 127 | }, 128 | { 129 | "match": ["http://niconicotetu.web.fc2.com/download_page.html*"], 130 | "folder": "tetu", 131 | "developer": "テツ", 132 | "dependencies": [] 133 | }, 134 | { 135 | "match": ["https://tim3.web.fc2.com/sidx.htm*"], 136 | "folder": "tim", 137 | "developer": "ティム", 138 | "dependencies": [] 139 | }, 140 | { 141 | "match": ["https://tim3.web.fc2.com/script/*BriWipe*.zip"], 142 | "redirect": "tim/briwipe" 143 | }, 144 | { 145 | "match": [ 146 | "https://www.dropbox.com/sh/u73uud29hcxlply/AABH9ZhzL1P1kX-bWrL4asdDa*" 147 | ], 148 | "folder": "respectrum93", 149 | "developer": "Respectrum93", 150 | "dependencies": [] 151 | }, 152 | { 153 | "match": ["*old_script_etc*.zip*"], 154 | "redirect": "respectrum93/oldScripts" 155 | }, 156 | { 157 | "match": ["https://hazumurhythm.com/wev/amazon/?*search=rikky*"], 158 | "folder": "rikky", 159 | "developer": "rikky", 160 | "dependencies": ["rikky/rikkyModuleMemory|rikky/rikkyModule2"] 161 | }, 162 | { 163 | "match": ["*fan_clipping*.zip*"], 164 | "redirect": "rikky/fanClipping" 165 | }, 166 | { 167 | "match": ["*ロール巻取(ページめくり)*.zip*"], 168 | "redirect": "rikky/roll" 169 | }, 170 | { 171 | "match": ["*パーツ分割*.zip*"], 172 | "redirect": "rikky/separate1|rikky/separate2" 173 | }, 174 | { 175 | "match": ["*立体化(R)*.zip*"], 176 | "redirect": "rikky/dimensionize1|rikky/dimensionize2" 177 | }, 178 | { 179 | "match": ["https://bowlroll.net/file/3777*"], 180 | "redirect": "satsuki/satsuki" 181 | }, 182 | { 183 | "match": ["https://www.nicovideo.jp/user/26576669/mylist/37628454*"], 184 | "folder": "undofish", 185 | "developer": "UndoFish", 186 | "dependencies": [] 187 | }, 188 | { 189 | "match": ["https://shummg.work/downloads/*"], 190 | "folder": "shummg", 191 | "developer": "しゅう", 192 | "dependencies": [ 193 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 194 | "shummg/textmodule", 195 | "ePi/LuaJIT" 196 | ] 197 | }, 198 | { 199 | "match": ["*AviUtl-Othello*", "*AviUtl-MineSweeper*"], 200 | "folder": "shummg", 201 | "developer": "しゅう", 202 | "dependencies": [ 203 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 204 | "shummg/textmodule", 205 | "ePi/LuaJIT", 206 | "shummg/shuGame" 207 | ] 208 | }, 209 | { 210 | "match": ["*@Winアイコン*"], 211 | "folder": "shummg", 212 | "developer": "しゅう", 213 | "dependencies": [ 214 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 215 | "shummg/textmodule", 216 | "ePi/LuaJIT", 217 | "shummg/dotdrawer" 218 | ] 219 | }, 220 | { 221 | "match": ["*easing_tra_2020*.zip*"], 222 | "redirect": "UndoFish/easingTra2020" 223 | }, 224 | { 225 | "match": [ 226 | "https://z9z.sakura.ne.jp/box/aviutl/*", 227 | "http://takeshima.halfmoon.jp/room/aviutl*" 228 | ], 229 | "folder": "usagi", 230 | "developer": "ウサギ", 231 | "dependencies": [] 232 | } 233 | ] 234 | } 235 | -------------------------------------------------------------------------------- /v2/schema/au.xsd: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 19 | 25 | 31 | 36 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /v2/schema/core.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 49 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /v2/schema/mod.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /v2/schema/packages.xsd: -------------------------------------------------------------------------------- 1 | 2 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 43 | 44 | 45 | 46 | 51 | 52 | 53 | 54 | 55 | 56 | 61 | 62 | 63 | 64 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 103 | 108 | 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /v2/schema/scripts.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "type": "object", 4 | "properties": { 5 | "webpage": { 6 | "type": "array", 7 | "description": "List of script distribution sites", 8 | "items": { 9 | "type": "object", 10 | "description": "Script distribution site", 11 | "properties": { 12 | "url": { 13 | "type": "string", 14 | "description": "URL of the script distribution site" 15 | }, 16 | "developer": { 17 | "type": "string", 18 | "description": "Developer's name" 19 | }, 20 | "description": { 21 | "type": "string", 22 | "description": "Description of the site" 23 | } 24 | }, 25 | "required": ["url", "developer"] 26 | } 27 | }, 28 | "scripts": { 29 | "type": "array", 30 | "description": "Information to be added to the downloaded script. In case of multiple matches, the later information in the array takes priority.", 31 | "items": { 32 | "oneOf": [ 33 | { 34 | "type": "object", 35 | "description": "Information required for automatic installation", 36 | "properties": { 37 | "match": { 38 | "type": "array", 39 | "description": "Compare these with browser history to determine which script have been downloaded", 40 | "items": { 41 | "type": "string" 42 | } 43 | }, 44 | "folder": { 45 | "type": "string", 46 | "description": "Name of the folder where script will be installed" 47 | }, 48 | "developer": { 49 | "type": "string", 50 | "description": "The name of the script developer" 51 | }, 52 | "dependencies": { 53 | "type": "array", 54 | "description": "Script dependencies", 55 | "items": { 56 | "type": "string" 57 | } 58 | } 59 | }, 60 | "required": ["match", "folder", "developer", "dependencies"] 61 | }, 62 | { 63 | "type": "object", 64 | "description": "Information to fall back to the normal installation method", 65 | "properties": { 66 | "match": { 67 | "type": "array", 68 | "description": "Compare these with browser history to determine which script have been downloaded", 69 | "items": { 70 | "type": "string" 71 | } 72 | }, 73 | "redirect": { 74 | "type": "string", 75 | "description": "Install as a package with the specified id" 76 | } 77 | }, 78 | "required": ["match", "redirect"] 79 | } 80 | ] 81 | } 82 | } 83 | }, 84 | "required": ["webpage", "scripts"] 85 | } 86 | -------------------------------------------------------------------------------- /v3/SPECIFICATION.md: -------------------------------------------------------------------------------- 1 | # apm-data v3 仕様書 2 | 3 | - **太字の要素**: 必須要素 4 | - _斜体の要素_: 任意要素 5 | 6 | ## [list.json](./list.json) 7 | 8 | リストの一覧と更新日時ファイル 9 | 10 | - **core**: AviUtlと拡張編集Pluginのデータファイル(DataFileInfo) 11 | - **convert**: ID変換の対応のファイル(DataFileInfo) 12 | - **packages**: プラグインとスクリプトのデータファイル(DataFileInfo[]) 13 | - **scripts**: スクリプト配布サイトのデータファイル(DataFileInfo[]) 14 | 15 | ### DataFileInfo 16 | 17 | - **DataFileInfo.path**: データファイルの場所(`list.json`があるディレクトリからの相対パス; 該当ディレクトリ以下の階層のみ) 18 | - **DataFileInfo.modified**: データファイルの更新日時 19 | 20 | 以下のファイル名は、apm-dataの例です。 21 | 22 | ## [core.json](./core.json) 23 | 24 | AviUtlと拡張編集Pluginのデータファイル 25 | 26 | - **version**: データバージョン(固定値: 3) 27 | - **\[program\].files**: プログラムで使用されるファイルの一覧(FileInfo[]) 28 | - **FileInfo.filename**: プログラムで使用されるファイルのファイル名(インストール先フォルダからの相対パス)(String) 29 | - _FileInfo.isUninstallOnly_: インストール時に必要ないかどうか(デフォルト: false) 30 | - _FileInfo.isInstallOnly_: アンインストール不可のファイルかどうか(デフォルト: false) 31 | - _FileInfo.isDirectory_: ディレクトリかどうか(デフォルト: false) 32 | - _FileInfo.archivePath_: ファイルのアーカイブ内相対パス(String) 33 | - **\[program\].latestVersion**: プログラムの最新バージョン(String) 34 | - **\[program\].releases**: プログラムのリリース一覧(ReleaseData[]) 35 | - **ReleaseData.version**: そのリリースのバージョン(String) 36 | - **ReleaseData.url**: リリースされたアーカイブのURL(String) 37 | - **ReleaseData.integrity**: ハッシュの一覧(Array) 38 | - **ReleaseData.integrity.archive**: アーカイブファイルのハッシュ(String) 39 | - **ReleaseData.integrity.file**: パッケージファイルのハッシュ一覧(FileIntegrityData[]) 40 | - **FileIntegrityData.target**: ハッシュの該当ファイル(String) 41 | - **FileIntegrityData.hash**: ハッシュ(`sha384-`などから始まるString) 42 | 43 | ## [packages.json](./packages.json) 44 | 45 | プラグインとスクリプトのデータファイル 46 | 47 | - **version**: データバージョン(固定値: 3) 48 | - **packages\[number\].id**: パッケージのID(重複しない半角英数字。`<開発者ID>/`に続けて、パッケージを表すファイル名を使用し、それが無ければ、アーカイブのファイル名を使用します。)(String) 49 | - **packages\[number\].name**: パッケージの名前(25字以内)(String) 50 | - **packages\[number\].overview**: パッケージの概要(35字以内)(String) 51 | - **packages\[number\].description**: パッケージの説明(String) 52 | - **packages\[number\].developer**: パッケージの開発者(String) 53 | - _packages\[number\].originalDeveloper_: 派生元パッケージの開発者(String) 54 | - _packages\[number\].dependencies_: 依存パッケージのID一覧(String[]) 55 | - _packages\[number\].conflicts_: 競合するパッケージのID一覧(未実装)(String[]) 56 | - _packages\[number\].provides_: 互換性のあるパッケージのID一覧(未実装)(String[]) 57 | - **packages\[number\].pageURL**: パッケージの紹介ページURL(String) 58 | - **packages\[number\].downloadURLs**: パッケージのダウンロードページURL一覧(String[]) 59 | - _packages\[number\].directURL_: 一括インストール機能に使用されるURL(String) 60 | - **packages\[number\].latestVersion**: パッケージの最新バージョン(String) 61 | - _packages\[number\].@continuous_: 最新バージョンに追従するかどうか(デフォルト:false) 62 | - _packages\[number\].installer_: インストーラーファイル名(String) 63 | - _packages\[number\].installerArg_: インストーラーに渡される引数(`$instpath`は、インストール先フォルダに置き換えられます。)(String) 64 | - _packages\[number\].nicommons_: ニコニ・コモンズID(String) 65 | - _packages\[number\].isHidden_: インストールされるまで表示されないようにするかどうか(デフォルト: false) 66 | - **packages\[number\].files**: プログラムで使用されるファイルの一覧(FileInfo[]) 67 | - **FileInfo.filename**: プログラムで使用されるファイルのファイル名(インストール先フォルダからの相対パス)(String) 68 | - _FileInfo.isUninstallOnly_: インストール時に必要ないかどうか(デフォルト: false) 69 | - _FileInfo.isInstallOnly_: アンインストール不可のファイルかどうか(デフォルト: false) 70 | - _FileInfo.isDirectory_: ディレクトリかどうか(デフォルト: false) 71 | - _FileInfo.archivePath_: ファイルのアーカイブ内相対パス(String) 72 | - _FileInfo.isObsolete_: 最新バージョンに存在しないかどうか(デフォルト: false) 73 | - _packages\[number\].releases_: パッケージのリリース一覧(ReleaseData[]) 74 | - **ReleaseData.version**: そのリリースのバージョン(String) 75 | - **ReleaseData.integrity**: ハッシュの一覧(Array) 76 | - **ReleaseData.integrity.archive**: アーカイブファイルのハッシュ(String) 77 | - **ReleaseData.integrity.file**: パッケージファイルのハッシュ一覧(FileIntegrityData[]) 78 | - **FileIntegrityData.target**: ハッシュの該当ファイル(String) 79 | - **FileIntegrityData.hash**: ハッシュ(`sha384-`などから始まるString) 80 | 81 | ## [scripts.json](./scripts.json) 82 | 83 | スクリプト配布サイトのデータファイル 84 | 85 | - **webpage**: スクリプト配布サイトの一覧(Object[]) 86 | - **webpage\[number\].url**: スクリプト配布サイトのURL(String) 87 | - **webpage\[number\].developer**: スクリプト配布サイトのURL(String) 88 | - **webpage\[number\].description**: スクリプト配布サイトの説明(String) 89 | - **scripts**: スクリプトの判別に関する配列(後ろの情報が優先されます)(Object[]) 90 | - **scripts\[number\].match**: ダウンロードファイルのURLとの一致パターン(String) 91 | - `packages.xml`に未登録の場合 92 | - **scripts\[number\].folder**: ファイルを配置するフォルダ名(`script`フォルダ下)(String) 93 | - **scripts\[number\].developer**: スクリプトの開発者(String) 94 | - **scripts\[number\].dependencies**: 依存パッケージのIDの配列(String[]) 95 | - `packages.xml`に登録済みの場合 96 | - **scripts\[number\].redirect**: リダイレクトするパッケージのID(String) 97 | 98 | ## [convert.json](./convert.json) 99 | 100 | ID変換の対応のファイル 101 | 102 | - 変換前のIDをkey、変換後のIDをvalueとする。 103 | 104 | IDの誤字や仕様変更への対応を想定しています。 105 | 106 | 変換を削除することは、基本的に禁止です。 107 | レビュー時・マージ時には十分注意してください。 108 | -------------------------------------------------------------------------------- /v3/convert.json: -------------------------------------------------------------------------------- 1 | { 2 | "InputPipePlugin": "amate/InputPipePlugin", 3 | "MFVideoReader": "amate/MFVideoReader", 4 | "PropertyWindowFixerPlugin": "amate/PropertyWindowFixerPlugin", 5 | "adjustaudio": "aoytsk/adjustaudio", 6 | "aoytskdummy": "aoytsk/dummy", 7 | "aoytskmisc": "aoytsk/misc", 8 | "aoytskrec": "aoytsk/rec", 9 | "aoytskrecovery": "aoytsk/recovery", 10 | "autoloader": "aoytsk/autoloader", 11 | "cmpwnd": "aoytsk/cmpwnd", 12 | "dbgwnd": "aoytsk/dbgwnd", 13 | "easymp4": "aoytsk/easymp4", 14 | "exeditbutton": "aoytsk/exeditbutton", 15 | "extext": "aoytsk/extext", 16 | "extoolbar": "aoytsk/extoolbar", 17 | "inputprofile": "aoytsk/inputprofile", 18 | "jumpbarx": "aoytsk/jumpbarx", 19 | "jumpdlg": "aoytsk/jumpdlg", 20 | "jumpdlg32": "aoytsk/jumpdlg32", 21 | "pluginlist": "aoytsk/pluginlist", 22 | "quickopen": "aoytsk/quickopen", 23 | "seekbarx": "aoytsk/seekbarx", 24 | "statbarx": "aoytsk/statbarx", 25 | "trayiconx": "aoytsk/trayiconx", 26 | "wndman": "aoytsk/wndman", 27 | "aulsAddshorcut": "auls/addshortcut", 28 | "aulsAliaslist": "auls/aliaslist", 29 | "aulsConfirmclose": "auls/confirmclose", 30 | "aulsoutputpng": "auls/outputpng", 31 | "aulsRendermask": "auls/rendermask", 32 | "aulsTransparence": "auls/transparence", 33 | "framesound": "auls/framesound", 34 | "AviUtlLabanimate": "AviUtlLab/animate", 35 | "AviUtlLabchapter": "AviUtlLab/chapter", 36 | "AviUtlLabcroma": "AviUtlLab/croma", 37 | "cmdex": "AviUtlLab/cmdex", 38 | "dsinput": "AviUtlLab/dsinput", 39 | "itvfr": "AviUtlLab/itvfr", 40 | "itvfrdeint": "AviUtlLab/itvfrdeint", 41 | "vfrout": "AviUtlLab/vfrout", 42 | "wmvoutvfr": "AviUtlLab/wmvoutvfr", 43 | "x264out": "AviUtlLab/x264out", 44 | "ePiAulsMemref": "ePi/aulsMemref", 45 | "HolyWuLSMASHWorks": "HolyWu/LSMASHWorks", 46 | "aviutlWaveformPreview": "karoterra/aviutlWaveformPreview", 47 | "MarkdownEX": "karoterra/MarkdownEX", 48 | "MrOjiiLSMASHWorks": "MrOjii/LSMASHWorks", 49 | "aviutlBrowser": "oov/aviutlBrowser", 50 | "aviutlBrowserMinecraftSkin": "oov/aviutlBrowserMinecraftSkin", 51 | "CacheText": "oov/CacheText", 52 | "GcmzDrops": "oov/GCMZDrops", 53 | "oovBridge": "oov/bridge", 54 | "oovloudness": "oov/loudness", 55 | "oovPrima": "oov/prima", 56 | "PSDToolKit": "oov/PSDToolKit", 57 | "RelMovieHandle": "oov/RelMovieHandle", 58 | "textassist": "oov/textassist", 59 | "ZRamPreview": "oov/ZRamPreview", 60 | "AviutlColor": "rigaya/AviutlColor", 61 | "bandingMTSIMD": "rigaya/bandingMTSIMD", 62 | "delogoSIMD": "rigaya/delogoSIMD", 63 | "ffmpegOut": "rigaya/ffmpegOut", 64 | "NVEnc": "rigaya/NVEnc", 65 | "QSVEnc": "rigaya/QSVEnc", 66 | "rigayaAfs": "rigaya/afs", 67 | "rigayaEdgelevelMT": "rigaya/edgelevelMT", 68 | "rigayaPmdMt": "rigaya/pmdMt", 69 | "svtAV1guiEx": "rigaya/svtAV1guiEx", 70 | "VCEEnc": "rigaya/VCEEnc", 71 | "x264guiEx": "rigaya/x264guiEx", 72 | "x265guiEx": "rigaya/x265guiEx", 73 | "fanClipping": "rikky/fanClipping", 74 | "rikkyModuleMemory": "rikky/rikkyModuleMemory", 75 | "rikkyModule2": "rikky/rikkyModule2", 76 | "rikkyRoll": "rikky/roll", 77 | "rikkeySeparate1": "rikky/separate1", 78 | "rikkeySeparate2": "rikky/separate2", 79 | "EasingTra2020": "UndoFish/easingTra2020", 80 | "VFRmaniacLSMASHWorks": "VFRmaniac/LSMASHWorks", 81 | "SigContrastFastAviUtl": "yumetodo/SigContrastFastAviUtl", 82 | "Satsuki": "satsuki/satsuki", 83 | "VSThost4aviutl": "AiosCiao/VSThost4aviutl", 84 | "LSMASHWorks": "pop4bit/LSMASHWorks" 85 | } 86 | -------------------------------------------------------------------------------- /v3/core.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "aviutl": { 4 | "files": [ 5 | { "filename": "aviutl.exe" }, 6 | { "filename": "aviutl.txt" }, 7 | { "filename": "aviutl.aup", "isUninstallOnly": true }, 8 | { "filename": "aviutl.ini", "isUninstallOnly": true }, 9 | { "filename": "aviutl.key", "isUninstallOnly": true }, 10 | { "filename": "aviutl.sav", "isUninstallOnly": true } 11 | ], 12 | "latestVersion": "1.10", 13 | "releases": [ 14 | { 15 | "url": "http://spring-fragrance.mints.ne.jp/aviutl/aviutl110.zip", 16 | "version": "1.10", 17 | "integrity": { 18 | "archive": "sha384-YJcXuvmKzJ3nUsGPHaylBdFI9Q4AxAwSDUqpDyZ2wLzYQaU/OE1abw8tMpLf4Jwq", 19 | "file": [ 20 | { 21 | "target": "aviutl.exe", 22 | "hash": "sha384-BsJg59A0t7oHOZp54iljF4nB2V6tYzHiPhYW/h16Oz3qE7qhFFXx6AvhdajnwKfD" 23 | } 24 | ] 25 | } 26 | }, 27 | { 28 | "url": "http://spring-fragrance.mints.ne.jp/aviutl/aviutl100.zip", 29 | "version": "1.00", 30 | "integrity": { 31 | "archive": "sha384-pDm14wvnIx2y4nfsuVJx15k9jTLHGrmTB24m97P5VafHbIXAeFsMRieAfCfASMfi", 32 | "file": [ 33 | { 34 | "target": "aviutl.exe", 35 | "hash": "sha384-TrRFAxOVGtJIhyWV20dXHEOmss96xEHYHaNE4/+t3kvxUGF3IjOP55AnznoNzMom" 36 | } 37 | ] 38 | } 39 | } 40 | ] 41 | }, 42 | "exedit": { 43 | "files": [ 44 | { "filename": "exedit.anm" }, 45 | { "filename": "exedit.auf" }, 46 | { "filename": "exedit.aui" }, 47 | { "filename": "exedit.auo" }, 48 | { "filename": "exedit.cam" }, 49 | { "filename": "exedit.ini" }, 50 | { "filename": "exedit.obj" }, 51 | { "filename": "exedit.scn" }, 52 | { "filename": "exedit.tra" }, 53 | { "filename": "exedit.txt" }, 54 | { "filename": "lua.txt" }, 55 | { "filename": "lua51.dll" }, 56 | { "filename": "lua51jit.dll", "isUninstallOnly": true } 57 | ], 58 | "latestVersion": "0.92", 59 | "releases": [ 60 | { 61 | "url": "http://spring-fragrance.mints.ne.jp/aviutl/exedit93rc1.zip", 62 | "version": "0.93rc1", 63 | "integrity": { 64 | "archive": "sha384-tTGQHYA16JBSXELzf7w0PAavkkoOjZFC6cWJzG3l2EssP5jeZO+Ou0xndh/vOolW", 65 | "file": [ 66 | { 67 | "target": "exedit.auf", 68 | "hash": "sha384-Zbt+Oc8pG3dGXmPqr3c767Y5/3/FaSVngmipn0v1KyXRW8dWVZuOZ2WTrP09YRDZ" 69 | } 70 | ] 71 | } 72 | }, 73 | { 74 | "url": "http://spring-fragrance.mints.ne.jp/aviutl/exedit92.zip", 75 | "version": "0.92", 76 | "integrity": { 77 | "archive": "sha384-1+quM7LqkkFzFKjDoipezYsRsAqKXZC+OM1uPNJpzT58pMYFKnlGrniYxe8amgZK", 78 | "file": [ 79 | { 80 | "target": "exedit.auf", 81 | "hash": "sha384-aW5769CsMnmDGnZzNzqP4KFvM2npA8gfopzwB//TBbwYfoLZtGvoP/oXZctVEZxp" 82 | } 83 | ] 84 | } 85 | } 86 | ] 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /v3/list.json: -------------------------------------------------------------------------------- 1 | { 2 | "core": { 3 | "path": "core.json", 4 | "modified": "2022-04-04T18:12:00+09:00" 5 | }, 6 | "convert": { 7 | "path": "convert.json", 8 | "modified": "2021-12-11T16:03:00+09:00" 9 | }, 10 | "packages": [ 11 | { 12 | "path": "packages.json", 13 | "modified": "2025-02-02T13:41:00+09:00" 14 | }, 15 | { 16 | "path": "package-sets.json", 17 | "modified": "2023-04-08T11:16:00+09:00" 18 | }, 19 | { 20 | "path": "packages/tim.json", 21 | "modified": "2023-04-08T11:16:00+09:00" 22 | } 23 | ], 24 | "scripts": [ 25 | { 26 | "path": "scripts.json", 27 | "modified": "2023-01-15T17:09:00+09:00" 28 | } 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /v3/package-sets.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "packages": [ 4 | { 5 | "id": "sets/aviutlSound", 6 | "name": "音声編集 パッケージセット", 7 | "overview": "AviUtlでより良く音声を扱うためのパッケージセット", 8 | "description": "AviUtlでより良く音声を扱うためのパッケージを追加できます。", 9 | "developer": "apm", 10 | "dependencies": [ 11 | "AiosCiao/VSThost4aviutl", 12 | "rikky/smallPlay", 13 | "hebiiro/ShowWaveform" 14 | ], 15 | "pageURL": "https://github.com/team-apm/apm-data", 16 | "downloadURLs": [ 17 | "https://team-apm.github.io/apm-data/package-sets-description.html" 18 | ], 19 | "latestVersion": "2022/06/16", 20 | "files": [{ "filename": "placeholder.pkgset", "isObsolete": true }] 21 | }, 22 | { 23 | "id": "sets/aviutlTweaks", 24 | "name": "AviUtl効率化 パッケージセット", 25 | "overview": "AviUtlをより使いやすくするためのパッケージセット", 26 | "description": "AviUtlの機能を調整してより使いやすくするためのパッケージを追加できます。", 27 | "developer": "apm", 28 | "dependencies": [ 29 | "aoytsk/seekbarx", 30 | "hebiiro/adjust", 31 | "hebiiro/DragFilter", 32 | "hebiiro/OptimizeEditBox", 33 | "hebiiro/ShowWaveform", 34 | "ePi/LuaJIT" 35 | ], 36 | "pageURL": "https://github.com/team-apm/apm-data", 37 | "downloadURLs": [ 38 | "https://team-apm.github.io/apm-data/package-sets-description.html" 39 | ], 40 | "latestVersion": "2022/06/16", 41 | "files": [{ "filename": "placeholder.pkgset", "isObsolete": true }] 42 | }, 43 | { 44 | "id": "sets/scrapboxAviUtl", 45 | "name": "scrapbox/AviUtl 推奨環境", 46 | "overview": "scrapbox.io/aviutl推奨のAviUtl環境", 47 | "description": "https://scrapbox.io/aviutl/ にて紹介されている推奨環境です。", 48 | "developer": "scrapbox.io/aviutl", 49 | "dependencies": [ 50 | "aviutl1.10", 51 | "exedit0.92", 52 | "MrOjii/LSMASHWorks", 53 | "amate/InputPipePlugin", 54 | "aoytsk/easymp4", 55 | "ePi/patch" 56 | ], 57 | "pageURL": "https://scrapbox.io/aviutl/セットアップ", 58 | "downloadURLs": [ 59 | "https://team-apm.github.io/apm-data/package-sets-description.html" 60 | ], 61 | "latestVersion": "2022/06/16", 62 | "files": [{ "filename": "placeholder.pkgset", "isObsolete": true }] 63 | }, 64 | { 65 | "id": "sets/tim", 66 | "name": "ティム氏のスクリプト", 67 | "overview": "ティム氏のスクリプトセット", 68 | "description": "https://tim3.web.fc2.com/sidx.htm にて紹介されているスクリプトのセットです。", 69 | "developer": "ティム", 70 | "dependencies": [ 71 | "tim/rgline", 72 | "tim/hevbunr", 73 | "tim/sket", 74 | "tim/lineex", 75 | "tim/crkgls", 76 | "tim/ruledl", 77 | "tim/lowres", 78 | "tim/pour", 79 | "tim/linefil", 80 | "tim/barcode", 81 | "tim/coladj", 82 | "tim/famili", 83 | "tim/framing", 84 | "tim/blolus", 85 | "tim/pyopyo", 86 | "tim/halfres", 87 | "tim/conline", 88 | "tim/mltline", 89 | "tim/reelrot", 90 | "tim/windshk", 91 | "tim/stroke", 92 | "tim/twitch", 93 | "tim/linhal", 94 | "tim/roughe", 95 | "tim/traspe", 96 | "tim/mtile", 97 | "tim/bezspe", 98 | "tim/fitset", 99 | "tim/trapnt", 100 | "tim/splmrp", 101 | "tim/colext", 102 | "tim/combst", 103 | "tim/wire3d", 104 | "tim/traeasy", 105 | "tim/auradcg", 106 | "tim/scechg", 107 | "tim/starbst", 108 | "tim/bompuz", 109 | "tim/skydome", 110 | "tim/rbwgra", 111 | "tim/chroma", 112 | "tim/frame", 113 | "tim/26poly", 114 | "tim/radpar", 115 | "tim/curtra", 116 | "tim/nslime", 117 | "tim/briwipe", 118 | "tim/grdwipe", 119 | "tim/twister", 120 | "tim/coledge", 121 | "tim/pickup", 122 | "tim/ink", 123 | "tim/split", 124 | "tim/beehive", 125 | "tim/polyhed", 126 | "tim/cstfla", 127 | "tim/filmscr", 128 | "tim/shake", 129 | "tim/diasha", 130 | "tim/polcon", 131 | "tim/access", 132 | "tim/lightng", 133 | "tim/glasssd", 134 | "tim/mmdcam", 135 | "tim/autotgt", 136 | "tim/lburst", 137 | "tim/vanishP", 138 | "tim/vanishP2", 139 | "tim/polycut", 140 | "tim/esyrpt", 141 | "tim/polygon", 142 | "tim/bubble", 143 | "tim/outlpur", 144 | "tim/tmppre", 145 | "tim/polcgra", 146 | "tim/brokenb", 147 | "tim/glpast", 148 | "tim/embtile", 149 | "tim/broken", 150 | "tim/simwrp2", 151 | "tim/simwrp", 152 | "tim/mtnpasi", 153 | "tim/mtnpas", 154 | "tim/cogwhl", 155 | "tim/hexahead", 156 | "tim/rcube", 157 | "tim/flutter", 158 | "tim/lensfla", 159 | "tim/mulgim", 160 | "tim/moja2F", 161 | "tim/limpFr" 162 | ], 163 | "pageURL": "https://tim3.web.fc2.com/sidx.htm", 164 | "downloadURLs": [ 165 | "https://team-apm.github.io/apm-data/package-sets-description.html" 166 | ], 167 | "latestVersion": "2022/12/02", 168 | "files": [{ "filename": "placeholder.pkgset", "isObsolete": true }] 169 | } 170 | ] 171 | } 172 | -------------------------------------------------------------------------------- /v3/scripts.json: -------------------------------------------------------------------------------- 1 | { 2 | "webpage": [ 3 | { 4 | "url": "https://hazumurhythm.com/wev/amazon/?filter=all&search=Aodaruma&search_price=&sort=viewh&page=1", 5 | "developer": "Aodaruma", 6 | "description": "スクリプトの例: 3DObject, CameraDisplays, ClipFigures, CycleAffect, DelayBuffer, FlatShadow, ImageLoader, LoopTextures, MaskingSlider, Modulator, OriginalToon, ParallelCamera, Partition&Flex, PixelSort, Repeater, RepeatingClip, RikkyReflection, SphereMaterialTest, Trackers, UVmapping(beta), VariableTrack, WipeClipping, kerning, light&shadow, キャッシュ保存RM, グラデーションマップ(Re), 対角線クリッピング, 平行四辺形, 抜き出し縁取り, 段付き円形, 簡易Glitch++(派生)" 7 | }, 8 | { 9 | "url": "http://auls.client.jp/", 10 | "developer": "yu_noimage_", 11 | "description": "スクリプトの例: アニメーション効果, トラックバー, Zバッファ, 指定レイヤー以外を半透明化" 12 | }, 13 | { 14 | "url": "https://drive.google.com/drive/folders/1axN8BDCSGY3w1YaeUgZ4TjlU7MzwRoGI", 15 | "developer": "gometh", 16 | "description": "スクリプトの例: @グラフ描画.anm, @パチ文字.anm, カード並べ.zip, クソデカレベルアップくん.exa, クリッピングして登場.anm, テキストSE.anm, ドカベン.anm, ハーフトーン(g).anm, ひらがな小さ.anm, ベベルとエンボス(g).anm, 円状音声波形.anm, 角丸四角形.obj, 角丸正多角形.obj, 任意軸回転.anm, 非弾性衝突.tra, 麻雀牌スクリプト.zip, 満ち欠け円.obj, 漫画化v3.zip" 17 | }, 18 | { 19 | "url": "https://twitter.com/i/moments/950334056461344768", 20 | "developer": "kaisatsu", 21 | "description": "スクリプトの例: @バック.tra, スケールワイプ.anm, なめらか縁取り.anm, バウンド.tra, 減衰振動.tra, 減衰振動(微分).tra, 光彩.anm, 光彩内側(仮).anm" 22 | }, 23 | { 24 | "url": "https://github.com/karoterra/aviutl-scripts", 25 | "developer": "karoterra", 26 | "description": "スクリプトの例: @サムネチェック.obj, @ヨッシーアイランド.obj, Karoterra.lua, タイル素材切り出し.anm" 27 | }, 28 | { 29 | "url": "http://niconicotetu.web.fc2.com/download_page.html", 30 | "developer": "テツ", 31 | "description": "スクリプトの例: 特製パーティクル, 縞図形, 順番に出現, ニュースプリント, フェード+α, スポットライト, ドット化, テキストに枠, 雨3D, トーナメント, 3D音声波形(tetsu), Z軸ループ, シャッター, 粒子化, 転がる多角形, 格子線, 正多面体(正十二面体を除く), Trackingライン, 立方体を並べる, 球上パーティクル, 波(3D)化, 波(3D), ハチの巣, ターゲット, 時計, 円形に並んだオブジェクト, 魚眼レンズ, なめくじ, 軌跡配置, 回転ブラー(っぽいもの), 渦, ノイズマスク, ターゲット(カメラ効果), 跳ね返るボール, ランダム配置, お絵かきマスク, (3D)ブラインド, 巻く(裏面あり), 巻く(裏面なし)" 32 | }, 33 | { 34 | "url": "https://tim3.web.fc2.com/sidx.htm", 35 | "developer": "ティム", 36 | "description": "スクリプトの例: ライン抽出T, ひび割れガラスT, 罫線T, 低解像度T, 注ぎT, ジグザグ塗りT, バーコードT, 色調調整セットver6, カメレオン効果, ブロマガ, 縁取りT, ブロックラスターT, ぷよぷよT, 網点分解T, 集中線T, マルチラインT, リール回転T, 風揺れT, ストロークT, twitchっぽいものT, ライントーン&ハーフトーン, ラフエッジ, 透明度指定, モーションタイル, ベジエ曲線による軌道調整, フィルターセット, 透明塗り, 簡易モーフィング, 色抽出, 燃焼, ワイヤー3D, TrackingラインEasy, オーラ放出, シーンチェンジセット, スターバースト, 砕け散るパズル, ニコ動(V1), スカイドーム, 虹色グラデーション, 色収差, ニコ動, 領域枠, ニコ動(V1), 二十六面体, 標準エフェクトのみ使った簡単な作成例, 放射分布 変色パーティクル, 曲面変形, な~さりい☆らいむ風TA, 輝度ワイプ, グリッドワイプ, ツイスター, 3D音声波形, 色付きエッジ抽出, つまむ, インク(+ひょうたん), ニコ動, スプリット, 蜂の巣モザイク, 正多面体, カスタムフレア, ニコ動, 回転ブラー, ニコ動(V1), ランダムブラー, フィルム焦げ, ゆらめき, 斜めブラインド(改), 極座標変換+ぼかしミラー, 小物(カメラデータコピー等), 稲妻, 砕けたガラス, MMDカメラデータ読込, オートターゲット, ライトバースト, バニシングポイント2, ニコ動(V1), バニシングポイント, ニコ動(V1), 任意多角形カット, 簡易リピーター, ニコ動(V1), 時系列音声波形, 任意多角形カスタムオブジェクト, 泡, 輪郭追跡, ニコ動(V1), 一時保存読込, 多色グラデーション, 砕け散る球, グループ補助, エンボスタイル, 砕け散る(改), 簡易ワープ(改), 簡易ワープ, 簡易モーションパス(パス数無制限版), 簡易モーションパス, 歯車変形, 直方体展開, ルービックキューブ配置, ニコ動, はためき, レンズフレア, 多角錐変形, ニコ動(V1)" 37 | }, 38 | { 39 | "url": "https://www.dropbox.com/sh/u73uud29hcxlply/AABH9ZhzL1P1kX-bWrL4asdDa", 40 | "developer": "Respectrum93", 41 | "description": "スクリプトの例: @線を描画.anm, Bezier移動.anm, CircleSlicer.anm, DelayDraw2.anm, DisplacementMap-B.anm, GEN-VTX.zip, GetColor-V2r.zip, MultiSlicer_P.anm, OBJ Reader.zip, old_script_etc.zip, マルチベジェ軌道.zip, レイヤーに線を描画.anm, 音声データlink.tra, 音声データ取得.obj, 旗.zip" 42 | }, 43 | { 44 | "url": "http://hazumurhythm.com/wev/amazon/?filter=editor&search=rikky&sort=viewh&page=1", 45 | "developer": "rikky", 46 | "description": "スクリプトの例: 扇クリッピングR, パーティクル(R), 立体化(R), タイピング, パーツ分割, ティムさん風, カラーパレット, カメラ手ぶれ(R), ロール巻取(ページめくり), 色ずれ(R), シャッフルレター, パペットピンツール, アウトライン, グループアニメーションGA, 多角形モザイクマスク, 書道(R), パララックス視差効果, 拡張イージング, 合作テキストアニメーション, ライン*(R), スライドカット, 音声読み上げ, ミックスレター, MIDI譜表示, パーティクル(R)カスタムオブジェクト, 合成モード拡張, 脅迫文と夜露死苦(当て漢字)テキスト, 内側シャドー, 乙女ゲームの破滅フラグしかない悪役令嬢に転生してしまったED風, ボーン制御, ポリゴン表示(R), ハンディカム, お絵かき, グラデーション(R), ランダムフォント, カケアミ, 日周運動, 崩れ落ちる, シームレス, シーンチェンジセット, トランプ, シーンチェンジアニメ, モザイク(R), ガラス球, お絵かきイージング, スライドパズル, 簡易変形(r), スロット, どうぶつの森風セリフ枠, ドミノ, 透明度縁取りや画像合成プラスなど, AA(アスキーアート)化, MMDクレジット, 中二病戀エンディング風ライト(遠近照明), 設定内パラメーター, ランダム動画, カラフルブロックノイズ, 簡易部分フィルター, TAつるし紐, カスタムフレア(カメラ対応), 全方位ミラー, パズル風ランダム, 芒星(魔法陣), 少々ぼかし, ランダム単色化" 47 | }, 48 | { 49 | "url": "https://bowlroll.net/file/3777", 50 | "developer": "さつき", 51 | "description": "スクリプトの例: AviUtlスクリプト一式" 52 | }, 53 | { 54 | "url": "https://shummg.work/downloads/", 55 | "developer": "しゅう", 56 | "description": "スクリプトの例: @Square-Advanced, @DisplaySize, オセロ, @球座標回転, @任意関数図形, @媒介変数図形, @年月日カウンター, @等間隔に配置, @カメラ座標, @座標制御, @RadialPosition, @SphericalRadialPosition, @十字, @角丸十字, @放射線, PercentageClipping, @QR, @角丸吹き出し, @カラオケテキスト, @心電図, @カラーバー, @TA交互移動, オセロ, マインスイーパ, 明度着色, 一括画像編集, @ZoomLine, @ScreenCapture, @テキスト遷移, @モザイクとノイズ, @MathTrack, @BufferMask, トリミングS, WaveRing" 57 | }, 58 | { 59 | "url": "https://www.nicovideo.jp/user/26576669/mylist/37628454", 60 | "developer": "UndoFish", 61 | "description": "スクリプトの例: トラックバー対応イージングスクリプト 2020版, イージング対応動画オブジェクト, 可変移動量指定, 動画ループ, カウントアップテキストもどき, 移動軌跡マスク, 最終フレームを描画, EXO作成_顔追跡入り, EXO生成スクリプト(輪郭Trackingラインなど), 曲げスクリプト, クレヨン, 文字用 輪郭追跡, 9grid(四辺の枠を保って拡大), Eなし位置固定_拡大クリッピング" 62 | }, 63 | { 64 | "url": "https://www.nicovideo.jp/series/138505", 65 | "developer": "カメ/ウサギ", 66 | "description": "スクリプトの例: カバー付ワイプ, 展開for出力プラグイン, シャッフルレター, 角付き丸吹き出し, 簡易水玉, 丸付折線テキスト, カバー画像付ワイプ" 67 | } 68 | ], 69 | "scripts": [ 70 | { 71 | "match": ["https://github.com/Aodaruma/Aodaruma-AviUtl-Script/releases*"], 72 | "folder": "aodaruma", 73 | "developer": "Aodaruma", 74 | "dependencies": ["rikky/rikkyModuleMemory|rikky/rikkyModule2"] 75 | }, 76 | { 77 | "match": [ 78 | "https://github.com/Aodaruma/Aodaruma-AviUtl-Script/releases*/3DObject.zip*" 79 | ], 80 | "folder": "aodaruma", 81 | "developer": "Aodaruma", 82 | "dependencies": [ 83 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 84 | "respectrum93/oldScripts" 85 | ] 86 | }, 87 | { 88 | "match": ["http://auls.client.jp/*"], 89 | "folder": "auls", 90 | "developer": "yu_noimage_", 91 | "dependencies": [] 92 | }, 93 | { 94 | "match": ["http://auls.client.jp/script/auls_zbuffer.zip*"], 95 | "folder": "auls", 96 | "developer": "yu_noimage_", 97 | "dependencies": ["ePi/aulsMemref"] 98 | }, 99 | { 100 | "match": [ 101 | "https://drive.google.com/drive/folders/1axN8BDCSGY3w1YaeUgZ4TjlU7MzwRoGI*" 102 | ], 103 | "folder": "gometh", 104 | "developer": "gometh", 105 | "dependencies": [ 106 | "ePi/LuaJIT", 107 | "rikky/rikkyModuleMemory|rikky/rikkyModule2" 108 | ] 109 | }, 110 | { 111 | "match": ["*麻雀牌スクリプト*.zip*"], 112 | "folder": "麻雀牌", 113 | "developer": "gometh", 114 | "dependencies": ["rikky/rikkyModuleMemory|rikky/rikkyModule2"] 115 | }, 116 | { 117 | "match": ["https://twitter.com/i/moments/950334056461344768*"], 118 | "folder": "kaisatsu", 119 | "developer": "kaisatsu", 120 | "dependencies": [] 121 | }, 122 | { 123 | "match": ["https://github.com/karoterra/aviutl-scripts*"], 124 | "folder": "karoterra", 125 | "developer": "karoterra", 126 | "dependencies": [] 127 | }, 128 | { 129 | "match": ["http://niconicotetu.web.fc2.com/download_page.html*"], 130 | "folder": "tetu", 131 | "developer": "テツ", 132 | "dependencies": [] 133 | }, 134 | { 135 | "match": ["https://tim3.web.fc2.com/sidx.htm*"], 136 | "folder": "tim", 137 | "developer": "ティム", 138 | "dependencies": [] 139 | }, 140 | { 141 | "match": ["https://tim3.web.fc2.com/script/*BriWipe*.zip"], 142 | "redirect": "tim/briwipe" 143 | }, 144 | { 145 | "match": [ 146 | "https://www.dropbox.com/sh/u73uud29hcxlply/AABH9ZhzL1P1kX-bWrL4asdDa*" 147 | ], 148 | "folder": "respectrum93", 149 | "developer": "Respectrum93", 150 | "dependencies": [] 151 | }, 152 | { 153 | "match": ["*old_script_etc*.zip*"], 154 | "redirect": "respectrum93/oldScripts" 155 | }, 156 | { 157 | "match": ["https://hazumurhythm.com/wev/amazon/?*search=rikky*"], 158 | "folder": "rikky", 159 | "developer": "rikky", 160 | "dependencies": ["rikky/rikkyModuleMemory|rikky/rikkyModule2"] 161 | }, 162 | { 163 | "match": ["*fan_clipping*.zip*"], 164 | "redirect": "rikky/fanClipping" 165 | }, 166 | { 167 | "match": ["*ロール巻取(ページめくり)*.zip*"], 168 | "redirect": "rikky/roll" 169 | }, 170 | { 171 | "match": ["*パーツ分割*.zip*"], 172 | "redirect": "rikky/separate1|rikky/separate2" 173 | }, 174 | { 175 | "match": ["*立体化(R)*.zip*"], 176 | "redirect": "rikky/dimensionize1|rikky/dimensionize2" 177 | }, 178 | { 179 | "match": ["https://bowlroll.net/file/3777*"], 180 | "redirect": "satsuki/satsuki" 181 | }, 182 | { 183 | "match": ["https://www.nicovideo.jp/user/26576669/mylist/37628454*"], 184 | "folder": "undofish", 185 | "developer": "UndoFish", 186 | "dependencies": [] 187 | }, 188 | { 189 | "match": ["https://shummg.work/downloads/*"], 190 | "folder": "shummg", 191 | "developer": "しゅう", 192 | "dependencies": [ 193 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 194 | "shummg/textmodule", 195 | "ePi/LuaJIT" 196 | ] 197 | }, 198 | { 199 | "match": ["*@Winアイコン*"], 200 | "folder": "shummg", 201 | "developer": "しゅう", 202 | "dependencies": [ 203 | "rikky/rikkyModuleMemory|rikky/rikkyModule2", 204 | "shummg/textmodule", 205 | "ePi/LuaJIT", 206 | "shummg/dotdrawer" 207 | ] 208 | }, 209 | { 210 | "match": ["*easing_tra_2020*.zip*"], 211 | "redirect": "UndoFish/easingTra2020" 212 | }, 213 | { 214 | "match": [ 215 | "https://z9z.sakura.ne.jp/box/aviutl/*", 216 | "http://takeshima.halfmoon.jp/room/aviutl*" 217 | ], 218 | "folder": "usagi", 219 | "developer": "カメ/ウサギ", 220 | "dependencies": [] 221 | } 222 | ] 223 | } 224 | --------------------------------------------------------------------------------