diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/action-items.md b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/action-items.md new file mode 100644 index 0000000..3563b9b --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/action-items.md @@ -0,0 +1,5 @@ +# Action Items + +- [ ] Jinyuan: present the four-route taxonomy and the common cross-shot state problem. +- [ ] All participants: identify one failure that current multi-shot benchmarks cannot attribute to a specific component. +- [ ] All participants: propose one controlled experiment comparing internal context, retrieved memory, and agent-managed state. diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/liquid-glass.css b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/liquid-glass.css new file mode 100644 index 0000000..57145d5 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/liquid-glass.css @@ -0,0 +1,240 @@ +:root { + --bg: #edf3fb; + --bg-soft: #f7faff; + --surface: rgba(255,255,255,.58); + --surface-strong: rgba(255,255,255,.78); + --border: rgba(255,255,255,.72); + --border-strong: rgba(106,129,170,.22); + --text-1: #102039; + --text-2: #47566d; + --text-3: #7c8ba2; + --accent: #1479ff; + --accent-2: #725cff; + --accent-3: #00a99a; + --good: #00a47d; + --warn: #f3922b; + --bad: #ef5c68; + --cyan: #35baf6; + --magenta: #d05cff; + --grad: linear-gradient(120deg,#087bff 0%,#6f63ff 45%,#ca55e7 74%,#ff8f70 100%); + --grad-soft: linear-gradient(135deg,rgba(59,149,255,.18),rgba(130,92,255,.13) 55%,rgba(255,145,191,.14)); + --radius: 26px; + --radius-sm: 16px; + --radius-lg: 36px; + --shadow: 0 18px 52px rgba(45,70,112,.12), 0 2px 12px rgba(30,55,95,.08), inset 0 1px 0 rgba(255,255,255,.86); + --shadow-lg: 0 28px 72px rgba(45,70,112,.19), 0 6px 20px rgba(30,55,95,.10), inset 0 1px 0 rgba(255,255,255,.92); + --font-sans: -apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","PingFang SC","Helvetica Neue",Arial,sans-serif; + --font-mono: "SFMono-Regular",ui-monospace,Menlo,Monaco,Consolas,monospace; +} + +html,body{background:#dfe9f7;color:var(--text-1)} +body{font-family:var(--font-sans)} +.deck{background: + radial-gradient(circle at 12% 8%,rgba(95,183,255,.42),transparent 29%), + radial-gradient(circle at 88% 18%,rgba(172,112,255,.25),transparent 31%), + radial-gradient(circle at 68% 92%,rgba(84,224,198,.22),transparent 33%), + linear-gradient(145deg,#f6f9ff 0%,#e8f0fb 46%,#f3effd 100%)} +.deck::before,.deck::after{content:"";position:absolute;border-radius:50%;filter:blur(18px);opacity:.8;pointer-events:none} +.deck::before{width:460px;height:460px;left:-130px;bottom:-190px;background:linear-gradient(135deg,rgba(66,171,255,.36),rgba(95,99,255,.06))} +.deck::after{width:390px;height:390px;right:-90px;top:-120px;background:linear-gradient(135deg,rgba(202,100,255,.27),rgba(255,184,126,.18))} + +.slide{padding:56px 72px 58px;justify-content:flex-start;isolation:isolate} +.slide::before{content:"";position:absolute;inset:22px;border-radius:38px;background:linear-gradient(145deg,rgba(255,255,255,.30),rgba(255,255,255,.09));border:1px solid rgba(255,255,255,.62);box-shadow:inset 0 1px 0 rgba(255,255,255,.88),0 30px 90px rgba(54,79,122,.08);z-index:-1;pointer-events:none} +.slide.cover{justify-content:center;padding:70px 86px} +.slide.section-open{justify-content:center} +.slide.compact{padding-top:48px} + +.kicker{margin:0 0 10px;font-size:12px;font-weight:750;letter-spacing:.14em;color:#2668c9} +.h1{font-size:66px;line-height:1.02;font-weight:760;letter-spacing:-.047em;max-width:1020px} +.h2{font-size:42px;line-height:1.08;font-weight:750;letter-spacing:-.038em;margin-bottom:10px;max-width:1120px} +.h3{font-size:25px;line-height:1.2;letter-spacing:-.022em} +.lede{font-size:19px;line-height:1.5;color:var(--text-2);font-weight:420;max-width:72ch} +.lede-tight{font-size:17px;line-height:1.45;color:var(--text-2)} +.gradient-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent} +.big-number{font-size:76px;line-height:1;font-weight:760;letter-spacing:-.06em} +.quote{font-size:28px;line-height:1.38;font-weight:600;letter-spacing:-.025em} +.tiny{font-size:11px;line-height:1.45;color:var(--text-3)} +.small{font-size:13px;line-height:1.5;color:var(--text-2)} +.body{font-size:15px;line-height:1.55;color:var(--text-2)} +.strong{color:var(--text-1);font-weight:680} +.accent{color:var(--accent)} + +.glass,.card{background:linear-gradient(145deg,rgba(255,255,255,.72),rgba(255,255,255,.38));border:1px solid rgba(255,255,255,.78);box-shadow:var(--shadow);backdrop-filter:blur(28px) saturate(145%);-webkit-backdrop-filter:blur(28px) saturate(145%);border-radius:var(--radius);position:relative;overflow:hidden} +.glass::before,.card::before{content:"";position:absolute;left:22px;right:22px;top:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.95),transparent)} +.glass-strong{background:linear-gradient(145deg,rgba(255,255,255,.88),rgba(255,255,255,.55));border:1px solid rgba(255,255,255,.94);box-shadow:var(--shadow-lg)} +.panel{padding:22px 24px} +.panel-sm{padding:16px 18px} +.panel-lg{padding:28px 30px} +.glass-blue{background:linear-gradient(145deg,rgba(237,248,255,.84),rgba(220,235,255,.50))} +.glass-purple{background:linear-gradient(145deg,rgba(249,242,255,.84),rgba(235,228,255,.50))} +.glass-mint{background:linear-gradient(145deg,rgba(237,255,251,.82),rgba(220,248,241,.49))} +.glass-warm{background:linear-gradient(145deg,rgba(255,249,239,.84),rgba(255,232,216,.48))} + +.grid{gap:16px}.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}.g4{grid-template-columns:repeat(4,minmax(0,1fr))} +.g13{grid-template-columns:.9fr 1.45fr}.g31{grid-template-columns:1.45fr .9fr}.g23{grid-template-columns:2fr 3fr} +.stack>*+*{margin-top:10px}.row{gap:14px} +.content{flex:1;min-height:0;margin-top:13px} +.content-center{display:flex;align-items:center;justify-content:center} +.vcenter{display:flex;flex-direction:column;justify-content:center} + +.chip,.meta-badge{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.88);background:rgba(255,255,255,.55);box-shadow:0 6px 18px rgba(45,70,112,.08),inset 0 1px rgba(255,255,255,.9);font-size:10px;font-weight:720;letter-spacing:.05em;color:#41516a;white-space:nowrap} +.meta-badge{color:#1f69c8;background:rgba(235,246,255,.76)} +.chip.p1{color:#126fcf}.chip.p2{color:#6b48d8}.chip.p3{color:#00877b}.chip.p4{color:#b96023} +.section-tag{position:absolute;right:78px;top:56px;display:flex;gap:7px;align-items:center} +.dot{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 5px rgba(20,121,255,.12)} + +.deck-footer{bottom:35px;left:74px;right:74px;font-size:10px;letter-spacing:.04em;color:#7c8aa0} +.deck-footer .source{max-width:80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} +.slide-number{font-family:var(--font-mono);font-weight:650;color:#56677f} + +.hero-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:28px;align-items:center} +.filmstrip{display:grid;grid-template-columns:repeat(5,1fr);gap:9px;align-items:center} +.frame{height:108px;border-radius:16px;position:relative;overflow:hidden;background:linear-gradient(145deg,#1b3054,#5d77b6);box-shadow:0 15px 26px rgba(40,61,99,.18);border:1px solid rgba(255,255,255,.7)} +.frame::after{content:attr(data-shot);position:absolute;left:9px;bottom:8px;padding:3px 7px;border-radius:999px;background:rgba(11,22,43,.55);backdrop-filter:blur(8px);color:white;font:700 9px var(--font-mono)} +.frame:nth-child(2){background:linear-gradient(145deg,#ef9a78,#7a4c91)}.frame:nth-child(3){background:linear-gradient(145deg,#57a29b,#1e4665)}.frame:nth-child(4){background:linear-gradient(145deg,#f0c564,#b6575f)}.frame:nth-child(5){background:linear-gradient(145deg,#7866d2,#2f325f)} +.cut{height:50px;width:1px;background:linear-gradient(transparent,#6d7f99,transparent);justify-self:center} + +.storyboard{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px} +.shot-card{padding:8px;border-radius:19px;background:rgba(255,255,255,.58);border:1px solid rgba(255,255,255,.88);box-shadow:0 12px 25px rgba(46,72,112,.11);overflow:hidden} +.shot-card svg{width:100%;aspect-ratio:16/10;border-radius:13px;overflow:hidden;background:#dfeaff} +.shot-label-line{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:7px 3px 1px} +.shot-index{font:740 9px var(--font-mono);color:#7a899f;letter-spacing:.05em} +.shot-type{font-size:10px;font-weight:760;color:#253852} +.storyboard.large{gap:12px}.storyboard.large .shot-card{padding:10px;border-radius:22px}.storyboard.large .shot-type{font-size:12px}.storyboard.large .shot-index{font-size:10px} + +.definition{display:grid;grid-template-columns:150px 1fr;gap:20px;align-items:center} +.definition .label{font-size:12px;font-weight:760;color:#1f69c8;letter-spacing:.1em;text-transform:uppercase} +.definition .text{font-size:19px;line-height:1.45;font-weight:560} +.rule{height:1px;background:linear-gradient(90deg,rgba(62,83,116,.10),rgba(62,83,116,.28),rgba(62,83,116,.10))} + +.route-card{min-height:166px;display:flex;flex-direction:column;justify-content:space-between} +.route-card .route-n{font:740 11px var(--font-mono);letter-spacing:.12em;color:var(--text-3)} +.route-card .route-title{font-size:23px;font-weight:730;letter-spacing:-.025em;margin:8px 0 6px} +.route-card .route-flow{font:650 11px/1.45 var(--font-mono);color:#516078;padding:8px 10px;background:rgba(255,255,255,.45);border-radius:12px} + +.agenda{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin-top:22px} +.agenda-item{padding:20px 22px;display:grid;grid-template-columns:42px 1fr auto;gap:13px;align-items:center} +.agenda-item .n{font:700 15px var(--font-mono);color:#2875db}.agenda-item h3{font-size:21px;margin:0}.agenda-item p{font-size:12px;margin:2px 0 0;color:var(--text-2)} + +.section-title{font-size:70px;line-height:1.12;font-weight:780;letter-spacing:-.052em;margin:0;padding-bottom:.08em} +.section-subtitle{font-size:24px;line-height:1.35;color:var(--text-2);font-weight:540;margin:12px 0 0} +.section-subtitle .gradient-text{font-weight:720} + +.flow{display:flex;align-items:center;gap:9px} +.flow.vertical{flex-direction:column;align-items:stretch} +.node{flex:1;min-width:0;padding:14px 16px;border-radius:18px;background:rgba(255,255,255,.60);border:1px solid rgba(255,255,255,.82);box-shadow:0 9px 24px rgba(45,70,112,.08);text-align:center;color:#233550;font-size:13px;font-weight:680} +.node small{display:block;margin-top:3px;color:#74849c;font-size:10px;font-weight:550} +.arrow{flex:0 0 auto;color:#7d8ea5;font-size:18px;font-weight:700} + +.timeline{position:relative;display:grid;grid-template-columns:repeat(5,1fr);gap:12px;padding-top:28px;align-items:start} +.timeline.content{flex:none;margin:auto 0} +.timeline::before{content:"";position:absolute;top:14px;left:5%;right:5%;height:3px;border-radius:3px;background:linear-gradient(90deg,#47a5ff,#7465ff,#cb61e6,#ff9971)} +.time-item{padding:15px 15px 14px;min-height:0;display:flex;flex-direction:column} +.time-item::after{content:"";position:absolute;top:-20px;left:23px;width:13px;height:13px;border-radius:50%;background:white;border:4px solid #397dd4;box-shadow:0 0 0 5px rgba(58,126,217,.12)} +.time{font:750 11px var(--font-mono);color:#1f6ed0}.phase{font-size:15px;font-weight:730;margin:6px 0 8px}.paper-list{font-size:11px;line-height:1.55;color:#52627a}.paper-list b{color:#1d2f49} +.paper-list{display:flex;flex-direction:column;gap:6px;flex:1} +.paper-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 6px;align-items:center;padding:7px 8px;border-radius:12px;background:rgba(255,255,255,.49);border:1px solid rgba(255,255,255,.72)} +.paper-row .paper-desc{grid-column:1/-1;color:#6b7a90;font-size:9.5px;line-height:1.3} +.paper-link{color:inherit;text-decoration:none;font-weight:750}.paper-link:hover{color:var(--accent);text-decoration:none} +.paper a{color:inherit;text-decoration:none}.paper a:hover{color:var(--accent);text-decoration:none} +.title-paper{display:inline-flex;align-items:center;gap:10px;vertical-align:middle;white-space:nowrap} +.title-paper .meta-badge{transform:translateY(-2px)} + +.slide a[href]{text-decoration-line:underline!important;text-decoration-style:dashed!important;text-decoration-thickness:1px!important;text-underline-offset:3px!important;text-decoration-color:rgba(35,105,190,.65)!important} +.slide a[href]:hover{text-decoration-color:var(--accent)!important} + +.term{border-bottom:1px dotted rgba(38,111,200,.82);cursor:help;outline:none;white-space:nowrap;color:inherit} +.term::after{content:"?";display:inline-grid;place-items:center;width:12px;height:12px;margin-left:3px;border-radius:50%;color:#226ec9;background:rgba(49,132,232,.11);font:800 8px/1 var(--font-mono);vertical-align:.35em} +.term:focus{border-bottom-color:#f08a45;color:#254872} +.term-popover{position:fixed;left:50%;bottom:58px;transform:translate(-50%,10px);z-index:160;width:min(760px,calc(100vw - 36px));padding:14px 18px;border:1px solid rgba(255,255,255,.92);border-radius:17px;background:rgba(246,250,255,.96);box-shadow:0 18px 58px rgba(40,65,104,.24);backdrop-filter:blur(24px);opacity:0;visibility:hidden;pointer-events:none;transition:.18s ease;color:var(--text-2)} +.term-popover.show{opacity:1;visibility:visible;transform:translate(-50%,0)} +.term-popover b{color:#1f69c8;font-size:12px;margin-right:8px}.term-popover span{font-size:13px;line-height:1.55} + +.mask-layout{display:grid;grid-template-columns:1fr 1fr;gap:26px;align-items:center} +.mask-matrix{display:grid;grid-template-columns:74px repeat(4,1fr);gap:5px;align-items:center;font-size:10px;text-align:center} +.mask-cell{height:38px;border-radius:9px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(255,255,255,.84);font-weight:650} +.mask-on{background:linear-gradient(135deg,rgba(43,139,255,.82),rgba(102,99,244,.68));color:white}.mask-visual{background:linear-gradient(135deg,rgba(34,187,162,.72),rgba(71,164,255,.64));color:white}.mask-off{background:rgba(255,255,255,.35);color:#a1adbd}.mask-label{font:700 10px var(--font-mono);color:#687890} + +.rope{position:relative;height:244px;padding:24px} +.rope-axis{position:absolute;left:32px;right:32px;top:118px;height:2px;background:#74859d} +.rope-seg{position:absolute;top:83px;height:70px;border-radius:18px;border:1px solid rgba(255,255,255,.8);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:720;box-shadow:0 9px 20px rgba(50,75,115,.10)} +.rope-seg::before{content:attr(data-caption);position:absolute;top:-27px;font:650 10px var(--font-mono);color:#6d7d94} +.rope-seg.s1{left:5%;width:25%;background:rgba(61,153,255,.55)}.rope-seg.s2{left:37%;width:25%;background:rgba(118,95,244,.48)}.rope-seg.s3{left:69%;width:25%;background:rgba(210,90,225,.42)} +.phase-jump{position:absolute;top:104px;width:18px;height:30px;border-left:3px dashed #ff7c66;transform:skew(-16deg)} + +.rope-board{padding:22px 22px 18px} +.rope-axis-title{display:flex;justify-content:space-between;align-items:center;font:700 10px var(--font-mono);color:#73839a;margin-bottom:12px} +.rope-pairs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px} +.rope-pair{position:relative;padding:12px;border-radius:20px;border:1px solid rgba(255,255,255,.86);box-shadow:0 10px 24px rgba(48,73,112,.09)} +.rope-pair:nth-child(1){background:linear-gradient(145deg,rgba(219,239,255,.86),rgba(235,244,255,.55))}.rope-pair:nth-child(2){background:linear-gradient(145deg,rgba(235,229,255,.84),rgba(244,240,255,.55))}.rope-pair:nth-child(3){background:linear-gradient(145deg,rgba(253,229,248,.82),rgba(250,240,255,.56))} +.rope-pair::after{content:"";position:absolute;right:-13px;top:36px;width:13px;height:46px;border-left:2px dashed rgba(239,112,98,.72)} +.rope-pair:last-child::after{display:none} +.pair-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px}.pair-head b{font-size:12px}.pair-head span{font:700 8px var(--font-mono);color:#708198} +.rope-text{padding:8px 10px;border-radius:11px;background:rgba(255,255,255,.76);font-size:10px;font-weight:700;color:#35506e;border:1px solid rgba(255,255,255,.92)} +.rope-video{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-top:7px}.rope-frame{height:42px;border-radius:8px;background:linear-gradient(155deg,#4c9cf4,#536bd4);position:relative}.rope-frame:nth-child(2){filter:brightness(1.07)}.rope-frame:nth-child(3){filter:brightness(1.14)}.rope-frame:nth-child(4){filter:brightness(1.21)} +.rope-frame::after{content:attr(data-t);position:absolute;left:0;right:0;bottom:4px;text-align:center;color:white;font:700 7px var(--font-mono)} +.rope-range{display:flex;justify-content:space-between;margin-top:6px;font:650 8px var(--font-mono);color:#687990} +.rope-legend{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:13px}.rope-legend div{padding:8px 10px;border-radius:12px;background:rgba(255,255,255,.48);font-size:9.5px;line-height:1.35;color:#5e6e85} + +.lct-board{padding:20px 22px 18px} +.lct-sequence-label{display:flex;justify-content:space-between;align-items:center;font:720 10px var(--font-mono);color:#6e7f96;margin-bottom:10px} +.lct-sequence{display:grid;grid-template-columns:1fr 1.35fr 18px 1fr 1.35fr 18px 1fr 1.35fr;gap:6px;align-items:center} +.lct-token{height:62px;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;border:1px solid rgba(255,255,255,.88);font-size:11px;font-weight:760;box-shadow:0 8px 20px rgba(48,73,112,.08)} +.lct-token small{font:650 8px/1.3 var(--font-mono);margin-top:4px;opacity:.72} +.lct-token.caption{background:linear-gradient(145deg,rgba(232,244,255,.92),rgba(214,232,255,.64));color:#285a91} +.lct-token.noise{background:linear-gradient(145deg,rgba(236,229,255,.91),rgba(250,234,250,.66));color:#654d99} +.lct-divider{text-align:center;color:#ee7d69;font:780 15px var(--font-mono)} +.lct-pair-braces{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:8px} +.lct-pair-braces div{height:22px;border-left:2px solid rgba(62,130,218,.45);border-right:2px solid rgba(62,130,218,.45);border-bottom:2px solid rgba(62,130,218,.45);border-radius:0 0 12px 12px;text-align:center;color:#59718f;font:700 8px/1 var(--font-mono);padding-top:12px} +.lct-rope-rule{margin:13px 0 10px;display:flex;align-items:center;gap:12px}.lct-rope-rule::before,.lct-rope-rule::after{content:"";height:1px;flex:1;background:linear-gradient(90deg,transparent,rgba(100,116,226,.52),transparent)} +.lct-rope-rule b{font-size:11px;color:#5a52b0;white-space:nowrap} +.lct-offsets{display:grid;grid-template-columns:repeat(3,1fr);gap:10px} +.lct-offset{padding:11px 12px;border-radius:15px;background:rgba(255,255,255,.56);border:1px solid rgba(255,255,255,.82);font-size:9.5px;line-height:1.35;color:#566780} +.lct-offset b{display:block;color:#243a59;font-size:11px;margin-bottom:4px}.lct-offset code{font:700 9px var(--font-mono);color:#6954bd;background:rgba(237,232,255,.72);padding:3px 5px;border-radius:6px} + +.token-diagram{display:grid;grid-template-columns:repeat(7,1fr);gap:8px;align-items:center} +.tok{height:86px;border-radius:16px;display:flex;align-items:center;justify-content:center;text-align:center;padding:8px;font-size:11px;font-weight:700;background:rgba(255,255,255,.58);border:1px solid rgba(255,255,255,.84)} +.tok.transition{height:54px;background:linear-gradient(145deg,#ff9a76,#ff6f7e);color:white;box-shadow:0 10px 24px rgba(235,99,106,.25)} +.transition-layout{display:grid;grid-template-rows:auto auto;gap:14px;align-content:center} +.transition-main{padding:20px 24px}.transition-main .token-diagram{margin-top:14px}.transition-main .tok{height:72px}.transition-main .tok.transition{height:58px} +.g55{grid-template-columns:1.12fr .88fr} + +.figure-frame{height:100%;padding:12px;border-radius:24px;background:rgba(255,255,255,.75);border:1px solid rgba(255,255,255,.92);box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:0} +.figure-frame img{width:100%;height:100%;object-fit:contain;border-radius:16px;background:white;min-height:0} +.figure-frame .cap{font-size:9px;color:#7e8da1;margin:7px 4px 0;flex:0 0 auto} +.paper-crop{height:auto;overflow:hidden;align-self:center;position:relative;display:block;min-height:0} +.paper-crop img{position:absolute;left:12px;top:12px;width:calc(100% - 24px);height:auto;max-width:none;object-fit:initial;object-position:top;border-radius:14px} + +.callout{border-left:4px solid var(--accent);padding:12px 14px;border-radius:0 16px 16px 0;background:rgba(232,244,255,.58);font-size:13px;color:#42516a} +.callout.purple{border-left-color:#7a5cff;background:rgba(241,237,255,.60)}.callout.mint{border-left-color:#00a99a;background:rgba(230,251,246,.64)}.callout.warm{border-left-color:#f28d52;background:rgba(255,241,229,.64)} + +.paper-head{display:flex;align-items:center;gap:10px;min-height:28px}.paper-head .paper{font-size:24px;font-weight:750;letter-spacing:-.026em}.paper-head .venue{margin-left:auto} +.bullets{margin:8px 0 0;padding:0;list-style:none}.bullets li{position:relative;padding-left:17px;margin:7px 0;font-size:13px;line-height:1.43;color:#47576e}.bullets li::before{content:"";position:absolute;left:0;top:.58em;width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,#2694ff,#7866f7);box-shadow:0 0 0 4px rgba(56,139,245,.10)} + +.cache-diagram{display:grid;grid-template-columns:1fr 52px 1.35fr 52px 1fr;gap:8px;align-items:center} +.cache{padding:18px;border-radius:22px;text-align:center;background:rgba(255,255,255,.58);border:1px solid rgba(255,255,255,.85)} +.cache.global{box-shadow:inset 0 0 0 2px rgba(35,133,244,.17)}.cache.local{box-shadow:inset 0 0 0 2px rgba(27,171,151,.17)} +.cache .cache-title{font-size:16px;font-weight:730}.cache .cache-sub{font-size:10px;color:#718198;margin-top:5px} + +.sink-track{display:grid;grid-template-columns:repeat(12,1fr);gap:5px;margin-top:15px}.sink-chunk{height:60px;border-radius:11px;background:rgba(255,255,255,.50);border:1px solid rgba(255,255,255,.78);display:flex;align-items:center;justify-content:center;font:700 9px var(--font-mono);color:#6f7f97}.sink-chunk.global{background:linear-gradient(145deg,#3a9cff,#6477f5);color:white}.sink-chunk.shot{background:linear-gradient(145deg,#24bca2,#4bb2e2);color:white}.sink-chunk.cut{width:5px;border:none;background:#ff836c;margin:0 auto} + +.compare{width:100%;border-collapse:separate;border-spacing:0 7px;font-size:11px}.compare th{text-align:left;padding:7px 10px;color:#607089;font-weight:720}.compare td{padding:10px;background:rgba(255,255,255,.54);border-top:1px solid rgba(255,255,255,.72);border-bottom:1px solid rgba(255,255,255,.72);color:#46566e}.compare td:first-child{border-radius:13px 0 0 13px;font-weight:700;color:#263950}.compare td:last-child{border-radius:0 13px 13px 0} +.meter{height:7px;background:rgba(108,129,160,.14);border-radius:7px;overflow:hidden}.meter span{display:block;height:100%;border-radius:7px;background:linear-gradient(90deg,#2996ff,#7665f2)} + +.agent-pipeline{display:grid;grid-template-columns:1fr 42px 1fr 42px 1fr 42px 1fr;gap:8px;align-items:center}.agent-box{min-height:132px;padding:17px 13px;border-radius:21px;background:rgba(255,255,255,.60);border:1px solid rgba(255,255,255,.86);text-align:center}.agent-box b,.agent-box .small{white-space:nowrap}.agent-box .small{font-size:11px}.agent-icon{width:42px;height:42px;border-radius:14px;margin:0 auto 9px;background:var(--grad-soft);display:grid;place-items:center;font-size:21px}.feedback-loop{position:relative}.feedback-loop::after{content:"visual feedback";position:absolute;left:24%;right:8%;bottom:-28px;height:22px;border-left:2px solid #ef7768;border-right:2px solid #ef7768;border-bottom:2px solid #ef7768;border-radius:0 0 16px 16px;color:#dc695b;text-align:center;font:700 9px var(--font-mono);padding-top:4px} + +.system-timeline{position:relative;padding-top:38px}.system-timeline::before{content:"";position:absolute;left:7%;right:7%;top:15px;height:3px;border-radius:3px;background:linear-gradient(90deg,#47a5ff,#8d69f2,#f08a45)} +.system-stage::after{content:"";position:absolute;top:-30px;left:28px;width:13px;height:13px;border-radius:50%;background:white;border:4px solid #397dd4;box-shadow:0 0 0 5px rgba(58,126,217,.12)} + +.method-ribbon{display:grid;grid-template-columns:1fr 42px 1fr 42px 1fr;gap:10px;align-items:center}.method-stage{padding:18px 16px;border-radius:22px;background:rgba(255,255,255,.62);border:1px solid rgba(255,255,255,.88);text-align:center;box-shadow:0 10px 25px rgba(43,69,109,.09)}.method-stage h3{font-size:17px;margin:0 0 5px}.method-stage p{font-size:10.5px;line-height:1.4;color:#65758c;margin:0} +.cache-flow{display:grid;grid-template-columns:1fr 36px 1fr 36px 1fr;gap:9px;align-items:center}.cache-flow .cache{padding:14px 12px} +.prompt-track{display:grid;grid-template-columns:repeat(9,1fr);gap:6px;margin-top:12px}.prompt-chunk{height:72px;border-radius:14px;background:rgba(255,255,255,.55);border:1px solid rgba(255,255,255,.82);display:flex;flex-direction:column;align-items:center;justify-content:center;font:700 9px var(--font-mono);color:#65758b}.prompt-chunk small{font-size:7px;margin-top:4px}.prompt-chunk.global{background:linear-gradient(145deg,#418ff0,#626ae4);color:white}.prompt-chunk.shot{background:linear-gradient(145deg,#23bba1,#4bb2e2);color:white}.prompt-chunk.cut{background:linear-gradient(145deg,#ff9a76,#ff6f7e);color:white} +.route-compare{font-size:13px;border-spacing:0 9px}.route-compare th{padding:9px 12px}.route-compare td{padding:13px 12px} + +.eval-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:16px}.benchmark-list{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.benchmark{padding:14px 15px;min-height:96px}.benchmark h4{font-size:14px;margin:0 0 5px}.benchmark p{font-size:10.5px;line-height:1.42;color:#5a6a81;margin:0} +.question-card{display:grid;grid-template-columns:48px 1fr;gap:15px;align-items:start;padding:18px 20px}.question-card .q{width:42px;height:42px;border-radius:14px;background:var(--grad);color:white;display:grid;place-items:center;font:760 17px var(--font-mono);box-shadow:0 10px 22px rgba(83,104,224,.22)}.question-card h3{font-size:18px;margin:0 0 5px}.question-card p{font-size:12px;line-height:1.45;color:#516179;margin:0} + +.discussion{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.discussion .glass{padding:24px;min-height:235px;display:flex;flex-direction:column}.discussion .n{font:760 12px var(--font-mono);color:#2676d8}.discussion h3{font-size:23px;margin:16px 0 10px}.discussion p{font-size:13px;line-height:1.5;color:#516078} + +@media (max-width:1000px){.slide{padding:44px 52px 52px}.h1{font-size:54px}.h2{font-size:36px}.section-tag{right:58px;top:45px}.deck-footer{left:54px;right:54px}.timeline{gap:8px}.time-item{padding:12px}.paper-list{font-size:10px}} +@media print{body{background:white}.slide::before{inset:0;border-radius:0}.deck::before,.deck::after{display:none}} diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/ViGoT.png b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/ViGoT.png new file mode 100644 index 0000000..039983c Binary files /dev/null and b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/ViGoT.png differ diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/filmweaver.png b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/filmweaver.png new file mode 100644 index 0000000..65fb903 Binary files /dev/null and b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/filmweaver.png differ diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/holocine.png b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/holocine.png new file mode 100644 index 0000000..f508a63 Binary files /dev/null and b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/holocine.png differ diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/onestory.png b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/onestory.png new file mode 100644 index 0000000..d186105 Binary files /dev/null and b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/onestory.png differ diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/videomemory.png b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/videomemory.png new file mode 100644 index 0000000..85acdb7 Binary files /dev/null and b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/papers/videomemory.png differ diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/animations.css b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/animations.css new file mode 100644 index 0000000..1d00263 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/animations.css @@ -0,0 +1,138 @@ +/* html-ppt :: animations.css + * Apply by adding class="anim-" or data-anim="". + * Durations are deliberately snappy; tweak --anim-dur per element. + */ +:root{--anim-dur:.7s;--anim-ease:cubic-bezier(.4,0,.2,1)} + +/* ---------- FADE DIRECTIONALS ---------- */ +@keyframes kf-fade-up{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:none}} +@keyframes kf-fade-down{from{opacity:0;transform:translateY(-32px)}to{opacity:1;transform:none}} +@keyframes kf-fade-left{from{opacity:0;transform:translateX(-40px)}to{opacity:1;transform:none}} +@keyframes kf-fade-right{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}} +.anim-fade-up{animation:kf-fade-up var(--anim-dur) var(--anim-ease) both} +.anim-fade-down{animation:kf-fade-down var(--anim-dur) var(--anim-ease) both} +.anim-fade-left{animation:kf-fade-left var(--anim-dur) var(--anim-ease) both} +.anim-fade-right{animation:kf-fade-right var(--anim-dur) var(--anim-ease) both} + +/* ---------- RISE / DROP / ZOOM / BLUR / GLITCH ---------- */ +@keyframes kf-rise{from{opacity:0;transform:translateY(60px) scale(.97);filter:blur(6px)}to{opacity:1;transform:none;filter:none}} +@keyframes kf-drop{from{opacity:0;transform:translateY(-60px) scale(.97)}to{opacity:1;transform:none}} +@keyframes kf-zoom{0%{opacity:0;transform:scale(.6)}60%{transform:scale(1.04)}100%{opacity:1;transform:scale(1)}} +@keyframes kf-blur{from{opacity:0;filter:blur(18px)}to{opacity:1;filter:none}} +@keyframes kf-glitch{0%{opacity:0;transform:translateX(0);clip-path:inset(0 0 0 0)} + 20%{opacity:1;transform:translateX(-6px);clip-path:inset(20% 0 30% 0)} + 40%{transform:translateX(4px);clip-path:inset(50% 0 10% 0)} + 60%{transform:translateX(-3px);clip-path:inset(10% 0 60% 0)} + 80%{transform:translateX(2px);clip-path:inset(0 0 0 0)} + 100%{opacity:1;transform:none}} +.anim-rise-in{animation:kf-rise .9s var(--anim-ease) both} +.anim-drop-in{animation:kf-drop .8s var(--anim-ease) both} +.anim-zoom-pop{animation:kf-zoom .7s cubic-bezier(.22,1.3,.36,1) both} +.anim-blur-in{animation:kf-blur .8s var(--anim-ease) both} +.anim-glitch-in{animation:kf-glitch .8s steps(5,end) both} + +/* ---------- TYPEWRITER ---------- */ +.anim-typewriter{display:inline-block;overflow:hidden;white-space:nowrap;border-right:2px solid currentColor; + width:0;animation:kf-type 2.4s steps(40,end) forwards, kf-caret 1s step-end infinite} +@keyframes kf-type{to{width:100%}} +@keyframes kf-caret{50%{border-color:transparent}} + +/* ---------- GLOW / SHIMMER / GRADIENT-FLOW ---------- */ +@keyframes kf-neon{0%,100%{text-shadow:0 0 8px var(--accent),0 0 20px var(--accent)} + 50%{text-shadow:0 0 16px var(--accent),0 0 40px var(--accent),0 0 80px var(--accent)}} +.anim-neon-glow{animation:kf-neon 2s ease-in-out infinite} + +.anim-shimmer-sweep{position:relative;overflow:hidden} +.anim-shimmer-sweep::after{content:"";position:absolute;inset:0; + background:linear-gradient(110deg,transparent 40%,rgba(255,255,255,.55) 50%,transparent 60%); + transform:translateX(-100%);animation:kf-shimmer 2.4s var(--anim-ease) infinite} +@keyframes kf-shimmer{to{transform:translateX(100%)}} + +.anim-gradient-flow{background:linear-gradient(90deg,var(--accent),var(--accent-2,var(--accent)),var(--accent-3,var(--accent)),var(--accent)); + background-size:300% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent; + animation:kf-gradflow 4s linear infinite} +@keyframes kf-gradflow{to{background-position:300% 0}} + +/* ---------- STAGGER LIST ---------- */ +.anim-stagger-list > *{opacity:0;animation:kf-rise .65s var(--anim-ease) both} +.anim-stagger-list > *:nth-child(1){animation-delay:.05s} +.anim-stagger-list > *:nth-child(2){animation-delay:.15s} +.anim-stagger-list > *:nth-child(3){animation-delay:.25s} +.anim-stagger-list > *:nth-child(4){animation-delay:.35s} +.anim-stagger-list > *:nth-child(5){animation-delay:.45s} +.anim-stagger-list > *:nth-child(6){animation-delay:.55s} +.anim-stagger-list > *:nth-child(7){animation-delay:.65s} +.anim-stagger-list > *:nth-child(8){animation-delay:.75s} +.anim-stagger-list > *:nth-child(n+9){animation-delay:.85s} + +/* ---------- COUNTER-UP (JS-driven, marker class only) ---------- */ +.counter{font-variant-numeric:tabular-nums} + +/* ---------- SVG PATH DRAW ---------- */ +.anim-path-draw path,.anim-path-draw line,.anim-path-draw polyline,.anim-path-draw circle,.anim-path-draw rect{ + stroke-dasharray:1000;stroke-dashoffset:1000;animation:kf-draw 2s var(--anim-ease) forwards} +@keyframes kf-draw{to{stroke-dashoffset:0}} + +/* ---------- PARALLAX TILT (hover) ---------- */ +.anim-parallax-tilt{transform-style:preserve-3d;transition:transform .4s var(--anim-ease)} +.anim-parallax-tilt:hover{transform:perspective(900px) rotateX(6deg) rotateY(-8deg) translateZ(10px)} + +/* ---------- CARD FLIP 3D ---------- */ +@keyframes kf-flip{from{transform:perspective(1200px) rotateY(-90deg);opacity:0} + to{transform:perspective(1200px) rotateY(0);opacity:1}} +.anim-card-flip-3d{animation:kf-flip .9s var(--anim-ease) both;transform-style:preserve-3d;backface-visibility:hidden} + +/* ---------- CUBE ROTATE 3D ---------- */ +@keyframes kf-cube{from{transform:perspective(1200px) rotateX(20deg) rotateY(-90deg) translateZ(-200px);opacity:0} + to{transform:perspective(1200px) rotateX(0) rotateY(0) translateZ(0);opacity:1}} +.anim-cube-rotate-3d{animation:kf-cube 1s var(--anim-ease) both} + +/* ---------- PAGE TURN 3D ---------- */ +@keyframes kf-pageturn{from{transform:perspective(1600px) rotateY(-85deg);transform-origin:left center;opacity:0} + to{transform:perspective(1600px) rotateY(0);opacity:1}} +.anim-page-turn-3d{animation:kf-pageturn 1s var(--anim-ease) both;transform-origin:left center} + +/* ---------- PERSPECTIVE ZOOM ---------- */ +@keyframes kf-pzoom{from{opacity:0;transform:perspective(1400px) translateZ(-400px) rotateX(12deg)} + to{opacity:1;transform:none}} +.anim-perspective-zoom{animation:kf-pzoom 1s var(--anim-ease) both} + +/* ---------- MARQUEE SCROLL ---------- */ +.anim-marquee-scroll{display:flex;gap:48px;white-space:nowrap;animation:kf-marquee 20s linear infinite} +@keyframes kf-marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}} + +/* ---------- KEN BURNS ---------- */ +@keyframes kf-kenburns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.15) translate(-2%,-1%)}} +.anim-kenburns{animation:kf-kenburns 14s ease-in-out infinite alternate} + +/* ---------- CONFETTI BURST (pseudo — pure CSS sparkles) ---------- */ +.anim-confetti-burst{position:relative} +.anim-confetti-burst::before,.anim-confetti-burst::after{ + content:"";position:absolute;top:50%;left:50%;width:8px;height:8px;border-radius:50%; + background:var(--accent);box-shadow: + 20px -30px 0 var(--accent-2,var(--accent)),-25px -20px 0 var(--accent-3,var(--accent)), + 30px 20px 0 var(--good,#1aaf6c),-30px 25px 0 var(--warn,#f5a524), + 40px -10px 0 var(--bad,#e0445a),-45px 0 0 var(--accent), + 10px 40px 0 var(--accent-2,var(--accent)),-15px -40px 0 var(--accent-3,var(--accent)); + opacity:0;animation:kf-confetti 1.2s var(--anim-ease) forwards} +.anim-confetti-burst::after{animation-delay:.15s;transform:rotate(45deg)} +@keyframes kf-confetti{0%{opacity:0;transform:scale(.2)}30%{opacity:1}100%{opacity:0;transform:scale(2.2)}} + +/* ---------- SPOTLIGHT ---------- */ +@keyframes kf-spot{0%{clip-path:circle(0% at 50% 50%)}100%{clip-path:circle(140% at 50% 50%)}} +.anim-spotlight{animation:kf-spot 1.1s var(--anim-ease) both} + +/* ---------- MORPH SHAPE (SVG) ---------- */ +.anim-morph-shape path{animation:kf-morph 6s ease-in-out infinite alternate} +@keyframes kf-morph{0%{d:path("M60,120 Q120,20 180,120 T300,120")} + 100%{d:path("M60,120 Q120,220 180,120 T300,120")}} + +/* ---------- RIPPLE REVEAL ---------- */ +@keyframes kf-ripple{0%{clip-path:circle(0% at 20% 80%);opacity:.4} + 100%{clip-path:circle(160% at 20% 80%);opacity:1}} +.anim-ripple-reveal{animation:kf-ripple 1.2s var(--anim-ease) both} + +/* reduced motion */ +@media (prefers-reduced-motion: reduce){ + [class*="anim-"]{animation:none!important;transition:none!important} +} diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/base.css b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/base.css new file mode 100644 index 0000000..b8c1107 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/base.css @@ -0,0 +1,150 @@ +/* html-ppt :: base.css — reset + shared tokens + layout primitives */ +/* Default tokens. Themes in assets/themes/*.css override the :root block. */ +:root { + --bg: #ffffff; + --bg-soft: #f7f7f8; + --surface: #ffffff; + --surface-2: #f2f2f4; + --border: rgba(0,0,0,.08); + --border-strong: rgba(0,0,0,.16); + --text-1: #111216; + --text-2: #55596a; + --text-3: #8a8f9e; + --accent: #3b6cff; + --accent-2: #7a5cff; + --accent-3: #ff5c8a; + --good: #1aaf6c; + --warn: #f5a524; + --bad: #e0445a; + --grad: linear-gradient(135deg,#3b6cff,#7a5cff 55%,#ff5c8a); + --grad-soft: linear-gradient(135deg,#eef2ff,#f5ecff 55%,#ffeef5); + --radius: 18px; + --radius-sm: 12px; + --radius-lg: 26px; + --shadow: 0 10px 30px rgba(18,24,40,.08), 0 2px 6px rgba(18,24,40,.04); + --shadow-lg: 0 24px 60px rgba(18,24,40,.14), 0 6px 16px rgba(18,24,40,.06); + --font-sans: 'Inter','Noto Sans SC',-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif; + --font-serif: 'Playfair Display','Noto Serif SC',Georgia,serif; + --font-mono: 'JetBrains Mono','IBM Plex Mono',SFMono-Regular,Menlo,monospace; + --font-display: var(--font-sans); + --letter-tight: -.03em; + --letter-normal: -.01em; + --ease: cubic-bezier(.4,0,.2,1); +} + +*,*::before,*::after{box-sizing:border-box} +html,body{margin:0;padding:0;background:var(--bg);color:var(--text-1); + font-family:var(--font-sans);font-weight:400;line-height:1.6; + -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale; + letter-spacing:var(--letter-normal)} +img,svg,video{max-width:100%;display:block} +a{color:var(--accent);text-decoration:none} +a:hover{text-decoration:underline} +code,kbd,pre,samp{font-family:var(--font-mono)} + +/* ================= SLIDE SYSTEM ================= */ +.deck{position:relative;width:100vw;height:100vh;overflow:hidden;background:var(--bg)} +.slide{ + position:absolute;inset:0; + display:flex;flex-direction:column;justify-content:center; + padding:72px 96px; + box-sizing:border-box; + opacity:0;pointer-events:none; + transition:opacity .5s var(--ease), transform .5s var(--ease); + transform:translateX(30px); + overflow:hidden; +} +.slide.is-active{opacity:1;pointer-events:auto;transform:translateX(0);z-index:2} +.slide.is-prev{transform:translateX(-30px)} + +/* single-page standalone (used when a layout file is opened directly) */ +body.single .slide{position:relative;width:100vw;height:100vh;opacity:1;transform:none;pointer-events:auto} + +/* ================= TYPOGRAPHY ================= */ +.eyebrow{font-size:13px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--text-3)} +.kicker{font-size:14px;font-weight:600;color:var(--accent);letter-spacing:.08em;text-transform:uppercase} +h1.title,.h1{font-family:var(--font-display);font-size:72px;line-height:1.05;font-weight:800;letter-spacing:var(--letter-tight);margin:0 0 18px;color:var(--text-1)} +h2.title,.h2{font-family:var(--font-display);font-size:54px;line-height:1.1;font-weight:700;letter-spacing:var(--letter-tight);margin:0 0 14px} +h3,.h3{font-size:32px;line-height:1.2;font-weight:600;letter-spacing:var(--letter-normal);margin:0 0 10px} +h4,.h4{font-size:22px;line-height:1.3;font-weight:600;margin:0 0 8px} +.lede{font-size:22px;line-height:1.55;color:var(--text-2);font-weight:300;max-width:62ch} +.dim{color:var(--text-2)} +.dim2{color:var(--text-3)} +.mono{font-family:var(--font-mono)} +.serif{font-family:var(--font-serif)} +.gradient-text{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent} + +/* ================= LAYOUT PRIMITIVES ================= */ +.stack>*+*{margin-top:14px} +.row{display:flex;gap:24px;align-items:center} +.row.wrap{flex-wrap:wrap} +.grid{display:grid;gap:24px} +.g2{grid-template-columns:repeat(2,1fr)} +.g3{grid-template-columns:repeat(3,1fr)} +.g4{grid-template-columns:repeat(4,1fr)} +.center{display:flex;align-items:center;justify-content:center;text-align:center} +.fill{flex:1} +.sp-t{padding-top:24px}.sp-b{padding-bottom:24px} +.mt-s{margin-top:8px}.mt-m{margin-top:18px}.mt-l{margin-top:32px} +.mb-s{margin-bottom:8px}.mb-m{margin-bottom:18px}.mb-l{margin-bottom:32px} + +/* ================= CARDS ================= */ +.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius); + padding:26px 28px;box-shadow:var(--shadow);position:relative;overflow:hidden} +.card-soft{background:var(--surface-2);border:1px solid var(--border)} +.card-outline{background:transparent;border:1.5px solid var(--border-strong);box-shadow:none} +.card-accent{background:var(--surface);border-top:3px solid var(--accent)} +.card-hover{transition:transform .3s var(--ease),box-shadow .3s var(--ease)} +.card-hover:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)} + +.pill{display:inline-block;padding:4px 12px;border-radius:999px;font-size:12px;font-weight:500; + background:var(--surface-2);color:var(--text-2);border:1px solid var(--border)} +.pill-accent{background:color-mix(in srgb,var(--accent) 12%,transparent);color:var(--accent);border-color:color-mix(in srgb,var(--accent) 28%,transparent)} + +/* ================= BARS / DIVIDERS ================= */ +.divider{height:1px;background:var(--border);width:100%} +.divider-accent{height:3px;width:72px;background:var(--accent);border-radius:2px} + +/* ================= CHROME (header/footer/progress) ================= */ +.deck-header{position:absolute;top:24px;left:40px;right:40px;display:flex;align-items:center;justify-content:space-between; + font-size:12px;color:var(--text-3);letter-spacing:.12em;text-transform:uppercase;z-index:10;pointer-events:none} +.deck-footer{position:absolute;bottom:24px;left:40px;right:40px;display:flex;align-items:center;justify-content:space-between; + font-size:12px;color:var(--text-3);z-index:10;pointer-events:none} +.slide-number::before{content:attr(data-current)} +.slide-number::after{content:" / " attr(data-total)} +.progress-bar{position:fixed;left:0;right:0;bottom:0;height:3px;background:transparent;z-index:20} +.progress-bar > span{display:block;height:100%;width:0;background:var(--accent);transition:width .3s var(--ease)} + +/* ================= PRESENTER / OVERVIEW ================= */ +.notes{display:none!important} +.notes-overlay{position:fixed;inset:auto 0 0 0;max-height:42vh;background:rgba(20,22,30,.95);color:#e8ebf4; + padding:20px 32px;font-size:16px;line-height:1.6;border-top:1px solid rgba(255,255,255,.1);transform:translateY(100%); + transition:transform .3s var(--ease);z-index:40;overflow:auto;font-family:var(--font-sans)} +.notes-overlay.open{transform:translateY(0)} +.overview{position:fixed;inset:0;background:rgba(10,12,18,.92);backdrop-filter:blur(12px);z-index:50; + display:none;padding:40px;overflow:auto} +.overview.open{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;align-content:start} +.overview .thumb{background:var(--surface);border:1px solid var(--border);border-radius:12px; + aspect-ratio:16/9;overflow:hidden;cursor:pointer;position:relative;color:var(--text-1);padding:16px; + font-size:11px;transition:transform .2s var(--ease)} +.overview .thumb:hover{transform:scale(1.04)} +.overview .thumb .n{position:absolute;top:8px;left:10px;font-weight:700;font-size:14px;color:var(--text-3)} +.overview .thumb .t{position:absolute;bottom:10px;left:14px;right:14px;font-weight:600;color:var(--text-1)} + +/* ================= PRESENTER VIEW ================= */ +/* Presenter view opens in a separate popup window (S key). + * All presenter styles are self-contained in the popup HTML generated by runtime.js. + * The audience window (this file) is NOT affected — it stays as normal deck view. + * Only the .notes class below is needed to hide speaker notes from audience. */ + +/* ================= UTILITY ================= */ +.hidden{display:none!important} +.nowrap{white-space:nowrap} +.tr{text-align:right}.tc{text-align:center}.tl{text-align:left} +.uppercase{text-transform:uppercase;letter-spacing:.12em} + +/* ================= PRINT ================= */ +@media print{ + .slide{position:relative;opacity:1!important;transform:none!important;page-break-after:always;height:100vh} + .deck-header,.deck-footer,.progress-bar,.notes-overlay,.overview{display:none!important} +} diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/fonts.css b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/fonts.css new file mode 100644 index 0000000..64feb72 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/fonts.css @@ -0,0 +1,9 @@ +/* html-ppt :: shared webfonts */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@200;300;400;500;600;700;800;900&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@200;300;400;500;600;700;900&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@300;400;600;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,800;1,400&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Archivo+Black&display=swap'); diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/runtime.js b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/runtime.js new file mode 100644 index 0000000..5e199b5 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/assets/runtime/runtime.js @@ -0,0 +1,960 @@ +/* html-ppt :: runtime.js + * Keyboard-driven deck runtime. Zero dependencies. + * + * Features: + * ← → / space / PgUp PgDn / Home End navigation + * F fullscreen + * S presenter mode (opens a NEW WINDOW with current/next slide preview + notes + timer) + * The original window stays as audience view, synced via BroadcastChannel. + * Slide previews use CSS transform:scale() at design resolution for pixel-perfect layout. + * N quick notes overlay (bottom drawer) + * O slide overview grid + * T cycle themes (reads data-themes on or ) + * A cycle demo animation on current slide + * URL hash #/N deep-link to slide N (1-based) + * Progress bar auto-managed + */ +(function () { + 'use strict'; + + const ANIMS = ['fade-up','fade-down','fade-left','fade-right','rise-in','drop-in', + 'zoom-pop','blur-in','glitch-in','typewriter','neon-glow','shimmer-sweep', + 'gradient-flow','stagger-list','counter-up','path-draw','parallax-tilt', + 'card-flip-3d','cube-rotate-3d','page-turn-3d','perspective-zoom', + 'marquee-scroll','kenburns','confetti-burst','spotlight','morph-shape','ripple-reveal']; + + function ready(fn){ if(document.readyState!='loading')fn(); else document.addEventListener('DOMContentLoaded',fn);} + + /* ========== Parse URL for preview-only mode ========== + * When loaded as iframe.src = "index.html?preview=3", runtime enters a + * locked single-slide mode: only slide N is visible, no chrome, no keys, + * no hash updates. This is how the presenter window shows pixel-perfect + * previews — by loading the actual deck file in an iframe and telling it + * to display only a specific slide. + */ + function getPreviewIdx() { + const m = /[?&]preview=(\d+)/.exec(location.search || ''); + return m ? parseInt(m[1], 10) - 1 : -1; + } + + ready(function () { + const deck = document.querySelector('.deck'); + if (!deck) return; + const slides = Array.from(deck.querySelectorAll('.slide')); + if (!slides.length) return; + + const previewOnlyIdx = getPreviewIdx(); + const isPreviewMode = previewOnlyIdx >= 0 && previewOnlyIdx < slides.length; + + /* ===== Preview-only mode: show one slide, hide everything else ===== */ + if (isPreviewMode) { + function showSlide(i) { + slides.forEach((s, j) => { + const active = (j === i); + s.classList.toggle('is-active', active); + s.style.display = active ? '' : 'none'; + if (active) { + s.style.opacity = '1'; + s.style.transform = 'none'; + s.style.pointerEvents = 'auto'; + } + }); + } + showSlide(previewOnlyIdx); + /* Hide chrome that the presenter shouldn't see in preview */ + const hideSel = '.progress-bar, .notes-overlay, .overview, .notes, aside.notes, .speaker-notes'; + document.querySelectorAll(hideSel).forEach(el => { el.style.display = 'none'; }); + document.documentElement.setAttribute('data-preview', '1'); + document.body.setAttribute('data-preview', '1'); + /* Auto-detect theme base path for theme switching in preview mode */ + function getPreviewThemeBase() { + const base = document.documentElement.getAttribute('data-theme-base'); + if (base) return base; + const tl = document.getElementById('theme-link'); + if (tl) { + const raw = tl.getAttribute('href') || ''; + const ls = raw.lastIndexOf('/'); + if (ls >= 0) return raw.substring(0, ls + 1); + } + return 'assets/themes/'; + } + const previewThemeBase = getPreviewThemeBase(); + + /* Listen for postMessage from parent presenter window: + * - preview-goto: switch visible slide WITHOUT reloading + * - preview-theme: switch theme CSS link to match audience window */ + window.addEventListener('message', function(e) { + if (!e.data) return; + if (e.data.type === 'preview-goto') { + const n = parseInt(e.data.idx, 10); + if (n >= 0 && n < slides.length) showSlide(n); + } else if (e.data.type === 'preview-theme' && e.data.name) { + let link = document.getElementById('theme-link'); + if (!link) { + link = document.createElement('link'); + link.rel = 'stylesheet'; + link.id = 'theme-link'; + document.head.appendChild(link); + } + link.href = previewThemeBase + e.data.name + '.css'; + document.documentElement.setAttribute('data-theme', e.data.name); + } + }); + /* Signal to parent that preview iframe is ready */ + try { window.parent && window.parent.postMessage({ type: 'preview-ready' }, '*'); } catch(e) {} + return; + } + + let idx = 0; + const total = slides.length; + + /* ===== BroadcastChannel for presenter sync ===== */ + const CHANNEL_NAME = 'html-ppt-presenter-' + location.pathname; + let bc; + try { bc = new BroadcastChannel(CHANNEL_NAME); } catch(e) { bc = null; } + + // Are we running inside the presenter popup? (legacy flag, now unused) + const isPresenterWindow = false; + + /* ===== progress bar ===== */ + let bar = document.querySelector('.progress-bar'); + if (!bar) { + bar = document.createElement('div'); + bar.className = 'progress-bar'; + bar.innerHTML = ''; + document.body.appendChild(bar); + } + const barFill = bar.querySelector('span'); + + /* ===== notes overlay (N key) ===== */ + let notes = document.querySelector('.notes-overlay'); + if (!notes) { + notes = document.createElement('div'); + notes.className = 'notes-overlay'; + document.body.appendChild(notes); + } + + /* ===== overview grid (O key) ===== */ + let overview = document.querySelector('.overview'); + if (!overview) { + overview = document.createElement('div'); + overview.className = 'overview'; + slides.forEach((s, i) => { + const t = document.createElement('div'); + t.className = 'thumb'; + // Force 16:9 aspect ratio robustly + t.style.padding = '0 0 56.25% 0'; + t.style.height = '0'; + t.style.position = 'relative'; + t.style.overflow = 'hidden'; + + const title = s.getAttribute('data-title') || + (s.querySelector('h1,h2,h3')||{}).textContent || ('Slide '+(i+1)); + + // Create a container for the mini-slide + const mini = document.createElement('div'); + mini.className = 'mini-slide'; + mini.style.position = 'absolute'; + mini.style.top = '0'; + mini.style.left = '0'; + mini.style.width = '1920px'; + mini.style.height = '1080px'; + mini.style.transformOrigin = 'top left'; + mini.style.pointerEvents = 'none'; + mini.style.background = 'var(--bg)'; + + // Clone the slide content + const clone = s.cloneNode(true); + clone.className = 'slide is-active'; // force active styles + clone.style.position = 'absolute'; + clone.style.inset = '0'; + clone.style.transform = 'none'; + clone.style.opacity = '1'; + clone.style.padding = '72px 96px'; // ensure padding is kept + + mini.appendChild(clone); + t.appendChild(mini); + + // Add the number and title overlay + const overlay = document.createElement('div'); + overlay.style.position = 'absolute'; + overlay.style.inset = '0'; + overlay.style.background = 'linear-gradient(to bottom, rgba(0,0,0,0.2) 0%, transparent 40%, transparent 60%, rgba(0,0,0,0.8) 100%)'; + overlay.style.color = '#fff'; + overlay.style.zIndex = '10'; + overlay.style.pointerEvents = 'none'; + + const n = document.createElement('div'); + n.className = 'n'; + n.textContent = i + 1; + n.style.position = 'absolute'; + n.style.top = '12px'; + n.style.left = '16px'; + n.style.fontWeight = '700'; + n.style.fontSize = '16px'; + n.style.color = '#fff'; + n.style.textShadow = '0 1px 4px rgba(0,0,0,0.8)'; + + const text = document.createElement('div'); + text.className = 't'; + text.textContent = title.trim().slice(0,80); + text.style.position = 'absolute'; + text.style.bottom = '12px'; + text.style.left = '16px'; + text.style.right = '16px'; + text.style.fontWeight = '600'; + text.style.fontSize = '14px'; + text.style.color = '#fff'; + text.style.textShadow = '0 1px 4px rgba(0,0,0,0.8)'; + + overlay.appendChild(n); + overlay.appendChild(text); + t.appendChild(overlay); + + t.addEventListener('click', () => { go(i); toggleOverview(false); }); + overview.appendChild(t); + }); + document.body.appendChild(overview); + } + + /* ===== navigation ===== */ + function go(n, fromRemote){ + n = Math.max(0, Math.min(total-1, n)); + slides.forEach((s,i) => { + s.classList.toggle('is-active', i===n); + s.classList.toggle('is-prev', i { + const a = el.getAttribute('data-anim'); + el.classList.remove('anim-'+a); + void el.offsetWidth; + el.classList.add('anim-'+a); + }); + + // counter-up + slides[n].querySelectorAll('.counter').forEach(el => { + const target = parseFloat(el.getAttribute('data-to')||el.textContent); + const dur = parseInt(el.getAttribute('data-dur')||'1200',10); + const start = performance.now(); + const from = 0; + function tick(now){ + const t = Math.min(1,(now-start)/dur); + const v = from + (target-from)*(1-Math.pow(1-t,3)); + el.textContent = (target % 1 === 0) ? Math.round(v) : v.toFixed(1); + if (t<1) requestAnimationFrame(tick); + } + requestAnimationFrame(tick); + }); + + // Broadcast to other window (audience ↔ presenter) + if (!fromRemote && bc) { + bc.postMessage({ type: 'go', idx: n }); + } + } + + /* ===== listen for remote navigation / theme changes ===== */ + if (bc) { + bc.onmessage = function(e) { + if (!e.data) return; + if (e.data.type === 'go' && typeof e.data.idx === 'number') { + go(e.data.idx, true); + } else if (e.data.type === 'theme' && e.data.name) { + /* Sync theme across windows */ + const i = themes.indexOf(e.data.name); + if (i >= 0) themeIdx = i; + applyTheme(e.data.name); + } + }; + } + + function toggleNotes(force){ notes.classList.toggle('open', force!==undefined?force:!notes.classList.contains('open')); } + function toggleOverview(force){ + const isOpen = force!==undefined ? force : !overview.classList.contains('open'); + overview.classList.toggle('open', isOpen); + if (isOpen) { + requestAnimationFrame(() => { + const thumbs = overview.querySelectorAll('.thumb'); + if (thumbs.length) { + const scale = thumbs[0].clientWidth / 1920; + overview.querySelectorAll('.mini-slide').forEach(m => { + m.style.transform = 'scale(' + scale + ')'; + }); + } + }); + } + } + + /* ========== PRESENTER MODE — Magnetic-card popup window ========== */ + /* Opens a new window with 4 draggable, resizable cards: + * CURRENT — iframe(?preview=N) pixel-perfect preview of current slide + * NEXT — iframe(?preview=N+1) pixel-perfect preview of next slide + * SCRIPT — large speaker notes (逐字稿) + * TIMER — elapsed timer + page counter + controls + * Cards remember position/size in localStorage. + * Two windows sync via BroadcastChannel. + */ + let presenterWin = null; + + function openPresenterWindow() { + if (presenterWin && !presenterWin.closed) { + presenterWin.focus(); + return; + } + + // Build absolute URL of THIS deck file (without hash/query) + const deckUrl = location.protocol + '//' + location.host + location.pathname; + + // Collect slide titles + notes (HTML strings) + const slideMeta = slides.map((s, i) => { + const note = s.querySelector('.notes, aside.notes, .speaker-notes'); + return { + title: s.getAttribute('data-title') || + (s.querySelector('h1,h2,h3')||{}).textContent || ('Slide '+(i+1)), + notes: note ? note.innerHTML : '' + }; + }); + + /* Capture current theme so presenter previews match the audience */ + const currentTheme = root.getAttribute('data-theme') || (themes[themeIdx] || ''); + const presenterHTML = buildPresenterHTML(deckUrl, slideMeta, total, idx, CHANNEL_NAME, currentTheme); + + presenterWin = window.open('', 'html-ppt-presenter', 'width=1280,height=820,menubar=no,toolbar=no'); + if (!presenterWin) { + alert('请允许弹出窗口以使用演讲者视图'); + return; + } + presenterWin.document.open(); + presenterWin.document.write(presenterHTML); + presenterWin.document.close(); + } + + function buildPresenterHTML(deckUrl, slideMeta, total, startIdx, channelName, currentTheme) { + const metaJSON = JSON.stringify(slideMeta); + const deckUrlJSON = JSON.stringify(deckUrl); + const channelJSON = JSON.stringify(channelName); + const themeJSON = JSON.stringify(currentTheme || ''); + const storageKey = 'html-ppt-presenter:' + location.pathname; + + // Build the document as a single template string for clarity + return ` + + + +Presenter View + + + + +
+
+
+ + CURRENT + — +
+
+
+
+ +
+
+ + NEXT + — +
+
+
+
+ +
+
+ + SPEAKER SCRIPT · 逐字稿 +
+
+
+
+ +
+
+ + TIMER +
+
+
00:00
+
+ Slide + 1 / ${total} +
+
+ + + +
+
+
+
+
+ +
+ ← → 翻页 + R 重置计时 + Esc 关闭 + 拖动卡片头部移动 · 拖动右下角调整大小 + +
+ + + + + diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.html b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.html new file mode 100644 index 0000000..aa727c4 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.html @@ -0,0 +1,74 @@ + + + + + + + Key References · Multi-Shot Video Generation: From Joint Denoising to Online Directing · CausalVideoGroup + + + + +
+ +

