惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
S
Schneier on Security
The Hacker News
The Hacker News
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
I
Intezer
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Schneier on Security
Schneier on Security
Security Latest
Security Latest
AWS News Blog
AWS News Blog
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
博客园 - 叶小钗
The Last Watchdog
The Last Watchdog
O
OpenAI News
月光博客
月光博客
Hacker News: Ask HN
Hacker News: Ask HN
阮一峰的网络日志
阮一峰的网络日志
S
Security @ Cisco Blogs
Google Online Security Blog
Google Online Security Blog
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Latest news
Latest news
P
Palo Alto Networks Blog
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed
C
CERT Recently Published Vulnerability Notes
Apple Machine Learning Research
Apple Machine Learning Research
U
Unit 42
PCI Perspectives
PCI Perspectives
博客园 - 聂微东
SecWiki News
SecWiki News
宝玉的分享
宝玉的分享
Forbes - Security
Forbes - Security
H
Heimdal Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Troy Hunt's Blog
博客园 - 三生石上(FineUI控件)
Application and Cybersecurity Blog
Application and Cybersecurity Blog
罗磊的独立博客
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security

Hacker News

randoFont GitHub - onehorizonai/silo-terminal: A dark phosphor Apple Terminal profile inspired by the sealed systems and green-blue screens of Silo. GitHub - unihosted/unifi-os-server-docker Show HN: Onboard-CLI–a fast developer tool built in Go uses AST and LLM Show HN: Finterm.ai Finance CLI for Claude Code and Codex Show HN: Codex Explorer,一款用于 Codex CLI 的本地会话管理器 Pylon — full-stack framework for coding agents GitHub - Corgea/Sighthound: Corgea's rule-based SAST scanner Kastra | Execution Governance for AI Systems devthropology.com Embersent — Know Exactly Who Read Your Document GodUI — UI Collection for Modern Interfaces Show HN: Reverse-engineering web apps into agent tools GitHub - Kuberwastaken/subagentmaxxing: Drive OpenAI Codex & Cursor CLI coding agents as subagents with the same ergonomics as native Claude Code subagents (grok-4.5, composer-2.5, gpt-5.5). Uniform run/fanout CLI + Claude Code skill. Aside Today I’m launching papercrane-cli: a BI tool built for Claude Code | Papercrane Blog Strata - Guess the City from a 3D Map a dark terminal Blocks.ai | Connect your agent to the world. Noticky — Sticky Notes & Always-on-Top Windows for Mac Make the hard day easier for the people you love CASHFLOW — Debt Network Optimizer 0 A.D.: Empires Ascendant FormGrid - Create Delightful Forms & Surveys for Free Codapult — Everything Your SaaS Needs, Already Wired Together LaTeX Diff Viewer - GitHub Marketplace LinguaGuessr analog.watch Estimania — Daily Estimation Game I Replaced Whisper with Parakeet on a $55/Month CPU Server. Here Is What Actually Happened. HyperSwitcher – Mac App & Window Switcher CLERC-DATA/epee · Datasets at Hugging Face GitHub - gladiaio/gladia-cli EvenKeel — your money coach BareMetalRT — Bare Metal AI Build a Second Brain That Actually Remembers Why It Changed Tokenstead - Find AI Models for Your Hardware Fideby - Standing by the people you trust, when you can rubber duck GitHub - forgedculture/legibility-field-kit GitHub - ronak-create/FableCut: Zero-dependency browser video editor that AI agents can drive — JSON timeline, MCP + REST, live-reloading UI GitHub - BuceaGeorgia/VIRENA: A minimal Vision-Language-Action model you can read: frozen CLIP + a tiny head on ManiSkill PickCube. Runs on a Mac, no GPU. Fehu - Apps on Google Play GitHub - fresswolf/Slopera: The browser for the slop era Release Kiyeovo 1.0.0 · Realman78/Kiyeovo Noema — AI Company Analysis GitHub - hamidi-dev/opentab: 📊 Browse your AI coding spend in the terminal — OpenCode, Claude Code, Codex & more GitHub - sgInnora/wc2026-prediction-ledger: Receipt-verified AI prediction ledger for World Cup 2026: pre-kickoff sha256-locked forecasts scored vs results, with calibration + market baselines. Live: goalpulse.io/open-data GitHub - michaelwrites67-ctrl/yogen: 予言 Yogen — a 500-agent AI swarm that debates your idea and predicts the outcome. Self-host free with your own Anthropic key. GitHub - teddytennant/wizard: Self-extending autonomous agent in one Rust binary. One-line install, any provider (OpenAI-compatible, Anthropic, xAI) or fully local via llama.cpp, live /evolve self-modification, MCP, messaging gateway, built-in bench arcaide.foo Show HN: Android Developer Verification Package blacklisted in Aurora Store OpenDescent: Private messaging for normal people GitHub - tarunlnmiit/autopilot-jobhunt: AI job agent: scans 130+ careers pages nightly, scores every role against your resume with an LLM (0–100), alerts you on Telegram, and drafts tailored cover letters + resumes. Free & open source. 18 Words - Daily Word Challenge The State of US Local Government Accessibility 2026 flow - Real-time network throughput dashboard for the terminal. - Terminal Trove Battle LLM Robots Agent Sessions - Local History for AI Coding Agents Scrutora — code, cloud & consent compliance in one platform SoulOS Tutorials GitHub - gaemi/agentic-fc: Open-source football management simulation played by AI agents through MCP and watched through a TUI console. GitHub - talalalrwas/ocr-grab: Flameshot clone that adds OCR. GitHub - JustVugg/colibri: Run GLM-5.2 (744B MoE) on a 25GB-RAM consumer machine — pure C, zero deps, experts streamed from disk. Tiny engine, immense model. 🐦 GitHub - saifmukhtar/kinetic figment computer linear.gratis - Free Linear Client Feedback Forms GitHub - atelier-ws/atelier: Runtime for coding agents. Models are getting smarter, but a model is only as capable as the environment supporting it. Atelier is that environment. https://atelier.ws Atlas · Tomesphere | Tomesphere Codenames Generator GitHub - lyfeninja/lyfeninja_blkseal_python_sdk: Lightweight Python client for signing and verifying digital content using lyfe.ninja's BlkSeal product powered by BlkBolt™. Designed for zero dependencies, simple integration, and exact content verification. DateTimeMate OpenScreenShot — Full-page screenshot & annotation tool for Chrome 38-0 — Build Your Premier League Dream Team Cyrinx — data over sound, measured GitHub - BhaveshThapar/mcp-audit HN Work GitHub - Northwood-Systems/foreman: Self-hosted LLM gateway. Cost effective, deterministic, and fast. Secure and private by default. A Visualization Language for the AI Era GitHub - weirdGuy/kastor: Declarative language and toolchain for AI agents: define agents, tools and prompts in HCL, then compile to frameworks or manage them on hosted platforms with plan/apply semantics. Abralo - Run multiple Claude Code agents in one window GitHub - mehranzand/repofleet: RepoFleet is an issue-centered CLI tool for managing Git workflows across multiple repositories. Pug — Open Source Product Analytics Chiptune Radio — Aleph Void, LLC Free Mermaid Live Editor & Diagram Maker GitHub - hirasso/html-obfuscator: Obfuscate emails, phone numbers, and other sensitive data in PHP. Invisible to humans, hidden from bots until they interact. Davit — a native macOS UI for Apple containers GitHub - rowboatlabs/rowboat: Open-source AI coworker, with memory Yamanote.fun PostgreSQL on AWS: Size & Benchmark EC2 Instances GitHub - Rodiun/frugon: Free, local, open-source LLM cost analyzer — see where your LLM bill leaks, on your machine. WhimFiles - Find Any File in Seconds Agent Draw: An agent draws while you talk, built on TLDraw Neil the Seal GitHub - animesh-94/Onboard-CLI: An AST-powered, local-first CLI that visualizes complex system architectures and enforces architectural boundaries via instant Git hooks. ridealong — live London trains Clusy | Agent-Native Notebook for ML and Data Science snowscroll · Instagram, without the spiral. GitHub - vishal-dehurdle/state-harness: Runtime safety net for LLM agents. Detects token spirals, kills doomed tasks early, tells you exactly why. Rust core, Python SDK. pip install state-harness GitHub - DO-SAY-GO/freelang: I love freelang
GitHub - robesris/ffvii-realtime: Speed up Final Fantasy VII (Rebirth / Remake / Revelation) Tactical Mode slow-motion so combat plays at real-time speed
explosionpun · 2026-07-09 · via Hacker News

