IP Library › Granted Patent US 10,579,240
Granted Patent B2
US 10,579,240 · App. 15/893,192 · Granted Mar 3, 2020

Live-rendered and forkable graphic edit trails

Inventors: Andrew Coldham (Seattle, WA); Benjamin VandenBos (Bend, OR); Peter Grant (Louisville, KY)
Assignee: PicMonkey, LLC
G06F3/04845G06T13/80G06T1/20H04L65/1066
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,579,240
App. No.
15/893,192
Granted
Mar 3, 2020
Kind
B2
Abstract

A user computing device may receive a command from a user to modify an object of a canvas. The received command may be accepted and the user computing device may perform one or more operations on the object of the canvas according to the command, such as modifying a mutable attribute. The canvas state may then be captured by the computing device using one or more patches. The computing device may generate and store one or more snapshots to include a subset of the one or more patches and further provide the one or more snapshots to playback a sequence of at least some of the one or more operations that were performed on the object of the canvas.

Claims (89)

1. A system, comprising:

one or more processors; and

memory storing executable instructions that, if executed by the one or more processors, cause the system to:

perform one or more operations on an object associated with a canvas;

generate one or more patches in response to the one or more operations being performed, wherein each of the one or more patches include a Hybrid Logical Clock (HLC) timestamp and information indicating a state of the canvas;

generate one or more snapshots to include at least a subset of the one or more patches;

provide the one or more snapshots to playback a sequence of at least some of the one or more operations performed on the object associated with the canvas using the subset of the one or more patches in accordance with a first path sequence;

assign a plurality of markers to indicate different points in time of the one or more snapshots according to the first path sequence;

identify a marker of the plurality of markers and add one or more additional snapshots in response to one or more additional operations being performed on the object associated with the canvas to the one or more snapshots after locating the marker to generate a second path sequence;

provide the one or more snapshots and the one or more additional snapshots to playback a combined sequence of at least some of the one or more operations performed on the object in accordance with the second path sequence by at least synchronizing each HLC timestamp of the one or more patches in the one or more snapshots and one or more additional snapshots with a local timestamp; and

perform additional operations on the object to add snapshots associated with the additional operations to the second path sequence.

2. The system of claim 1 , wherein the instructions, if executed by the one or more processors, further cause the system to:

store the one or more snapshots; and

assign a plurality of markers that reference specific points in time in the first path sequence of the one or more stored snapshots.

3. The system of claim 2 , wherein the instructions, if executed by the one or more processors, further cause the system to:

locate a marker of the plurality of markers associated with the one or more stored snapshots;

identify, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker; and

replay the combined sequence of the one or more operations using the subset of the one or more patches in each of the identified one or more snapshots, starting from a first snapshot associated with a first marker to a snapshot associated with the located marker.

4. The system of claim 2 , wherein the instructions, if executed by the one or more processors, further cause the system to:

locate a marker of the plurality of markers associated with the one or more stored snapshots;

identify, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker; and

replay the combined sequence of the one or more operations using the subset of the one or more patches in each of the identified one or more snapshots in reverse order, starting from a snapshot associated with the located marker to a snapshot associated with a first marker.

5. The system of claim 2 , wherein the instructions, if executed by the one or more processors, further cause the system to:

locate a marker of the plurality of markers associated with the one or more stored snapshots;

identify, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker;

perform one or more additional operations on the object associated with the canvas;

generate one or more additional patches in response to the one or more additional operations being performed, wherein the one or more additional patches include a new HLC timestamp and information indicating a new state of the canvas; and

store one or more additional snapshots to include at least a portion of the one or more additional patches.

6. The system of claim 1 , wherein the information indicating the state of the canvas further comprises respective attribute values for each object of a plurality of objects of the canvas at a time reflective of the HLC timestamp.

7. The system of claim 1 , wherein the instructions, if executed by the one or more processors, further cause the system to provide, from a first computing device to a second computing device, the one or more snapshots, wherein:

the second computing device compares the HLC timestamps of the one or more patches associated with the one or more snapshots with a local timestamp associated with the second computing device; and

the second computing device synchronizes the HLC timestamps of the one or more patches associated with the one or more snapshots with the local timestamp associated with the second computing device to establish a playback speed of the sequence of the one or more operations associated with the one or more patches in the one or more snapshots.

8. A computer-implemented method, comprising:

performing one or more operations on an object associated with a canvas;

generating one or more patches in response to the one or more operations being performed, wherein the one or more patches include a Hybrid Logical Clock (HLC) timestamp and information indicating a state of the canvas;

generating one or more snapshots to include at least a portion of the one or more patches;

providing the one or more snapshots, to playback a sequence of at least a portion of the one or more operations performed on the object associated with the canvas using the portion of the one or more patches in accordance with a first path sequence;

assigning a plurality of markers to indicate different points in time of the one or more snapshots according to the first path sequence;

identifying a marker of the plurality of the markers and adding one or more additional snapshots in response to one or more additional operations being performed on the object associated with the canvas to the one or more snapshots after locating the marker to generate a second path sequence;

providing the one or more snapshots and the one or more additional snapshots to playback a combined sequence of at least some of the one or more operations performed on the object in accordance with the second path sequence by at least synchronizing each HLC timestamp of the one or more patches in the one or more snapshots and one or more additional snapshots with a local timestamp; and

performing additional operations on the object to add snapshots associated with the additional operations to the second path sequence.

9. The method of claim 8 , further comprising:

storing the one or more snapshots; and

assigning a plurality of markers that reference specific points in time in the first path sequence of the one or more stored snapshots.

10. The method of claim 9 , further comprising:

