Categories
Copyright Law Nerd

AI, the Mouse, and the Mask*

Another U.S. decision that AI-generated art cannot be copyrighted — while acknowledging that there will be “challenging questions about how much human input is necessary to qualify the user of an AI system as an ‘author’ of a generated work, the scope of the protection obtained over the resultant image, how to assess the originality of AI-generated works where the systems may have been trained on unknown pre-existing works, how copyright might best be used to incentivize creative works involving AI, and more.”

Where this is going to get really interesting, I think, is when somebody uses AI to produce something with a striking resemblance to a certain M. Mouse, or D. Vader.

AI generated image of a cartoon mouse with black ears and a white face, smiling, with exaggerated features.
A one-off ask in DALL-E with the prompt “cartoon mouse with black ears and a white face, smiling, with exaggerated features.”
AI generated image of "menacing figure with a cybernetic black mask, cape, respirator and holding a glowing laser sword"
A one-off ask in DALL-E with the prompt “menacing figure with a cybernetic black mask, cape, respirator and holding a glowing laser sword.”

See above for two 30-second not-even-trying prompts that are arguably completely innocent, but get within striking distance of the Disney Zone.

Secondary infringement — when you “should” know that you’re infringing, even if the resemblance is innocent or coincidental — is going to be come much more pivotal.

But even secondary infringement in the Copyright Act presumes an author:

  • Secondary infringement(2) It is an infringement of copyright for any person to
    • (a) sell or rent out,(b) distribute to such an extent as to affect prejudicially the owner of the copyright,(c) by way of trade distribute, expose or offer for sale or rental, or exhibit in public,(d) possess for the purpose of doing anything referred to in paragraphs (a) to (c), or(e) import into Canada for the purpose of doing anything referred to in paragraphs (a) to (c),
    a copy of a work, sound recording or fixation of a performer’s performance or of a communication signal that the person knows or should have known infringes copyright or would infringe copyright if it had been made in Canada by the person who made it.
Copyright Act, III 27(1) – emphasis mine

And/or prompts are going to become pivotal to prove primary infringement.

If AI can’t be an “author” and can still produce works that strongly resemble copyrighted work, I wonder if Compo Co. Ltd. v. Blue Crest Music et al. is going to become much more of a juggernaut in copyright law in Canada — precedence that producing something that violates copyright is itself copyright violation, even if you’re not the producer of the violating work. Even in Compo, the issue resided in the fact that the provider of the work, Canusa, _had_ violated copyright — which isn’t the case with AI.

It’s going to be an interesting decade for IP law…

*yes, of course it’s a reference. And yes, I know it’s not a Darth Vader mask. RIP Doom!

Categories
Nerd

Auto-deleting junkbox

As a lower-mid-tier nerd, I’m just nerdy enough to be running a home media server (old Dell box, on Ubuntu 20, with Plex and nothing else). I also own my own domain (hey, you’re on it!), which gives me the power to create a nigh-infinite number of email addresses.

This, in turn, lets me make a generic email for all the sign-up garbage I need to use once and never again. “Enter your email / click the link in your email to register for | download | access” stuff.

What I wanted to do was have all that stuff funnel into a box that self-deletes every night. Get the confirmation email, click the thing, and nope out, knowing that any junk mail or follow-ups will auto-clear.

Since I have the local computer running (close to) 24/7 as a media server, and Ubuntu, and my own mailbox, why not dive into the wonderful world of Python scripts and cron jobs to make it happen?

(For the record, this seems like a jovial public-facing post, but it’s really just for me so I can remember how to do this stuff if I need to do it again).

Here’s the script, courtesy of the good people at Opalstack, my web host. Nice, responsive, and ultimately patient people!

#!usr/local/bin/python3

import imaplib
import ssl
from datetime import datetime

# your IMAP server credentials
IMAP_HOST = 'mail.us.opalstack.com'
IMAP_USER = 'user'
IMAP_PASS = 'password'

def clear_old_messages():

    today = datetime.today().strftime('%d-%b-%Y')

    ctx = ssl.create_default_context()
    server = imaplib.IMAP4_SSL(host=IMAP_HOST, ssl_context=ctx)
    server.login(IMAP_USER, IMAP_PASS)
    server.select()

    resp, items = server.search(None, f"SENTBEFORE {today}")
    #resp, items = server.search(None, "SENTBEFORE {}" .format(today)) [[python 3.5]]
    items = items[0].split()
    for i in items:
        server.store(i, '+FLAGS', '\\Deleted')

    server.expunge()
    server.logout()

if __name__ == '__main__':
    clear_old_messages()

I save the script as garbage.py in a folder called “scripts” in my home folder, and make it executable:

chmod u+x garbage.py

On the Ubuntu server, I open up the crontab editor with

crontab -e

Then adding at the bottom of the crontab

0 1 * * * /home/[user]/scripts/garbage.py

I made an earlier mistake setting this up with a relative file path

0 1 * * * ~/scripts/garbage.py

but that was a no-go for some reason. Using the absolute path helped the cron job find the script and run it.

When that didn’t work, I got advised that putting the path in the cron job as well as the shebang will bulletproof it more:

0 1 * * * /usr/bin/python3 /home/[user]/scripts/garbage.py > /home/[user]/logs/garbage.log 2>&1

Things that have gone wrong

  1. Including the path to Python in the crontab. I was pushing the crontab just to the script and assuming the shebang to Python would be enough — apparently not (I’ve updated the post above).
  2. Permission Denied for the path to the Python script. I’m finding the Python script using whereis python and locating it at /usr/lib/python3.8, but the crontab log is giving me a “Permission Denied” in the log. The solve there was using usr/bin/python3.8 — no idea why lib is permission denied and bin is okay, but whatever works, works. I’ve updated the post above.
  3. When Python updates, the path breaks — I had crontab calling /usr/lib/python3.7 and getting a not found error, which was vexing until I realized Python had updated to 3.8 and I hadn’t noticed. This applies to both the shebang for the script and the crontab call. The fix: you can call the Python version (python3) without the subversion (python3.8) — but not just “python”, because then the system calls Python 2, which can’t run the script. Once again, the post above’s been updated.
  4. Moved everything to a Synology server, and while its built-in task scheduler has solved the cron job for me, after a ton of syntax errors I finally discovered that the above script uses an f-string that only works in Python 3.6+, and the Python 3 module in the Synology package manager only supports 3.5.1. So the script above has been amended again to reflect that.