iArt.ai
AI motion graphics software — the After Effects alternative anyone can use. Create animations and explainer videos from a text prompt in minutes.
waltz は、オウンドメディアの記事と会員コミュニティを1つにまとめたオープンソースのCMSです。PHPもプラグインも使わず、データはファイル1つ。MITライセンスで無料で使えます。開発は opus合同会社。
Translation pending
MediaTypeScript · CSSGitHub @opus-llcOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
オウンドメディアとコミュニティを、ひとつに。セルフホスト型の簡易CMS+会員コミュニティ(Next.js + SQLite)
Translation pending
Loading the full README.
Read the full README ↗オウンドメディアとコミュニティを、ひとつに。
記事を読んだ人が、そのまま同じサイトで質問し、つながり、イベントに来る。 waltz は、簡易 CMS と会員コミュニティを1つのアプリで持てる、セルフホスト型のオープンソース基盤です。
公式サイト: https://waltz.sonata-ai.app / デモ: https://waltz.sonata-ai.app/demo (毎朝4時にサンプルデータへ初期化。ログイン情報はログイン画面に表示)
要件定義は docs/requirements.md にあります。
Node.js 22 以上が必要です。
npm install
npm run setup # データベースを作り、サンプルデータを入れる
npm run dev # http://localhost:3000
サンプルデータのログイン(パスワードはすべて waltz-demo。DEMO_PASSWORD で変更可):
| メール | 権限 |
|---|---|
| [email protected] | 管理者 |
| [email protected] | 編集者 |
| [email protected] | メンバー |
サンプルデータを入れずに始める場合は npm run setup を飛ばしてください。開発環境(npm run dev)では、最初に登録したユーザーが管理者になります。
サンプルデータを入れ直す: npm run seed -- --force(既存データは消えます)
npm ci
npm run build
SITE_URL=https://example.com [email protected] DATA_DIR=/var/lib/waltz node .next/standalone/server.js
.next/standalone を使う場合は、.next/static・public・drizzle を同じ階層にコピーしてください(Dockerfile と同じ構成)。
docker build -t waltz .
docker run -p 3000:3000 -v waltz-data:/data -e SITE_URL=https://example.com -e [email protected] waltz
空の DB にサンプルデータを入れるときは -e SEED_DEMO=1 を付けます。誰でも触れる公開デモにするときは -e DEMO_MODE=1 を付けます(毎朝4時に初期化され、計測タグの設定は無効になります)。
本番では、環境変数 ADMIN_EMAIL と同じメールアドレスで登録した人だけが管理者になります。 未設定のまま公開すると、誰も管理者になれません(公開直後に第三者が先に登録してサイトを乗っ取るのを防ぐため)。
https://example.com/media のように配下へ置く場合は、ビルド時に NEXT_PUBLIC_BASE_PATH=/media を指定します(Docker では --build-arg)。別ドメインの中継サーバー越しに使う場合は、そのドメインを SERVER_ACTIONS_ALLOWED_ORIGINS に入れてください(フォーム送信の送信元確認に使います)。
DATA_DIR(既定 ./data)の中身がすべてです。waltz.db(記事・会員・投稿)と uploads/(画像)をコピーしてください。
WordPress の管理画面「ツール → エクスポート」で「すべてのコンテンツ」を書き出した XML ファイル(WXR)を取り込めます。 取り込みのあいだ、画像を取得するため 元の WordPress サイトは公開したままにしておいてください。
管理者で「WordPress から移行」(/admin/import)を開き、XML ファイルを選びます(50MB まで)。
npm run import:wordpress -- export.xml # 確認だけ(書き込まない)
npm run import:wordpress -- export.xml --run # 取り込む
| オプション | 説明 |
|---|---|
--on-conflict=skip|rename | 同じスラッグの記事があるとき(既定 skip) |
--assign-to=<メール> | すべての記事を既存ユーザーに紐付ける |
--comments=<コミュニティのスラッグ> | 承認済みコメントをコミュニティへ移す(既定は移さない) |
--no-images | 画像を取得しない |
--draft-if-issues | 「要確認」がある記事を下書きで取り込む |
--json | 結果を JSON で出す |
Docker では、ファイルをデータ用ボリュームに置いてからコンテナ内で実行します。
docker cp export.xml <コンテナ名>:/data/export.xml
docker exec <コンテナ名> node import-wordpress.cjs /data/export.xml --run
| WordPress | waltz |
|---|---|
| 投稿・固定ページ | 記事・固定ページ(公開→公開、下書き・レビュー待ち・非公開→下書き、予約投稿→予約公開) |
| 本文(クラシックエディタ・ブロックエディタ) | Markdown(見出し・段落・リスト・表・引用・コード・画像・リンク) |
| スラッグ・タイトル・抜粋・公開日・先頭に固定 | そのまま(日本語のスラッグは半角英数字のスラッグに付け替えます) |
| カテゴリ・タグ | 最初のカテゴリを記事のカテゴリに、残りのカテゴリとタグはタグに |
| アイキャッチ・本文中の画像 | 元サイトから取得して保存し、URL を書き換え(取得できなかった画像は元の URL のまま一覧に出します) |
| Yoast SEO / All in One SEO のタイトル・説明文 | SEO タイトル・メタディスクリプション |
| 承認済みコメント(任意) | コミュニティへ「記事を共有した投稿+コメント」として。名前と日時を残し、メールアドレス・IP は保存しません |
旧 URL(/2024/05/slug/・/?p=123・/category/〇〇/) | 新しい URL へ 301 で転送。本文中の内部リンクも新しい URL に書き換え |
[contact-form-7] など)。本文に文字のまま残るので、確認画面の「要確認」を見て直してください<script> は削除して取り込みます移しきれない部分の手直しや移行作業の代行は、下の「商用サポート」からご相談いただけます。
取り込むファイルは信用できない入力として扱います。XML の DOCTYPE・外部実体は受け付けません。画像は http/https だけを取得し、サーバー内部のアドレス(localhost・プライベート IP・クラウドのメタデータ)へは接続しません(名前解決後の IP で判定)。リダイレクトは3回、1枚5MB、15秒までです。取り込んだ本文は、表示時に通常の記事と同じ無害化を通ります。公開デモ(DEMO_MODE=1)では使えません。
waltz は WordPress の REST API(/wp-json/wp/v2/posts)と、opus connector プラグイン(/wp-json/opus/v1)と同じ形の口を持ちます。WordPress 向けに作られたツールから、waltz を「WordPress のサイト」として扱えます。設定は管理画面の「外部連携」(管理者のみ)。
| 口 | 認証 | 用途 |
|---|---|---|
GET /wp-json/wp/v2/posts(page・per_page・_fields・search・slug)・GET /wp-json/wp/v2/posts/{id} | 不要(公開記事だけ) | 記事の取り込み。件数は X-WP-Total・X-WP-TotalPages |
GET /wp-json/opus/v1/ping | X-Opus-Token | 接続テスト |
GET /wp-json/opus/v1/posts/{id} | X-Opus-Token | 今の本文(Markdown)と指紋 content_hash(sha256)。下書きも読める |
POST /wp-json/opus/v1/posts/{id} | X-Opus-Token | 本文の差し替え。expected_hash が今の本文と違えば 409。content は HTML(content_format: "markdown" も可)。title・excerpt・status なども受け付ける |
POST /wp-json/opus/v1/posts | X-Opus-Token | 記事の新規作成。title・content 必須、既定は下書き(status: "publish" で公開)。tags・category・slug・seo_title・seo_description・featured_image_url |
**結論:**締め など)は HTML タグのまま残しますDEMO_MODE=1)では書き込みの口を止めていますThis is the beginning of the README. Read the rest at the original. Read the full README ↗