Coder Social home page Coder Social logo

outleap's Introduction

outleap

codecov

A Python library using asyncio to control a Second Life viewer over the LEAP protocol.

See https://bitbucket.org/lindenlab/leap/src/main/ for more details on LEAP.

Installing

pip install outleap, or pip install -e . to install from source.

If you want to use the LEAP REPL or UI inspector, do pip install outleap[tools], or pip install -e .[tools].

Usage

Look in the "examples" directory.

You can run a LEAP script with your_viewer --leap some_script.py if you have the executable bit set.

import asyncio
import sys

from outleap import LEAPClient, LLViewerControlAPI


async def amain():
    # Create a client speaking LEAP over stdin/stdout and connect it
    async with await LEAPClient.create_stdio_client() as client:
        # Use our typed wrapper around the LLViewerControl LEAP API
        viewer_control_api = LLViewerControlAPI(client)
        # Ask for a config value and print it in the viewer logs
        print(await viewer_control_api.get("Global", "StatsPilotFile"), file=sys.stderr)


asyncio.run(amain())

If you just want to play around with the LEAP APIs:

$ outleap-repl
# ... in another terminal ...
$ viewer --leap outleap-agent

will give you an interactive REPL with a LEAP client object, with all the API wrappers already imported:

>>> floater_api = LLFloaterRegAPI(client)
>>> floater_api.show_instance(name="preferences")
>>> window_api = LLWindowAPI(client)
>>> prefs_path = UIPath.for_floater("Preferences")
>>> pprint.pp(await window_api.get_info(prefs_path))
{'available': True,
 'class': '19LLFloaterPreference',
 'enabled': 1,
 'enabled_chain': 1,
 'path': '/main_view/menu_stack/world_panel/Floater View/Preferences',
 'rect': {'bottom': 234, 'left': 593, 'right': 1255, 'top': 762},
 'value': None,
 'visible': 1,
 'visible_chain': 1}

Similarly, there's an interactive UI tree inspector available through outleap-inspector. It can be launched through viewer --leap outleap-inspector.

Screenshot of outleap-inspector

What viewers does LEAP even work in?

Due to the fact that LEAP has only historically been used internally for testing, or for integration with the official viewer's updater, many viewers have disabled LEAP both intentionally or accidentally.

The code in the upstream viewer also appears to refuse to launch LEAP scripts if the updater isn't present, which I don't entirely understand. I can't compile it to check.

Does it work in Firestorm?

No, the code to launch LEAP scripts is commented out. If you do your own build with those lines uncommented it'll work fine.

Does it work in Alchemy?

Probably not, and definitely not on Linux. Alchemy does the same SL updater presence checks as upstream before attempting to launch LEAP scripts, which I imagine wouldn't succeed. Haven't tried.

Does it work in LL's official viewer?

Yeah, probably.

Does it work in <other viewer>?

No, probably not.

Credits

The project scaffolding is based on code from https://github.com/MatthieuDartiailh/bytecode

outleap's People

Contributors

saladdais avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

Forkers

beyonddiana

outleap's Issues

Windows support for LEAP-as-a-script mode

I'm 90% sure Windows is broken when aviewer executes outleap scripts itself because of Windows' nasty stdin/stdout situation in asyncio. Work around all that somehow.

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.