Repository navigation
Reference: open-source work on Wi‑Fi toy drones (cooingdv / KY UFO and others) #196
Description
Reference material for #187 (FLOW-UFO) and for toy drones in general (see docs/toys.md).
For FLOW-UFO, look first at anything about the cooingdv family. cooingdv publishes the KY UFO and RC UFO apps, and KY UFO is the app named in the FLOW-UFO manual. The repositories below are grouped by app family.
Most useful: a multi-protocol project
-
marshallrichards/turbodrone: a reverse-engineered API and client to fly popular ~$50 toy drones from a computer instead of the closed mobile apps. The backend is chosen with
DRONE_TYPE:s2x(com.vison.macrochip, e.g. S20, S29)wifi_uav(V88, D16)cooingdv(RC UFO, KY UFO)cooingdv_jieli(KY FPV / Jieli CTP, RTP/JPEG video)wifi_camx69_lg
Its README describes how to add a new drone: decompile the APK with jadx and look for ports and protocols. The video handling usually lives in native C++ libraries inside the APK.
cooingdv / KY UFO (closest to FLOW-UFO)
- cklam12345/morphDrone (
morph-piloton PyPI): an MCP server that flies a KY UFO from Claude. From its README: the drone runs an AP at192.168.1.1, and video is RTSP atrtsp://192.168.1.1:7070/webcam. It also notes that on the KY UFO, pitch and throttle are inverted in hardware. - DevloperAnuj/fallarmydetect: a pest-detection project with a section Reverse-engineering notes (KY UFO drone). Its integration is based on decompiling the official app
com.cooingdv.kyufowith jadx. Key points from the notes:- video is handed to ijkplayer, with no video protocol of its own;
UdpClientHeartBeatTasksends{0x01, 0x01}to UDP port 7099 every second.
WiFi UAV (com.lxhd and related)
- FahrulRPutra/reversing-wifi-uav: reverse engineering of the LSRC-S1S drone.
- Control commands go to UDP port 8800, and a separate packet turns the stream on.
- Video arrives from port 1234.
- A Python script and board photos, including the Wi‑Fi camera module.
- JadanPoll/DroneUAVHack: a WiFi UAV video stream decoder. The HTB forum thread points out that the standard Huffman, quantisation and chroma tables are not sent in the UDP stream; the client has to supply them.
Other platforms (useful as reference)
- rooterkyberian/syma, Syma X22W.
- The camera board is made by Joyhonest.
- UDP only, with
172.16.10.1; commands go from port:6666to172.16.10.1:5555. - Hardware: STM32F031K6 + MPU6050, Wi‑Fi on a Marvell 88W8801.
- karolis1115/DroneHackOpenCV, JJRC H49. The author found an open UART with a U-Boot shell on the separate video/link board, and the Wi‑Fi module runs RT-Thread.
- zturner1/h120d-protocol, Holy Stone H120D: a full
PROTOCOL.mdwith a byte-level description of the binary protocol on UDP port 8080. - MetaIdea/OpenDroneProject: the LSE525 and Eachine E58 protocols, with control through an ESP.
Identifying a model
Check which app the toy's manual names, and what answers on 192.168.1.1. If RTSP is open on 7070 and a heartbeat goes to 7099, it is cooingdv, and turbodrone with DRONE_TYPE=cooingdv should work straight away.
Notes for this app (added by the maintainers):
- A cooingdv toy of that kind should already play here as an ordinary RTSP camera:
rtsp://192.168.1.1:7070/webcam. It may need the 1 s heartbeat to UDP 7099, which the app does not send yet. - FLOW-UFO toys (
192.168.169.1:8800, MJPEG fragments with acknowledgements, new feature: receiving udp video strem from cheap toys with wifi cam's #187/feat: FLOW-UFO toy drones over UDP (#187) #188) are a different, newer family from the same app publisher. The supplied-tables point above matches what the FLOW-UFO transport already does (it builds the JPEG header itself).
Activity
compot-dev commentedon Oct 15, 2026
What turbodrone's code says (marshallrichards/turbodrone
2c09cf8, Apache-2.0), compared with the FLOW-UFO transport in #188:FLOW_…(D16, V88, K417)wifi_uav192.168.169.1, UDP 8800 (some units 8801)93 01, client ACKsEF 02, the client supplies the JPEG header32 4B 14 2D. Bytes 0x34/0x35 of a fragment are the main and flow camera status. The drone sends from source port 1234FLY-UFO-…(K200), KY UFO / RC UFOcooingdv192.168.1.1rtsp://192.168.1.1:7070/webcam, MJPEG01 01to UDP 7099 every 1 sHF_…(YL3), HF UFO app192.168.80.xOPEN_RT_STREAM, RTP/JPEG (or H.264) to the phone's UDP 6666cooingdv_jieli192.168.8.15wifi_cam192.168.4.15342 76starts the stream; complete JPEGs in 0x5C0-byte datagrams, no ACKsThe subnet is a good hint for the family: 192.168.169.x is FLOW-UFO, 192.168.1.x is KY UFO RTSP, 192.168.80.x or 192.168.8.x is Jieli, and 192.168.4.153 is WiFi_CAM.
compot-dev commentedon Oct 15, 2026
HF_… toy (YL3), from a PCAPdroid capture of the vendor app (phone →
192.168.80.1; 2026-10-08, ~114 s)GET http://192.168.80.1:8080/mnt/spiflash/res/dev_desc.txtreturns JSON with"product_type": "AC79X_wifi_car_camera"(Jieli AC79),"firmware_version": "79.2230.12.6M02.HFFLOW.1CH","match_app_type": "DVRunning 2","rtsp_forward_support": "0"CTP:+ topic length u16 LE + topic + JSON length u32 LE + JSONAPP_ACCESS {"op":"PUT","param":{"ver":"25","type":"0"}}. ←KEEP_ALIVE_INTERVAL {"timeout":"60000"}, SD and battery status,VIDEO_PARAM {"w":"640","h":"480","format":"0","fps":"25"}. →DATE_TIME {"op":"PUT","param":{"date":"YYYYMMDDhhmmss"}}, →CTP_KEEP_ALIVE {"op":"PUT"}CTP_KEEP_ALIVE {"op":"PUT"}about every 7.5 s; the device answers with an emptyCTP_KEEP_ALIVEOPEN_RT_STREAM {"op":"PUT","param":{"format":"0","h":"480","w":"640","fps":"25"}}, then ←OPEN_RT_STREAMNOTIFY (~0.5 s later)CLOSE_RT_STREAM {"op":"PUT","param":{"status":"1"}}FLIGHT_CONTROL {"op":"PUT","param":{"DRONE_DATA":"…"}}over CTP. Stick packets66 14 80 80 80 80 … 99(20 bytes) go to UDP 3456, plus00every 0.5 s before the session and 8/10-byte zero packets after the stream startsOther notifications seen:
PULL_VIDEO_STATUS/PULL_VIDEO_PARAM(1280×720,format1 and 0),CAMERA_TYPE→CTP_NO_TOPIC_MSG, andAP_SSID_INFO.feat: FLOW-UFO after turbodrone (both ports, quality bytes, lagging s…
CatRovacer commentedon Oct 15, 2026
First shot, for K200 work rtsp://192.168.1.1:7070/webcam nice video streaming, but good idea rotate ccw and landsscape orientation. ))) And split to 2 screens, for two eyes
flyufo:// no video
App for D16 - WIFI UAV
CatRovacer commentedon Oct 15, 2026
stats.json и log слишком велики для выкладывания непосредственно в комментарии (((