1. HoloCine: Holistic Generation of Cinematic Multi-Shot Long Videos

+
    +
  • Link: https://arxiv.org/abs/2510.20822
  • +
  • Type: method
  • +
  • Why important: It extends joint multi-shot generation toward minute-scale narratives with sparse inter-shot self-attention.
  • +
  • Role in this topic: Representative of the holistic-joint route and its scaling strategy.
  • +
  • Main limitation: The full storyboard is planned before generation, and sparse summaries may omit fine-grained distant state.
  • +
  • Discussion question: Which cross-shot facts require dense token interaction rather than summary communication?
  • +
+

2. OneStory: Coherent Multi-Shot Video Generation with Adaptive Memory

+
    +
  • Link: https://arxiv.org/abs/2512.07802
  • +
  • Type: method
  • +
  • Why important: It retrieves relevant frames from the full history and compresses them into a compact context for the current shot.
  • +
  • Role in this topic: Clear example of caption-guided visual memory in shot-level autoregressive generation.
  • +
  • Main limitation: Retrieval quality depends on the current caption and may discard state whose relevance becomes clear only later.
  • +
  • Discussion question: How should memory preserve latent causal state that is not explicitly named in the next-shot caption?
  • +
+

3. ShotStream

+
    +
  • Link: https://arxiv.org/abs/2603.25746
  • +
  • Type: method
  • +
  • Why important: It connects a bidirectional next-shot teacher to a causal student designed for real-time multi-shot output.
  • +
  • Role in this topic: Representative bridge from shot-conditioned diffusion to causal streaming and few-step inference.
  • +
  • Main limitation: Causal rollout cannot use future shots to repair past output and may accumulate appearance or motion drift.
  • +
  • Discussion question: Which teacher signals survive causal distillation when the student leaves the teacher's history distribution?
  • +
