Code Monkey home page Code Monkey logo

yarc's Introduction

yarc

Yet Another Remote Control

Control your desktop / laptop via mobile phone.

First things first: Demo

Demo video

How to:

Running control server and connecting to it is very straightforward. You would need to do the following:

$ [sudo] pip install yarc-server

$ yarc

Starting control server...

Remote server running...
Scan the below code to start using remote control.

*SNIP*

Or alternatively, write the following URL on your mobile browser:
    http://192.168.1.4:xxx?wsport=xxx

Basic features:

Single remote will have the following features. One can switch between remotes easily via UI.

  • Streaming mode

    • Play / pause actions
    • Change volume
    • Change brightness
    • Seek forward / backwards
  • Change window (Alt + Tab) - Also, let user be able to select it

  • QWERTY keyboard to allow writing text

  • Touchpad to control mouse

Advanced features:

The remote will automatically be switched depending on the active window. For example, in case the active window is Netflix and is playing some content, the remote should automatically switch to movie mode.

  • Screencast from mobile to laptop, so that one can enjoy in a bigger screen

  • Allow adding shortcuts, for example, "Open Netflix" can be a shortcut, to open Netflix on a single tap. Now, the way people open netflix is different. Some may have a Netflix app installed on their device, while others may use browser. Thus, user should be able to create with predefined event blocks, like:

    press(winleft) -> type("Netflix") -> press(enter)

    OR

    press(winleft) -> type("Chrome") -> type("Netflix") -> press(enter)

  • Gaming mode

  • Information about all opened windows and ability to jump to a specific window / switch windows via mobile touch actions (like mobile's default way to show running apps)

  • Customize theme of the remotes. Plug and play themes from website.

  • Allow user's to create their own themes and use it.

  • Netflix / Prime customization - example: skip intro, etc.

  • The remote should work even when the devices are not in same network. For that, we need the yarc server to generate a QR code and the client app should connect to the device over the internet.

  • Listen to the audio from phone itself (Use-case: wired earphones can be plugged in to mobile but the video would continue to play on the screen)

Blogpost annoucement

Medium: https://medium.com/@return007/yarc-for-the-laziness-in-you-f352717cc00

yarc's People

Contributors

return007 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

yarc's Issues

Implement shift key functionality

There are two possible ways I can think of the shift key's behavior:

  1. Either, pressing it once means that the key is down, then it toggles all the alphabets (caps to small case and vice-versa)

  2. Or, user needs to explicitly keep pressing the shift key. We can keep this behavior for future enhancement since we would need to implement keyDown and keyUp for all the keys then ๐Ÿ˜ฟ

Anyway, let's go via the simple way and later see if someone else can take up porting work to keyDown/keyUp.

Implement Caps lock functionality

Features

  • The current state of caps lock should be determined and then accordingly the keyboard keys should be configured (capital letters or not).
  • Small led right in the caps lock button is a good UI feature.
  • And of course, pressing caps lock should toggle the actual caps lock state ๐Ÿ˜‰

Implement mouse control feature

  • Design remote (mouse pad and keys).
  • On touch drag action should trigger mouse movement.
  • Write control server side code to move mouse corresponding to the movement on the UI.
  • [Edit] Add scroll feature as well. Maybe a vertical line and dragging on that vertical line will scroll it based on the direction of movement.
    Note: Look out for performance issue. Maybe websocket will be better here instead of making multiple HTTP requests.

Implement multimedia remote

  • Design multimedia remote
  • Play/pause button
  • Volume controls (increase / decrease)
  • Forward / rewind buttons
  • Mute
  • Fullscreen
  • Brightness controls (increase / decrease)
  • Javascrpt side code to interact with the server on keypress action

  • Server side code to handle keypress.

Ability to create shortcuts

Common actions like opening a specific window, performing something specific, etc. can be automatized. We can do this by providing user a page for his custom actions / shortcuts. The shortcuts can be made via small building blocks like keypress, keydown, keyup, type, etc. A good small use-case for this is:

Different people have different ways in which they watch Netflix. Some may have an app installed. While other may be opening it in their browser. So, a shortcut like "Open netflix" can be customized as follows:

Option 1. keypress(winleft) > type("netflix") > keypress(enter)

Option 2. keypress(winleft) > type("firefox") > keypress(enter) > type("netflix") > keypress(enter)

Implement keyboard

  • Design keyboard
  • The keyboard design should be such that the keys are properly spaced and not too small for the mobile interface.
  • Should be adjustable according to landscape and portrait mode.
  • Common keys should be there.
  • Feedback to the user that the key click happened (maybe a key tap sound)
  • Javascrpt side code to interact with the server on keypress action

  • Server side code to handle keypress.

Switch window option

User should be able to switch window quickly. Probably a dedicated key which maps to

KeyDown(Alt) > KeyPress(Tab) > KeyUp(Alt)

But this will only switch between the last two active windows. We should be able to move across all the open apps / windows. I guess, the best we could do is to make something like below:

    [   <<   ]         [  Switch window  ]        [   >>   ]

Switch window tapped once will switch to last opened window (i.e. Alt + Tab)
Switch window tapped twice will keep the switcher opened and user can use << and >> keys to select. Clicking back on Switch window button will select the chosen window

Key mapping options

User should be able to configure what key (or combination) is pressed when they press a button on the UI (remote control). This setting should be provided per remote and should be stored once configured.

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.