locating a marker of the plurality of markers associated with the one or more stored snapshots;

identifying, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker; and

replaying the combined sequence of the one or more operations using the portion of the one or more patches in each of the identified one or more snapshots, starting from a first snapshot associated with a first marker to a snapshot associated with the located marker.

11. The method of claim 9 , further comprising:

locating a marker of the plurality of markers associated with the one or more stored snapshots;

identifying, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker; and

replaying the combined sequence of the one or more operations using the portion of the one or more patches in each of the identified one or more snapshots in reverse order, starting from a snapshot associated with the located marker to a snapshot associated with a first marker.

12. The method of claim 9 , further comprising:

locating a marker of the plurality of markers associated with the one or more stored snapshots;

identifying, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker;

performing one or more additional operations on the object associated with the canvas;

generating one or more additional patches in response to the one or more additional operations being performed, wherein the one or more additional patches include a new HLC timestamp and information indicating a new state of the canvas; and

storing one or more additional snapshots to include at least a portion of the one or more additional patches.

13. The method of claim 8 , wherein performing one or more operations on an object associated with a canvas is based at least in part on satisfying a set of sharing permissions associated with the canvas.

14. A non-transitory computer-readable storage medium having stored thereon executable instructions that, if executed by one or more processors of a computer system, cause the computer system to at least:

perform one or more operations on an object associated with a canvas;

generate one or more patches in response to the one or more operations being performed, wherein each of the one or more patches include a Hybrid Logical Clock (HLC) timestamp and information indicating a state of the canvas;

generate one or more snapshots to include at least a subset of the one or more patches;

provide the one or more snapshots to playback a sequence of at least some of the one or more operations performed on the object associated with the canvas using the subset of the one or more patches in accordance with a first path sequence;

assign a plurality of markers to indicate different points in time of the one or more snapshots according to the first path sequence;

identify a marker of the plurality of markers and add one or more additional snapshots in response to one or more additional operations being performed on the object associated with the canvas to the one or more snapshots after locating the marker to generate a second path sequence;

provide the one or more snapshots and the one or more additional snapshots to playback a combined sequence of at least some of the one or more operations performed on the object in accordance with the second path sequence by at least synchronizing each HLC timestamp of the one or more patches in the one or more snapshots and one or more additional snapshots with a local timestamp; and

perform additional operations on the object to add snapshots associated with the additional operations to the second path sequence.

15. The non-transitory computer-readable storage medium of claim 14 , wherein the executable instructions, if executed by the one or more processors, further cause the system to:

store the one or more snapshots; and

assign a plurality of markers that reference specific points in time in the first path sequence of the one or more stored snapshots.

16. The non-transitory computer-readable storage medium of claim 15 , wherein the executable instructions, if executed by the one or more processors, further cause the system to:

locate a marker of the plurality of markers associated with the one or more stored snapshots;

identify, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker; and

replay the combined sequence of the one or more operations using the subset of the one or more patches in each of the identified one or more snapshots, starting from a first snapshot associated with a first marker to a snapshot associated with the located marker.

17. The non-transitory computer-readable storage medium of claim 15 , wherein the executable instructions, if executed by the one or more processors, further cause the system to:

locate a marker of the plurality of markers associated with the one or more stored snapshots;

identify, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker; and

replay the combined sequence of the one or more operations using the subset of the one or more patches in each of the identified one or more snapshots in reverse order, starting from a snapshot associated with the located marker to a snapshot associated with a first marker.

18. The non-transitory computer-readable storage medium of claim 15 , wherein the executable instructions, if executed by the one or more processors, further cause the system to:

locate a marker of the plurality of markers associated with the one or more stored snapshots;

identify, based at least in part on the marker, one or more snapshots in sequential order leading up to the marker;

perform one or more additional operations on the object associated with the canvas;

generate one or more additional patches in response to the one or more additional operations being performed, wherein the one or more additional patches include a new HLC timestamp and information indicating a new state of the canvas; and

store one or more additional snapshots to include at least a portion of the one or more additional patches.

19. The non-transitory computer-readable storage medium of claim 14 , wherein the one or more operations on an object associated with a canvas are performed based at least in part on satisfying a set of sharing permissions associated with the canvas.

20. The non-transitory computer-readable storage medium of claim 14 , wherein the instructions, if executed by the one or more processors, further cause the system to provide, from a first computing device to a second computing device, the one or more snapshots, wherein:

the second computing device compares the HLC timestamps of the one or more patches associated with the one or more snapshots with a local timestamp associated with the second computing device; and

the second computing device synchronizes the HLC timestamps of the one or more patches associated with the one or more snapshots with the local timestamp associated with the second computing device to establish a playback speed of the sequence of the one or more operations associated with the one or more patches in the one or more snapshots.

Assignments (3)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 17, 2021
From: PICMONKEY, LLC
To: SHUTTERSTOCK VENTURES LLC
Reel/Frame 057515/0456 →
CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNEE'S STAT OF INCORPORATION FROM WASHINGTON TO DELAWARE AND TO FURTHER INCLUDE THE ACCEPTANCE OF PATENT ASSIGNMENT PREVIOUSLY RECORDED AT REEL: 044885 FRAME: 0146. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT. Recorded Jan 14, 2020
From: COLDHAM, ANDREW; VANDENBOS, BENJAMIN; GRANT, PETER
To: PICMONKEY, LLC
Reel/Frame 051594/0752 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 9, 2018
From: COLDHAM, ANDREW; VANDENBOS, BENJAMIN; GRANT, PETER
To: PICMONKEY, LLC
Reel/Frame 044885/0146 →
Continuity (1)
Related Publication 20190250800A1 · Aug 15, 2019