+

4. VideoMemory

+
    +
  • Link: https://arxiv.org/abs/2601.03655
  • +
  • Type: system
  • +
  • Why important: It externalizes character, prop, and background state into a dynamic memory bank used throughout shot-by-shot generation.
  • +
  • Role in this topic: Representative of explicit semantic state management outside a single video context window.
  • +
  • Main limitation: A memory bank can preserve references without diagnosing whether the generated shot actually obeyed them.
  • +
  • Discussion question: What verification signal should decide whether a generated frame is safe to write back into memory?
  • +
+

5. GroundShot

+
    +
  • Link: https://arxiv.org/abs/2606.20799
  • +
  • Type: system
  • +
  • Why important: It joins shot scheduling, entity grounding, reference verification, and memory updates into a visual-feedback loop.
  • +
  • Role in this topic: Representative of the shift from open-loop planning to online directing.
  • +
  • Main limitation: Additional planning and verification stages increase latency and can compound errors from imperfect evaluators.
  • +
  • Discussion question: When should a director agent reorder shots, regenerate a shot, or repair the memory instead?
  • +
+

6. MSVBench

+
    +
  • Link: https://arxiv.org/abs/2602.23969
  • +
  • Type: benchmark
  • +
  • Why important: It evaluates multi-shot video systems with hierarchical scripts and references across a broad method set.
  • +
  • Role in this topic: Evidence that multi-shot evaluation is becoming a distinct problem rather than an extension of generic video quality.
  • +
  • Main limitation: One benchmark cannot simultaneously isolate cinematic language, delayed entity recurrence, online control, and audio-visual consistency.
  • +
  • Discussion question: What controlled interventions are needed to identify the source of a cross-shot failure?
  • +