PyPI version Python versions License: AGPL v3

Remove Tactical Mode slow-motion from Final Fantasy VII Rebirth combat captures so the whole fight plays at uniform real-time speed.

FFVII Realtime demo: Tactical Mode slow-motion sped up to real time

Cloud mid-fight in Rebirth, with the Tactical Mode slow-motion removed so the whole clip runs at uniform real-time speed. Even the long command-menu pauses compress to just a second or two when sped up ~100×, blending seamlessly into the real-time combat — no jarring cut where the speed changes.

The FFVII Realtime app

The included local app: drag in a video, pick the game, hit Start. Everything else lives under "Advanced options," and nothing is uploaded — it all runs on your machine.

Watch the full example on YouTube: before — the fight as captured, with Tactical Mode slow-motion · after — the same fight sped up to real time.

In Rebirth, opening the Tactical Mode command menu drops the game into heavy slow-motion (apparently 100x slower than real-time) while you pick your actions. It's great to play, but these pauses, especially long ones, aren't much fun to watch in a recording. FFVII Realtime automatically finds those slow-motion segments and speeds only them back up, leaving the rest of the fight untouched, so the whole thing flows at one natural pace.

Example: a 1:55:00 capture became ~1:09:00 of continuous, full-speed combat — around 570 Tactical Mode segments (~47 minutes of slow-motion) detected and sped up, fully audio-synced.


