iArt.ai
AI motion graphics software — the After Effects alternative anyone can use. Create animations and explainer videos from a text prompt in minutes.
Image creator supporting site
Translation pending
MediaJavaScript · TypeScriptGitHub @motionimagingjpOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Motion Imaging の公式サイト(Next.js 16 / Vercel Hobby)と、SNS自動投稿(Vercel Cron)をまとめたリポジトリ。 コードはすべて src/ 配下(2026-09-24 に app/ から移動)。 vercel.json の schedule は UTC。下表は日本時間。 一番簡単なのは Vercel → Settings → Cron Jobs → Run。キーは不要で、結果は Logs で確認できる。 ブラウザから直接実行する場合は ?key= を付ける。対応しているパラメータはエンドポイントごとに違う。Read the full README ↗
Motion Imaging の公式サイト(Next.js 16 / Vercel Hobby)と、SNS自動投稿(Vercel Cron)をまとめたリポジトリ。
| パス | 内容 |
|---|---|
/ /migoron /about | 公開ページ |
/admin | 管理画面(パスワード保護。後述) |
/api/post-* | SNS自動投稿(cronから実行) |
partyconnect/ | 別アプリ(パーティコネクト)。詳細は partyconnect/README.md |
コードはすべて src/ 配下(2026-09-24 に app/ から移動)。
vercel.json の schedule は UTC。下表は日本時間。
| 時刻(JST) | エンドポイント | 投稿先 | 内容 | 画像 |
|---|---|---|---|---|
| 6:00 | /api/post-instagram | Instagram @motion.imaging +Threads | 宮古島・石垣島の写真(6投稿ごとに交互) | post-instagram/images/ig_motion_imaging/ |
| 6:10 | /api/post-jake-images | Instagram @jake_images_ +Threads | ポートレート(EXIF付き) | post-instagram/images/ig_jake_images/portrait/ |
| 6:20 | /api/post-morning-all | X ミゴロン +Threads | 花畑指数(1本) | post-images/flower/ |
| 18:05 | /api/post-evening | X ミゴロン +Threads | 星空指数(実際の天気から算出) | post-images/star/ |
| 21:15 | /api/post-daily | X ミゴロン +Threads | 翌日の雲海指数・富士山指数(2本) | post-images/cloud/ fuji/ |
| 22:40 | /api/verify-predictions | (投稿なし) | ミゴロン予報の答え合わせ(下記) | なし |
| 7:30 | /api/post-sukuado-morning | X スクアド +Threads | 朝枠 | なし |
| 7:31 | /api/post-sukuado-morning-question | X スクアド +Threads | 朝の質問 | なし |
| 22:00 | /api/post-sukuado-night | X スクアド +Threads | 夜枠 | post-images/scad-night/ |
| 22:01 | /api/post-sukuado-promo | X スクアド +Threads | 告知 | なし |
| 7:30 | /api/post-jake-ai-morning | X jake_images +Threads | 生成AI情報(Gemini生成、失敗時は固定文) | なし |
| 22:00 | /api/post-jake-ai-night | X jake_images +Threads | 生成AI情報 +「30日振り返り」(day30で自動停止) | 振り返りのみ post-images/jake-ai/ |
*_posted_date などで当日分を予約してから投稿する(SET NX)。一番簡単なのは Vercel → Settings → Cron Jobs → Run。キーは不要で、結果は Logs で確認できる。
ブラウザから直接実行する場合は ?key=<CRON_SECRET> を付ける。対応しているパラメータはエンドポイントごとに違う。
| パラメータ | 意味 |
|---|---|
force=1 | 当日投稿済みでも実行する(実際に投稿される) |
dry=1 | 投稿せず、本文と文字数だけ返す |
report=1 | 前回の実行レポートを表示する |
noimage=1 | 画像なしで投稿する |
/adminhttps://motionimaging.vercel.app/admin。ユーザー名は何でもよく、パスワードは ADMIN_PASSWORD。未設定のときは誰も開けない。
| 項目 | 内容 | データ元 |
|---|---|---|
| 自動投稿の稼働状況 | 上表13本それぞれの「正常/一部注意/失敗/止まっている可能性(26時間以上実行なし)」、エラー内容、最後に成功した日時 | 各cronがRedisの job_status:<id> に記録(src/lib/job-status.js) |
| ミゴロン予報の答え合わせ | 直近7日・28日の的中率、Brierスコア、予測とのズレ(点)。星空・雲海・富士山・花畑別 | Redisの pred:<種別>:<日付>(src/lib/prediction-log.js) |
| SNSトークン | Instagram 2つ・Threads 3つが今使えるか(開くたびに確認) | Meta API の /me |
| パーティコネクト | 主催者・開催予定・開催済み・延べ参加者・成立ペア | Supabase(参加者の個人情報は取得しない) |
未実装:各アプリのアクセス数(Hobbyプランでは取得APIに制限あり)、API使用量(Gemini・X)。
指数(星空・雲海・富士山・花畑)の点数はGeminiではなくコードで決まる。Geminiが書くのは「ミゴロンメモ」の一文だけ。
src/app/api/_lib/migoron-scoring.js(Open-Meteoの天気から計算。係数はここに集約)。スポットと花の見頃期間は src/app/api/_lib/spots.json。上限は95%。src/app/api/_lib/migoron-format.js。1行目は点数から決まる結論型のフック(例「明日の朝、竹田城跡で雲海が出そう☁️」)。見出しの末尾に「出現期待度」(星空・雲海)/「見え期待度」(富士山)/「見頃期待度」(花畑)を付けて、%が何の数字か分かるようにしている。X の重み付き280字に収まるよう各routeの plans で段階的に削る。pred:<star|cloud|fuji|flower>:<対象日> に保存する(120日保持)。dry run では保存しない。/api/verify-predictions(毎晩22:40 JST)が、対象日が昨日以前で未検証の予測を、Open-Meteoの過去値から同じ式で再計算して判定する。対象日の7日前まで遡って再試行する。
(予測点/100 − 結果(0か1))² の平均。0に近いほど良く、常に50%と答えると0.25になるので、0.25を下回れば当て推量より上。?report=1(&days=7|28)で取得できる。JSONの snsText はSNS発信用の下書き(自動投稿はしていない)。?dry=1 は検証結果を表示するだけで保存しない。https://raw.githubusercontent.com/<owner>/<repo>/main/src/app/api/...)からXやInstagramに渡している。フォルダを移動したり名前を変えたりすると、コード内のURLも直さないと画像が404になる。.JPG と .jpg は別物)。| フォルダ | ファイル名 | 枚数 | 枚数の環境変数 |
|---|---|---|---|
post-images/flower/ | 花00201.jpg〜 | 17 | FLOWER_IMAGE_COUNT |
post-images/fuji/ | 富士山00101.jpg〜 | 11 | FUJI_IMAGE_COUNT |
post-images/star/ | 星00301.jpg〜 | 8 | STAR_IMAGE_COUNT |
post-images/cloud/ | 雲海0001.JPG〜(4桁・大文字) | 11 | CLOUD_IMAGE_COUNT |
post-images/scad-night/ | 01.jpg〜 | 8 | SCAD_NIGHT_IMAGE_COUNT |
post-images/jake-ai/ | AI00001.JPG〜 | 8 | JAKE_AI_IMAGE_COUNT |
post-instagram/images/ig_motion_imaging/miyakojima/ | 01.jpg〜47.jpg | 46(16.jpgが欠番) | MIYAKOJIMA_IMAGE_COUNT(既定47) |
post-instagram/images/ig_motion_imaging/ishigaki/ | 01.jpg〜106.jpg | 106 | ISHIGAKI_IMAGE_COUNT(既定106) |
post-instagram/images/ig_jake_images/portrait/ | 01.jpg〜61.jpg + exif.csv | 61 | JAKE_IMAGE_COUNT |
写真を追加したら、枚数の環境変数も合わせて更新する。@motion.imaging のInstagramは、番号の写真が無い(欠番・枚数の設定ミス)場合は自動で次の番号に進む(最大10枚まで)。
| 用途 | 変数 |
|---|---|
| 共通 | CRON_SECRET KV_REST_API_URL KV_REST_API_TOKEN(Upstash Redis) GEMINI_API_KEY GITHUB_REPO_OWNER GITHUB_REPO_NAME GITHUB_BRANCH |
| X ミゴロン | X_API_KEY X_API_SECRET X_ACCESS_TOKEN X_ACCESS_SECRET |
| X スクアド | SCAD_X_API_KEY SCAD_X_API_SECRET SCAD_X_ACCESS_TOKEN SCAD_X_ACCESS_SECRET |
| X jake_images | JAKE_X_API_KEY JAKE_X_API_SECRET JAKE_X_ACCESS_TOKEN JAKE_X_ACCESS_SECRET |
INSTAGRAM_ACCESS_TOKEN INSTAGRAM_BUSINESS_ACCOUNT_ID(motion) / JAKE_IMAGES_ACCESS_TOKEN JAKE_IMAGES_ACCOUNT_ID(jake) | |
| Threads | THREADS_MOTION_TOKEN(ミゴロン・motion) THREADS_JAKE_TOKEN(jake) THREADS_SUKUADO_TOKEN(スクアド) |
| 管理画面 | ADMIN_PASSWORD PARTYCONNECT_SUPABASE_SECRET_KEY(PARTYCONNECT_SUPABASE_URL は省略可) |
| 画像枚数 | 上の画像表を参照 |
環境変数を変えたら Redeploy しないと反映されない。
Metaのトークンは約60日で切れる。また、Facebook側のパスワード変更やセキュリティ判定で期限前でも無効になる(エラー code=190)。自動延長の仕組みはまだ無いので、管理画面の「SNSトークン」が「無効」になったら次の手順で更新する。
IGAA…、Threadsは THAA…)をコピーする。数字だけの値はアカウントIDなので違う。注意(Threads):同意画面には、ブラウザでThreadsにログインしているアカウントが出る。「jake_images_として続行」と出ているときに進むと、どの行のボタンを押してもjake用のトークンになる。motion用を作るときは、その画面に motion.imaging が表示されることを必ず確認する。
| 時期 | 症状 | 原因 | 対応 |
|---|---|---|---|
| 2026-09-13 | 雲海指数が内容違いで2回投稿された | 「投稿済みか確認→投稿→フラグを立てる」の間にcronが二重起動 | 投稿前に SET NX で当日分を予約する方式に変更(朝・夕・夜すべて) |
| 2026-09 | 富士山指数で「Your media IDs are invalid」 | 画像がカメラ原寸(最大9504px) | 全画像を長辺2048pxに縮小 |
| 2026-10-16 | 星空指数が全地点35%に張り付いた | 夜間9時間の天気コードの最悪値で上限を掛けていた(1時間の曇りで全地点が頭打ち) | 時間別に評価し、最も条件の良い連続3時間で採点するよう変更 |
| 2026-09 | 星空指数が雨の日に95% | 星空指数が天気を見ていなかった | open-meteo の雲量・天気から算出するよう変更 |
| 2026-09-15頃〜09-28 | Instagram 2アカウントの投稿が止まっていた | Metaトークンの無効化(code=190) | トークンを再発行。気づけなかった反省から管理画面を追加 |
| 2026-09-24〜09-25 | 全アカウントで画像が付かない/Instagramが投稿できない | app/→src/app/ 移動で画像URLが404 | 全7ファイルのURLを src/app/... に修正 |
| 2026-10-05(未発生) | 宮古島 16.jpg 欠番、石垣島の枚数設定が実際より3枚多い | 該当番号の日にInstagram投稿が失敗する状態だった | 欠番を飛ばす処理を追加、石垣島の既定枚数を106に修正 |