+
+ + + diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.md b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.md new file mode 100644 index 0000000..40a5dc9 --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.md @@ -0,0 +1,55 @@ +# Key References + +## 1. HoloCine: Holistic Generation of Cinematic Multi-Shot Long Videos + +- Link: https://arxiv.org/abs/2510.20822 +- Type: method +- Why important: It extends joint multi-shot generation toward minute-scale narratives with sparse inter-shot self-attention. +- Role in this topic: Representative of the holistic-joint route and its scaling strategy. +- Main limitation: The full storyboard is planned before generation, and sparse summaries may omit fine-grained distant state. +- Discussion question: Which cross-shot facts require dense token interaction rather than summary communication? + +## 2. OneStory: Coherent Multi-Shot Video Generation with Adaptive Memory + +- Link: https://arxiv.org/abs/2512.07802 +- Type: method +- Why important: It retrieves relevant frames from the full history and compresses them into a compact context for the current shot. +- Role in this topic: Clear example of caption-guided visual memory in shot-level autoregressive generation. +- Main limitation: Retrieval quality depends on the current caption and may discard state whose relevance becomes clear only later. +- Discussion question: How should memory preserve latent causal state that is not explicitly named in the next-shot caption? + +## 3. ShotStream + +- Link: https://arxiv.org/abs/2603.25746 +- Type: method +- Why important: It connects a bidirectional next-shot teacher to a causal student designed for real-time multi-shot output. +- Role in this topic: Representative bridge from shot-conditioned diffusion to causal streaming and few-step inference. +- Main limitation: Causal rollout cannot use future shots to repair past output and may accumulate appearance or motion drift. +- Discussion question: Which teacher signals survive causal distillation when the student leaves the teacher's history distribution? + +## 4. VideoMemory + +- Link: https://arxiv.org/abs/2601.03655 +- Type: system +- Why important: It externalizes character, prop, and background state into a dynamic memory bank used throughout shot-by-shot generation. +- Role in this topic: Representative of explicit semantic state management outside a single video context window. +- Main limitation: A memory bank can preserve references without diagnosing whether the generated shot actually obeyed them. +- Discussion question: What verification signal should decide whether a generated frame is safe to write back into memory? + +## 5. GroundShot + +- Link: https://arxiv.org/abs/2606.20799 +- Type: system +- Why important: It joins shot scheduling, entity grounding, reference verification, and memory updates into a visual-feedback loop. +- Role in this topic: Representative of the shift from open-loop planning to online directing. +- Main limitation: Additional planning and verification stages increase latency and can compound errors from imperfect evaluators. +- Discussion question: When should a director agent reorder shots, regenerate a shot, or repair the memory instead? + +## 6. MSVBench + +- Link: https://arxiv.org/abs/2602.23969 +- Type: benchmark +- Why important: It evaluates multi-shot video systems with hierarchical scripts and references across a broad method set. +- Role in this topic: Evidence that multi-shot evaluation is becoming a distinct problem rather than an extension of generic video quality. +- Main limitation: One benchmark cannot simultaneously isolate cinematic language, delayed entity recurrence, online control, and audio-visual consistency. +- Discussion question: What controlled interventions are needed to identify the source of a cross-shot failure? diff --git a/discussions/2026-07-20-jinyuan-multi-shot-video-generation/summary.html b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/summary.html new file mode 100644 index 0000000..70100ca --- /dev/null +++ b/discussions/2026-07-20-jinyuan-multi-shot-video-generation/summary.html @@ -0,0 +1,74 @@ + + + + + + Multi-Shot Video Generation: From Joint Denoising to Online Directing · Topic Summary + + + + +
+ +
+