How it works

  1. Detect — a computer-vision pass (OpenCV) scans every frame and recognizes Tactical Mode two ways: the on-screen L2/R2 button prompts at their fixed positions, and the "Tactical Mode" header text above the command menu. Both are made robust to bright/gray/busy backgrounds by combining color + white-mask + black-mask matching, and a motion check confirms the scene is actually in slow-motion (so a stray match during fast action can't trigger a false speed-up). The header-text signal means solo boss fights work too: those have no party, so the L2/R2 allies prompt never appears — but the menu header still does.
  2. Render — FFmpeg re-times each detected segment (setpts for video, atempo for audio, kept exactly in sync), speeding up the slow-motion while normal-speed combat passes through untouched, then stitches it all back together.
  3. Bridge the audio — speeding a Tactical segment up ~100× compresses its audio to a fraction of its length — a fast, unusable sliver (a quick menu-open is sub-frame; even a long pause collapses to about a second) — so the sound would cut out and jump straight from before the menu to after it. Instead, each seam is filled with an equal-power crossfade between the real audio going into the slow-motion and the real audio coming out of it. Both play briefly at once, so the sound never drops — and over a long segment, where those two moments are pulled from genuinely different points in the music, they blend into a natural swell rather than a hard cut. The rebuilt track is then tempo-locked to the finished video so picture and sound can't drift. (Turn it off with --no-bridge-sound.) → How does the sound stay seamless? breaks the crossfade down step by step.

Detection normalizes any 16:9 resolution to 1080p internally, so the bundled templates work at 1080p / 1440p / 4K. Rendering happens at your source's native resolution.


Install & Quick Start

One line, everything bundled:

pipx install ffvii-realtime     # installs the `ffvii-realtime` command, isolated
ffvii-realtime gui              # opens the browser app

That's the whole setup: FFmpeg ships with it — nothing else to install. Drag your video into the app (or click Browse…, or paste its full path), set the speed-up factor, click Start — the finished file is saved next to the original.

This can take a while, even for short videos. Detection scans the whole file and then the video is re-encoded, so give it time and watch the progress bar — it isn't stuck. (Longer captures scale up from there.)

Requires Python 3.8+. No pipx? Install it, or just use pip install ffvii-realtime (pipx only adds isolation). On Windows, check "Add python.exe to PATH" when installing Python.

Prefer the command line? After installing, the one-shot is (pass --game to match your footage):

ffvii-realtime fix my-fight.mp4 --game rebirth -o my-fight.realtime.mp4

See Command-line usage for previews, ranges, and other games.


Command-line usage

Specify the game your footage is from. Detection is HUD-specific and defaults to Rebirth. For Remake or Revelation captures you must pass --game remake or --game revelation (in the browser UI, choose it from the Game dropdown). The wrong game finds 0 segments.

# already installed via `pipx install ffvii-realtime` (contributors: `pip install -e .`)

# ALWAYS pass --game to match your footage: rebirth | remake | revelation.
# (It's optional and defaults to rebirth, but set it explicitly so non-Rebirth
#  footage isn't silently missed — the wrong game finds 0 segments.)

# the usual one-shot: detect slow-mo and render the real-time version
ffvii-realtime fix my-fight.mp4 --game rebirth -o my-fight.realtime.mp4

# Remake / Revelation footage:
ffvii-realtime fix my-remake-fight.mp4 --game remake
ffvii-realtime fix my-revelation-fight.mp4 --game revelation

# verify settings on a short window first (recommended)
ffvii-realtime preview my-fight.mp4 --game rebirth --range 4:40-5:20 -o test.mp4

# process only a section of the video (also makes detection faster),
# and mute the sped-up slow-mo audio
ffvii-realtime fix my-fight.mp4 --game rebirth --range 24:00-26:30 --tac-vol 0%

# separate steps — only `detect` needs --game; `render` reuses the saved intervals
ffvii-realtime detect my-fight.mp4 --game rebirth -o intervals.json
ffvii-realtime render my-fight.mp4 -i intervals.json -o out.mp4

# launch the browser UI (choose the game from the dropdown)
ffvii-realtime gui

Options

  • --game rebirth|remake|revelation — which game's HUD to detect. Set this to match your footage — detection is HUD-specific, so the wrong value finds 0 segments. Defaults to rebirth.
  • --range MM:SS-MM:SS — process only that section of the video; also speeds up detection since only that span is scanned.
  • --tac-vol — volume of the sped-up Tactical-Mode audio, as a percentage (10%, 0% for silent, 100% for full) or a 0–1 fraction. Default 10%. (Ignored when seam bridging is on, since bridging replaces that audio.)
  • --no-bridge-sound — turn off seam audio bridging. By default, speeding up a Tactical segment would make its audio cut out and jump; bridging instead crossfades the real before/after ambient across the seam so the sound stays continuous. On by default. --bridge-width (seconds, default 0.35) tunes the crossfade half-width.
  • --lead — start the speed-up this many seconds before the menu is detected, to cover the panel slide-in. Default 0.2.
  • --force — overwrite the output file if it already exists. By default the tool refuses, so you can't clobber a previous result by accident (the browser UI asks for confirmation instead).

The speed-up factor

--factor defaults to 100, which matches the game's default "Tactical Mode Slowdown" setting. If you changed that setting, your slow-motion is faster or slower, so pick a different factor. The easiest way to dial it in: run preview on a stretch with a long Tactical Mode and try a couple of values — when the sped-up sections look like normal-speed combat, that's your number. (Higher = snappier; the slow-mo is aggressive, so values in the 50–150 range are typical.)

Note: the default of 100× was arrived at by trial and error — rendering a tactical segment at several factors and picking the one that looks like real-time. It is not an officially documented figure, and the actual slowdown almost certainly differs per game and per in-game "Tactical Mode Slowdown" setting. If you know (or have measured) the real slowdown factors for any of the selectable Tactical Mode speed settings in any of these games, please open an issue — that input is very welcome and would let the tool ship accurate per-setting defaults.


Caveats

  • Tested on Remake, Rebirth, and even Revelation footage The detection keys on the game's own UI, so it should work on any footage as long as the correct game (Remake, Rebirth, or Revelation) is specified — but please run preview on your own video before committing to a full render.
  • 16:9 only. Ultrawide/non-16:9 captures will warn and may misdetect (the HUD anchors differently).
  • Custom HUD settings (scale/opacity accessibility options) could shift the badge positions and break detection. Standard HUD is assumed.
  • Pauses / loading / results screens are static (never slow-motion), so they're correctly left alone — they'll appear at full length in the output.
  • A real character movement that happens during a slow-motion stretch becomes near-instantaneous when compressed — occasionally a character may appear to "jump." That's inherent to compressing slow-motion that contains motion, not a glitch.

Requirements

  • Python 3.8+
  • Everything else is installed automatically: numpy, opencv-python-headless, and FFmpeg (bundled via imageio-ffmpeg). If you already have your own FFmpeg on PATH — or set $FFVII_FFMPEG / $FFVII_FFPROBE — it's used in preference to the bundled build.

License

ffvii-realtime is dual-licensed (see LICENSING.md):

  • GNU AGPL-3.0 for open-source use (see LICENSE) — free to use and modify, but if you distribute it or run a modified version as a network service, your version must also be released under the AGPL (source available).
  • Commercial license for proprietary/commercial use without the AGPL's copyleft obligations — contact Rob Esris (open an issue on this repo).

Copyright © 2026 Rob Esris.


Appendix: How does the sound stay seamless?

Speeding a Tactical segment up ~100× compresses its own audio to a fraction of its length — too fast to keep — so the naive result is the sound cutting out and jumping from the audio before the menu to the audio after it. Bridging replaces each of those seams with a short crossfade of the real audio so the track never drops. It's the least intuitive part of the project, so here's the full picture. (Code: build_bridged_track in bridge.py.)

The track is rebuilt in two passes. First, every real-time (1×) segment is copied from the source verbatim. Then each sped-up seam — a run of Tactical Mode compressed to a fraction of its length — is filled in with a crossfade.

The crossfade straddles the seam; it isn't at it. This is the key surprise. Call the crossfade half-width fade_half (≈0.35 s by default) and sped_up_len the length the whole Tactical run collapses to after the speed-up (a quick menu-open is sub-frame; a long, drawn-out pause still comes out around a second). The crossfade region is fade_len = 2·fade_half + sped_up_len wide: it starts fade_half before the seam (overwriting the tail of the preceding real-time audio), spans the sped-up run, and ends fade_half after the run (lapping into the following real-time audio).

Two excerpts of the real source audio are blended across that region:

  • entering — the audio around the moment the slow-mo began (entering the menu)
  • leaving — the audio around the moment the slow-mo ended (leaving it)

mixed as entering·cos(½π·ramp) + leaving·sin(½π·ramp), with ramp sweeping 0→1. That's an equal-power crossfade: cos² + sin² = 1, so perceived loudness stays constant — no dip in the middle.

output →   …prev real-time audio │  sped-up run  │ next real-time audio…
                                  ▲seam           ▲run ends
 crossfade  [═══════════════════════════════════════════]
            seam − fade_half                  run ends + fade_half
 ramp:      0 ──────────────────────────────────────────► 1
 you hear:  entering ─────────► (both together) ─────────► leaving

Moment by moment:

  • At the left edge (ramp = 0, fade_half before the seam): pure entering, and it's the same samples already sitting there, so the crossfade begins as a perfect copy of itself — no click, nothing audible yet.
  • Through the sped-up run: leaving (the audio from where the slow-mo ends) fades up as entering fades down, so the "after" audio starts before the on-screen speed-up does — a little sound is deliberately edited ahead of the visual seam. For a quick menu-open the run is a sliver, so the seam sits near the midpoint and you hear a ~50/50 blend right at it; for a long pause the blend plays out over the ~second the run occupies.
  • At the right edge (ramp = 1, fade_half past where the run ends): pure leaving, again matching the untouched audio there.

Because both edges equal the real audio they overwrite, the splice itself is silent — the only thing you consciously hear is the crossfade swell in the middle (~0.7 s for a quick menu, a bit longer for a drawn-out pause) where the two moments overlap.

Why long segments sound richer than short blips. The crossfade widens with the run (~0.7 s for a quick menu, a bit more for a long pause), but what really changes is that entering and leaving are pulled from source positions separated by the slow-mo's real elapsed duration. For a short blip they're nearly the same instant → a seamless continuation. For a long Tactical segment they're genuinely different points in the battle track — different notes and harmony — so overlapping them produces beating/phasing that reads as a tremolo. (FF7's battle music already has tremolo strings, which compounds it.) It's two real recordings interfering, not a synthesized effect, which is why it sounds musical.

It never eats too much. fade_half is clamped to at most half of the shorter neighbouring real-time segment, so when two Tactical runs are close together the crossfade shrinks to fit and never chews through more than half the real audio on either side.

Staying locked to the picture. The rebuilt track is then tempo-nudged (a pitch-preserving atempo, ~0.07%) to match the finished video's exact duration — audio (whole samples at 44.1 kHz) and video (whole frames) quantize on different grids and would otherwise drift apart over a long clip.