iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A deck for political & news react streamers. Triage chat-submitted links, get DMCA risk signals, and turn your stream into show notes.
Built with Next.js 14 (App Router), Supabase, Anthropic Claude, and Twitch EventSub webhooks. Deploys entirely on Vercel — no separate worker needed.
1. npm install
2. Copy .env.example to .env.local and fillREADME 전문 보기 ↗A deck for political & news react streamers. Triage chat-submitted links, get DMCA risk signals, and turn your stream into show notes.
Built with Next.js 14 (App Router), Supabase, Anthropic Claude, and Twitch EventSub webhooks. Deploys entirely on Vercel — no separate worker needed.
app/
page.tsx ─ landing
login/ ─ login + OAuth error display
deck/ ─ streamer's reaction view (single-card focus)
mod/ ─ mod triage view (firehose → approved queue)
setup/ ─ per-stream settings + EventSub status
api/
twitch/oauth/ ─ start OAuth
twitch/callback/ ─ finish OAuth, upsert stream, set session, register EventSub
twitch/eventsub/ ─ Twitch EventSub webhook handler (receives chat messages)
twitch/eventsub/status/ ─ check/reconnect EventSub subscription
queue/ ─ POST submit, GET list, PATCH mutate
deck/add/ ─ streamer direct-add (URLs + playlist expansion)
queue/reorder/ ─ drag-drop reorder
queue/clear/ ─ bulk-reject pending items
notes/ ─ GET show notes as JSON or Markdown
notes/discord/ ─ GET preview / POST the played list to a Discord webhook
setup/ ─ save settings
auth/ ─ logout
lib/
url.ts ─ normalize URLs, detect media kind
extract.ts ─ orchestrates extraction per media kind
extract-article.ts ─ Mozilla Readability + OpenGraph
extract-youtube.ts ─ YouTube page scraping + oEmbed + transcript
extract-twitter.ts ─ Twitter/X metadata
enrich.ts ─ Anthropic summary + credibility + DMCA risk
submit-url.ts ─ shared queue insertion + dedup logic
search-coverage.ts ─ Brave Search for related coverage
discord.ts ─ builds and sends the played list to a Discord webhook
twitch-oauth.ts ─ OAuth helpers
twitch-eventsub.ts ─ EventSub verification, subscription management
supabase.ts ─ service-role client
session.ts ─ signed-cookie session
components/
SubmissionCard.tsx
DarkModeToggle.tsx
supabase/
schema.sql ─ run this in Supabase SQL editor
npm install.env.example to .env.local and fill in:
http://localhost:3000/api/twitch/callbackNEXT_PUBLIC_TWITCH_CLIENT_ID and TWITCH_CLIENT_SECRETsupabase/schema.sql in the SQL editorNEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEYANTHROPIC_API_KEYopenssl rand -hex 32, set as EVENTSUB_SECRETYOUTUBE_API_KEYBRAVE_SEARCH_API_KEYnpm run dev and open http://localhost:3000People can sign in with a magic link instead of Twitch; those accounts get the deck and shelves but none of the chat features. Supabase Auth proves the email address, then the app issues its own session cookie (app/auth/callback). Email signup is open to anyone and is not subject to REQUIRE_APPROVAL.
Supabase dashboard setup:
{NEXT_PUBLIC_APP_URL}/** (and http://localhost:3000/**) to Redirect URLs.{{ .RedirectTo }}?token_hash={{ .TokenHash }}&type=email.smtp.resend.com, port 465, user resend, password = API key) and a higher email rate limit.No new environment variables.
NEXT_PUBLIC_APP_URL = your production URL (e.g. https://thebroadside.net)EVENTSUB_SECRET = the secret generated above.env.example{NEXT_PUBLIC_APP_URL}/api/twitch/callback.streams, register an EventSub webhook for their chat, and set a signed cookie./api/twitch/eventsub. The handler extracts URLs, applies permission/command/ignore filters, and adds them to the queue. This works 24/7 — no browser tab needs to be open./mod → see incoming links, approve/reject/add notes, and attach a viewer-facing trigger warning to anything that needs one./deck → shows only approved items in a drag-sortable sidebar. Trigger warnings can also be added or edited here mid-show, and appear on the overlay immediately.show_notes./api/notes?format=markdown, or post the played list to a Discord channel from Setup → Account or the deck header.app_theme is a default — a mod who explicitly picks High contrast because they can't read the streamer's palette keeps that choice, since only an unset preference falls through to the brand. overlay_theme is absolute: it's matching branding on air with nobody around to adjust it, so it gets per-slot colours rather than inheriting the app's six tokens. The overlay reads its theme from the poll rather than the URL, which is the only way a colour change reaches a browser source mid-show.font-family, and colours are written straight into a <style>; lib/theme.ts normalises colours to #rrggbb and restricts families to letters, digits and spaces once, at the point of saving, so no reader has to re-derive the rules.content_warning is AI-guessed and internal (a triage hint on the card). mod_notes is an internal production aside. trigger_warning is the only one written for the audience — the streamer or a mod types it, and it's published verbatim: it opens the !video reply and the "Post to chat" message (ahead of the title and url, so it survives Twitch's pinned-message preview), and it's shown on the on-air overlay. Keeping them separate is what lets the first two stay candid.mod_notes trail.discord_posted_at tracks what's already gone to Discord separately from notes_exported_at's Markdown boundary — a streamer posting to Discord and exporting Markdown to somewhere else on different schedules would otherwise find one export silently empty because the other already advanced a shared cursor. The webhook URL itself is a bearer secret (anyone holding it can post into that channel), so it's encrypted at rest the same way as the Twitch OAuth tokens and never sent back to the client after saving — only a "configured" flag is.MIT. Do whatever.