Topic overview

+

Given a story or global description and an ordered set of shot descriptions, a multi-shot system produces a video whose shots may change viewpoint, composition, action, location, or time while remaining part of one coherent narrative. A model chunk is not automatically a shot: this discussion focuses on explicit semantic shot boundaries and dependencies across them.

+ +

Why now?

+

Recent work has expanded from short jointly denoised sequences to minute-scale narratives, explicit visual memories, few-step causal generation, and agentic pipelines that inspect outputs and revise later decisions. These capabilities create a common design question: where should cross-shot state live, and when may future information influence the past?

+ +

Background

+

A shot is a semantic and cinematic unit separated by a cut. A scene may contain several shots, while a long video may contain no cuts at all. Across a cut, identity, props, environment state, visual style, and causal facts may need to persist, while camera, framing, motion, time, and location may need to change. The central problem is therefore selective continuity, not uniform similarity.

+ +

Method landscape

+
    +
  1. Holistic joint: all shots are denoised together with bidirectional communication. It supports global coordination but usually requires the complete shot plan and becomes expensive with long contexts.
  2. +
  3. Shot-level autoregressive: one completed shot is generated per model call; selected frames or memory tokens from previous shots condition the next. It scales naturally but can accumulate errors.
  4. +
  5. Causal streaming: frames or latent chunks are emitted in temporal order with bounded cache. It enables low-latency updates but forbids future shots from correcting generated history.
  6. +
  7. System / agent: an external planner decomposes the story, maintains references, evaluates results, and may reschedule or regenerate shots. This route is orthogonal to the renderer and can wrap any of the first three.
  8. +
