{"id":228,"date":"2026-09-18T14:58:57","date_gmt":"2026-09-18T14:58:57","guid":{"rendered":"https:\/\/projects.etc.cmu.edu\/aidol\/?p=228"},"modified":"2026-10-08T19:48:44","modified_gmt":"2026-10-08T19:48:44","slug":"week-4","status":"publish","type":"post","link":"https:\/\/projects.etc.cmu.edu\/aidol\/week-4\/","title":{"rendered":"Week 4 Dev in Progress"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">TL; DR<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>V1 cut down<\/strong> to seven steps, ending on <em>publish or re-shoot?<\/em> for playtest.<\/li>\n\n\n\n<li><strong>The full month (four in-game weeks) is finalized<\/strong> ~40 minutes, day by day.<\/li>\n\n\n\n<li><strong>Lip sync<\/strong> in generated video is fixed.<\/li>\n\n\n\n<li><strong>The MV pipeline<\/strong> ran successfully end to end.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u00b7 \u00b7 \u00b7<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Cutting V1 to one clean run<\/strong><\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">Quarters gave us a build worth showing and a clear read on what wasn&#8217;t going to be finished. So we scoped V1 down to a single uninterrupted run.<\/p>\n\n\n\n<pre class=\"wp-block-code has-pale-pink-color has-text-color has-link-color wp-elements-1\"><code><strong>F1 Audition \u2192 F3 Home \u2192 F2 Interview \u2192 F7 Styling \u2192 F8 Recording \u2192 F10 Senior idol \u2192 your video \u2192 publish or re-shoot?<\/strong><\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-f56f613f wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<p class=\"has-text-align-right wp-block-paragraph\"><strong>What moved out:<\/strong><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<figure class=\"wp-block-table\"><table><thead><tr><th>Cut<\/th><th>Where it went<\/th><\/tr><\/thead><tbody><tr><td>F9 Expression class<\/td><td>V2<\/td><\/tr><tr><td>F4 Dorm + F5 Quests<\/td><td>Folded into the Home scene<\/td><\/tr><tr><td>Everything after the video: publish growth, data report, ledger panel<\/td><td>Later<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u00b7 \u00b7 \u00b7<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>The 1 month in-game storyline<\/strong>:<\/h5>\n\n\n\n<p class=\"has-contrast-dark-color has-mono-3-background-color has-text-color has-background has-link-color wp-elements-2 wp-block-paragraph\"><strong>One Month to Earn Your Debut.<\/strong> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You&#8217;re signed, but you haven&#8217;t debuted, and you have a month to earn it. Two things decide whether you do: your weekly evaluation grades, and how fast your following grows.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><\/th><th>How it ends<\/th><th>What it is<\/th><th><\/th><\/tr><\/thead><tbody><tr><td>Week 1<\/td><td>~13 min<\/td><td>Being found, chosen, seen<\/td><td>V1 \u00b7 the playtest build<\/td><\/tr><tr><td><strong>Week 2<\/strong><\/td><td><strong>~7.5 min<\/strong><\/td><td><strong>From arranged-for-you to becoming someone<\/strong><\/td><td><strong>Next \u00b7 music generation<\/strong><\/td><\/tr><tr><td>Week 3<\/td><td>~8 min<\/td><td>Explore on your own; meet other players<\/td><td><\/td><\/tr><tr><td>Week 4<\/td><td>~11.5 min<\/td><td>You stand on the evaluation stage and perform<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"879\" height=\"1040\" src=\"https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/1-month-heros-journey-edited.png\" alt=\"\" class=\"wp-image-284\" srcset=\"https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/1-month-heros-journey-edited.png 879w, https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/1-month-heros-journey-edited-254x300.png 254w, https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/1-month-heros-journey-edited-865x1024.png 865w, https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/1-month-heros-journey-edited-768x909.png 768w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Week 2 is the one we build next, and it&#8217;s written down to the day:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th>Day<\/th><th><\/th><th>What happens<\/th><\/tr><\/thead><tbody><tr><td>Mon<\/td><td>Writing your song<\/td><td>You brief the agency&#8217;s producer. It goes into production that takes a few days<\/td><\/tr><tr><td>Tue<\/td><td>Vocal training<\/td><td>Pitch-matching minigame. Your own voice, or a voice chosen to represent you<\/td><\/tr><tr><td>Wed<\/td><td>The song arrives<\/td><td><strong>Two demos, in a generic reference vocal. You pick one.<\/strong> Only then does the backend render it in your voice<\/td><\/tr><tr><td>Thu<\/td><td>Dance training<\/td><td>A rhythm game charted from <em>your own song<\/em><\/td><\/tr><tr><td>Fri<\/td><td>Expression training<\/td><td>Week 1&#8217;s memory game, with one difficulty step up<\/td><\/tr><tr><td>Sat<\/td><td>Posting<\/td><td>Pick one practice photo from the week, write something, post it<\/td><\/tr><tr><td>Sun<\/td><td>Weekly review<\/td><td>The producer&#8217;s report: this week&#8217;s grade and feedback<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u00b7 \u00b7 \u00b7<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Lip sync had been drifting: 1.2 seconds of silence<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Original assumption: <\/strong>the video model being imprecise.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It wasn&#8217;t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Seedance does not track the audio you hand it.<\/strong> It listens to the audio, <em>re-speaks what it heard<\/em>, and animates its own rendition of that. So it was never syncing to the player&#8217;s recording. <strong>It was syncing to its own interpretation of it.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And what made it mishear: roughly <strong>1.2 seconds of phone room tone<\/strong> before the player&#8217;s first word.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The fix is word-boundary trimming through ElevenLabs Scribe:<\/strong> cut to \u00b1150ms around the actual speech.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u00b7 \u00b7 \u00b7<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">The MV pipeline<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">We ran the music-video pipeline end to end for the first time:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pick a real K-pop MV and <em>measure<\/em> it. Write the concept. Generate the song in Suno. Build the storyboard on the song&#8217;s actual bars. Generate the character look and turnaround, then the set plates. Then generate the video, segment by segment.<\/p>\n\n\n\n<pre class=\"wp-block-code has-pale-pink-color has-text-color has-link-color wp-elements-3\"><code><strong>Reference \u2192 Concept \u2192 Music \u2192 Storyboard \u2192 Look \u2192 Set \u2192 Video<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This is not only our backstage process. It&#8217;s the flow the player walks through in the game.<\/strong> Every step maps to a choice made in a UI.<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u00b7 \u00b7 \u00b7<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cost Breakdown<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tool<\/th><th>Used for<\/th><th>Type<\/th><th>Cost<\/th><\/tr><\/thead><tbody><tr><td>OpenAI<\/td><td>Architecture, coding<\/td><td>API<\/td><td>$13.33<\/td><\/tr><tr><td>OpenRouter<\/td><td>Concurrency probes ~$8; lip-sync probe $0.76; F7 collage probe ~$0.30<\/td><td>API<\/td><td>$11.35<\/td><\/tr><tr><td>Pollo.ai<\/td><td>Video generation<\/td><td>Subscription<\/td><td>$129<\/td><\/tr><tr><td>Suno<\/td><td>Music generation<\/td><td>Subscription<\/td><td>$30<\/td><\/tr><tr><td>ElevenLabs<\/td><td>Word-boundary trimming (ASR)<\/td><td>Subscription<\/td><td>$11.66<\/td><\/tr><tr><td>Claude: $125*6<\/td><td>Team efficiency<\/td><td>Subscription<\/td><td>&#8211;<\/td><\/tr><tr><td><strong>Total<\/strong><\/td><td><\/td><td><\/td><td><strong>$195.34<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Not approved cost: fal.ai ($2.93)<\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">\u00b7 \u00b7 \u00b7<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Weekly Progress Report<\/strong><\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/aidol-week-4-public.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Embed of aidol-week-4-public.\"><\/object><a id=\"wp-block-file--media-da91df6d-da3d-423a-89fc-90550531302d\" href=\"https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/aidol-week-4-public.pdf\">aidol-week-4-public<\/a><a href=\"https:\/\/projects.etc.cmu.edu\/aidol\/wp-content\/uploads\/2026\/09\/aidol-week-4-public.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-da91df6d-da3d-423a-89fc-90550531302d\">Download<\/a><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TL; DR \u00b7 \u00b7 \u00b7 Cutting V1 to one clean run Quarters gave us a build worth showing and a clear read on what wasn&#8217;t going to be finished. So we scoped V1 down to a single uninterrupted run. What moved out: Cut Where it went F9 Expression class V2 F4 Dorm + F5 Quests [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":230,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/posts\/228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/comments?post=228"}],"version-history":[{"count":13,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/posts\/228\/revisions"}],"predecessor-version":[{"id":379,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/posts\/228\/revisions\/379"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/media\/230"}],"wp:attachment":[{"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/media?parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/categories?post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projects.etc.cmu.edu\/aidol\/wp-json\/wp\/v2\/tags?post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}