Contents

    Multi Model Hackathon · SF Tech Week · Field briefing

    A search drone that looks for one missing person's things, with no internet.

    “The camper had a blue backpack, an orange tent, and a gray dog.”

    An operator said that into Patrol's console during a test. Patrol turns words like these into a search. It sweeps the ground from 40 metres up, drops down for a closer look at anything that might match, and sends back a position, a photo and a short note when it finds something. Four AI models share the work on one laptop, and none of them calls the internet.

    3 of 3things found on a real-time flight, with no false alertsrecorded real-time flight, score file
    0.32 smedian time for Clef-Flash to judge one odd-looking spotsame flight, 163 judgements
    6 cmbetween the backpack alert and the backpack (tent 24 cm, jacket 7 cm)same flight, distance to each planted item
    57%of a simulated 20-minute battery for a 160 m square, with 8 closer looks (now set to 30 minutes)same flight, battery used

    ▶ Watch the console run a full search ↓

    A real-time flight · backpack, tent, jacketgrass · seed 6 · 160 × 160 m
    684 s
    DONE · home Home after 683 s. 3 of 3 found, no false alerts. Press Replay to watch the flight at 20× speed, or drag the slider.
    Drawn from the flight's own log, every tick and decision. The grid is the planner's 28 sectors (A1 in the south-west, G4 in the north-east). The shaded band is ground the sweep camera has seen.drawn from the flight's own log

    At a glance · the console

    Everything the drone sees, thinks and finds, on one screen

    The console is a web page the laptop serves to itself. It runs a live search with push-to-talk, or replays any recorded flight. Press play to watch a whole search, or read the annotated still below: the moment Clef-Flash confirms the blue backpack from 20 m.

    Watch the whole flight (3 min 23 s, replayed at 3.5× with the alerts read aloud): three finds, the tarp checked and dismissed, no false alerts. This recording is also the stage fallback. The opening read-back of the clues was added from the console's own line, the operator's spoken commands are not in the audio, and qwen38's notes arrive about 10 s after their alerts.the stage fallback recording, re-encoded small for this page
    The Patrol console mid-flight: header with state SWEEP, 43% searched, 80% battery and decision counts; clue cards for a blue backpack, orange tent and gray dog; the zoom camera showing ALERT A3 blue backpack found, confirmed at 79%; the decision trace with Clef-Flash's bars; the sector map with three alerts and qwen38's next sectors; the chase view; the log with the spoken alert; and alert cards with the sweep crop beside the confirming close-up and qwen38's radio note.
    1. The header what the drone is doing (SWEEP, INVESTIGATE, RETURN), area searched, battery, and who made the decisions: Clef-Flash, fallback or qwen38
    2. Looking for the clue cards: the family's words, qwen38's sentence about how each looks from above, and its size
    3. The camera the latest sweep photo with the finder's boxes and Clef-Flash's score on each; during a closer look, the zoom close-up and the verdict
    4. Decision trace the exact crop Clef-Flash judged and its odds, one bar per clue, with the thresholds marked
    5. The map lanes and sectors over the trail, stream and last known point; ground already seen; spots checked (grey) and alerts (red); qwen38's next sectors, numbered
    6. Chase view a camera behind the drone, for the people watching; no model uses it
    7. The log every decision, note, plan and spoken line, newest first
    8. Alerts one card per find: what the sweep saw beside the close-up that confirmed it, position, confidence and qwen38's radio note
    A replay of the recorded demo flight (grass, three clues and a blue tarp decoy) at 16× speed, captured mid-flight.recorded demo flight, console replay

    01 · The problem

    Searchers start with a description, not a photo

    When someone goes missing in the backcountry, the first useful facts usually come from family: what the person was wearing, what they carried, whether the dog was with them. Nobody has trained a detector on this person's blue backpack, so any computer that helps has to work from words. Out there it usually can't send video anywhere either, because there is no cell signal.

    Patrol is a prototype of a drone that works from those words by itself. It flies the search, takes a closer look at whatever might match, and only asks for a person's attention when it has something worth checking: a ground position, a photo and one or two sentences.

    Why decide in the air, rather than review the photos after landing

    The closer look

    From 40 m a backpack is a smudge about 22 pixels across. In the air, the drone can drop down and settle a “maybe” while it is right there. After landing, every “maybe” costs another flight.

    Time

    A find during the flight beats a find an hour later at a laptop. Cold, injury and avalanches don't wait for a review.

    Bandwidth

    With no cell service, live video can't reach the base. An alert is about 270 bytes of text plus a 20 KB photo, small enough for a radio link. (The radio itself is not built yet.)

    What it is, and what it isn't

    Patrol is decision support. A person reviews every alert. It would sit beside the tools search teams already use (thermal cameras and person detectors for spotting people, avalanche transceivers, RECCO and phone-finding for buried victims), not in place of them. Everything you see here happens in a simulator, which proves how the system behaves, not how well it would detect things on a real hillside.

    02 · A flight, start to finish

    Five things happen, in this order

    The pictures below are from real flights in the simulator, with the real models deciding. The numbers are what Clef-Flash said at that moment.

    1. You say what you're looking for

      Before take-off you hold the talk button and describe what the person had with them. Parakeet writes it down. Clef-Flash decides it is a description rather than a command. qwen38 turns each thing into a sentence about how it looks from the air, with a rough size, and Kokoro reads the list back. Those sentences go into every question Clef-Flash is asked for the rest of the flight. The smallest size sets how high the drone sweeps.

      ParakeetClef-Flashqwen38Kokoro
      Said: “Missing hiker, blue backpack, orange tent, gray dog.” qwen38 wrote, in 3.9 s:

      blue backpack · 0.5 m: “a rectangular blue fabric object with visible straps and buckles, roughly the size of a large book.”

      orange tent · 2 m: “a bright orange geometric shape, likely triangular or dome-like, with visible seams and a smooth synthetic surface.”

      gray dog · 0.6 m: “a small gray furry shape with four legs and a tail, appearing as a compact oval mass on the ground.”

      The demo scene, from a recorded clip (Parakeet: 64 ms). The smallest size, 0.5 m, set the sweep at 36 m. The real-time flight on the map used hand-written catalogue cards instead.

    2. It sweeps the area from 40 m

      The planner splits the 160 m square into 7 lanes and 28 sectors, starting from the trailhead, where the person was last seen. The drone flies the lanes at 6 m/s and takes a straight-down photo every 12 m, so each patch of ground appears in about two photos. For each photo the finder spends about 50 ms on the CPU boxing the three spots with the rarest colours. Each box becomes a 256-pixel crop, and Clef-Flash answers in about a third of a second whether it could be one of the clues.

      plannerfinderClef-Flash
      A whole sweep photo from 40 m over grass: green ground with a few rocks and a tiny dark dot.
      The whole photo from 40 m. The backpack is in it.
      The same photo enlarged around the backpack: a blocky blue shape about 22 pixels across.
      Enlarged: about 22 pixels across, enough to look odd, not enough to be sure.
    3. It follows a lead

      Most crops get “continue”. When one looks like a clue (at least 10% for any clue, or 90% that it is worth a closer look), the drone notes the spot and leaves its lane. It stops 12 m short of the spot at 20 m and takes an angled zoom close-up. Then Clef-Flash answers a harder question, with the look-alikes spelled out: is this the clue, something else of a similar colour (a tarp, a rock, a log, leaves, a shadow), or nothing at all?

      gatestate machineClef-Flash
      Sweep crop of a blue square sheet on grass.
      from 40 m The blue tarp, a decoy: 17% “blue backpack”. Worth a look.
      Zoom close-up of the blue tarp: a flat folded sheet.
      close-up at 20 m A flat sheet. Best clue 4%: dismissed, back to the lane.
      Sweep crop of a small dark blue object near a dirt trail.
      from 40 m The backpack: 61% “blue backpack”.
      Zoom close-up of a blue backpack lying on grass beside a trail.
      close-up at 20 m Straps and pockets. 94.5%: confirmed.
    4. It raises an alert

      A confirm needs two things to agree: Clef-Flash's choice must name the clue, and that clue's own probability must reach 50%. The alert carries a ground position, worked out from the camera's position and angle, plus the close-up, the sweep crop and the confidence. In the background qwen38 writes a one-line note and what the ground team should check, and Kokoro reads it aloud. The drone doesn't wait for the note, and it moves on to the next spot.

      codeqwen38Kokoro
      Sweep crop of an orange dome tent by a stream and trail.
      from 40 m 39% “orange tent”.
      Close-up of the orange tent next to the stream.
      close-up at 20 m 82%: alert A2, 0.24 m from the tent.
      qwen38's note for A2, read aloud“Possible orange tent spotted 117 meters from trailhead, 11 meters east and 19 meters north of search center.” Check: “Ground team should verify object identity and search for hiker or other belongings nearby.”
    5. It thinks about where to look next, then carries on

      After each find, qwen38 gets the finds so far, the trail, the stream and the sectors still unsearched, and names up to six sectors to search next with a one-line reason. Code keeps only real, unsearched sector names and moves them up the queue when the current sector ends. Meanwhile the drone climbs back to the point where it left its lane, finishes the area, and flies home. In a controlled test, reordering this way cut the time from the first find to the second by 29.5 seconds on average.

      qwen38code checkplanner
      Chase camera view from behind and above the drone, flying over grassland with trees, a dirt trail and a stream.
      The chase camera, which only the console shows. No model sees this view.
      qwen38's three trail plans in the real-time flight“Prioritize trail path north of backpack; stream intersection in E3 is high priority.” · “Hikers likely continued north along the trail; recent finds confirm this path, so prioritize northern trail sectors.” · “Hikers follow the trail north; G3 is the immediate next trail segment, followed by adjacent sectors near the stream junction.”

    03 · Who does what

    Four models fly the search. Three more built the world it searches.

    Each model does the one job it is good at, at the speed that job needs. Plain code ties them together and keeps the drone safe.

    During a flight

    The fast eyes · system one

    Clef-Flash

    A decision model from Cloudflare. You give it a picture and a few typed questions, and it returns a probability for every answer in one pass, without writing any text. Patrol asks it whether each odd-looking spot is one of the clues, whether a close-up confirms it, and whether something you said was a description or a command.

    Size
    9B, built on Qwen3.5-9B, 8-bit MLX
    Speed
    about 0.3 s per spot, 0.4 s per close-up
    Calls
    171 in one real-time flight
    Licence
    Apache-2.0
    The slow thinker · system two

    qwen38

    Qwen3.8 Flash Next, a large language model that can also see images. It turns your description into what each thing looks like from above, writes the short radio note for each find, suggests where to search next, and gives a second opinion when Clef-Flash is unsure. It stays out of the fast loop; only a second opinion makes the drone wait for it.

    Size
    about 70 GiB of 4-bit weights, served by ds4
    Speed
    2 to 5 s per job
    Calls
    6 in that flight (3 notes, 3 plans)
    The ears

    Parakeet

    NVIDIA's speech recogniser. It turns what you say into text, both the description before take-off and commands during the flight.

    Size
    0.6B (TDT v3)
    Speed
    20 to 90 ms per command
    Licence
    CC-BY-4.0
    The voice

    Kokoro

    A small text-to-speech model. It reads the clue list back to you, acknowledges commands and reads every alert aloud, so your eyes can stay on the drone.

    Size
    82M, voice am_michael
    Speed
    60 to 250 ms per sentence
    Licence
    Apache-2.0
    The spotter · not a trained model

    Anomaly finder

    Classical computer vision on the CPU. It looks for colours that are rare in each photo and boxes the three oddest spots. That is what lets Clef-Flash look at three small crops instead of a whole 1280×960 frame, and it is the reason the drone can fly high.

    Runs on
    CPU, numpy
    Sees
    RGB pixels only
    The pilot

    Code

    The planner lays out lanes and sectors. The gate decides whether a model's answer is strong enough to act on. Safety owns the height limits, the boundary, the battery reserve and the trip home. Models advise. Code flies, and no model can override it.

    Made of
    the search mission, planner and geometry code

    Before the flight: the world and its props

    The world

    MuJoCo

    A physics simulator standing in for the real hillside, the drone and its cameras. It renders each camera view in about 10 ms and keeps the answer key (where everything was planted), which is used only to score a flight afterwards.

    Version
    3.15, Apache-2.0
    The prop department · built for this project's Mac

    m3d

    The backpack, tent, dog and decoys were each made from one sentence by m3d, a command-line 3D tool the project's author built for this Mac. It is a local, free take on Meshy: one command runs three models and a Blender step in a row, and each model is a swappable line in its config file. Patrol called it once per prop, then converted the result into MuJoCo's format at the item's real size.

    Models
    Z-Image Turbo (concept picture), Apple Vision (cut-out), Hunyuan3D 2 shape with 2.1 paint (textured mesh, MLX-Swift port)
    Time
    about 5 minutes and 32 GB peak per item; 8 items
    Licences
    Z-Image Apache-2.0; Tencent Hunyuan community licence
    1. m3d make“a royal blue hiking backpack with black straps, lying on its back”--post game --seed 7
      1 · The sentencekept in the build script with the item's real size
    2. Z-Image Turbo concept picture of a blue hiking backpack on a plain background.
      2 · Z-Image Turbopaints a concept picture · 20 s, 22 GB
    3. The backpack cut out of its background, on a checkerboard.
      3 · Apple Visioncuts the object out of the background · under a second
    4. Rendered views of the textured 3D backpack mesh.
      4 · Hunyuan3Dbuilds the shape and paints its textures · 260 s, 32 GB
    5. The same backpack lying on grass in the simulator, seen by the drone's zoom camera.
      5 · Blender, then Patrolre-baked for games (10 s), scaled to 0.55 m, dropped into MuJoCo, and photographed by the drone
    How one prop was made, from the backpack's build record. The same chain made all eight items. This is model use in Patrol too: it happens before the flight rather than during it.from the backpack's build record in m3d
    Each prop as a concept picture (left) and the textured 3D model built from it (right). The SOS letters, a red rock and a grey boulder are simple shapes, with no model needed. Held-out items were never used to tune anything; they are only for the honest test.each item keeps its prompt, seed and build record

    04 · How the models fit together

    A fast loop that never stops, a slow thinker beside it, and code holding the controls

    Clef-Flash makes every per-photo call because it answers in a third of a second. qwen38 does the few jobs that need real thought, in the background. Voice is how you talk to the drone, and code turns every answer into motion only after checking it.

    BEFORE TAKE-OFFwords become a searchEVERY 12 METRES OF FLIGHTthe fast loop, about 0.3 s per lookA FEW TIMES A FLIGHTthe slow loop, seconds; only a second opinion makes the drone waitOperatorhold to talk atthe trailheadParakeetspeech to text20 to 90 msClef-Flashdescription orcommand?qwen38writes how each cluelooks from aboveClue cardswords and a sizeper clue“a bag with shoulder strapsand pockets, about half ametre long” · 0.55 mvoicetexta descriptioncardssmallest clue sets the sweep heightclue words go into every questiona command: go back, come homePlannerlanes and sectors,codeCamera1280×960 photo,straight downFinderrare colours, CPU,top 3 odd spotsClef-Flashis this crop a clue?about 0.3 s eachGateact on the odds?code, with fallbackCloser lookfly over, 20 m, zoom;12 m if unsureClef-Flashconfirm or dismissthe close-uplanesphoto3 cropsoddsmaybeclose-upcontinue: most spots, and every dismissed close-up, go back to the laneyesALERTposition, photo,confidenceqwen38, the slow thinkerwrites the radio note, plans where to look next,gives a second opinion on a close call; 2 to 5 s a jobKokororeads each notealoud to youCode checkknown sectors notyet searchednotetrail planreorderconsole (radio-sized)SAFETY · CODE, ALWAYS ONHeight 8 to 70 m · stays within 25 m of the search area · keeps 10% battery for the trip home · flies home when the area is done, the battery is low, or you say so · no model can override it.
    The same model can appear more than once: Clef-Flash answers three different kinds of question (route a spoken sentence, judge a crop, confirm a close-up), and qwen38 has four jobs. Arrows are labelled with what travels along them.drawn from the search, thinker, voice and Clef client code

    Each model sees only what it must

    The finder sees every photo. Clef-Flash sees only three small crops per photo and the close-ups. qwen38 sees only the finds. In the real-time flight that was 375 odd spots, 171 Clef-Flash looks and 6 qwen38 jobs.

    Every answer goes through code

    Clef-Flash's probabilities pass a gate with thresholds. qwen38's plans are kept only if they name real sectors that haven't been searched. A spoken command runs only if Clef-Flash is at least 45% sure what it was.

    When a model fails, the flight goes on

    If Clef-Flash is down or late, the spot stays unjudged, the console says FALLBACK, and the sweep carries on and comes home. Nothing is ever alerted on a fallback answer.

    05 · What the drone does

    The drone only ever receives a velocity, and code decides which one

    No model tells the drone to go up, go down or turn. Every half second, code picks a target for the current state (the end of a sector, a hover point beside a spot, the place it left its lane, or home) and sends a velocity toward it, up to 6 m/s with at most 3 m/s² of acceleration. The models only answer questions. The state machine decides what the answers mean.

    TAKEOFFstraight upSWEEP40 m, 6 m/s, a photoevery 12 mINVESTIGATEfly to the spot, 20 mCLOSE-UPClef-Flash verdictALERTposition + photoRESUMEback to the laneSTEP DOWN12 m, ask again2ND OPINIONqwen38, drone hoversRETURNDONEmaybezoomconfirmnamed clue ≥ 50%dismissall clues < 20%in betweenthen confirm or dismiss as abovestill unsureqwen38 ≥ 60% sure:alertotherwise dismissnext spot or lanerejoin the lane where it left off; photos start again 12 m onarea covered, battery reserve reached, a safety limit, or you say “come home”Any state: SAFETY (height 8 to 70 m, 25 m boundary, 10% battery for the trip home) sends the drone to RETURN. “Go back to the last alert” sends it to INVESTIGATE.
    CONFIRM and ALERT happen inside a single half-second tick, so the flight log shows only TAKEOFF, SWEEP, INVESTIGATE, RESUME, RETURN and DONE. A second opinion is the one time a model makes the drone wait: it hovers until qwen38 answers.drawn from the search mission's state machine, gates and safety code

    When it takes pictures

    PictureCameraSizeHow oftenWho looks at it
    Sweep photopointing straight down, 34° tall1280×960every 12 m along a lane (every 6.5 m when sweeping at 21.8 m for a small clue)the finder sees all of it; Clef-Flash sees 256 px crops of the three oddest spots
    Close-upzoom, aimed at the spot, framed to 4 m of ground or 3× the clue's size512×384once per step of a closer look: at 20 m, and at 12 m only if unsureClef-Flash; qwen38 for the note and second opinions; you, on the alert card
    Chase viewbehind and above the drone480×360every half secondonly the console, for the people watching

    What no model can do

    Steer the drone. Override the height band (8 to 70 m), the boundary (25 m outside the area) or the battery reserve (10% after the trip home). Turn a failed or late answer into an alert. Change the clue list after take-off.

    How real the drone is

    It is a kinematic body in MuJoCo: no rotors, no wind, no GPS error, the heading fixed, the ground flat. The battery is a clock that counts every second in the air, hovering included: 20 minutes in every result on this page, 30 minutes from now on, a fair figure for a search drone in the cold. That is enough to test the decisions, and it is not a flight model.

    06 · Fly high, look close

    Sweep from as high as the finder still works, then come down only where it matters

    Height is the battery lever. The higher the drone sweeps, the more ground each photo covers, the fewer lanes it flies, and the more area one battery searches. The catch is that small things shrink to a smudge of pixels. Patrol handles that by splitting the job: from up high, it only has to notice that a spot looks odd. Deciding what the spot is happens later, close up.

    0 m12 m20 m40 mtwo neighbouring lanes, seen end-on22.9 m between lanes32.6 m of ground in each photooverlapfirst look at 20 msecond step at 12 m, only if unsurea closer look at one spothover 0.6 × the heightshort of the spot, about31° off vertical; the zoomframes about 4 m of groundbackpack, 0.55 m(drawn to scale)
    At 40 m the sweep camera (34° tall, 44° wide) sees about 24 × 33 m of ground, so 7 lanes cover the 160 m square. At 20 m the same square would need 13 lanes, nearly twice the flying. At 60 m the finder no longer picks out a half-metre backpack.camera geometry from the simulator; lanes from the flight plan; 60 m result from the altitude test
    The blue backpack on grass, sweep · 60 m.
    sweep · 60 m
    The finder misses it
    The blue backpack on grass, sweep · 40 m.
    sweep · 40 m
    Top 3 on every view
    The blue backpack on grass, sweep · 20 m.
    sweep · 20 m
    Easy, but twice the lanes
    The blue backpack on grass, zoom · 20 m.
    zoom · 20 m
    First closer look
    The blue backpack on grass, zoom · 12 m.
    zoom · 12 m
    Only if unsure
    The same blue backpack on grass, seen by the sweep camera from three heights and by the zoom from the two closer-look heights. At 60 m the finder found the backpack in 1 of 10 views; at 40 m in 10 of 10, which made 40 m the sweep height.altitude test, 1280 px run

    The smallest clue sets the height

    Each clue card carries a rough real size, which qwen38 writes along with the description. The planner sweeps at the highest height that works for the smallest thing on the list: 40 m for a 0.55 m backpack, and 21.8 m once a 0.3 m helmet is on the list. That second case exposed a bug today. Photos were still spaced for 40 m, which left gaps at the lower height. The fix landed at 14:53 and now scales the spacing with the height (12 m between photos at 40 m, 6.5 m at 21.8 m); the held-out test passed at 15:16.

    Come down only as far as needed

    On a “maybe” the drone flies toward the spot, stops short of it at 20 m and takes an angled zoom close-up, framed to about four metres of ground (or three times the clue's size). If Clef-Flash is clearly yes or clearly no, that settles it. Only an unsure answer sends it down to 12 m for a second look. In the real-time flight all eight closer looks were settled at 20 m, in 8 seconds each on average.

    blue backpack (clue)blue tarp (decoy)00.20.51confirm bar 0.5dismiss below 0.2grass · 256 px crop from 40 mgrass · 256 px crop from 40 m, tarp: median 0.28 (range 0.16 to 0.30, 5 views)grass · 256 px crop from 40 m, backpack: median 0.85 (range 0.84 to 0.87, 5 views)snow · 256 px crop from 40 msnow · 256 px crop from 40 m, tarp: median 0.07 (range 0.06 to 0.09, 5 views)snow · 256 px crop from 40 m, backpack: median 0.80 (range 0.73 to 0.85, 5 views)grass · close-up at 20 mgrass · close-up at 20 m, tarp: median 0.04 (range 0.04 to 0.05, 5 views)grass · close-up at 20 m, backpack: median 0.95 (range 0.94 to 0.96, 5 views)snow · close-up at 20 msnow · close-up at 20 m, tarp: median 0.03 (range 0.02 to 0.04, 5 views)snow · close-up at 20 m, backpack: median 0.94 (range 0.91 to 0.94, 5 views)grass · close-up at 12 mgrass · close-up at 12 m, tarp: median 0.03 (range 0.03 to 0.04, 5 views)grass · close-up at 12 m, backpack: median 0.95 (range 0.94 to 0.96, 5 views)snow · close-up at 12 msnow · close-up at 12 m, tarp: median 0.02 (range 0.02 to 0.03, 5 views)snow · close-up at 12 m, backpack: median 0.96 (range 0.96 to 0.96, 5 views)
    The altitude test, in Clef-Flash's own numbers: how likely it said each view showed the backpack. Dots are medians over five views, bars the range. Already from 40 m the crop separates clue from decoy, and the close-up leaves a gap of about 0.9.altitude test, 5 views per cell (tuning items, so in-sample)

    07 · Each model sees only what it must

    Cheap work on everything, expensive work on almost nothing

    This is the routing idea at the heart of the hackathon brief, measured on the real-time flight. The CPU finder looks at every photo. Clef-Flash looks at a few hundred small crops. qwen38 is called six times.

    1101001,000count, log scalecontrol ticks (half-second steps)codecontrol ticks (half-second steps): 1,2341,234sweep photoscamerasweep photos: 125125odd spots boxedfinder, CPUodd spots boxed: 375375crops judgedClef-Flashcrops judged: 163163closer lookscode fliescloser looks: 88close-ups judgedClef-Flashclose-ups judged: 88alertscodealerts: 33qwen38 jobs3 notes, 3 plansqwen38 jobs: 66spoken alertsKokorospoken alerts: 33
    One flight, 683 seconds, 160 × 160 m. Clef-Flash's 171 calls took about 56 s of model time in all (median 0.32 s per crop, 0.42 s per close-up). qwen38's 6 jobs took about 15 s, in the background.recorded real-time flight, summary

    Why not ask qwen38 about every crop?

    At 2 to 5 s a call, the same 163 crops would take 5 to 14 minutes of model time (the flight took 11), and the drone would fly past each spot long before the answer came back.

    Why crops, not whole photos?

    Clef-Flash can say whether a backpack is in a photo but not where (asked to point, it was right 4 times in 30), and a drone needs a spot to fly to. The finder supplies the spot. In the first test at 512 px, whole-photo answers were useless above 20 m; crops kept working.

    Why have a finder at all?

    It costs 50 ms of CPU per photo and no GPU, and it turns one big question per photo into three small ones about specific places. Over 43 flights it boxed 11,064 spots, and Clef-Flash judged 5,627 of them.

    08 · Talking to it

    Your voice is the second way in

    In the field the operator's hands and eyes are busy with gloves, a radio and keeping the drone in sight, and the description arrives as speech from a relative anyway. Parakeet and Kokoro run on the same laptop, so voice works with no signal. Speech only ever picks from a fixed list of commands. Code still flies.

    What you can say

    You say, for exampleClef-Flash routes it toWhat happens
    “Missing hiker. Blue backpack, orange tent, grey dog.”describeqwen38 writes the clue cards; before take-off the mission is rebuilt around them and Kokoro reads them back
    “Start the search.”start_searchtake off and sweep
    “Go back to the last alert.”go_back_to_last_alertfly back and look again (queued if it is busy with a spot)
    “Stop searching and come home.”return_homestraight to RETURN
    “What have you found?”questiona short spoken answer from the mission status (basic so far)

    A command runs only when Clef-Flash is at least 45% sure which one it was. If Clef-Flash is down, a simple keyword match takes over and the log says FALLBACK. Since 14:55 the drone acknowledges a command only after the mission has accepted it. “I can't do that now: there is no alert yet” is said aloud when it refuses one.

    A real microphone, during a console test“The camper had a blue backpack, an orange tent, and a gray dog.”

    What happened next

    Parakeet transcribed it, Clef-Flash routed it as a description with 94.7% confidence, qwen38 wrote three clue cards, and the drone took off looking for them. It found and announced its first alert out loud, and then the operator told it to come home at 93 s, which it did.

    The path your voice takes

    Hold the button or the space bar in the console. The browser records the clip and posts it to the console server, ffmpeg turns it into 16 kHz audio, Parakeet transcribes it (20 to 90 ms), one text-only Clef-Flash call routes it, and the result shows in the log.

    09 · The console

    One screen shows what the drone sees, what each model thinks, and what it found

    The console is a web page served from the laptop. It runs live, with push-to-talk, or replays any recorded flight. The annotated view at the top of this page shows it mid-flight; below is the same demo flight after landing, and what each panel is for.

    The Patrol console after a search: header with DONE, 100% area searched, 47% battery, decision sources CLEF 196, FALLBACK 0, QWEN38 9; clue chips for blue backpack, orange tent and gray dog with qwen38's descriptions; the onboard camera with finder boxes; the decision trace with Clef-Flash's bars; the sector map with three red alerts; the chase view; the log; and alert cards showing each sweep crop beside its close-up with qwen38's radio note.
    The demo flight, finished. Look for the clue chips across the top, qwen38's own from-above wording (“a rectangular blue fabric object with visible straps and buckles, roughly the size of a large book”). Each alert card shows what the sweep saw from 36 m beside what the close-up confirmed at 20 m.the recorded demo flight, end state
    PanelWhat it tells you
    Headerstate, area searched, battery, clock, and who decided: CLEF answers, FALLBACK answers (Clef-Flash failed), QWEN38 jobs, with Clef-Flash's median time
    Looking forthe clue cards: your words, qwen38's from-above sentence, and the size that set the sweep height
    Onboard camerathe latest sweep photo with the finder's boxes: amber when the gate said investigate, grey when judged and passed, orange “no answer” on a fallback. During a closer look it switches to the zoom close-up with the verdict
    Decision tracethe 256 px crop Clef-Flash actually saw, its continue-or-investigate odds and one bar per clue, with the thresholds marked
    Mapsectors, the trail, the stream and the last known point; ground already photographed; qwen38's suggested sectors; every spot looked at (grey dismissed, red alert)
    Chase view and loga camera behind the drone, for the audience; and every decision, note, plan and spoken line, newest first
    Alertsone card per find: the sweep crop beside the close-up, position, confidence and qwen38's radio note with what to check

    10 · One laptop, no internet

    Everything above runs at the same time on one MacBook Pro

    An M5 Max with a 40-core GPU and 128 GB of unified memory. qwen38 and Clef-Flash stay loaded as shared services, the voice models load with the console, and the simulator, finder and flight code run on the CPU. Every connection stays inside the laptop.

    qwen38: about 70 GBClef-Flash: about 11 GBvoice: about 2.7 GBsimulator, finder, console: about 1.7 GB0128 GB unified memoryqwen38 · 70 GBClef-Flash 11voice 2.7 · sim 1.7about 43 GB for macOS, apps, caches
    Model weights in memory during a flight. At 15:00 today the machine reported 25% of its memory free, with all of these loaded and two agents working. The Clef-Flash server had grown to 46 GB by then, because MLX keeps a cache of freed buffers, so treat the bar as weights rather than a precise footprint.weight sizes from earlier measurements on this machine; free memory measured during flights, 11 Oct 2026

    One GPU is the real limit

    Clef-Flash answers in 0.3 to 0.4 s when the GPU is free. While another agent's image or 3D job ran, it took 2 to 6 s while the drone kept flying on its last command, and the power-line scene's recall fell from 5 of 6 to 3 of 6. Scored runs and the demo need the GPU to themselves.

    Two models share it politely

    When qwen38 is busy with a note or a plan, Clef-Flash slows a little: about 73 ms (23%) slower at the median across 25 flights, for example 321 ms idle against 395 ms busy. That is why qwen38 does only a handful of jobs per flight, in a background thread.

    “Offline” is by design, not yet by test

    Nothing in the code calls out, and every model is local. The demo's preflight has a Wi-Fi-off check, but the rehearsal with Wi-Fi actually off has not been run yet.

    How this could fly for real

    A · TRUCK COMPUTERclosest to what runs todayB · SPLIT ACROSS A WEAK LINKthe drone decides; the base thinksDronecamera and flightcontroller onlyTruck computerfinder, Clef-Flash,qwen38, Parakeet,Kokoro, flight code,console(this laptop today)live videovelocityNeeds a video link of several Mbit/s within line of sight.Drone computercamera, finder,Clef-Flash (9B),flight code and safety(needs an edge boardwith about 12 GB free)Baseqwen38, Parakeet,Kokoro, consoleand the operatoralerts0.3 KB + photoclues, plans,commandsqwen38's jobs are slow and need no video, so a weak radio or mesh link is enough.
    A 9B model fits on the larger drone computers; qwen38 would not. So the fair pitch is either a computer in the search team's truck, or Clef-Flash on the drone and qwen38 at base, which works over a weak link because qwen38 never needs video. Neither is built: today both ends are this laptop.the project brief; alert size measured on a recorded flight

    11 · What has been proven

    It works end to end, offline, with the real models, in a simulator

    Every number below comes from a recorded run you can replay. No search flight so far has raised a false alert. Read them as “this behaviour works”, not as real-world detection rates: the scenes are simulated and the samples are small.

    Altitude testGO

    Sweep at 40 m, look closer at 20 m then 12 m. The rule for passing was written down before the test ran.

    altitude test
    Held-out testPASS 15:16

    Six scenarios on items never used for tuning, plus the power-line regression. Four held-out clues at once: 4 of 4, no false alerts, within 0.05 m. The honest first try (before fixes) was 24 of 25 checks.

    held-out end-to-end test report
    Three seed sets17 of 18 scenario flights

    The six search scenarios on three seed sets with a 30-minute battery, no false alerts. The four-clue flight now covers the whole area every time (70 to 73% of the battery). The one miss: on one seed the finder never boxed the sleeping bag.

    three end-to-end runs on a 30-minute battery; the 20-minute runs before them also gave 17 of 18
    Only what you said2 of 2 no dog alert

    A grey dog was planted but not described. The drone found the two things it was told about and never alerted on the dog.

    demo runbook variant
    False alerts0 in 45 flights

    Every finished search flight so far: 95 alerts, none false. Median distance from the planted item 0.05 m (simulator pose, flat ground).

    all 45 finished search flights
    Second opinions11 of 11 right

    When Clef-Flash was unsure at 12 m, qwen38 confirmed the real dog, helmet, sleeping bag or tent seven times and dismissed four background spots, in 1.5 to 2 s each.

    every logged second opinion, matched to the answer key
    Live vs after landing0 vs 7 false alerts

    The same six flights scored two ways. Both found 14 of 16 clues. Reviewing only the sweep photos after landing raised 7 false alerts and needed 3 to 4 times the Clef-Flash calls.

    live versus after-landing report
    Trail reasoning29.5 s sooner

    qwen38's sector plans cut the time from the first find to the second (15.5 s and 43.5 s on two seeds), for 25 to 34% more flying.

    trail A/B, lockstep runs
    Real-time flight3 of 3 0 false

    683 s at real speed, live in the console: backpack, tent and jacket found, tarp dismissed.

    recorded real-time flight, score file
    Real microphone94.7% routed

    The operator's sentence was transcribed, routed as a description, turned into clue cards, flown, and an alert was read aloud.

    real-microphone console run
    Clef-Flash switched offhome on fallback

    With the decision model unreachable, the drone finishes the area on FALLBACK, raises nothing, and comes home.

    end-to-end scenario 4
    Power-line regression3 of 4 runs pass

    The original corridor scene passed its own end-to-end test on three seeds. In the latest run it failed once on its known vegetation false alarms (a tree that perspective puts near a wire).

    corridor end-to-end runs
    Held-out finds from the end-to-end tests: things the system was never tuned on, found from the words alone. The helmet is the smallest item, at 0.3 m.held-out end-to-end scenarios
    live, with closer looksafter landing, sweep photos onlyclues found (of 16)clues found (of 16): 1414clues found (of 16): 1414false alertsfalse alerts: 00false alerts: 77Clef-Flash callsClef-Flash calls: 1,2351,235Clef-Flash calls: 4,8604,860
    Live versus after landing, six flights (four with held-out items). The after-landing arm was given every saved photo, twice the finder budget and unlimited time.live versus after-landing report
    with qwen38 trail planswithoutseed 5seed 5: 93.5 s93.5 sseed 5: 109.0 s109 sseed 6seed 6: 91.0 s91 sseed 6: 134.5 s134.5 sseconds from the first find to the second (lockstep, grass, clues along the trail)
    Trail plans, two seeds, in lockstep so both arms are identical until the first plan. The cost: 25 to 34% more flying time. Two seeds is a hint, not proof.trail A/B, lockstep runs

    Figures as of 11 October 2026, 15:45: the project's status file and the recorded runs behind it, including the held-out test that passed at 15:16 and the repeats on two more seed sets that finished at 15:44.

    12 · What doesn't work yet

    The faults, in plain words

    This is a prototype built in a day. These are the known problems, roughly in order of how much they matter.

    • passes, one miss

      The held-out test passes; the remaining miss is the finder's

      It went green at 15:16 after three fixes: photos spaced to the sweep height (photos spaced for 40 m had left gaps at 21.8 m, and the SOS letters were missed), leftover sectors flown nearest first, and trail plans refused when the battery couldn't finish them. On a 20-minute simulated battery the four-clue flight ran out before covering the area. On a more realistic 30 minutes (search drones in service fly 40 to 45 minutes and lose a quarter to a third of that in the cold) it covers everything, and 17 of 18 scenario flights pass. The one miss is a detection miss: on one seed the finder never boxed the sleeping bag, so Clef-Flash was never asked. The honest first-try number is still 24 of 25 checks.

    • partly

      On new items, Clef-Flash leans on qwen38

      On the tuning items Clef-Flash's close-ups score 0.9 and above. On held-out items it is often only 0.12 to 0.29, below its own 0.5 bar, and the find goes through only because qwen38's second opinion confirms it. In the passing held-out run, two of the four finds (the helmet and the sleeping bag) came that way. Without qwen38 on board they would have been dismissed.

    • open

      It has only ever seen a simulator

      MuJoCo scenes look like a game: flat ground, clean colours, props that came out of a 3D generator. They prove how the system behaves. The test that would say something about real hillsides is real aerial search imagery (HERIDAL, SARD, WiSARD), which has been approved; the dataset licences are being checked, and nothing is downloaded yet. The simulator stays as a switchable fallback.

    • partly

      The live advantage so far is precision, not recall

      Live and after-landing analysis found the same 14 of 16 clues. Live raised no false alerts against 7. A hybrid that re-checks the saved photos after landing could get both, and isn't built.

    • partly

      Small numbers

      Each claim rests on a handful of flights: three seed sets per scenario, two seeds for the trail test, six flights for live versus after landing. 70 offline tests cover the logic, including one that poisons the answer key so any read of it during a flight fails.

    • open

      The location accuracy is a best case

      The simulator knows the camera's exact position and the ground is flat, so alerts land within centimetres. A real drone has GPS error, slopes and wind. The alert position also comes from the high sweep photo; the close-up doesn't refine it.

    • fixed today

      qwen38 named the wrong direction

      The real-time flight's first note says the backpack was “28 meters north of center”; it was 28 m south. Before the fix, 18 of 78 notes had a wrong compass word. Code now writes the direction in words before qwen38 sees it (fixed at 14:37); all 10 notes since are right.

    • open

      Two of qwen38's planned jobs are missing

      Rewording a clue after the same decoy keeps fooling Clef-Flash is not built. Answering the operator's questions is basic: it reads a one-line status, not the mission log, and its prompt still says “power-line inspection drone”.

    • open

      No radio

      The alert is small enough for a radio link (about 270 bytes plus a 20 KB photo), but no radio sink exists; alerts go to the console and the log.

    • partly

      A slow Clef-Flash spreads the photos out

      The search uses every answer however late, and the drone keeps flying meanwhile. Under GPU contention (2 to 6 s answers) photos get further apart and gaps can appear. Scored runs need the GPU to themselves.

    • open

      Wi-Fi-off rehearsal

      Nothing calls the internet, but the demo has not been rehearsed with Wi-Fi actually off.

    • open

      Props and scene realism

      Items sit on the ground at a random angle with no physics settling, no realism check and no contact sheet. Hunyuan3D's licence excludes the EU, the UK and South Korea, so the props would need rebuilding with an MIT-licensed engine before any use there.

    • partly

      The finder's blind spots

      It boxes only the three rarest-coloured spots per photo, so a large object in a common colour can go unnoticed. Its ranking was tuned on the tuning items.

    • fixed today

      A refused command was acknowledged aloud

      “Go back to the last alert” with no alert yet used to get “Going back”. Since 14:55 the drone speaks only after the mission has accepted or refused.

    13 · Where it came from

    It started the day as a power-line inspector

    Patrol began at 1 am as a drone that flew along power lines and flagged broken insulators. By late morning the loop worked, but the case for it was weak: a trained detector is the honest tool for known defects, and line photos are fine to review after landing. Search and rescue needs both things this design is good at: recognising things from words, and deciding while the drone is still there.

    Simulated power-line corridor: lattice towers, sagging conductors and a drone.
    The corridor scene, kept as a regression test.
    Close-up of an insulator string on a tower with a disc askew.
    The planted broken insulator.
    1. Brief: a power-line drone where Clef-Flash picks one of four actions per frame
    2. Closed loop flies the corridor with the gate, fallback and notes
    3. Corridor end-to-end test passes on three seeds; voice and console added
    4. Pivot to search and rescue
    5. Altitude test passes: sweep at 40 m, look closer at 20 and 12 m
    6. First searches find the tent and backpack and dismiss the tarp
    7. qwen38 joins as the slow thinker: trail plans and notes, live
    8. Search console with camera boxes, Clef-Flash bars, sector map and alert cards
    9. First held-out end-to-end test: 24 of 25 checks
    10. A real-time flight in the console: 3 of 3, no false alerts
    11. Live versus after-landing comparison on six flights
    12. First run with a real microphone
    13. Photo spacing scales with sweep height (the SOS miss)
    14. Held-out end-to-end test passes: all six scenarios and the corridor

    Built by a relay of Claude Code agents, each handing over to the next through the project's handoff, status, log and decision files, with the owner steering.

    14 · What comes next

    From a convincing simulator to evidence that matters on real ground

    NextWhy it mattersNeeds
    The finder's blind spotThe last held-out miss was a sleeping bag the colour finder never boxed. Trying more boxes per photo, or a second finder cue, is the next levernext
    Wi-Fi-off rehearsalRun the whole demo with the network actually offten minutes before the demo
    Real aerial photosReplay real search imagery (HERIDAL, SARD or WiSARD) through the finder and Clef-Flash. The only test that speaks to real terrainapproved; dataset licences being checked
    A hybrid after-landing passRe-ask every saved photo after landing, but send a team only to spots no close-up has already cleareda day of work
    Compute budget sweepOne Clef-Flash decision every 1, 2 or 4 s: how slow can it be before finds are missed?GPU time
    Real flight softwarePX4 in simulation, then a real droneweeks, and hardware
    A small trained detectorLet Clef-Flash label flights and train a tiny detector from its labels, for a cheaper first passlater

    15 · Glossary and sources

    The words, and where every number lives

    Clue card
    One thing to look for: the family's words, a sentence about how it looks from above, and a rough size.
    m3d
    A command-line tool, built for this project's Mac, that turns a sentence into a textured 3D model on this Mac, chaining Z-Image Turbo, Apple Vision and Hunyuan3D. It made every prop.
    Decoy
    Something placed to fool the drone, such as a blue tarp that could pass for a blue backpack from 40 m.
    Tuning and held-out items
    Tuning items (backpack, tent, jacket) were used to set thresholds and wording. Held-out items (dog, helmet, sleeping bag, SOS rocks) were kept back for an honest test.
    Sweep
    Flying the lanes at the sweep height, taking a photo every 12 m.
    Lane and sector
    Lanes are the parallel lines the drone flies. Each lane is cut into 40 m sectors with grid names, A1 in the south-west to G4 in the north-east.
    Last known point
    Where the person was last seen, here the trailhead. The search starts there.
    Finder
    The classical computer-vision step that boxes the rarest-coloured spots in a photo. Not a trained model.
    Crop
    A 256-pixel square cut around one finder box. Clef-Flash judges crops, never whole photos.
    Noul
    Clef-Flash's yes-or-no question type. The answer is the probability of yes, for example 61% “blue backpack”.
    Gate
    The code that decides whether Clef-Flash's answer is strong enough to act on.
    Closer look (investigate)
    Leaving the lane to fly to a spot, stopping short of it at 20 m (then 12 m if unsure) and taking an angled zoom close-up.
    Second opinion
    qwen38 looking at a close-up when Clef-Flash is still unsure at 12 m. The drone hovers until it answers.
    FALLBACK
    What the console shows when a model failed to answer. The flight carries on without that answer, and never alerts on it.
    SAFETY
    Code-only rules (height band, boundary, battery reserve) that send the drone home. No model can override them.
    System one, system two
    The hackathon's framing: a fast, instinctive model for every frame (Clef-Flash) beside a slow, deliberate one for the few hard jobs (qwen38).
    Lockstep and real time
    In real time the world keeps moving while a model thinks; in lockstep it pauses. Lockstep makes A/B tests fair.

    Where the evidence comes from

    WhatSource
    The goal and the bar for donethe project brief
    Milestones and their evidencethe project status file, where every “done” names a run or report
    Why each choice was madethe dated decision log
    Every flight on this pagerecorded runs: each keeps a tick-by-tick mission log, a score against the answer key and its photos, and can be replayed in the console
    How the system behavesthe search, planner, finder, geometry, voice and thinker code, which wins wherever the notes disagree

    Keeping this page current

    The page is rebuilt from the project's own recorded runs. Diagrams, charts and the flight map are generated from the same data, so a new flight or a new result updates them in one step, and every number keeps a note of where it came from.

    Patrol · field briefing v0.1 · written 11 October 2026 with Claude Code from the project's own records and recorded runsEverything runs on one MacBook Pro M5 Max, 128 GB · simulator: MuJoCo 3.15 · models: Clef-Flash 9B, qwen38, Parakeet TDT 0.6B v3, Kokoro-82M; props made with m3d (Z-Image Turbo, Apple Vision, Hunyuan3D)