+ +

Core technical ideas

+

Joint models align captions and shots through attention masks, window routing, shot-aware positional encodings, and transition tokens. Shot-level systems retrieve or compress history into visual memory, sometimes separating identity from motion or indexing state by entity. Causal systems combine block-causal attention, cached history, and few-step distillation. Agentic systems move state outside the generator and add planning, verification, selection, repair, and memory-write decisions.

+ +

Failure cases

+

Typical failures include identity and prop drift, cuts that behave like motion interpolation, repetitive framing caused by over-preserving context, forgotten state after memory compression, rollout errors that compound over many shots, and planners that commit early to an invalid storyboard. Existing benchmarks also separate cinematic quality, entity recurrence, subject conditioning, and audio-visual consistency, so a single aggregate score can hide the actual failure boundary.

+ +

Connections to our research

+

The taxonomy connects long-video generation, causal and autoregressive video models, controllable camera motion, memory-efficient inference, and visual-feedback agents. It also extends the group's forcing-method discussion: few-step causal distillation becomes one component of a larger system that must respect semantic shot boundaries and long-horizon state.

+ +

Research-quality prompts

+
Central claim: The decisive abstraction is not sequence length but the placement and update rule of cross-shot state.
+
Hidden assumption: A compact memory or selected reference frame contains every fact that a later shot may need.
+
Failure boundary: Current approaches degrade when entities recur after long gaps, the story changes online, cuts require discontinuity, or early generations contain errors.
+
Connection: Causal video distillation, cache design, camera control, and agentic feedback become coupled once the output is a cinematic sequence rather than one continuous clip.
+
Concrete experiment: Fix the renderer and data, then compare full history, frame retrieval, entity memory, and external state under controlled delayed-recurrence stories.
+
Discussion seed: Should future multi-shot systems improve the video backbone's internal memory, or expose state to a planner that can inspect and revise it?
+ +

