• This repository has been archived on 02/Sep/2021
  • Stars
    star
    185
  • Rank 208,271 (Top 5 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An image hosting service on top of the LBRY protocol.

Spee.ch

spee.ch provides a user-friendly, custom-designed, image and video hosting site backed by a decentralized network and blockchain (LBRY). Via just a small set of config files, you can spin your an entire spee.ch site back up including assets.

Please note: the spee.ch code base and setup instructions are no longer actively maintained now that we have lbry.tv. Proceed at your own caution. Setup will require dev ops skills.

App GIF

For a completely open, unrestricted example of a spee.ch site, check out https://www.spee.ch.

For a closed, custom-hosted and branded example, check out https://lbry.theantimedia.com/.

Installation

Ubuntu Step-by-Step

Step-by-step Ubuntu Install Guide

Full Instructions

Get some information ready:

Install and Set Up Dependencies

  • Firewall open ports
    • 22
    • 80
    • 443
    • 3333
    • 4444
  • NodeJS
  • MySQL version 5.7 or higher
    • mysqlusername or root
    • mysqlpassword
    • Requires mysql_native_password plugin
    mysql> `ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';`
    
  • lbrynet daemon
    • run this as a service exposing ports 3333 and 4444
    • note: once the daemon is running, issue commands in another terminal session (tmux) to retrieve an address for your wallet to recieve 5+ LBC credits (or join us in the #speech discord channel and we will send you a few)
      • ./lbrynet commands gets a list of commands
      • ./lbrynet account_balance gets your balance (initially 0.0)
      • ./lbrynet address_list gets addresses you can use to recieve LBC
  • FFmpeg
  • ImageMagick
  • Spee.ch (below)
  • pm2 (optional) process manager such as pm2 to run speech server.js
  • http proxy server e.g. caddy, nginx, or traefik, to forward 80/443 to speech port 3000
    • note: even running on http://localhost, you must redirect http or https to port 3000

Clone spee.ch

  • release version for stable production
$ git clone -b release https://github.com/lbryio/spee.ch.git
  • master version for development
$ git clone https://github.com/lbryio/spee.ch.git
  • your own fork for customization

Change directory into your project

$ cd spee.ch

Install node dependencies

$ npm install

Create the config files using the built-in CLI

Make sure lbrynet is running in the background before proceeding.

note: If you are opt to run a local chainquery, such as from lbry-docker/chainquery you will need to specify connection details at this time in: ~/spee.ch/docs/setup/conf/speech/chainqueryConfig.json

$ npm run configure

Build & start the app

$ npm run build

$ npm run start

View in browser

Customize your app

Check out the customization guide to change your app's appearance and components

(optional) add custom components and update the styles

  • Create custom components by creating React components in site/custom/src/
  • Update or override the CSS by changing the files in site/custom/scss

(optional) install your own chainquery

Instructions are coming at [lbry-docker] to install your own chainquery instance using docker-compose. This will require 50GB of preferably SSD space and at least 10 minutes to download, possibly much longer.

Settings

There are a number of settings available for customizing the behavior of your installation.
Here is some documentation on them.

API

/api/claim/publish

method: POST

example:

curl -F 'name=MyPictureName' -F 'file=@/path/to/myPicture.jpeg' https://spee.ch/api/claim/publish

Parameters:

  • name (required, must be unique across the instance)
  • file (required) (must be type .mp4, .jpeg, .jpg, .gif, or .png)
  • nsfw (optional)
  • license (optional)
  • title (optional)
  • description (optional)
  • thumbnail URL to thumbnail image, for .mp4 uploads only (optional)
  • channelName channel to publish too (optional)
  • channelPassword password for channel to publish too (optional, but required if channelName is provided)

response:

{
    "success": <bool>,
    "message": <string>,
    "data": {
        "name": <string>,
        "claimId": <string>,
        "url": <string>,
        "showUrl": <string>,
        "serveUrl": <string>,
        "lbryTx": {
            "claim_address": <string>,
            "claim_id": <string>,
            "fee": <number>,
            "nout": <number>,
            "tx": <string>,
            "value": <number>
        }
    }
}

/api/claim/availability/:name

method: GET

example:

curl https://spee.ch/api/claim/availability/doitlive

response:

{
    "success": <bool>,  // `true` if spee.ch successfully checked the claim availability
    "data": <bool>, // `true` if claim is available, false if it is not available
    "message": <string> // human readable message of whether claim was available or not
}

Contribute

Stack

The spee.ch stack is MySQL, Express.js, Node.js, and React.js. Spee.ch also runs lbrynet on its server, and it uses the lbrynet API to make requests -- such as publish, create_channel, and get -- on the LBRY network.

Spee.ch also runs a sync tool, which decodes blocks from the LBRY blockchain as they are mined, and stores the information in MySQL. It stores all claims in the Claims table, and all channel claims in the Certificates table.

Architecture

  • cli/ contains the code for the CLI tool. Running the tool will create .json config files and place them in the site/config/ folder

    • configure.js is the entry point for the CLI tool
    • cli/defaults/ holds default config files
    • cli/questions/ holds the questions that the CLI tool asks to build the config files
  • client/ contains all of the client code

    • The client side of spee.ch uses React and Redux
    • client/src/index.js is the entry point for the client side js. It checks for preloaded state, creates the store, and places the <App /> component in the document.
    • client/src/app.js holds the <App /> component, which contains the routes for react-router-dom
    • client/src/ contains all of the JSX code for the app. When the app is built, the content of this folder is transpiled into the client/build/ folder.
      • The Redux code is broken up into actions/ reducers/ and selectors/
      • The React components are broken up into containers/ (components that pull props directly from the Redux store), components/ ('dumb' components), and pages/
      • spee.ch also uses sagas which are in the sagas/ folders and channels/
    • client/scss/ contains the CSS for the project *
  • site/custom is a folder which can be used to override the default components in client/

    • The folder structure mimics that of the client/ folder
    • to customize spee.ch, place your own components and scss in the site/custom/src/ and site/custom/scss folders.
  • server/ contains all of the server code

    • index.js is the entry point for the server. It creates the express app, requires the routes, syncs the database, and starts the server listening on the PORT designated in the config files.
    • server/routes/ contains all of the routes for the express app
    • server/controllers/ contains all of the controllers for all of the routes
    • server/models/ contains all of the models which the app uses to interact with the MySQL database.
      • Spee.ch uses the sequelize ORM for communicating with the database.
  • tests/ holds the end-to-end tests for this project

    • Spee.ch uses mocha with the chai assertion library
    • unit tests are located inside the project in-line with the files being tested and are designated with a xxxx.test.js file name

Tests

  • This package uses mocha with chai for testing.
  • Before running tests, create a testingConfig.js file in devConfig/ by copying testingConfig.example.js
  • To run tests:
    • To run all tests, including those that require LBC (like publishing), simply run npm test
    • To run only tests that do not require LBC, run npm run test:no-lbc

URL formats

Spee.ch has a few types of URL formats that return different assets from the LBRY network. Below is a list of all possible URLs for the content on spee.ch. You can learn more about LBRY URLs here.

Dependencies

Spee.ch depends on two other lbry technologies:

  • chainquery - a normalized database of the blockchain data. We've provided credentials to use a public chainquery service. You can also install it on your own server to avoid being affected by the commons.
  • lbrynet - a daemon that handles your wallet and transactions.

Bugs

If you find a bug or experience a problem, please report your issue here on GitHub and find us in the lbry discord!

License

This project is MIT licensed. For the full license, see LICENSE.

Security

We take security seriously. Please contact [email protected] regarding any security issues. Our GPG key is here if you need it.

Contact

The primary contact for this project is @jessopb.

More Repositories

1

lbry-sdk

The LBRY SDK for building decentralized, censorship resistant, monetized, digital content apps.
Python
7,193
star
2

lbry-desktop

A browser and wallet for LBRY, the decentralized, user-controlled content marketplace.
JavaScript
3,563
star
3

lbrycrd

The blockchain that provides the digital content namespace for the LBRY protocol
C++
2,576
star
4

lbry-android

The LBRY Android app
Java
2,433
star
5

torba

Torba makes it easy to create fast and correct bitcoin based crypto wallets.
Python
2,196
star
6

lbry.com

lbry.com, the website for the LBRY protocol
PHP
263
star
7

lbry-fdroid

The LBRY Android app (on F-Droid)
Java
64
star
8

lbry.tech

Technical documentation website for the LBRY protocol
JavaScript
50
star
9

ytsync

An overly complex tool to mirror youtube content to LBRY
Go
42
star
10

aioupnp

UPnP for asyncio
Python
29
star
11

lbry.go

Go
29
star
12

dmca

Repository with text of DMCA takedown notices as received. LBRY Inc. does not endorse or adopt any assertion contained in the following notices. Users identified in the notices are presumed innocent until proven guilty. Additional information about our DMCA policy can be found at https://lbry.io/faq/dmca and content policy at https://lbry.io/faq/content
DIGITAL Command Language
26
star
13

lbrycrd-gpu

Please use https://github.com/lbryio/sgminer-gm or https://github.com/lbryio/ccminer or https://github.com/lbryio/cpuminer instead.
22
star
14

lbrypress

LBRY WordPress plugin
PHP
21
star
15

herald.go

Go
20
star
16

block-explorer

The new LBRY block explorer
JavaScript
18
star
17

hub

Python
16
star
18

lbry-redux

Common shared app components for desktop and mobile
JavaScript
15
star
19

reflector.go

Go
14
star
20

lighthouse.js

Lighthouse - A lightning fast search for the LBRY blockchain
JavaScript
14
star
21

lbry-ios

LBRY on iOS
Objective-C
13
star
22

lbry-docker

This repository will be for Dockerfiles for the various LBRY packages.
CSS
11
star
23

lbry-react-native

The React Native frontend for the LBRY mobile app
JavaScript
11
star
24

php-api

LBRY API wrapper
PHP
10
star
25

piratebay.com

A pretty implementation for the homepage at piratebay
CSS
10
star
26

lbry-format

The LBRY format is an application format designed to promote interoperability and transmission of complex digital media.
JavaScript
10
star
27

comment-server

comment server implemented in python to host comments on lbry
Python
10
star
28

lbry-gentoo-overlay

[needs some love] Gentoo Portage overlay for LBRY
Shell
9
star
29

types

Cross-language definitions for standard LBRY types
JavaScript
8
star
30

spec

LBRY protocol specification
CSS
7
star
31

electron-starter

A bare bones electron app with the lbry-sdk and lbry-redux already added
JavaScript
7
star
32

twitter-tipbot

A tipbot for twitter that speaks LBRY!
JavaScript
7
star
33

lbryinc

JavaScript
6
star
34

web-daemon

A web-based API for using LBRY (used by lbry.tech)
JavaScript
5
star
35

docker-lbrynet

Shell
5
star
36

www.spee.ch

A web app that uses the spee.ch codebase
JavaScript
5
star
37

lbrycrd-dependencies

Copies of the libraries that lbrycrd depends on
HTML
4
star
38

lbryschema.go

Go
4
star
39

claimtrie

Go
4
star
40

lbry-social-tipbot

LBRY reddit tipbot
JavaScript
4
star
41

lbry-first

One stop shop for uploading digital content to alternatives to empower LBRY First!
Go
4
star
42

components

Styling for shared components across LBRY properties...IN PROGRESS
CSS
4
star
43

research

Jupyter Notebook
4
star
44

lbry-unity

Unity Package SDK for LBRY
JavaScript
4
star
45

open.lbry.com

A simple page that allows hotlinking content on the LBRY blockchain
HTML
3
star
46

speechbot

A Slack bot for https://spee.ch
JavaScript
3
star
47

SpeechVR

VR model viewer prototype, works with AltspaceVR
JavaScript
2
star
48

lbry-android-sdk

The LBRY SDK packaged as an Android AAR library
C
2
star
49

cantina

Go
2
star
50

lbry.id

Own your identity online
HTML
2
star
51

errors.go

Better error handling
Go
2
star
52

lbry-desktop-alpha-releases

Repo for testing updates
2
star
53

query.go

Utils for working with queries in Go
Go
2
star
54

dashboard

Python
1
star
55

proposals

Discussion of large projects
1
star
56

SpeechShare

Objective-C
1
star
57

timing-scripts

A work in progress collection of timing scripts
JavaScript
1
star
58

sentinel

Watcher of the Blockchain
Go
1
star
59

web-wallet

Non-custodial transaction signing for web apps
TypeScript
1
star
60

wallet-sync-server

Go
1
star
61

lightseeker.go

This project benchmarks search results from lighthouse
Go
1
star