readme: both GIFs (search + smooth beacon) — search re-recorded with smooth observer capture (287 frames, triangle found)

This commit is contained in:
opencode
2026-08-09 17:52:14 +03:00
parent e44977cbe4
commit 5baf698b9e
4 changed files with 5 additions and 4 deletions
+3 -2
View File
@@ -20,11 +20,12 @@ The agent can also be sent on an autonomous search: an orange triangle is
hidden on the back side of one of the crates, and the model must explore the hidden on the back side of one of the crates, and the model must explore the
room with real vision, spot it, and report it. This recording shows the run room with real vision, spot it, and report it. This recording shows the run
from three angles — the top-down map, the actual first-person frames the from three angles — the top-down map, the actual first-person frames the
model saw, and its chat/reasoning: model saw, and its chat/reasoning (recorded with smooth motion, ~2 Hz):
![search mission](search_mission.gif) ![search mission](search_mission.gif)
Regenerate it with `python -m testbed.record_search --provider polza --out search_mission.gif`. Regenerate it with `python -m testbed.record_search --provider polza --goal search
--out search_mission.gif --capture-hz 2.0 --cruise 0.8 --steps 60`.
## Smooth & proactive movement ## Smooth & proactive movement
Binary file not shown.

Before

Width:  |  Height:  |  Size: 760 KiB

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 MiB

After

Width:  |  Height:  |  Size: 2.9 MiB

+2 -2
View File
@@ -236,8 +236,8 @@ async def run(args: argparse.Namespace) -> int:
samples.append((bridge.world.capsule.x, bridge.world.capsule.z)) samples.append((bridge.world.capsule.x, bridge.world.capsule.z))
top = _topdown_frame(bridge, ctl.path, len(frames), marker_seen) top = _topdown_frame(bridge, ctl.path, len(frames), marker_seen)
frames.append(_compose(top, view, chat.render())) frames.append(_compose(top, view, chat.render()))
if len(frames) > 500: # keep the GIF bounded if len(frames) > 350: # keep the GIF bounded
frames[:100] = [] frames[:150] = []
await asyncio.sleep(1.0 / args.capture_hz) await asyncio.sleep(1.0 / args.capture_hz)
agent_done = asyncio.Event() agent_done = asyncio.Event()