Open questions

+
    +
  1. What is the minimal state representation needed to preserve an entity across distant shots?
  2. +
  3. When should a cut deliberately break visual continuity rather than maximize similarity?
  4. +
  5. Can a causal streaming model match joint generation without access to future shots?
  6. +
  7. How should a system distinguish renderer failure from a bad shot plan or bad memory retrieval?
  8. +
  9. Which metrics separately measure identity, physical state, cinematic variation, and narrative causality?
  10. +
  11. Where is regeneration most valuable: the current shot, the memory, the future prompt, or the shot order?
  12. +
+ +

Possible projects

+

Build a compact diagnostic benchmark with recurring entities, state-changing props, intentional discontinuities, and online story revisions. Evaluate the same renderer under four history interfaces, and report quality as a function of recurrence distance, memory budget, latency, and repair cost.

+
+
+ + + diff --git a/discussions/index.html b/discussions/index.html index a617868..e2267e2 100644 --- a/discussions/index.html +++ b/discussions/index.html @@ -2,6 +2,7 @@
-

2026-07-13 · Yifan Shen

Forcing Series: The Evolution of AR Video Distillation

A technical map of methods that distill bidirectional video diffusion models into few-step autoregressive generators that produce frames in temporal order and support streaming output.

before-meeting video-generation autoregressive-video video-distillation streaming-generation

