Ilya (Marshal)'s Avatar

Ilya (Marshal)

@marshal.dev.bsky.social

Software Engineer 🐍 The AT Protocol SDK for Python: https://atproto.blue/ 🍿 Custom Feed in Python: https://github.com/MarshalX/bluesky-feed-generator 🏎️ Fast IPLD library for Python: https://github.com/MarshalX/python-libipld https://marshal.dev

2,001 Followers  |  140 Following  |  414 Posts  |  Joined: 12.04.2023  |  2.1674

Latest posts by marshal.dev on Bluesky

@atproto.com are you gonna be our trusted verifier? πŸ™‚ #atproto

21.04.2025 17:44 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Release v0.0.60 Β· MarshalX/atproto What's Changed Add message reaction to the example of Direct Messages by @MarshalX in #595 Add UnknownUnionModel type by @MarshalX in #586 Add include_pins argument to get_author_feed method of Cl...

πŸš€ Python atproto SDK v0.0.60 is here!

Key additions:
- Message reactions in DMs
- Improved AtUri core class
- ⁠Content-Type overriding
- Digits in NSID
- Email 2FA support
- Enhanced HTTPX config and various fixes!

Check it out! 🐍✨ #Python #atproto

11.04.2025 19:24 β€” πŸ‘ 16    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0

Only because I don’t want to have a broken example someday because you forgot that this post is in use and it’s forbidden to delete πŸ₯²

03.03.2025 20:08 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Release v0.0.59 Β· MarshalX/atproto What's Changed Add support for the repository #sync message in the subscribe repos firehose by @MarshalX in #556 Add chat.* and tools.* models to the main menu of documentation by @MarshalX in #55...

Add sync firehose message support, the latest lexicon update, and more github.com/MarshalX/atp... #atproto

23.02.2025 14:02 β€” πŸ‘ 8    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

mass repost

25.01.2025 22:24 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

zero issues with making custom video feeds in Python

25.01.2025 22:16 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

if we are talking about uploaded videos, then you can use video.bsky.app/watch/. it will give you m3u8. also you could try to get a raw blob but idk

03.01.2025 15:47 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Everything is possible 😌

03.01.2025 14:27 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Fun little winter break side project to help me explore more of atproto - I made a fun Bluesky - IRC bridge!

github.com/quartzjer/AT...

Built in python using @marshal.dev's awesome atproto module, definitely spent too much time fiddling with how to display rich/media posts in an IRC-friendly way πŸ˜…

30.12.2024 18:36 β€” πŸ‘ 28    πŸ” 4    πŸ’¬ 0    πŸ“Œ 0

Ruby lets goooo

14.12.2024 21:00 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

gratz! now you will struggle with pydantic`s memory consumption xD

13.12.2024 00:55 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
libipld Python binding to the Rust IPLD library

i provide like 97 different pre-built wheels... if you are using something special be ready for pain pypi.org/project/libi...

12.12.2024 22:49 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0
Preview
GitHub - DavidBuchanan314/dag-cbor-benchmark: Test data for benchmarking dag-cbor decoders and encoders Test data for benchmarking dag-cbor decoders and encoders - DavidBuchanan314/dag-cbor-benchmark

pure python is "dag_cbor". that's how it slow: github.com/DavidBuchana...

12.12.2024 22:47 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 1

applied to bsky custom feed template repo; thanks

11.12.2024 22:01 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

What is inside bad request error? The server should tell more details

06.12.2024 11:44 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

You need string format like 2024-11-24T06:02:00Z

06.12.2024 11:41 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Thank you for your contribution! Test coverage, performance benchmarks, and more β€” that's very professional. I appreciate it!

06.12.2024 09:45 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Welp, the code generator is ready and cli to use it as well. But binding models to the existing xrpc client is tricky. This is something what I want to improve one day and have ideas

02.12.2024 00:51 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

My pleasure! Congratulations with finished prototype πŸ₯³

28.11.2024 08:51 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Repository - AT Protocol Self-authenticating storage for public account content

This is repo structure. I did not implement tree walker in SDK yet (no ones requested). Here is the spec: atproto.com/specs/reposi...

18.11.2024 18:19 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

My pleasure πŸ˜‡

18.11.2024 07:19 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

The fix was merged! But it does not resolve the main problem. So to be continued here github.com/bluesky-soci...

17.11.2024 16:30 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Preview
Segfault on decoding of nested lists and maps Β· Issue #9 Β· MarshalX/python-libipld these benchmarks fail. ref https://github.com/DavidBuchanan314/dag-cbor-benchmark Decode Torture Tests: ===================== torture_cids.dagcbor libipld 75.2 ms (51.98 MB/s) torture_nested_lists....

And since Python 3.8 died more than moth ago, it looks like I can finally use Py_EnterRecursiveCall CAPI github.com/MarshalX/pyt...

17.11.2024 16:29 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Segmentation fault (core dumped) in CAR reading from Firehose Β· Issue #437 Β· MarshalX/atproto i was consuming data from the firehouse, specifically at cursor: 3720770000, every time i get a consistent Core Dumped I managed to find the crash is coming from: .venv/lib/python3.12/site-packages...

Today's Python SDK incident with segfault comes from Firehose raises the priority of the proper bugfix 🫠 github.com/MarshalX/atp...

tl;dr no recursion limit; malformed payloads in the network could lead to segfaults of python-libipld (rust binding)

17.11.2024 16:27 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 2    πŸ“Œ 0

Hi, you can provide any other PDS URL to the client constructor already

02.11.2024 13:01 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Firehose consumers do not receive root block in case of too big seq commit Β· Issue #2893 Β· bluesky-social/atproto Describe the bug Firehose consumers do not receive root block in case of too big seq commit. To Reproduce I wrote a corresponding unit test in the linked PR that reproduces the issue Actual behavio...

Firehose consumers do not receive root block in case of too big seq commit. I dug into this because I got reports from Python SDK users that commit.blocks received from the firehose message frame could be missed. I am waiting for the review by #atproto team github.com/bluesky-soci... πŸ™ƒ

24.10.2024 21:08 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 1
GitHub MarshalX/atproto stars graph

GitHub MarshalX/atproto stars graph

300 stars on GitHub github.com/MarshalX/atp... (atproto.blue) πŸŽ‰

21.10.2024 20:29 β€” πŸ‘ 13    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

sad

19.10.2024 06:09 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

Btw for video uploading you need to request service token for uploadBlob method

27.09.2024 17:26 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
How to request video upload limits (get_upload_limits)? · MarshalX atproto · Discussion #400 So I was checking the api docs and found about getUploadLimits, but when I try in code it raises a error 😒, is this an issue with the SDK or the API itself? def main() -> None: client = Client() bo...

Here is the answer: github.com/MarshalX/atp...

27.09.2024 17:25 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 2    πŸ“Œ 0

@marshal.dev is following 20 prominent accounts