The rust implementation of the Defluencer command line interface.

Overview

Defluencer CLI

IPFS daemon must be running before using the CLI.

  • Command: ipfs daemon --enable-pubsub-experiment --enable-namesys-pubsub

For more info on the command available to you.

  • Command: defluencer --help

Availability

The beacon and all your content must be reachable at all times. To achieve this you should leave your IPFS daemon running 24/7 and others can also help you by pinning some or all your content, the more the better. Because of the decentralized nature of IPFS, it does not matter who has your data or how much of it, it cannot be modified and everyone will help redistribute it.

Ethereum Name Service

If you already have a domain, the beacon CID can be used with ENS to associate your name to your content. Link the beacon CID to a subdomain called "defluencer".

How To

Video Live Streaming

  • Start IPFS with PubSub enabled. Command: ipfs daemon --enable-pubsub-experiment
  • Start in live streaming mode. Command: defluencer stream
  • Run ffmpeg_live.sh or custom ffmpeg script.
  • With your broadcast software output set to ffmpeg. Default: rtmp://localhost:2525
  • Start Streaming!
  • When done streaming stop your broadcast software.
  • Press Ctrl-c in defluencer window to save.
  • Use the CLI to create metadata. Command: defluencer content --help for more info.

Pre-recorded Video

  • Start IPFS. Command: ipfs daemon
  • Start in file mode. Command: defluencer file
  • Run ffmpeg_file.sh or custom ffmpeg script.
  • Wait until the video is processed.
  • Press Ctrl-c in defluencer window to save.
  • Use the CLI to create metadata. Command: defluencer content --help for more info.

Technical

Requirements

Configuration

config.json will be created automatically when creating beacon.

  • Input socket address is the IP and Port the app will listen for FFMPEG on.

FFMPEG

  • Output must be HLS.
  • Must use fragmented mp4. (fmp4)
  • Media segments length must be 1 second.
  • Each track and folder must be named like so. "TRACK_NAME/SEGMENT_INDEX.m4s". egg 1080p60/24.m4s
  • Audio track must standalone and be named "audio".
  • Must produce a master playlist containing all tracks.

Refer to my scripts for inspiration in creating your own.

Due to a bug in FFMPEG, original videos cannot be in .mkv containers, missing metadata will cause missing tracks in HLS master playlist. In the future, you will be allowed to manually specify codecs and tracks names, that way any video standard could be used.

Keep in mind that web browser support a limited set of codecs.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • Schema Extensions

    Schema Extensions

    I would like to add optional fields to schemas.

    • [x] Video schema should work for both saved live streams and files. (not sure what to do with duration field)
    • [x] Identity schema could have optional banner field for saving a channel background image.
    • [x] Optional fields for ETH, BTC and IPNS addresses.
    • [x] and a bio.
    • [x] Blog posts should have a word count field.

    https://serde.rs/attr-flatten.html#factor-out-frequently-grouped-keys

    • [ ] Flatten out user timestamp and identity.

    Could be a way to build some kind of module system.

    opened by SionoiS 0
  • Crypto Signatures simplification

    Crypto Signatures simplification

    IPNS record can be created manually but go-ipfs can't verify Bitcoin or Ethereum signed messages.

    See here -> https://github.com/libp2p/specs/blob/master/peer-ids/peer-ids.md#key-types

    Would be possible to sign IPNS record if a Ledger app was built for that purpose. The same app could be used to sign DAG-JOSE blocks.

    EdDSA could be used instead of EcDSA OR make it configurable.

    edit:

    The current solution is to create blocks which contain the hash algorithm used for the signature. That way BTC and ETH wallet can be used to sign blocks.

    enhancement 
    opened by SionoiS 0
  • Graceful shutdown of file & live daemons

    Graceful shutdown of file & live daemons

    Could try https://docs.rs/futures/0.3.17/futures/future/struct.AbortHandle.html or something else.

    Shutdown need to be reliable, predictable and orderly.

    enhancement good first issue 
    opened by SionoiS 0
  • Invalid IPNS Record

    Invalid IPNS Record

    Can't seams to be able to decode IPNS records generated by Kubo. libipld & serde_ipld_dag-cbor, both crate errors when decoding the Dag Cbor document in the record. The problem is when trying to get a rust type. Decoding to Ipld type works fine.

    When trying to add a record to Kubo, the body response is empty and routing fails. Probably a badly encoded dag cbor document, who knows!

    opened by SionoiS 0
  • Remove Json parsing

    Remove Json parsing

    DAG-CBOR is mostly used to store data on IPFS. Deserializing twice is wasteful and should be avoided.

    Update the crate to directly serialise/deserialize to DAG-CBOR

    AFAIK DAG-CBOR is not the same as standard CBOR which may be a problem.

    enhancement 
    opened by SionoiS 0