Read discussion →
+

2026-07-20 · Jinyuan Hu

Multi-Shot Video Generation: From Joint Denoising to Online Directing

A technical map of multi-shot video generation, organized by how shots are generated and how history enters the model: holistic joint denoising, shot-level autoregression, causal streaming, and system-level directing.

before-meeting video-generation multi-shot-video long-video-generation causal-generation agentic-video

Read discussion →
+

2026-07-13 · Yifan Shen

Forcing Series: The Evolution of AR Video Distillation

A technical map of methods that distill bidirectional video diffusion models into few-step autoregressive generators that produce frames in temporal order and support streaming output.

before-meeting video-generation autoregressive-video video-distillation streaming-generation

Read discussion →
diff --git a/index.html b/index.html index 209b7e6..9c7f904 100644 --- a/index.html +++ b/index.html @@ -30,7 +30,8 @@

Video generation from a causal perspective.

Weekly reading group

Topic discussions

Each entry prepares the necessary background before the meeting, then records the assumptions, failure cases, and experiments identified during discussion.

-

2026-07-13 · Yifan Shen

Forcing Series: The Evolution of AR Video Distillation

A technical map of methods that distill bidirectional video diffusion models into few-step autoregressive generators that produce frames in temporal order and support streaming output.

before-meeting video-generation autoregressive-video video-distillation streaming-generation

Read discussion →
+

2026-07-20 · Jinyuan Hu

Multi-Shot Video Generation: From Joint Denoising to Online Directing

A technical map of multi-shot video generation, organized by how shots are generated and how history enters the model: holistic joint denoising, shot-level autoregression, causal streaming, and system-level directing.

before-meeting video-generation multi-shot-video long-video-generation causal-generation agentic-video

Read discussion →
+

2026-07-13 · Yifan Shen

Forcing Series: The Evolution of AR Video Distillation

A technical map of methods that distill bidirectional video diffusion models into few-step autoregressive generators that produce frames in temporal order and support streaming output.

before-meeting video-generation autoregressive-video video-distillation streaming-generation

Read discussion →
diff --git a/people/index.html b/people/index.html index 7eda99b..e43e37c 100644 --- a/people/index.html +++ b/people/index.html @@ -4,7 +4,7 @@

Group Leader · guangyi

Guangyi Chen

Discussion Leaders

Discussion Leader · peiyuan

Peiyuan Zhu

No published projects or discussions yet.

-

Discussion Leader · jinyuan

Jinyuan Hu

No published projects or discussions yet.

+

Discussion Leader · yuxin

Yuxin Wang

No published projects or discussions yet.

Discussion Leader · yichang

Yichang Jian

No published projects or discussions yet.

diff --git a/sitemap.xml b/sitemap.xml index 1be80d1..737c783 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -8,7 +8,11 @@ https://causalvideogroup.github.io/discussions/ https://causalvideogroup.github.io/people/ https://causalvideogroup.github.io/tags/ + https://causalvideogroup.github.io/discussions/2026-07-20-jinyuan-multi-shot-video-generation/ https://causalvideogroup.github.io/discussions/2026-07-13-yifan-forcing-ar-video-distillation/ + https://causalvideogroup.github.io/discussions/2026-07-20-jinyuan-multi-shot-video-generation/summary.html + https://causalvideogroup.github.io/discussions/2026-07-20-jinyuan-multi-shot-video-generation/references.html + https://causalvideogroup.github.io/discussions/2026-07-20-jinyuan-multi-shot-video-generation/meeting-note.html https://causalvideogroup.github.io/discussions/2026-07-13-yifan-forcing-ar-video-distillation/summary.html https://causalvideogroup.github.io/discussions/2026-07-13-yifan-forcing-ar-video-distillation/references.html https://causalvideogroup.github.io/discussions/2026-07-13-yifan-forcing-ar-video-distillation/meeting-note.html diff --git a/tags/index.html b/tags/index.html index e2b8e9f..66da0e9 100644 --- a/tags/index.html +++ b/tags/index.html @@ -2,9 +2,13 @@
-
+
+ + + + -
+