Code Monkey home page Code Monkey logo

goprowifihack's Introduction

GoPro Wifi Hack

The unofficial API for GoPro cameras (The WiFi enabled models)

This repository won't be updated regularly, and users are encouraged to switch to OpenGoPro

Read why

Choose the GoPro:

A note on HERO8: For GoPro Connect (Webcam Mode), use Hero9 commands; For other commands, use Hero7 commands.


This is a community effort to document the API calls between GoPro cameras and GoPro's Smartphone App via WiFi. It has 4 sections for each camera model:

  • WiFi commands: a list of WiFi commands you can use for the camera.
  • Livestreaming: methods of getting a live video feed off the camera.
  • Media Browsing: Instructions on getting media off the SD card via wifi.
  • Camera Status: List of camera status meanings

Note: HERO4 camera is now the base for the future API, since the calls will be the same for HERO4 and above.

Does GoPro offer an official API, SDK or mobile library?

They did offer a mobile library - but they shut it down. This repository will continue to be updated until GoPro stops releasing cameras and ceases operations.

But... Now they offer BLE/WiFi API documentation, tutorials and examples over at OpenGoPro.

This vs OpenGoPro

This is an effort to document the mobile app APIs used by GoPro, internally called gpControl APIs or Smarty APIs. OpenGoPro V2 supports all commands over WiFi and USB, making this effort largely useless these days. Fortunately they've kept the BLE part 100% identical to what we documented over here.

This repository will just be updated to cover the gpControl APIs, if they change at all between future cameras, which might reveal new features and/or support endpoints not covered by OpenGoPro. Users are encouraged to switch to the OpenGoPro spec.

OpenGoPro supports Hero9 Black, Hero10 and Hero11 (at least officially - their BLE commands are compatible with older BLE-enabled cams given the proper characteristic). This repository covers nearly a decade of GoPro camera releases.

This repository will get updates only if the gpControl API is kept available, if the GoPro App ceases to use gpControl and switches to OpenGoPro, what's the point?

Libraries:

3rd Party Library/API wrappers list

Bluetooth:

Bluetooth is used to turn camera on after WiFi AP is disabled in deep sleep, as well as for turning on/off wifi.

But on Hero9, it's used for status retrieval, all commands and changing settings, turning on,

Acknowledgements/credits

  • Konrad Iturbe - main developer
  • dough29 - HERO2 research
  • EvilWombat - general and HERO3
  • 3v1n0 - HERO4 research
  • Maelstrom Napalm - HERO4 research
  • fraannk - HERO4 research
  • Sonof8Bits - Python script
  • krystof-k - Bluetooth API and wake up commands
  • Mark Kirschenbaum - Bluetooth commands info
  • GitHub contributors
  • and finally GoPro for allowing us to tinker with their cameras and not shutting down this unofficial API like instagram or snapchat, that means a lot.

goprowifihack's People

Contributors

aleksandr-vin avatar aster94 avatar benargee avatar bencdelaney avatar cepoon avatar chrisjoyce911 avatar codecat avatar dagelf avatar dixiao-l avatar dschoorisse avatar eried avatar fschaupp avatar geeee avatar geekgarage avatar jakst3r avatar jasonfriedman avatar joegatling avatar john-arvid avatar kim82 avatar konradit avatar krystof-k avatar lambrian avatar m4tek avatar networkjanitor avatar nlight avatar ogi22po avatar rhoenschrat avatar silent3rror avatar simonmysun avatar wmehling avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goprowifihack's Issues

Hero+ bad request

####Problem:
Hi, I have connected my laptop via wifi to my hero+, and running the python script using python3

####Details:

This is the output from terminal when i try to execute the script.

File "GoProStream.py", line 112, in
gopro_live()
File "GoProStream.py", line 47, in gopro_live
response = urllib.request.urlopen('http://10.5.5.9/gp/gpControl/info').read()
File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python3.5/urllib/request.py", line 472, in open
response = meth(req, response)
File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.5/urllib/request.py", line 510, in error
return self._call_chain(*args)
File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
result = func(*args)
File "/usr/lib/python3.5/urllib/request.py", line 590, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 400: Bad Request