Owner
Defluencer
Decentralized social media protocol
Defluencer
Rust command line program for Bitcoin brainwallet

brainwallet Rust command line program for Bitcoin brainwallet as implemented at https://www.bitaddress.org. To run it, first install Rust, e.g. from h

Frank Buss 3 Dec 30, 2021
A command line tool for managing financial investment portfolios written in Rust.

A command line tool for managing financial investment portfolios written in Rust. This project is the modern successor of finance. Installation You ca

Markus Zoppelt 15 Dec 21, 2022
A template for command-line Rust programs

This is a template for command-line Rust programs. Clone and run the rename script with both a lowercase and UpperCase name. In the dev profile, depen

ludios 2 Oct 3, 2022
A simple and secure rust command-line tool to protect your text by encrypting and decrypting it using the robust AES-256 algorithm.

Secret Keeper A simple and secure command-line tool to protect your text by encrypting and decrypting it using the robust AES-256 algorithm. Built wit

Kunal Bagaria 9 May 11, 2023
Trustworthy encrypted command line authenticator app compatible with multiple backups.

cotp - command line totp authenticator I believe that security is of paramount importance, especially in this digital world. I created cotp because I

Reply 71 Dec 30, 2022
A command-line tool to export FoundationDB stored protocol buffers to ClickhouseDB

fdb-ch-proto-export A command-line tool to export FoundationDB stored Protocol buffers to ClickhouseDB. Installation N/A Usage fdb-ch [command] fdb-c

Enlay 7 May 26, 2022
Easily and securely share files from the command line. A fully featured Firefox Send client.

Notice: the default Send host is provided by @timvisee (info). Please consider to donate and help keep it running. ffsend Easily and securely share fi

Tim Visée 6.3k Dec 25, 2022
The fallen leaves tell a story... of a colorful file tree visualizer for the command-line.

Erdtree A bLazInGlY fAsT, simplified version of the ancient tree command which displays a colorful depth indented listing of files with their memory s

Benji Nguyen 174 Nov 16, 2022
Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Fiddi is a command line tool that does the boring and complex process of checking and processing/watching transactions on EVM compatible Blockchain.

Ahmad Abdullahi Adamu 7 Jan 9, 2023
RGB smart contracts: client-facing library & command-line for desktop and mobile

RGB smart contracts RGB is confidential & scalable client-validated smart contracts for Bitcoin & Lightning. It embraces the concepts of private & mut

RGB: scalable & private smart contracts for bitcoin & lightning 4 Mar 15, 2023
Lockbox is a command-line tool for generating and managing passwords

Lockbox is a command-line tool for generating and managing passwords. It uses strong encryption algorithms to securely store your passwords, so you can be sure that your data is safe.

Sonu Bardai 15 Oct 9, 2023
A simple command-line application to securely store secrets using encryption

rust-secret-vault A simple yet robust command-line tool designed to safely encrypt and store your sensitive information. Harnessing the power of AES-2

Luis Soares 4 Nov 22, 2023
Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample).

ldk-node-sample Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample ). Installation git clone https://github.com/op

optout 3 Nov 21, 2023
Package used by the cosmos-rust-interface. Makes direct use of cosmos-rust.

Package used by the cosmos-rust-interface. Makes direct use of cosmos-rust (cosmos‑sdk‑proto, osmosis-proto, cosmrs).

Philipp 4 Dec 26, 2022
A type-safe Rust interface to the Nix CLI

runix A typesafe interface to the nix CLI. by flox Installation Install with cargo add (Rust >= 1.64) cargo add runix Alternatively, manually add runi

flox 43 Mar 6, 2023
Cross-platform user interface framework for Rust.

Viewbuilder Examples Cross-platform user interface framework for Rust. This crate provides an HTML-like render API for the backend of a UI. It's built

null 18 Sep 26, 2023
The Ink! smart contract SDK for XVM interface

Ink! XVM SDK The Ink! smart contract SDK for XVM interface. This SDK contains contract wrappers and all middleware code to make XVM development easy.

Astar Network 13 Jan 3, 2023
A blazingly fast and memory safe password cracker with user interface.

HashVat A blazingly fast and memory safe password cracker with user interface. HashVat runs with user interface and is capable of cracking the 1.000.0

JBLDSKY 2 Dec 6, 2022
Web user interface for controlling a CATS Radio node

CATS Radio Node This project contains a web user interface for controlling a CATS Radio device, consisting of a Raspberry Pi with a RF4463 hat. Goals

Matthias P. Braendli 4 Feb 25, 2024