Also if I hit http://10.5.5.9/gp/gpControl/execute?p1=gpStream&a1=proto_v2&c1=restart in my browser the return JSON is {"status":"0"}

Also if I hit 10.5.5.9/gp/gpControl/info
the return JSON
{
version: 3.00
path_info: /info
query_string: ""
error_code: -3
error_msg: unknown_request
function: control_router
line: 458
}

  • GoPro Camera(s): Hero+
  • Firmware Version: 01.50
  • Steps to reproduce:
    python3 GoProStream.py
  • Happens every time? [Y/N]: Y

GoPro HERO5/New Features

GoPro HERO5 details have been leaked in the past couble of weeks, now, the update firmware v4.00 to GoPro HERO4 Black shows some features only seen in HERO5's manual.

on 10.5.5.9/gp/gpControl:

{
            "path_segment": "eis",
            "display_name": "EIS",
            "id": 78,
            "options": [{
                "display_name": "ON",
                "value": 1
            }, {
                "display_name": "OFF",
                "value": 0
            }]

{
            "path_segment": "single_wdr",
            "display_name": "WDR",
            "id": 77,
            "options": [{
                "display_name": "ON",
                "value": 1
            }, {
                "display_name": "OFF",
                "value": 0
            }]
        }, {
            "path_segment": "single_raw",
            "display_name": "RAW",
            "id": 82,
            "options": [{
                "display_name": "ON",
                "value": 1
            }, {
                "display_name": "OFF",
                "value": 0
            }]
        }, 

[{
            "path_segment": "option",
            "display_name": "Auto Audio Mode",
            "id": 80,
            "options": [{
                "display_name": "Stereo Only",
                "value": 0
            }, {
                "display_name": "Wind Only",
                "value": 1
            }, {
                "display_name": "Auto",
                "value": 2
            }]
        }, {
            "path_segment": "protune",
            "display_name": "Audio Protune",
            "id": 79,
            "options": [{
                "display_name": "ON",
                "value": 1
            }, {
                "display_name": "OFF",
                "value": 0
            }]
        }, {
            "path_segment": "protune_option",
            "display_name": "Raw Audio Track",
            "id": 81,
            "options": [{
                "display_name": "Low",
                "value": 0
            }, {
                "display_name": "Mid",
                "value": 1
            }, {
                "display_name": "High",
                "value": 2
            }]
        }]

Make your own assumptions, these features could arrive to HERO4 cameras via a FW update, or not (which is very likely) and these might be the final commands for HERO5 (since HERO5 is like HERO4 in terms of specs). I tried a few commands and they froze my camera. HERO4 Black has default audio: audio protune ON, audio mode wind only.

Browsing not working on Hero 5 Black

Problem:

It seems like the /videos url doesn't work on the Hero 5. When I navigate to the URL I get the following error:

Error 404: Not Found
Not found

Details:

  • GoPro Camera(s): Hero 5 Black
  • Firmware Version: 1.55
  • Steps to reproduce: Connect to the hero's wifi and navigate to http://10.5.5.9:8080/videos
  • Happens every time? [Y/N]: Yes

Hero 5 Livestreaming

####Problem:
Can't livestream with Hero5 to computer. Have followed instructions here along with many other references. I'm not sure if this is due to a firmware update, but on wireshark I'm not seeing any udp traffic whatsoever.

####Details:
Would like to wirelessly stream from Hero 5 to computer.

  • GoPro Camera(s): Hero 5 Black
  • Firmware Version: HD5.02.01.55.00
  • Steps to reproduce:
  • Happens every time? [Y/N]: Yes

Hero 4 Session: Automatically enable app mode / wifi on startup?

Hi Konrad,

do you know if there is any possibility to enable the app mode / wifi mode on startup after a cold start? We are using the Hero 4 Session in a customized underwater housing with a wifi antenna inside and are not able to press buttons to manually switch to the app mode.

Thank you in advance for your support!

Best regards
Patrick

GOPRO OMNI firmware?

####Problem:
I need firmware OMNI for gopro4
####Details:

  • GoPro Camera(s):
  • Firmware Version:
  • Steps to reproduce:
  • Happens every time? [Y/N]:

Wifi disconnect every time

Problem:
Everything works well on my GoPro HERO3 I can start/stop the GoPro and recording etc... But the wifi connection disconnect automaticly after a few seconds I am connected, and I just have the time to send 4/5 commands.
Moreover, when I connect my PC (archlinux) to the gopro's wifi I have to perform a dhclient wlo1 if I want an IP.

Do you now how can I fix or if someone else had the same problem ?

Thanks;

Details:

  • GoPro Camera(s): HERO3
  • Firmware Version:
  • Steps to reproduce: Connect with a linux to wifi; perform a dhclient then wait a few seconds (~30sec)
  • Happens every time? [Y/N]: Y

Edit by @KonradIT: fixed formatting

HERO 4

Any ideas on how to stream on ios app(HERO 4).I have Tried several ways but failed to stream?
Thank you..

Hero5

I noticed there's no API details for Hero5? Is there one under development or not started yet?

Hero 4 Session LiveStream in v02.00

Problem:

Livestream GET request has no effect.

Side-note: I would like to help investigate this. What's the best way to set up the packet sniffing on Android to do that? Thanks!

Details:

I sent the GET request:
http://10.5.5.9/gp/gpControl/execute?p1=gpStream&a1=proto_v2&c1=restart

I get the response:
{status: "0"}

Live stream mode does not start. I can confirm this by no change on the Hero 4 Session Display, as well as no UDP packet stream for video.

  • GoPro Camera(s):
    Hero 4 Session
  • Firmware Version:
    v02.00
  • Steps to reproduce:
    I sent the GET request:
    http://10.5.5.9/gp/gpControl/execute?p1=gpStream&a1=proto_v2&c1=restart
  • Happens every time? [Y/N]:
    Y

Hero4 Silver Cannot stream with ffplay

My gopro responsed me
{"status":"0"}
I used the url: http://10.5.5.9/gp/gpExec?p1=gpStreamA9&c1=restart

However, when I tried to use ffplay -an udp://:8554 to stream from gopro
the result is as below:
Could not find codec parameters for stream 0 (Audio: aac (LC), 5.0, fltp, 206 kb/s): unspecified sample rate Consider increasing the value for the 'analyzeduration' and 'probesize' options udp://:8554: could not find codec parameters

Can someone help me with this problem?
Thank you!

Question: Internet Access

Question

Has anyone integrated this into an application that also needs access to the internet? I am trying to figure out how to remote control the GoPro, allow the user to take a photo or video, and then upload the files to AWS s3 to be displayed on a custom gallery landing page.

Any ideas would be awesome, thanks

  • GoPro Camera(s): Hero 5 Black

54 in status looks like memory card free space

Problem:

No clue how to request update to info

Details:

  • GoPro Camera(s): GoPro Hero 4 Black
  • Firmware Version: 5.00
  • Steps to reproduce: Pull status while recording, wait a bit and pull status again and the number have decreased. Also it matches how much space there is left
  • Happens every time? [Y/N]: Y

Default FPS setting if a new Video Resolution setting does not support current FPS setting

####Problem:

Is there a defined value (for each Resolution) the Hero4 Black changes to if the current FPS is invalid for a new resolution setting?

####Details:

  • GoPro Camera(s): Hero4 Black
  • Firmware Version: v04.00
  • Steps to reproduce:
  1. Set the Camera to 1080p at 90FPS.
  2. Change resolution to 960p - FPS becomes 60 not 120 ... but 120 is valid later.
  • Happens every time? [Y/N]: Y

I'd assumed the FPS setting would go to max valid value - some other resolutions seemed to ?

Announcement: Pausing development due to exams

Hello contributors,

Next week I start my IGCSE exams I will not be able to do much coding/internet activities, etc... So, until June I might not be very active here.

Things in my TODO list:

  • Make a resolution/framerate table relevant
  • Get the Trimming video URLs
  • Get the 720p streaming method (URL, UDP call, who knows?) iOS device needed
  • Get HERO4 Silver resolution/framerate values from /gp/gpControl DONE: pull 33
  • Karma drone research (wifi/Radio waves??? Perhaps making a iOS/Android library or hooking into the drone official app...)

If you have time consider doing these and answer GH issues.

Best,

Konrad

Streaming Delay

I recently tried streaming from a GoPro to my laptop and am disappointed with the video stream delay. Is there anyway to solve this?

HERO5 Turn on does not work

Problem:

The Wake On Lan command does not work with GoPro HERO5 Black on latest FW version 1.57

Fix needed ASAP

Details:

  • GoPro Camera(s): GoPro HERO5 Black
  • Firmware Version: 1.57
  • Steps to reproduce: Run wake on lan 10.5.5.9 port 9
  • Happens every time? [Y/N]: Y

HERO5 Firmware Update 2.00

The new update introduces new protune controls for photo and multishot

Here is the changelog:

Highlights:

  • Added new languages for camera and voice control
  • Applied existing settings to more capture modes
  • Added GoPro Plus features

Usability Improvements

  • Adds Korean, Russian, and Portuguese (Brazil) as options for camera and voice control languages*
  • Adds setting for date and time format, based on language selection
  • Includes touch display optimizations
  • Adds ability to extract a photo from a multi-shot series

Performance Improvements

  • Adds Shutter setting for Photo capture mode in Protune™ (options are AUTO, 1/125, 1/250, 1/500, 1/1000, 1/2000 second)
  • Adds Wide Dynamic Range (WDR) for Time Lapse Photo (intervals of at least 5 seconds)
  • Adds RAW Format for Time Lapse Photo and Night Lapse Photo (intervals of at least 5 seconds)
  • Adds RAW Format for Night photo

GoPro Plus Improvements

  • Allows manual upload of selected content

The command for 4K 24FPS for HERO5 Session should be the same as HERO5 Black.

Needed:

  • shutter setting for Photo capture
  • WDR for TimeLapse
  • RAW format for TimeLapse/NightLapse
  • RAW format for NightPhoto
  • Adds ability to extract a photo from a multi-shot series (?)

Control over bluetooth

Have you explored the option of controlling GoPro cameras over bluetooth? Is it actually possible? The information I'm finding suggests this is only possible on iOS to pair the devices, after which the camera is controlled via WiFi. I'm not willing to believe they've wasted the bluetooth radio for that. Thoughts?

Open source lib to control multiple cameras (like Wifi RC)?

First of all: Great work you have done here!

Problem:

We need to start two HERO4 cameras at the same time via Wifi (time lapse mode to trigger pictures with 1Hz until we send a stop command). The "app mode" creates a hotspot for each camera, switching between these hotspots takes multiple seconds, so I was wondering if there is an open source library which allows us to control multiple cams at the same time using the "Wifi RC" mode like described here: https://gopro.com/support/articles/controlling-individual-cameras-with-the-wi-fi-remote-when-multiple-cameras-are-paired

Details:

  • GoPro Camera(s): two HERO4

Update

FPS is resolution dependant

The resolution commands don't always respond correctly and are not always mapped correctly either.

For example, in 4K Superview, the only framerate usable is 24. The GoPro will respond 200 on all commands to change the framerate, but it will not change.

See http://shop.gopro.com/APAC/cameras/hero4-black/CHDHX-401-EU.html for resolution * framerate equivalencies. The framerate called depends on the "stack" of accepted framerates for that resolution.

For example, setting the video resolution to 1440 will have /setting/2/0 respond as 80 fps, but setting the video resolution to 960p will have /setting/2/0 respond as 120 fps.

SD Card Inserted property has values different to the documentation

####SD Card Inserted Status object property (33) has values different to the documentation:

####Startup with an SD Card Inserted - value = 0, remove card and value becomes 2:

  • GoPro Camera(s): Hero4 Black
  • Firmware Version: v03.00
  • Steps to reproduce: Request Status/Settings object via wifi
  • Happens every time? [Y/N]: Yes

Number of photos or video duration

Not quite an issue, but would anyone happen to know if its possible to GET the number of photos taken (shown on the display) or video duration?

GoPro 4 Volume

Do you have the URL for setting the beep volume on the GoPro 4 camera?

Take a single picture

####Problem:
I'd like to be able to take a single picture from a GoPro Hero 5. Ideally, I'd like to use a single URL to take a new picture and get that picture. This is similar to how Axis network cameras work.

Is this possible? I understand how to configure the picture settings and I've been able to browse a listing of pictures but not trigger a new picture and capture it.

####Details:

  • GoPro Camera(s): Hero 5
  • Firmware Version: ?
  • Steps to reproduce: n/a
  • Happens every time? [Y/N]: Y

Hero4 power on command

I want to start up my gopro4 when wifi connected on PC.
what I can see is power off command on the list.
are there troubles on hacking this command?

Hero Session - ffplay error -bind failed: Address already in use

####Problem:

Manage to stream video using GoProStream.py
However when I try this command ffplay -fflags nobuffer -f:v mpegts -probesize 8192 udp://:8554 it shows this error

`ffplay -fflags nobuffer -f:v mpegts -probesize 8192 udp://:8554

ffplay version 3.2.2 Copyright (c) 2003-2016 the FFmpeg developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.2.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
[udp @ 0x7f8a2f9ae760] bind failed: Address already in use
udp://:8554: Input/output error`

####Details:

  • GoPro Camera(s):
  • Firmware Version:
  • Steps to reproduce:
  • Happens every time? [Y/N]:

Add Firmware Archive Folder

####Problem:
Downgrades need to be made available
####Details:
Need to create a folder with all of the GoPro HERO 4 (Black | Silver | Session) and HERO 5 (Black | Session) firmware

  • GoPro Camera(s):
    HERO4 BL|SL|SE and HERO5 BL|SE
  • Firmware Version:
    All possible versions that you can get your hands on
  • Steps to reproduce:
    N/A
  • Happens every time? [Y/N]:
    N/A

HERO4 Looks like MDNS Protocol

####Problem:

From intercepting the WIFI calls with wireshark, I'm seeing only MDNS protocols, not http protocols on the IPV4 stack. None of the commands you have listed work, am I missing some key piece here?

####Details:

Can't figure out HTTP protocols when sniffing the WIFI traffic

  • GoPro Camera(s):
    Hero 4 Black
  • Firmware Version:
    v5.0
  • Steps to reproduce:
    Sniffing traffic from a Hero 4 black to GoPro App
  • Happens every time? [Y/N]:
    Y

Secondary modes not working

Somehow the secondary modes for the GoPro Hero 4 are not working... Also the Protune Settings are only working for the video mode and not for Photo or MultiShot :/ tried to find the settings but no succes

stream

hi.
this URL doesn't work
http://10.5.5.9/gp/gpExec?p1=gpStreamA9&c1=restart
return this
{ "version": "3.00", "path_info": "/execute", "query_string": "p1=gpStream&c1=restart", "error_code": -3, "error_msg": "unknown request", "function": "control_router", "line": 461 }

but this does work
http://10.5.5.9/gp/gpExec?p1=gpStreamA9&c1=restart

..udp://:8554 doesn't work.......

do u know new URL?

think u

Undocumented settings values on status page

Problem:

There seem to be some undocumented settings values on the status page of a gopro (http://10.5.5.9/gp/gpControl/status)

In the settings object the following key=value pairs could not be identified (neither with the help of this documentation nor with the information gathered from the gpControl page of a gopro http://10.5.5.9/gp/gpControl)

Undocumented Key,Value pair: 40 = 0
Undocumented Key,Value pair: 41 = 13
Undocumented Key,Value pair: 42 = 8
Undocumented Key,Value pair: 43 = 0
Undocumented Key,Value pair: 44 = 8
Undocumented Key,Value pair: 45 = 8
Undocumented Key,Value pair: 46 = 0
Undocumented Key,Value pair: 47 = 0
Undocumented Key,Value pair: 48 = 0
Undocumented Key,Value pair: 65 = 0
Undocumented Key,Value pair: 66 = 0
Undocumented Key,Value pair: 67 = 0
Undocumented Key,Value pair: 71 = 0

Any ideas what these could be ?

Details:

TRIM

A few monts ago Gopro introduced a new TRIM functionality in his app.
By this new function you can get a selected part of a video via wifi without downloading the entire file.
Any information is missing about it, but I'm pretty sure it's a feature involving an indocumented wifi command.
Do you know anything about it?
May I help you in discovering this?
Thanks a lot for your work
Raffaello

set metadata

I am wondering if there is a way to pass metadata to the GoPro so it can be stored with the images. I see that the app is able to send and embed gps into the metadata. Is there a way to do this through the wifi api (for gps and any other arbitrary meta data)?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.